Original blog post: https://blog.anibalhsanchez.com/en/blogging/89-a-journey-into-dog-breed-classification-with-deep-learning.html
Cuando comencé mi Nanodegree de Data Science en Udemy, nunca imaginé que me llevaría a crear un algoritmo capaz de reconocer razas de perros a partir de imágenes. Viniendo de un background en escribir una tesis sobre Particle Imaging and Tracking in Branched Electrochemical Systems, este proyecto me reconectó con el fascinante campo del procesamiento de imágenes.
Qué Hace el Algoritmo - Aspectos Destacados del Proyecto
El sistema va más allá de un simple clasificador de razas. El algoritmo de detección y reconocimiento puede:
- Detectar si una imagen contiene un perro o un humano con un alto nivel de precisión
- Predecir la raza específica del perro
Visión General de Alto Nivel
Clasificar razas de perros es una tarea compleja debido a varios factores. Algunas razas se ven increíblemente similares, y las variaciones de color dentro de una raza pueden ser dramáticas. Adivinar al azar la raza del perro produciría menos del 1% de precisión.
El proyecto final tiene como objetivo desarrollar un algoritmo para detectar si una imagen contiene un perro o un humano y luego predecir la raza del perro. La detección se basa en Redes Neuronales Convolucionales (CNNs).
El análisis probó diferentes CNNs para evaluar el algoritmo de detección de razas de perros basado en la precisión del resultado.
La solución esperada era un algoritmo que pudiera:
- Detectar con precisión perros y humanos en imágenes
- Clasificar razas de perros con alta precisión y sugerir una raza de perro parecida
- Si no, confirmar si la imagen contiene un humano o no (ninguno de los casos)
Estrategia para Resolver el Problema
La estrategia involucró un enfoque de múltiples pasos para evaluar diferentes técnicas y resultados:
- Detección Humana: Usando el clasificador en cascada Haar de OpenCV
- Detección de Perros:
- Usando un modelo ResNet50 pre-entrenado
- Creando una Red Neuronal Convolucional (CNN) desde cero
- Usando Aprendizaje por Transferencia con ResNet50 para mejorar el rendimiento
Descripción de los Datos de Entrada
Los datos de entrada consistieron en:
- Un conjunto de datos de imágenes de perros, categorizadas por raza (carpeta sampleImages, udacity-aind/dog-project/dogImages.zip)
- Un conjunto de datos de imágenes frontales de rostros humanos categorizadas por figura pública (carpeta lfw, udacity-aind/dog-project/lfw.zip)
- Imágenes de prueba para evaluación general (de Wikimedia Commons).
Análisis Exploratorio de Datos
- Conjunto de Datos de Imágenes de Perros: Contiene 8,351 imágenes de 133 razas de perros, separadas en conjuntos de prueba, entrenamiento y validación.
- Conjunto de Datos de Imágenes Humanas: Contiene 13,233 imágenes de 5,749 figuras públicas.
- Imágenes de Muestra: Contiene 20 imágenes de muestra para pruebas iniciales.
Distribución de Clases en los Datos de Entrenamiento de Razas de Perros
El gráfico de barras visualiza la distribución de imágenes entre las 133 razas de perros en el conjunto de datos. Hay un notable desequilibrio, con un promedio de 50 imágenes por raza, variando de 26 a 77. Esta disparidad podría llevar a resultados sesgados, ya que el modelo podría funcionar mejor en razas con más representación y tener dificultades con aquellas con menos imágenes.
El tamaño del conjunto de datos, con un promedio de 50 imágenes por raza, es relativamente pequeño para el entrenamiento de CNN. Esta limitación podría obstaculizar la capacidad del modelo para generalizar efectivamente en todas las razas. Particularmente preocupantes son las razas con solo 26 imágenes, que pueden necesitar un mejor rendimiento de clasificación debido a la subrepresentación.
Abordar el desequilibrio de clases es crucial para lograr resultados confiables. Estrategias como el sobremuestreo de razas subrepresentadas o el uso de funciones de pérdida ponderadas durante el entrenamiento podrían ayudar a equilibrar el rendimiento del modelo. Además, asegurar imágenes diversas dentro de cada categoría de raza mejoraría aún más la capacidad del modelo para reconocer varias apariencias y poses de perros.
Aunque las técnicas de aumento de datos podrían ayudar a mitigar estos problemas, la solución ideal sería aumentar significativamente el tamaño del conjunto de datos. Apuntar a 500-1000 imágenes por raza proporcionaría una base más robusta para el entrenamiento. Este aumento de diez veces permitiría a la CNN aprender características más completas y mejorar sus capacidades de generalización en todas las razas.
Preprocesamiento de Datos
Los pasos de preprocesamiento incluyeron:
- Redimensionar imágenes a 224x224 píxeles
- Normalizar valores de píxeles
- Extraer características bottleneck de modelos pre-entrenados
Modelado
El proceso de modelado involucró:
- Usar CNNs VGG16 y ResNet50
- Crear una CNN básica desde cero
- Implementar aprendizaje por transferencia en el modelo ResNet50
- Ajustar modelos para la clasificación de razas de perros
Métricas
La métrica utilizada fue la Precisión de Clasificación, que es una métrica directa para problemas de clasificación multiclase.
La precisión de clasificación es una métrica adecuada para este proyecto de detección de imágenes debido a su alineación para detectar correctamente las razas de perros. La métrica puede medir eficazmente la corrección general del modelo.
La interpretabilidad de la métrica es una ventaja, permitiendo que el rendimiento del modelo se entienda fácilmente. Es adecuada para escenarios con conjuntos de datos equilibrados y clasificaciones claras, que es el caso en este proyecto.
La precisión proporciona una medida equilibrada de la capacidad del modelo para identificar correctamente las razas de perros. Esto se alinea bien con los objetivos de alta precisión de detección y identificación de razas del proyecto.
Dado que esta no es una aplicación crítica donde las clasificaciones erróneas podrían tener consecuencias graves, la precisión es un indicador de rendimiento suficiente. Captura la corrección general del modelo.
En resumen, la precisión de clasificación ofrece una métrica directa, interpretable y apropiada para esta tarea específica de detección de imágenes, considerando la naturaleza de los datos, los objetivos del proyecto y el contexto de la aplicación.
Los objetivos del proyecto son:
- 1% de precisión para el modelo CNN inicial
- 60% de precisión para el modelo de aprendizaje por transferencia
- Alta precisión en la detección de perros y humanos
Ajuste de Hiperparámetros
Se realizó el ajuste de hiperparámetros, y los ajustes incluyeron lo siguiente:
- Tasa de aprendizaje
- Número de épocas
- Tamaño del lote
Resultados y Conclusiones
El modelo final logró un 84.21% de precisión en el conjunto de prueba para la clasificación de razas de perros — resultados prometedores en la detección de humanos y perros, con algunas limitaciones. El proyecto desarrolló con éxito un algoritmo capaz de detectar humanos y perros y clasificar con precisión las razas de perros. El aprendizaje por transferencia mejoró significativamente el rendimiento en comparación con la CNN inicial.
Logros Técnicos Clave
- Precisión: 84.21% de precisión en la clasificación de razas
- Flexibilidad: Funciona con diversas entradas de imágenes
- Innovación: Aprovecha técnicas de aprendizaje profundo de vanguardia
Desafíos y Momentos de Aprendizaje
Algunos desafíos interesantes encontrados incluyen:
- Manejo de imágenes con sujetos ambiguos
- Gestión de variaciones dentro de las razas de perros
- Lidiar con datos de entrenamiento limitados
Comparación de Modelos de Clasificación de Razas de Perros
Se utilizó la técnica KFold para evaluar la precisión y la desviación estándar entre diferentes conjuntos de datos de prueba en esta comparación. Los modelos comparados incluyen CCNNS (modelo CNN personalizado desde cero), VGG16 y ResNet50.
La tabla de comparación muestra las diferencias de precisión en la detección de razas de perros entre los modelos probados:
Modelo | Característica | Tamaño de Entrenamiento | Precisión Media | Desviación Estándar |
CNN personalizada desde cero 0.8 | CNN simple / Tiempo de entrenamiento rápido | 6680 | 4.07 % | 1.28 |
Modelo de aprendizaje por transferencia VGG16 | CNN superficial con 16 capas | 1.2M | 71.18 % | 2.83 |
Modelo de aprendizaje por transferencia ResNet50 | CNN más profunda con 50 capas | 1.2M | 84.21 % | 1.20 |
Los resultados de la evaluación KFold revelan varias ideas:
Precisión: Entre los tres modelos, ResNet50 logra consistentemente la precisión más alta en todos los pliegues, con una precisión media del 84.21%. Esto demuestra su robustez y eficacia en la clasificación de razas de perros.
Estabilidad: La desviación estándar de 1.20 para ResNet50 indica que su rendimiento es muy estable en diferentes conjuntos de prueba. Esta estabilidad lo convierte en una opción confiable para aplicaciones prácticas.
Comparación de Rendimiento
- VGG16 funciona significativamente mejor que el modelo CNN básico, con una precisión media del 71.18% en comparación con el 4.07% de la CNN. Esto muestra la ventaja de usar un modelo pre-entrenado como VGG16.
- A pesar del fuerte rendimiento de VGG16, ResNet50 lo supera por un margen notable, destacando los beneficios de usar arquitecturas más avanzadas para tareas complejas como la clasificación de razas de perros.
Varianza en el Rendimiento de CNN: El modelo CNN básico muestra una desviación estándar más alta de 1.28 en comparación con ResNet50 y VGG16, indicando un rendimiento menos consistente. Esta inconsistencia subraya la importancia de usar modelos más sofisticados y aprendizaje por transferencia para lograr resultados mejores y más confiables.
Mejora a lo largo de los Folds: Tanto ResNet50 como VGG16 demuestran una mejora consistente a lo largo de los folds, mientras que el modelo CNN básico muestra más fluctuación. Esta consistencia respalda aún más la elección de modelos avanzados para lograr un alto rendimiento en tareas de clasificación de imágenes.
En general, el análisis presenta a ResNet50 como el modelo de mejor rendimiento debido a su alta precisión, estabilidad y capacidad para generalizar bien en diferentes conjuntos de datos. Estas características hacen de ResNet50 un fuerte candidato para aplicaciones del mundo real en la clasificación de razas de perros.
Mejoras Futuras
Aunque la versión actual funciona bien, hay varias mejoras posibles:
- Implementar detección de cuerpo completo humano para mejorar la precisión de detección humana
- Aumentar la diversidad en los datos de entrenamiento
- Mejorar el manejo de casos ambiguos
- Explorar enfoques de aprendizaje profundo más avanzados para tareas de detección
- Aumentar significativamente el tamaño del conjunto de datos, apuntando a 500 imágenes por raza
Agradecimientos
El Kit de Herramientas Tecnológicas
Para abordar este desafío, reuní un sólido conjunto de tecnologías basadas en código abierto:
- Keras: Deep Learning for humans
- Matplotlib — Visualization with Python
- OpenCV - Open Source Computer Vision
- scikit-learn: machine learning in Python
- TensorFlow - An end-to-end open-source machine learning platform for everyone
- Programming Language: Python
License
Sample Images from Wikimedia Commons. Creative Commons CC0 License.
Attribution 4.0 International - CC BY 4.0 https://creativecommons.org/licenses/by/4.0/
A Journey into Dog Breed Classification with Deep Learning by Anibal H. Sanchez Perez is licensed under Creative Commons Attribution 4.0 International