Saltar al contenido principal
InicioTutorialesAprendizaje profundo

Introducción a las redes neuronales convolucionales (CNN)

Una guía completa para entender las CNN, su impacto en el análisis de imágenes y algunas estrategias clave para combatir el sobreajuste en aplicaciones robustas de CNN frente al aprendizaje profundo.
abr 2024  · 14 min leer

¿Qué es una red neuronal convolucional (CNN)?

Una red neuronal convolucional (CNN), también conocida como ConvNet, es un tipo especializado de algoritmo de aprendizaje profundo diseñado principalmente para tareas que requieren reconocimiento de objetos, como la clasificación, la detección y la segmentación de imágenes. Las CNN se emplean en diversos casos prácticos, como vehículos autónomos, sistemas de cámaras de seguridad y otros.

La importancia de las CNN

Hay varias razones por las que las CNN son importantes en el mundo moderno, como se destaca a continuación:

  • Las CNN se distinguen de los algoritmos clásicos de machine learning, como las SVM y los árboles de decisión, por su capacidad para extraer características de forma autónoma a gran escala, evitando la necesidad de ingeniería manual de características y mejorando así la eficiencia.

  • Las capas convolucionales confieren a las CNN sus características de invariabilidad traslacional, lo que les permite identificar y extraer patrones y características de los datos independientemente de las variaciones de posición, orientación, escala o traslación.

  • Diversas arquitecturas CNN preentrenadas, como VGG-16, ResNet50, Inceptionv3 y EfficientNet, han demostrado un rendimiento de primer nivel. Estos modelos pueden adaptarse a nuevas tareas con relativamente pocos datos mediante un proceso conocido como ajuste fino.

  • Más allá de las tareas de clasificación de imágenes, las CNN son versátiles y pueden aplicarse a otros dominios, como el procesamiento de lenguaje natural, el análisis de series temporales y el reconocimiento del habla.

Inspiración detrás de la CNN y paralelismos con el sistema visual humano

Las redes neuronales convolucionales se inspiraron en la arquitectura en capas de la corteza visual humana, y a continuación se exponen algunas similitudes y diferencias clave:

Ilustración de la correspondencia entre las áreas asociadas a la corteza visual primaria y las capas de una red neuronal convolucional

Ilustración de la correspondencia entre las áreas asociadas a la corteza visual primaria y las capas de una red neuronal convolucional (fuente)

  • Arquitectura jerárquica: Tanto las CNN como la corteza visual tienen una estructura jerárquica, con las características sencillas extraídas en las capas tempranas y las características más complejas construidas en capas más profundas. Esto permite representaciones cada vez más sofisticadas de las entradas visuales.
  • Conectividad local: Las neuronas de la corteza visual solo se conectan a una región local de la entrada, no a todo el campo visual. Del mismo modo, las neuronas de una capa CNN solo están conectadas a una región local del volumen de entrada mediante la operación de convolución. Esta conectividad local permite la eficiencia.
  • Invariabilidad traslacional: Las neuronas de la corteza visual pueden detectar características independientemente de su ubicación en el campo visual. Las capas de agrupamiento de una CNN proporcionan cierto grado de invariabilidad traslacional resumiendo las características locales.
  • Varios mapas de características: En cada fase del procesamiento visual, se extraen muchos mapas de características diferentes. Las CNN imitan esto mediante varias mapas de filtros en cada capa de convolución.
  • No linealidad: Las neuronas de la corteza visual presentan propiedades de respuesta no lineales. Las CNN consiguen la no linealidad mediante funciones de activación como ReLU aplicadas después de cada convolución.

Las CNN imitan el sistema visual humano, pero son más sencillas, ya que carecen de sus complejos mecanismos de retroalimentación y se basan en el aprendizaje supervisado en lugar de en el no supervisado, lo que impulsa los avances en la visión artificial a pesar de estas diferencias.

Componentes clave de una CNN

