| # π― Image Classification Model for Medical Waste Classification | |
| This is an image classification model trained to classify medical waste into 4 categories, namely cytotoxic, infectious, pathological, and pharmaceutical. The model is based on the Inception v3 architecture and has been adapted to a specific dataset for the task of medical waste classification. | |
| # π― Model Description | |
| The model is based on the Inception v3 architecture with modifications to the fully connected layers for adapting it to the specific image classification task. The architecture consists of a feature extractor followed by a global average pooling layer and fully connected layers with ReLU activation and dropout. | |
| # π― Dataset Used | |
| The train data for each category is 175 images and the validation data is 50 images. | |
| The dataset used comes from collecting it myself. | |
| # π― Final training results | |
| The model gets the following results from training | |
| - Train Loss: 0.243 | |
| - Val. Losses: 0.252 | |
| - Train Acc: 93.73% | |
| - Val. Acc: 93.92% | |
| # π― Usage | |
| You can use the model that I have saved in pt format as follows: | |
| ```python | |
| import torch | |
| from torchvision import transforms | |
| from PIL import Image | |
| import matplotlib.pyplot as plt | |
| import numpy as np | |
| def predict_image(image_path, model, transform, class_names): | |
| # Load the image | |
| image = Image.open(image_path) | |
| # Apply transformations | |
| image = transform(image).unsqueeze(0) # Add batch dimension | |
| # Set the model to evaluation mode | |
| model.eval() | |
| # Make predictions | |
| with torch.no_grad(): | |
| outputs = model(image.to(device)) | |
| _, predicted = torch.max(outputs, 1) | |
| predicted_class = predicted.item() | |
| predicted_label = class_names[predicted_class] | |
| probabilities = torch.softmax(outputs, dim=1)[0] | |
| confidence = probabilities[predicted_class].item() | |
| return predicted_class, predicted_label, confidence | |
| # Define transformation to be applied to the input image | |
| image_transform = transforms.Compose([ | |
| transforms.Resize((299, 299)), # Resize to match InceptionV3 input size | |
| transforms.ToTensor(), | |
| # You can add more transformations such as normalization if needed | |
| ]) | |
| # Load the trained model | |
| model = torch.load('__directory where you save the model__') | |
| model.to(device) | |
| # Load class names (assuming you have a list of class names) | |
| class_names = ['cytotoxic', 'infectious', 'pathological', 'pharmaceutical'] | |
| # Provide the path to the image you want to predict | |
| image_path = '__the directory where you store the images you want to classify__' | |
| # Load the true label (assuming you have it) | |
| true_label = 'pathological' | |
| # Predict the class label | |
| predicted_class, predicted_label, confidence = predict_image(image_path, model, image_transform, class_names) | |
| # Display the image | |
| image = Image.open(image_path) | |
| plt.imshow(np.array(image)) | |
| plt.axis('off') | |
| plt.title(f'True Class: {true_label} \n Predicted Class: {predicted_label} (Confidence: {confidence*100:.2f}%)') | |
| plt.show() | |
| ``` | |
| The following are the output results from using this coding | |
|  | |