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.


![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.