La red neuronal convolucional se compone de cuatro partes principales.

Pero ¿cómo aprenden las CNN con esas partes?

Ayudan a las CNN a imitar el funcionamiento del cerebro humano para reconocer patrones y características en las imágenes:

  • Capas convolucionales
  • Unidad lineal rectificada ( ReLU)
  • Capas de agrupamiento
  • Capas totalmente conectadas

Esta sección se sumerge en la definición de cada uno de estos componentes con el siguiente ejemplo de clasificación de un dígito manuscrito.

Arquitectura de las CNN aplicada al reconocimiento de dígitos

Arquitectura de las CNN aplicada al reconocimiento de dígitos (fuente)

Capas convolucionales

Este es el primer componente de una CNN. Como su nombre indica, la principal tarea matemática realizada se llama convolución, que es la aplicación de una función de ventana deslizante a una matriz de píxeles que representa una imagen. La función de deslizamiento aplicada a la matriz se denomina núcleo o filtro, y ambos nombres pueden utilizarse indistintamente.

En la capa convolucional, se aplican varios filtros de igual tamaño, y cada filtro se utiliza para reconocer un patrón específico de la imagen, como la curvatura de los dígitos, los bordes, la forma completa de los dígitos, etc.

En pocas palabras, en la capa convolucional utilizamos pequeñas cuadrículas (llamadas filtros o núcleos) que se mueven sobre la imagen. Cada pequeña cuadrícula es como una minilupa que busca patrones específicos en la foto, como líneas, curvas o formas. A medida que se desplaza por la foto, crea una nueva cuadrícula que resalta dónde encontró estos patrones.

Por ejemplo, un filtro puede ser bueno para encontrar líneas rectas, otro para encontrar curvas, etc. Utilizando varios filtros diferentes, la CNN puede hacerse una buena idea de todos los patrones diferentes que componen la imagen.

Consideremos esta imagen en escala de grises de 32 x 32 de un dígito manuscrito. Los valores de la matriz se dan a título ilustrativo.

Ilustración de la imagen de entrada y su representación en píxeles

Ilustración de la imagen de entrada y su representación en píxeles

Consideremos también el núcleo utilizado para la convolución. Es una matriz con una dimensión de 3 x 3. Los pesos de cada elemento del núcleo se representan en la cuadrícula. Los pesos cero se representan en las cuadrículas negras y los pesos uno, en la cuadrícula blanca.

¿Tenemos que buscar manualmente estos pesos?

En la vida real, los pesos de los núcleos se determinan durante el proceso de entrenamiento de la red neuronal.

Utilizando estas dos matrices, podemos realizar la operación de convolución aplicando el producto escalar, y trabajar como sigue:

  1. Aplicar la matriz del núcleo desde la esquina superior izquierda hacia la derecha.
  2. Realizar el producto de Hadamard.
  3. Sumar los valores de los productos.
  4. El valor resultante corresponde al primer valor (esquina superior izquierda) de la matriz convolucionada.
  5. Desplazar el núcleo hacia abajo con respecto al tamaño de la ventana deslizante.
  6. Repetir los pasos del 1 al 5 hasta que la matriz de imagen esté totalmente cubierta.

La dimensión de la matriz convolucionada depende del tamaño de la ventana deslizante. Cuanto mayor sea la ventana deslizante, menor será la dimensión.

Aplicación de la tarea de convolución utilizando un paso de 1 con un núcleo de 3 x 3

Aplicación de la tarea de convolución utilizando un paso de 1 con un núcleo de 3 x 3

Otro nombre asociado al núcleo es el de detector de características, porque los pesos pueden ajustarse para detectar características específicas en la imagen de entrada.

Por ejemplo:

  • El núcleo de media de píxeles vecinos puede utilizarse para difuminar la imagen de entrada.
  • El núcleo de resta de píxeles vecinos se utiliza para realizar la detección de bordes.

Cuantas más capas convolucionales tenga la red, mejor será la capa para detectar características más abstractas.

