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:
- Normalizzazione: I valori dei pixel sono stati scalati nel range [0, 1] (dividendo per 255.0) per facilitare la convergenza del modello.
- 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
ReLUper introdurre non-linearità. MaxPooling2Dper ridurre la dimensionalità e mantenere le feature più rilevanti.
- 3 strati
- Classificatore (Fully Connected):
- Strato
Flattenper vettorizzare l'output delle convoluzioni. - 3 strati
Dense(128, 64, 32 unità) con attivazioneReLU. - Output Layer: Strato
Densecon 2 unità e attivazioneSoftmaxper la classificazione finale.
- Strato
🚀 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:
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.


