efficientnet-b7 / README.md
Shad0wKillar's picture
Create README.md
0323f11 verified
---
license: mit
tags:
- vision
- image-classification
- pytorch
- efficientnet
datasets:
- Shad0wKillar/pizza_steak_sushi
metrics:
- accuracy
---
# EfficientNet-B7 Pizza/Steak/Sushi Classifier
I fine-tuned a pre-trained EfficientNet-B7 model to classify images into three categories: pizza, steak, and sushi.
## Model Details
* **Architecture:** `torchvision.models.efficientnet_b7`
* **Weights:** `EfficientNet_B7_Weights.DEFAULT`
* **Modifications:** I froze all the base feature layers.
## Training Procedure
I trained the model for 10 epochs using the Adam optimizer.
* **Batch Size:** 32
* **Learning Rate:** 0.001
* **Loss Function:** CrossEntropyLoss
* **Transforms:** I used the automatic transforms provided by the default EfficientNet-B7 weights.
* **Hardware:** Trained using `cuda` (if available) with a set manual seed of 37 for reproducibility.
## Dataset
I used a 20% subset of a pizza, steak, and sushi dataset. The data was split into `train` and `test` directories.
## Evaluation Results
### Accuracy and Loss Curves
Over the 10 epochs, the training and testing loss steadily decreased, with the testing loss ending near a highly impressive 0.15. The testing accuracy consistently outperformed the training accuracy throughout, finishing near a perfect 99%.
![Loss and Accuracy Curves](EfficientNet_B7_20percent.pth_curves.png)
### Confusion Matrix
This model achieved the best performance across all three classes on the test set, making almost no errors:
* **Pizza:** 46 correct, 0 misclassified.
* **Steak:** 57 correct, 0 misclassified as pizza, 1 misclassified as sushi.
* **Sushi:** 46 correct, 0 misclassified.
![Confusion Matrix](EfficientNet_B7_20percent.pth_confusion_matrix.png)
### Most Confident Wrong Predictions
I plotted the single instance where the model was incorrect. The model only made one mistake in the entire test set, predicting a steak dish as sushi with a relatively low confidence of 0.56.
![Wrong Predictions](EfficientNet_B7_20percent.pth_wrong_pred.png)
## How to use
```python
import torch
import torchvision
# I loaded the model architecture
weights = torchvision.models.EfficientNet_B7_Weights.DEFAULT
model = torchvision.models.efficientnet_b7(weights=weights)
# I modified the classifier
model.classifier = torch.nn.Sequential(
torch.nn.Dropout(p=0.2, inplace=True),
torch.nn.Linear(in_features=2560, out_features=3, bias=True),
)
# I loaded the saved weights
model.load_state_dict(torch.load("EfficientNet_B7_20percent.pth", map_location="cpu"))
model.eval()