Función de activación

Se aplica una función de activación ReLU después de cada operación de convolución. Esta función ayuda a la red a aprender relaciones no lineales entre las características de la imagen, lo que hace la red más robusta para identificar distintos patrones. También ayuda a mitigar el problema de desvanecimiento de gradiente.

Capa de agrupamiento

El objetivo de la capa de agrupamiento es extraer las características más significativas de la matriz convolucionada. Esto se hace aplicando algunas operaciones de agregación, que reducen la dimensión del mapa de características (matriz convolucionada), reduciendo así la memoria utilizada durante el entrenamiento de la red. El agrupamiento también es relevante para mitigar el sobreajuste.

Las funciones de agregación más comunes que pueden aplicarse son:

  • Max-pooling, que es el valor máximo del mapa de características
  • El sum-pooling es la suma de todos los valores del mapa de características
  • El average-pooling es la media de todos los valores.

A continuación se ilustra cada uno de los ejemplos anteriores:

Aplicación de max-pooling con un paso de 2 utilizando el filtro de 2 x 2

Aplicación de max-pooling con un paso de 2 utilizando el filtro de 2 x 2

Además, la dimensión del mapa de características se reduce a medida que se aplica la función de agrupamiento.

La última capa de agrupamiento aplana su mapa de características para que pueda ser procesado por la capa totalmente conectada.

Capas totalmente conectadas

Estas capas están en la última capa de la red neuronal convolucional, y sus entradas corresponden a la matriz unidimensional aplanada generada por la última capa de agrupamiento. Se les aplican funciones de activación ReLU para la no linealidad.

Por último, se utiliza una capa de previsión softmax para generar valores de probabilidad para cada una de las posibles etiquetas de salida, y la etiqueta final prevista es la que tiene la puntuación de probabilidad más alta.

Sobreajuste y regularización en las CNN

El sobreajuste es un problema habitual en los modelos de machine learning y en los proyectos de aprendizaje profundo de CNN. Ocurre cuando el modelo aprende demasiado bien los datos de entrenamiento ("aprendizaje de memoria"), incluidos su ruido y sus valores atípicos. Un aprendizaje de este tipo conduce a un modelo que funciona bien con los datos de entrenamiento, pero mal con nuevos datos no vistos.

Esto puede observarse cuando el rendimiento con los datos de entrenamiento es demasiado bajo con respecto a los datos de validación o prueba, y a continuación se ofrece una ilustración gráfica:

Subajuste frente a sobreajuste

Subajuste frente a sobreajuste

Los modelos de aprendizaje profundo, especialmente las redes neuronales convolucionales (CNN), son especialmente susceptibles al sobreajuste debido a su capacidad para la alta complejidad y su habilidad para aprender patrones detallados en datos a gran escala.

Se pueden aplicar varias técnicas de regularización para mitigar el sobreajuste en las CNN, y algunas se ilustran a continuación:

Siete estrategias para mitigar el sobreajuste en las CNN

Siete estrategias para mitigar el sobreajuste en las CNN

  • Abandono: Consiste en abandonar aleatoriamente algunas neuronas durante el proceso de entrenamiento, lo que obliga a las neuronas restantes a aprender nuevas características a partir de los datos de entrada.
  • Normalización por lotes: El sobreajuste se reduce en cierta medida normalizando la capa de entrada mediante el ajuste y la escala de las activaciones. Este enfoque también se utiliza para acelerar y estabilizar el proceso de entrenamiento.
  • Capas de agrupamiento: Esto puede utilizarse para reducir las dimensiones espaciales de la imagen de entrada y proporcionar al modelo una forma abstracta de representación, reduciendo así la posibilidad de sobreajuste.
  • Parada anticipada: Consiste en supervisar constantemente el rendimiento del modelo con los datos de validación durante el proceso de entrenamiento y detener el entrenamiento siempre que el error de validación deje de mejorar.
  • Inyección de ruido: Este proceso consiste en añadir ruido a las entradas o a las salidas de las capas ocultas durante el entrenamiento para hacer más robusto el modelo e impedir que generalice débilmente.
  • Normalizaciones L1 y L2: Tanto L1 como L2 se utilizan para añadir una penalización a la función de pérdida en función del tamaño de los pesos. Más concretamente, L1 fomenta que los pesos sean poco numerosos, lo que conduce a una mejor selección de características. Por su parte, L2 (que también se llama decaimiento de peso) fomenta que los pesos sean pequeños, impidiendo que influyan demasiado en las previsiones.
  • Aumento de datos: Es el proceso de aumentar artificialmente el tamaño y la diversidad del conjunto de datos de entrenamiento mediante la aplicación de transformaciones aleatorias, como rotación, escalado, volteo o recorte, a las imágenes de entrada.

