| import torch | |
| import torchvision.transforms as transforms | |
| from PIL import Image | |
| import torch.nn as nn | |
| import torchvision.models as models | |
| class MRBEANVisionModel(nn.Module): | |
| def __init__(self, num_disaster_classes=6, num_severity_classes=3): | |
| super(MRBEANVisionModel, self).__init__() | |
| mobilenet = models.mobilenet_v3_large(weights=None) | |
| self.features = mobilenet.features | |
| self.pool = nn.AdaptiveAvgPool2d(1) | |
| self.flatten = nn.Flatten() | |
| self.disaster_head = nn.Sequential( | |
| nn.Linear(960, 256), nn.ReLU(), nn.Dropout(0.3), nn.Linear(256, num_disaster_classes) | |
| ) | |
| self.severity_head = nn.Sequential( | |
| nn.Linear(960, 128), nn.ReLU(), nn.Dropout(0.3), nn.Linear(128, num_severity_classes) | |
| ) | |
| def forward(self, x): | |
| x = self.features(x) | |
| x = self.pool(x) | |
| x = self.flatten(x) | |
| return self.disaster_head(x), self.severity_head(x) | |
| disaster_labels = {0: 'Earthquake', 1: 'Fire', 2: 'Flood', 3: 'Hurricane', 4: 'Landslide', 5: 'Not a Disaster'} | |
| severity_labels = {0: 'Little or None', 1: 'Mild', 2: 'Severe'} | |
| device = torch.device("cuda" if torch.cuda.is_available() else "cpu") | |
| model = MRBEANVisionModel().to(device) | |
| print("Loading trained weights...") | |
| model.load_state_dict(torch.load("best_multitask_vision_model.pth", map_location=device)) | |
| model.eval() | |
| transform = transforms.Compose([ | |
| transforms.Resize((224, 224)), | |
| transforms.ToTensor(), | |
| transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) | |
| ]) | |
| test_image_path = "download.jpg" | |
| image = Image.open(test_image_path).convert('RGB') | |
| input_tensor = transform(image).unsqueeze(0).to(device) | |
| with torch.no_grad(): | |
| out_disaster, out_severity = model(input_tensor) | |
| _, pred_d = torch.max(out_disaster, 1) | |
| _, pred_s = torch.max(out_severity, 1) | |
| print("\n--- MRBEAN ANALYSIS RESULTS ---") | |
| print(f"Disaster Type: {disaster_labels[pred_d.item()]}") | |
| print(f"Damage Severity: {severity_labels[pred_s.item()]}") |