El German Traffic Signs Dataset es un conjunto de imágenes de señales de tránsito Alemanas.
Este dataset tiene mas de 50,000 imágenes separadas en 43 clases. El reto es construir un clasificador de imágenes que sea capaz de reconocer estas señales de tránsito. Adicionalmente, el dataset incluye las posiciones (aka bounding boxes) de los objetos dentro de la imagen.
Todos los datos viven en la carpeta data
y se dividen en 2 grupos
|-data
| |-traning-set
| |-test-set
Training Set
La carpeta data/traning-set
esta organizada de la siguiente manera
- En
data/training-set/GTSRB/Final_Training/Images
se encuentran 43 carpeta, desde la carpeta000000
que hasta la carpeta000042
, cada una de las carpetas contiene todas las imagenes de una clase. - Las imagenes originalmente vienen en el formato
.ppm
y tienen dimensiones variables (ver descarga), sin embargo, si ejecutas el scriptpreprocess_data.py
este las transforma a.jpg
y las redimensiona a32x32
. (ver preprocesamiento). - Dentro de la carpeta de cada clase existe un archivo de la forma
GT-{folder_clase}.csv
que contiene datos de las imagenes en esa clase. - El archivo
data/training-set/GTSRB/Readme-Images.txt
contiene informacion adicional sobre el dataset.
Test Set
La carpeta data/traning-set
esta organizada de la siguiente manera
- En
data/test-set/GTSRB/Final_Test/Images
todas las imagenes del test-set. - Las imagenes originalmente vienen en el formato
.ppm
y tienen dimensiones variables (ver descarga), sin embargo, si ejecutas el scriptpreprocess_data.py
este las transforma a.jpg
y las redimensiona a32x32
. (ver preprocesamiento). - Dentro de la carpeta de imagenes existe el archivo
GT-final_test.csv
que contiene los datos de las imagenes. - El archivo
data/test-set/GTSRB/Readme-Images-Final-test.txt
contiene informacion adicional sobre el dataset.
Todos los archivos *.csv
contienen las siguiente variables
Filename | Width | Height | Roi.X1, Roi.Y1, Roi.X2, Roi.Y2 | ClassId |
---|---|---|---|---|
Archivo de la imagen a la que corresponde esta informacion | Ancho de la imagen | Alto de la imagen | Informacion del bounding box | Numero entero que indica la clase a la que pretenece la imagen |
Cada imagen como tal puede ser representada por una matriz 3D de dimensiones Height x Width x 3
dado que es RGB. Se recomienda redimensionar cada imagen a 32 x 32 x 3
, el script preprocess_data.py
realiza esta operacion sobre los datos en disco.
Nota: el script preprocess_data.py
altera las dimensiones de la imagen y los datos de los .csv
por ahora no son modificados acorde.
- Crear un algoritmo que tome una imagen de entrada, ya sea como vector o matriz, y retorne el clase (
ClassId
) a la que pertenece esa imagen. - Entrenar este algoritmo utilizando los datos de la carpeta
data/training-set
. - Medir el performance/score del algoritmo utilizando los datos de la carpeta
data/test-set
. El performance debe ser medido como
score = n_aciertos / n_imagenes * 100
donde n_aciertos
es el numero de imagenes clasificadas de forma correcta y n_imagenes
es el numero total de imagenes en el test-set
.
- Dado que las imagenes son conjuntos con dimensiones muy altas, usualmente la mejor manera de atacar el problema es utilizando redes neuronales.
- Para imagenes es recomendable utilizar redes convolucionales.
Ver procedimiento de solucion.
Indica los requerimientos para utilizar el codigo de tu solucion.
Indica el procedimiento que se debe seguir para reproducir tu solucion.
Indica el metodo que utilizaste para solucionar el reto.
Indica el metodo que utilizaste para solucionar el reto.
Para resolver este reto primero has un fork de este repositorio y clona el fork en tu maquina.
git clone https://github.com/{username}/supervised-avanzado-german-traffic-signs
cd supervised-avanzado-german-traffic-signs
Nota: reemplaza {username}
con tu nombre de usuario de Github.
Para descargar y visualizar los datos necesitas Python 2 o 3. Las dependencias las puedes encontrar en el archivo requirements.txt
, el cual incluye
- pillow
- numpy
- pandas
- jupyter
Puedes instalarlas fácilmente utilizando el commando
pip install -r requirements.txt
Dependiendo de tu entorno puede que necesites instalar paquetes del sistema adicionales, si tienes problemas revisa la documentación de estas librerías.
Para descargar los datos ejecuta el comando
dataget load german-traffic-signs
Esto descarga los archivos en la carpeta data
. Los datos se divide en 2 conjuntos: training-set
y test-set
, cada conjunto vive dentro de su propia carpeta.
Las imágenes del formato original es .ppm
y las dimensiones de estas varían. Si deseas convertirlas a .jpg
y redimensionarlas a 32x32
ejecuta
dataget process german-traffic-signs -a dims:32x32
Para iniciar con este reto puedes correr el codigo de Python en Jupyter del archivo python-sample.ipynb
. Este código que ayudará a cargar y visualizar algunas imágenes. Las dependencias son las mismas que se instalaron durante la descarga de los datos, ver Requerimientos.
Para iniciar el código solo hay que prender Jupyter en esta carpeta
jupyter notebook .
y abrir el archivo python-sample.ipynb
.
Score | Usuario | Algoritmo | Link Repo |
---|---|---|---|
score | nombre | algoritmo | link |