| 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 = Image.open(image_path).convert('RGB') |
|
|
| if self.transform: |
| image = self.transform(image) |
|
|
| return image |
| |
| |
| if __name__ == "__main__": |
| |
| device = torch.device('cuda') |
|
|
| |
| model = ViTForImageClassification.from_pretrained('google/vit-base-patch16-224').to(device) |
|
|
|
|
|
|
| model.classifier = nn.Linear(model.config.hidden_size, 2).to(device) |
| |
| preprocess = transforms.Compose([ |
| transforms.Resize((224, 224)), |
| transforms.ToTensor() |
| ]) |
|
|
|
|
|
|
| |
|
|
| |
| |
| |
| |
| |
| 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) |
|
|
| |
| model.load_state_dict(torch.load('trained_model.pth')) |
|
|
| |
| model.eval() |
| confidences = [] |
| predicted_labels = [] |
| |
|
|
| with torch.no_grad(): |
| for images in test_loader: |
| images = images.to(device) |
| outputs = model(images) |
| logits = outputs.logits |
| 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}%") |
|
|
|
|