Questo è un progetto universitario per il corso di AI LAB per la laurea di Informatica a Sapienza
Il progetto confronta l'efficacia di due approcci di Deep Learning per la classificazione automatica dei rifiuti in 6 categorie (Cartone, Vetro, Metallo, Carta, Plastica, Rifiuti Generici)
L'obiettivo è mostrare i vantaggi del Transfer Learning tramite ResNet18 e EfficientNet_B0 rispetto a un'architettura semplice addestrata da zero, specialmente in casi di pochi dati per il training
Il dataset originale è stato reperito da:
https://www.kaggle.com/datasets/asdasdasasdas/garbage-classification
Per scaricare facilmente il dataset si può scaricare direttamente dal mio Drive e inserire nella cartella principale del progetto: https://drive.google.com/drive/folders/1cQXo3oFK7TVs06sFYiIPzD_lxYgO7S-8?usp=sharing
I file principali del progetto sono:
- TrashNet_Baseline.ipynb: Notebook contenente l'AI di controllo dove viene addestrata e valutata una Rete Neurale Convuluzionale (CNN) costruita da zero
- TrashNet_ResNet.ipynb e TrashNet_EfficientNet.ipynb: Notebook contenenti i modelli pre-trainati ResNet18 e EfficientNet_B0 di PyTorch pre-addestrate su immagini generiche.
- TrashNet_Compare_ResNet.ipynb e TrashNet_Compare_EfficientNet.ipynb: Notebook per confrontare facilmente l'AI Baseline con ResNet/EfficientNet
- TrashNet_Compare_All.ipynb: Notebook per confrontare facilmente tutte e 3 le AI del progetto
- ambiente_ai/ (o come chiami l'ambiente Python): cartella dell'ambiente virtuale di Python per contenere le librerie necessarie
- dataset/: cartella contenente le immagini per l'addestramento e il test divise in cartelle per classe
I notebook Baseline, ResNet e EfficientNet vengono ri-addestrati automaticamente se non trovano i pesi delle AI.
I file dei pesi sono:
- baseline_train_weights.pth: i pesi della rete Baseline
- resnet_base.pth: i pesi di default scaricati per ResNet18
- efficientnet_base.pth: i pesi di default scaricati per EfficientNet_B0
- resnet_train_weights.pth: i pesi finali della ResNet18 ottimizzata
- efficientnet_train_weights.pth: i pesi finali della EfficientNet_B0 ottimizzata
Se non si vuole addestrare da capo le AI si possono scaricare i pesi pre-addestrati dal mio Drive mettendoli nella cartella principale del progetto:
https://drive.google.com/drive/folders/1_as4_Z_SHgpu-c4XLS5aWRgHF7LtgkJu?usp=drive_link
- Scaricare da Drive e estrarre il file
dataset.zipnella cartella principale. - Nel terminale dentro la cartella principale creare l'ambiente virtuale (scegliete un nome che volete)
python -m venv ambiente_ai - Attivare l'ambiente creato
- Su Windows:
.\ambiente_ai\Scripts\activate - Su Linux:
source ambiente_ai/bin/activate
- Su Windows:
- Con l'ambiente attivo, installare i pacchetti necessari:
pip install torch torchvision opencv-contrib-python numpy pandas matplotlib seaborn scikit-learn tqdm grad-cam ipykernel - Ora possiamo eseguire i vari Notebook, assicurandoci che il kernel selezionato in alto a destra sia
ambiente_ai(o quello creato in precedenza)
Il tree finale della cartella principale dovrà essere:
/
+---ambiente_ai
|
+---dataset
| \---Garbage classification
| +---cardboard
| +---glass
| +---metal
| +---paper
| +---plastic
| \---trash
+---Trashnet_Baseline.ipynb
+---Trashnet_ResNet.ipynb
+---Trashnet_EfficientNet.ipynb
+---Trashnet_Compare_ResNet.ipynb
+---Trashnet_Compare_EfficientNet.ipynb
+---Trashnet_Compare_All.ipynb
+---README.md
|
| (se eventualmente scaricate dal Drive o se eseguite le AI)
+---baseline_train_weights.pth
+---resnet_base.pth
+---efficientnet_base.pth
+---resnet_train_weights.pth
+---efficientnet_train_weights.pth