File size: 5,241 Bytes
fe810fd 52ffa54 155d487 52ffa54 155d487 52ffa54 155d487 c5db7bc 155d487 1fb3aa1 2d46085 1fb3aa1 155d487 68eabf9 ad45e1a 68eabf9 4624738 bef14c4 c26bb46 68eabf9 c26bb46 68eabf9 bef14c4 c26bb46 bef14c4 c26bb46 68eabf9 bef14c4 4624738 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 | ---
library_name: keras
tags:
- image-classification
- vision
- autonomous-driving
- deep-learning
- tensorflow
datasets:
- cifar10
language:
- it
license: mit
pipeline_tag: image-classification
framework: tensorflow
---
# 🚗 Autonomous Driving Object Detection (Vehicle & Animal)
Questo repository contiene un modello di **Deep Learning** basato su **Reti Neurali Convoluzionali (CNN)**, addestrato per riconoscere e distinguere **veicoli** da **animali** in immagini a bassa risoluzione. Il progetto simula un modulo di percezione visiva per sistemi di guida autonoma, utilizzando il dataset **CIFAR-10**.
## 📝 Descrizione del Progetto
Nei sistemi di guida autonoma, la capacità di identificare rapidamente gli ostacoli è fondamentale. Questo modello è stato progettato per classificare gli oggetti in due macro-categorie critiche per la sicurezza stradale:
* **Veicoli** (Automobili, Camion, Aerei, Navi) - Oggetti da seguire o evitare secondo le regole del traffico.
* **Animali** (Uccelli, Gatti, Cervi, Cani, Rane, Cavalli) - Ostacoli imprevedibili che richiedono cautela immediata.
Il modello è stato sviluppato utilizzando **TensorFlow/Keras** e addestrato su un sottoinsieme ri-etichettato del dataset CIFAR-10.
## 📊 Dataset & Preprocessing
Il modello utilizza il dataset **CIFAR-10**, composto da 60.000 immagini a colori 32x32 pixel.
Le 10 classi originali sono state raggruppate in due classi binarie per questo task:
- **Classe 0 (Veicoli):** Automobile, Camion, Aereo, Nave.
- **Classe 1 (Animali):** Uccello, Gatto, Cervo, Cane, Rana, Cavallo.
**Preprocessing applicato:**
1. **Normalizzazione:** I valori dei pixel sono stati scalati nel range [0, 1] (dividendo per 255.0) per facilitare la convergenza del modello.
2. **Flattening delle Label:** Le etichette sono state convertite in vettori 1D per compatibilità con la loss function.
## 🧠 Architettura del Modello
La rete neurale è una **CNN (Convolutional Neural Network)** sequenziale ottimizzata per immagini di piccole dimensioni:
* **Input Layer:** Immagini 32x32x3 (RGB).
* **Blocchi Convoluzionali:**
* 3 strati `Conv2D` (con 32, 64, 128 filtri) per l'estrazione delle feature.
* Attivazione `ReLU` per introdurre non-linearità.
* `MaxPooling2D` per ridurre la dimensionalità e mantenere le feature più rilevanti.
* **Classificatore (Fully Connected):**
* Strato `Flatten` per vettorizzare l'output delle convoluzioni.
* 3 strati `Dense` (128, 64, 32 unità) con attivazione `ReLU`.
* **Output Layer:** Strato `Dense` con 2 unità e attivazione `Softmax` per la classificazione finale.

## 🚀 Performance
Il modello è stato addestrato per **20 epoche** con i seguenti risultati (basati sull'ultima epoca di training):
- **Accuracy (Train):** ~99%
- **Accuracy (Validation):** ~94%
- **Loss:** Molto bassa sul training set, indicando un ottimo apprendimento, con una buona generalizzazione sul validation set.


## 💻 Come Usare il Modello
1)Potete scaricare l'intero codice dal file Notebook (si consiglia di applicare la denormalizzazione).
2)Per testare il modello direttamente in Python, utilizzate lo script di inferenza seguente:
```python
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
import requests
from io import BytesIO
import os
URL_MODELLO = "[https://huggingface.co/FlavioRubensOttaviani/autonomous-driving-object-detection-deepLearning/resolve/main/modello_guida_autonoma_cifar10.h5](https://huggingface.co/FlavioRubensOttaviani/autonomous-driving-object-detection-deepLearning/resolve/main/modello_guida_autonoma_cifar10.h5)"
NOME_FILE_LOCALE = "modello_scaricato.h5"
if not os.path.exists(NOME_FILE_LOCALE):
r = requests.get(URL_MODELLO, timeout=15)
with open(NOME_FILE_LOCALE, 'wb') as f:
f.write(r.content)
model = tf.keras.models.load_model(NOME_FILE_LOCALE, compile=False)
def esegui_inferenza(url_immagine):
headers = {'User-Agent': 'Mozilla/5.0'}
response = requests.get(url_immagine, headers=headers, timeout=10)
img = Image.open(BytesIO(response.content)).convert('RGB')
img_resized = img.resize((32, 32))
img_array = np.array(img_resized).astype('float32') / 255.0
img_input = np.expand_dims(img_array, axis=0)
preds = model.predict(img_input, verbose=0)[0]
label = "VEICOLO 🚗" if preds[0] > preds[1] else "ANIMALE 🐕"
conf = max(preds) * 100
plt.imshow(img)
plt.title(f"{label} ({conf:.2f}%)")
plt.axis('off')
plt.show()
URL_TEST = "[https://raw.githubusercontent.com/YoongiKim/CIFAR-10-images/master/test/automobile/0001.jpg](https://raw.githubusercontent.com/YoongiKim/CIFAR-10-images/master/test/automobile/0001.jpg)"
esegui_inferenza(URL_TEST)
## 👨💻 Autore
**Flavio Rubens Ottaviani**
Progetto sviluppato per il corso di Deep Learning e Reti Neurali Artificiali. |