Aplicaciones prácticas de las CNN

Las redes neuronales convolucionales han revolucionado el campo de la visión artificial, dando lugar a avances significativos en muchas aplicaciones del mundo real. A continuación te damos algunos ejemplos de cómo se aplican.

Algunas aplicaciones prácticas de las CNN

Algunas aplicaciones prácticas de las CNN

  • Clasificación de imágenes: Las redes neuronales convolucionales se utilizan para la categorización de imágenes, en la que dichas imágenes se asignan a categorías predefinidas. Un uso de este tipo es la organización automática de fotos en redes sociales.
  • Detección de objetos: Las CNN pueden identificar y localizar varios objetos dentro de una imagen. Esta capacidad es crucial en varios casos de escaneado de estanterías en el comercio minorista para identificar artículos agotados.
  • Reconocimiento facial: también es uno de los principales sectores de aplicación de las CNN. Por ejemplo, esta tecnología puede integrarse en sistemas de seguridad para un control eficiente del acceso basado en características faciales.

Para una implementación más práctica, nuestro Tutorial sobre redes neuronales convolucionales (CNN) con TensorFlow enseña a construir e implementar CNN en Python con el marco Tensorflow 2.

Marcos de aprendizaje profundo para CNN

El rápido crecimiento del aprendizaje profundo se debe principalmente a potentes marcos como Tensorflow, Pytorch y Keras, que facilitan el entrenamiento de las redes neuronales convolucionales y otros modelos de aprendizaje profundo.

Veamos brevemente cada marco.

Logotipos de Tensorflow, Keras y Pytorch

Logotipos de Tensorflow, Keras y Pytorch

Tensorflow

TensorFlow es un marco de aprendizaje profundo de código abierto desarrollado por Google y publicado en 2015. Ofrece una serie de herramientas para el desarrollo y la implementación del machine learning. Nuestra Introducción a las redes neuronales profundas proporciona una guía completa para comprender las redes neuronales profundas y su importancia en el moderno mundo de aprendizaje profundo de la inteligencia artificial, junto con implementaciones del mundo real en Tensorflow.

Keras

Keras es un marco de redes neuronales general en Python que permite experimentar y desarrollar rápidamente. Es de código abierto y puede utilizarse dentro de otros marcos como TensorFlow, CNTK y Theano. Nuestro curso Procesamiento de imágenes con Keras en Python enseña a realizar análisis de imágenes utilizando Keras con Python mediante la construcción, el entrenamiento y la evaluación de redes neuronales convolucionales.

Pytorch

Publicado por la división de investigación de IA de Facebook en 2017, está diseñado para aplicaciones de procesamiento de lenguaje natural y destaca por su eficiencia en memoria y gráficos computacionales dinámicos. Si te interesa sumergirte en el procesamiento de lenguaje natural, NLP con PyTorch: una guía completa es un excelente punto de partida.

Cada proyecto es diferente, por lo que la decisión depende realmente de qué características son las más importantes para un caso de uso determinado. Para ayudar a tomar mejores decisiones, la siguiente tabla ofrece una breve comparación de estos marcos, destacando sus características únicas.

 

