Contenido del Curso
Fundamentos de Visión por Computadora
Fundamentos de Visión por Computadora
Desafío: Construcción de una CNN
Las redes neuronales convolucionales (CNN) se utilizan ampliamente en la clasificación de imágenes debido a su capacidad para extraer características jerárquicas. En esta tarea, implementarás y entrenarás una CNN similar a VGG utilizando TensorFlow y Keras sobre el conjunto de datos CIFAR-10
. El conjunto de datos consta de 60,000 imágenes (32×32×3
) pertenecientes a 10 clases diferentes, incluyendo aviones, automóviles, aves, gatos y más.
Este proyecto te guiará a través de la carga del conjunto de datos, el preprocesamiento de las imágenes, la definición del modelo CNN, su entrenamiento y la evaluación de su rendimiento.
1. Preprocesamiento de datos para CNN
Antes de entrenar una CNN, el preprocesamiento de los datos es un paso crucial para asegurar un mejor rendimiento y una convergencia más rápida. Los métodos de preprocesamiento comunes incluyen:
Normalización: este método implica escalar los valores de los píxeles de las imágenes de un rango entre 0 y 255 a un rango entre 0 y 1. A menudo se implementa como
x_train / 255.0, x_test / 255.0
;Codificación One-Hot: las etiquetas suelen convertirse en vectores codificados one-hot para tareas de clasificación. Esto se realiza típicamente usando la función
keras.utils.to_categorical
, que transforma etiquetas enteras (por ejemplo, 0, 1, 2, etc.) en un vector codificado one-hot, como[1, 0, 0, 0]
para un problema de clasificación de 4 clases.
2. Construcción de la arquitectura CNN
Una arquitectura CNN está compuesta por varias capas que realizan diferentes tareas para extraer características y realizar predicciones. Puedes implementar las capas clave de una CNN mediante:
Capa convolucional (Conv2D)
Nota
El parámetro
input_shape
solo debe especificarse en la capa de entrada.
Capa de agrupamiento (MaxPooling2D)
Capa de aplanamiento
Capa Densa
Nota
La capa densa final normalmente tiene un número de unidades igual al número de clases y utiliza una función de activación softmax para generar una distribución de probabilidad entre las clases.
3. Compilación del Modelo
Después de definir la arquitectura, es necesario compilar el modelo. Este paso implica especificar la función de pérdida, el optimizador y las métricas que guiarán el modelo durante el entrenamiento. Los siguientes métodos son comúnmente utilizados en las CNN:
Optimizador (Adam)
El optimizador ajusta los pesos del modelo para minimizar la función de pérdida. El optimizador Adam es popular debido a su eficiencia y capacidad para adaptar la tasa de aprendizaje durante el entrenamiento.
Función de pérdida (Entropía cruzada categórica)
Para la clasificación multiclase, normalmente se utiliza la entropía cruzada categórica como función de pérdida. Esto se puede implementar de la siguiente manera:
Métricas
El rendimiento del modelo se supervisa utilizando métricas para tareas de clasificación, como precisión, exactitud, recall, etc. Estas se pueden definir como:
Compilar
4. Entrenamiento del Modelo
El entrenamiento de una CNN implica alimentar los datos de entrada a la red, calcular la pérdida y actualizar los pesos mediante retropropagación. El proceso de entrenamiento se controla mediante los siguientes métodos clave:
Ajuste del Modelo: el método
fit()
se utiliza para entrenar el modelo. Este método recibe los datos de entrenamiento, el número de épocas y el tamaño de lote. También incluye una división opcional de validación para evaluar el rendimiento del modelo en datos no vistos durante el entrenamiento:
Tamaño de lote y épocas: el tamaño de lote determina el número de muestras procesadas antes de actualizar los pesos del modelo, y el número de épocas se refiere a cuántas veces se pasa el conjunto de datos completo a través del modelo.
5. Evaluación
Informe de Clasificación
sklearn.metrics.classification_report()
compara los valores reales y predichos del conjunto de prueba. Incluye precisión, recall y puntuación F1 para cada clase. Sin embargo, los métodos necesitan obtener solo las etiquetas de clase, así que no olvides convertirlas de nuevo desde los vectores ([0,0,1,0]
-> 2
):
Evaluación
Una vez que el modelo está entrenado, se evalúa en el conjunto de datos de prueba para medir su capacidad de generalización. La evaluación proporciona métricas, que se mencionaron en el método .compile()
. La evaluación se realiza utilizando .evaluate()
:
Matriz de confusión
Para obtener más información sobre el rendimiento del modelo, se puede visualizar la matriz de confusión, que muestra las predicciones de verdaderos positivos, falsos positivos, verdaderos negativos y falsos negativos para cada clase. La matriz de confusión se puede calcular utilizando TensorFlow:
Esta matriz puede visualizarse utilizando mapas de calor para observar qué tan bien se desempeña el modelo en cada clase:
1. Cargar y preprocesar el conjunto de datos
Importar el conjunto de datos CIFAR-10 desde Keras;
Normalizar los valores de los píxeles al rango
[0,1]
para una mejor convergencia;Convertir las etiquetas de clase al formato
one-hot encoded
para clasificación categórica.
2. Definir el modelo CNN
Implementar una arquitectura CNN tipo VGG con las siguientes capas clave:
Capas convolucionales:
Tamaño del kernel:
3×3
;Función de activación:
ReLU
;Relleno:
'same'
.
Capas de agrupamiento:
Tipo de agrupamiento:
max pooling
;Tamaño de agrupamiento:
2×2
.
Capas de abandono (Previenen el sobreajuste deshabilitando aleatoriamente neuronas):
Tasa de abandono:
25%
.
Capa de aplanamiento - convierte los mapas de características 2D en un vector 1D para la clasificación.
Capas totalmente conectadas - capas densas para la clasificación final, con una capa de salida relu o softmax.
Compilar el modelo usando:
Adam optimizer
(para aprendizaje eficiente);Función de pérdida
Categorical cross-entropy
(para clasificación multiclase);Métrica de
Accuracy metric
para medir el rendimiento (las clases están balanceadas, y puedes añadir otras métricas por tu cuenta).
3. Entrenar el modelo
Especificar los parámetros
epochs
ybatch_size
para el entrenamiento (por ejemplo,epochs=20, batch_size=64
);Especificar el parámetro
validation_split
para definir el porcentaje de datos de entrenamiento que se convierte en validación para rastrear el rendimiento del modelo en imágenes no vistas;Guardar el historial de entrenamiento para visualizar tendencias de precisión y pérdida.
4. Evaluar y visualizar resultados
Probar el modelo en los datos de prueba de CIFAR-10 e imprimir la precisión;
Graficar pérdida de entrenamiento vs. pérdida de validación para comprobar sobreajuste;
Graficar precisión de entrenamiento vs. precisión de validación para asegurar la progresión del aprendizaje.
¡Gracias por tus comentarios!