transformers pytorch endpoints_compatible region:us
# 🎯 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

![Output](https://huggingface.co/Firdho/image-classification/blob/main/example-output.png)
