Spaces:
Running
Running
| import torch | |
| import json | |
| from torchvision import datasets, transforms | |
| from torch.utils.data import DataLoader | |
| from transformers import ViTForImageClassification | |
| from torch.utils.data import Subset | |
| import random | |
| # ---- SETTINGS ---- | |
| DATASET_PATH = "C:\christ\mahalakshmiprojectplant\plant-disease-detector\model-building\Agrivision\plantvillage" | |
| MODEL_PATH = "plant_model.pth" | |
| CLASS_PATH = "class_names.json" | |
| BATCH_SIZE = 16 | |
| device = torch.device("cuda" if torch.cuda.is_available() else "cpu") | |
| # ---- Load class names ---- | |
| with open(CLASS_PATH) as f: | |
| class_names = json.load(f) | |
| # ---- Load dataset ---- | |
| transform = transforms.Compose([ | |
| transforms.Resize((224, 224)), | |
| transforms.ToTensor(), | |
| ]) | |
| dataset = datasets.ImageFolder(DATASET_PATH, transform=transform) | |
| indices = list(range(len(dataset))) | |
| random.shuffle(indices) | |
| subset_size = int(0.4 * len(dataset)) # 40% of data | |
| subset_indices = indices[:subset_size] | |
| dataset = Subset(dataset, subset_indices) | |
| loader = DataLoader(dataset, batch_size=BATCH_SIZE) | |
| # ---- Load model ---- | |
| model = ViTForImageClassification.from_pretrained( | |
| "google/vit-base-patch16-224", | |
| num_labels=len(class_names), | |
| ignore_mismatched_sizes=True | |
| ) | |
| model.load_state_dict(torch.load(MODEL_PATH, map_location=device)) | |
| print("Model loaded successfully.") | |
| model.to(device) | |
| model.eval() | |
| # ---- Evaluate ---- | |
| correct = 0 | |
| total = 0 | |
| with torch.no_grad(): | |
| for images, labels in loader: | |
| images = images.to(device) | |
| labels = labels.to(device) | |
| outputs = model(pixel_values=images).logits | |
| preds = torch.argmax(outputs, dim=1) | |
| correct += (preds == labels).sum().item() | |
| total += labels.size(0) | |
| accuracy = correct / total | |
| print("Old Model Accuracy:", accuracy) |