--- 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. ![image](https://cdn-uploads.huggingface.co/production/uploads/653e5d737ef643534b40783e/wBK3OlsrzES6yIWMTg_CD.png) ## 🚀 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. ![image](https://cdn-uploads.huggingface.co/production/uploads/653e5d737ef643534b40783e/43GaPzUyW5Koy5v8tsURD.png) ![image](https://cdn-uploads.huggingface.co/production/uploads/653e5d737ef643534b40783e/EVWWjkXhzDcxZY5db00Wh.png) ## 💻 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.