Akechi93's picture
Upload 6 files
40e9338 verified
Raw
History Blame Contribute Delete
1.63 kB
import torch
import torch.nn as nn
from torchvision.models import resnet34
from torchvision.transforms import transforms
from PIL import Image
class FireDetectionModel(nn.Module):
def __init__(self, num_classes=2):
super(FireDetectionModel, self).__init__()
self.model = resnet34(pretrained=False)
self.model.fc = nn.Linear(512, num_classes)
def forward(self, x):
return self.model(x)
def predict(self, image):
"""Predict fire detection from input image"""
# Preprocessing transform
transform = transforms.Compose([
transforms.Resize((224, 224)),
transforms.ToTensor(),
transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
])
# Convert to tensor and add batch dimension
if isinstance(image, Image.Image):
image_tensor = transform(image).unsqueeze(0)
else:
image_tensor = image
# Inference
self.eval()
with torch.no_grad():
outputs = self.forward(image_tensor)
probabilities = torch.softmax(outputs, dim=1)
predicted_class = torch.argmax(probabilities, dim=1)
confidence = torch.max(probabilities, dim=1)[0]
class_names = ['Non-Fire', 'Fire']
return {
'prediction': class_names[predicted_class.item()],
'confidence': confidence.item(),
'probabilities': {
'Non-Fire': probabilities[0][0].item(),
'Fire': probabilities[0][1].item()
}
}