Tensorflow

Pytorch

Keras

Nivel de API

Ambos

(Alto y bajo)

Bajo

Alto

Arquitectura

No es fácil de usar

Complejo, menos legible

Sencillo, conciso, legible

Conjuntos de datos

Grandes conjuntos de datos, alto rendimiento

Grandes conjuntos de datos, alto rendimiento

Conjuntos de datos menores

Depuración

Dificultad para llevar a cabo la depuración

Buenas capacidades de depuración

Red sencilla, por lo que la depuración no suele ser necesaria

¿Modelos preentrenados?

Popularidad

El segundo más popular de los tres

El tercero más popular de los tres

El más popular de los tres

Velocidad

Rápido y de alto rendimiento

Rápido y de alto rendimiento

Lento y de bajo rendimiento

Escrito en

C++, CUDA, Python

Lua

Python

Tabla comparativa entre Tensorflow, Pytorch y Keras (fuente)

Conclusión

Este artículo ha proporcionado una visión completa de lo que es una CNN en el aprendizaje profundo, junto con su papel crucial en tareas de reconocimiento y clasificación de imágenes.

Empezó destacando la inspiración extraída del sistema visual humano para el diseño de las CNN y luego exploró los componentes clave que permiten a estas redes aprender y hacer previsiones.

El problema del sobreajuste se reconoció como un reto importante para la capacidad de generalización de las CNN. Para mitigarlo, se esbozaron diversas estrategias pertinentes para mitigar el sobreajuste y mejorar el rendimiento general de las CNN.

Por último, se han mencionado algunos de los principales marcos CNN de aprendizaje profundo, junto con las características únicas de cada uno, y se han comparado dichos marcos.

¿Tienes ganas de sumergirte más en el mundo de la IA y el machine learning? Lleva tu pericia al siguiente nivel inscribiéndote en el curso Aprendizaje profundo con PyTorch hoy mismo.

Temas

¡Comienza hoy tu viaje hacia el aprendizaje profundo!

Course

Introduction to Deep Learning in Python

4 hr
245.5K
Learn the fundamentals of neural networks and how to build deep learning models using Keras 2.0 in Python.
See DetailsRight Arrow
Start Course
Ver másRight Arrow
Relacionado

tutorial

Introducción a las redes neuronales profundas

Comprender las redes neuronales profundas y su importancia en el mundo moderno del aprendizaje profundo de la inteligencia artificial
Bharath K's photo

Bharath K

13 min

tutorial

Introducción completa a las redes neuronales gráficas (GNN)

Aprenda todo sobre las redes neuronales gráficas, incluyendo qué son las GNN, los diferentes tipos de redes neuronales gráficas y para qué se utilizan. Además, aprenda a crear una red neuronal gráfica con Pytorch.
Abid Ali Awan's photo

Abid Ali Awan

15 min

tutorial

Introducción a las funciones de activación en las redes neuronales

Aprende a navegar por las funciones de activación habituales, desde la firme ReLU hasta la destreza probabilística de softmax.
Moez Ali's photo

Moez Ali

11 min

tutorial

Creación de modelos de redes neuronales (NN) en R

En este tutorial, aprenderá a crear un modelo de Red Neuronal en R.
Abid Ali Awan's photo

Abid Ali Awan

16 min

tutorial

Introducción al aprendizaje automático estadístico

Descubra la potente fusión de estadística y aprendizaje automático. Explore cómo las técnicas estadísticas sustentan los modelos de aprendizaje automático, permitiendo la toma de decisiones basada en datos.
Joanne Xiong's photo

Joanne Xiong

11 min

tutorial

Guía completa para el aumento de datos

Aprende sobre técnicas, aplicaciones y herramientas de aumento de datos con un tutorial de TensorFlow y Keras.
Abid Ali Awan's photo

Abid Ali Awan

15 min

See MoreSee More