Spaces:
Sleeping
Sleeping
| import torch | |
| import torch.nn as nn | |
| import torch.nn.functional as F | |
| from torch.utils.data import Dataset, DataLoader | |
| from torchvision import transforms | |
| from transformers import ViTForImageClassification | |
| from PIL import Image | |
| import os | |
| import pandas as pd | |
| class CustomDataset(Dataset): | |
| def __init__(self, dataframe, transform=None): | |
| self.dataframe = dataframe | |
| self.transform = transform | |
| def __len__(self): | |
| return len(self.dataframe) | |
| def __getitem__(self, idx): | |
| image_path = self.dataframe.iloc[idx, 0] # Image path is in the first column | |
| image = Image.open(image_path).convert('RGB') # Convert to RGB format | |
| if self.transform: | |
| image = self.transform(image) | |
| return image | |
| if __name__ == "__main__": | |
| # Check for GPU availability | |
| device = torch.device('cuda') | |
| # Load the pre-trained ViT model and move it to GPU | |
| model = ViTForImageClassification.from_pretrained('google/vit-base-patch16-224').to(device) | |
| model.classifier = nn.Linear(model.config.hidden_size, 2).to(device) | |
| # Define the image preprocessing pipeline | |
| preprocess = transforms.Compose([ | |
| transforms.Resize((224, 224)), | |
| transforms.ToTensor() | |
| ]) | |
| # Load the test dataset | |
| ### need to recive image from gratio/streamlit | |
| test_set = 'datasets/' | |
| image_paths = [] | |
| for filename in os.listdir(test_set): | |
| image_paths.append(os.path.join(test_set, filename)) | |
| dataset = pd.DataFrame({'image_path': image_paths}) | |
| test_dataset = CustomDataset(dataset, transform=preprocess) | |
| test_loader = DataLoader(test_dataset, batch_size=32) | |
| # Load the trained model | |
| model.load_state_dict(torch.load('trained_model.pth')) | |
| # Evaluate the model | |
| model.eval() | |
| confidences = [] | |
| predicted_labels = [] | |
| with torch.no_grad(): | |
| for images in test_loader: | |
| images = images.to(device) | |
| outputs = model(images) | |
| logits = outputs.logits # Extract logits from the output | |
| probabilities = F.softmax(logits, dim=1) | |
| confidences_per_image, predicted = torch.max(probabilities, 1) | |
| predicted_labels.extend(predicted.cpu().numpy()) | |
| confidences.extend(confidences_per_image.cpu().numpy()) | |
| print(predicted_labels) | |
| print(confidences) | |
| confidence_percentages = [confidence * 100 for confidence in confidences] | |
| for label, confidence in zip(predicted_labels, confidence_percentages): | |
| print(f"Predicted label: {label}, Confidence: {confidence:.2f}%") | |