Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Desafío: Construcción de una CNN | Redes Neuronales Convolucionales
Fundamentos de Visión por Computadora
course content

Contenido del Curso

Fundamentos de Visión por Computadora

Fundamentos de Visión por Computadora

1. Introducción a la Visión por Computadora
2. Procesamiento de Imágenes con OpenCV
3. Redes Neuronales Convolucionales
4. Detección de Objetos
5. Visión General de Temas Avanzados

book
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: VGG like architecture

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 y batch_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.

PROYECTO CNN EN COLAB

question-icon

Introduce las partes de la clave (Las recibiste después de completar el proyecto)

1.  2.  3.  4.  5.
¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 3. Capítulo 7

Pregunte a AI

expand
ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

course content

Contenido del Curso

Fundamentos de Visión por Computadora

Fundamentos de Visión por Computadora

1. Introducción a la Visión por Computadora
2. Procesamiento de Imágenes con OpenCV
3. Redes Neuronales Convolucionales
4. Detección de Objetos
5. Visión General de Temas Avanzados

book
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: VGG like architecture

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 y batch_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.

PROYECTO CNN EN COLAB

question-icon

Introduce las partes de la clave (Las recibiste después de completar el proyecto)

1.  2.  3.  4.  5.
¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 3. Capítulo 7
Lamentamos que algo salió mal. ¿Qué pasó?
some-alt