TensorFlow

TensorFlow

Tutorial TensorFlow: Redes convolucionales CNN

Descubre cómo implementar redes convolucionales (CNN) con Keras para aplicaciones como clasificación de imágenes, detección de objetos y análisis médico. Aprende sobre capas convolucionales, pooling y transfer learning.

Aprende TensorFlow GRATIS y certifícate

Fundamentos de las redes convolucionales CNN

Las redes convolucionales (CNN, por sus siglas en inglés) son una clase de redes neuronales profundas diseñadas específicamente para procesar datos con estructura de cuadrícula, como imágenes. A diferencia de las redes neuronales densas tradicionales, las CNN explotan la localidad espacial de los datos utilizando filtros (kernels) que recorren la entrada para detectar patrones relevantes.

Componentes principales de una CNN

  • Capa Convolucional: La primera capa en una CNN es típicamente una capa convolucional, que aplica múltiples filtros a la entrada. Cada filtro es capaz de detectar distintos patrones, como bordes, texturas o formas. Esto da lugar a mapas de características que resaltan regiones donde se encuentran dichos patrones. Por ejemplo:
    • Un filtro puede resaltar bordes verticales.
    • Otro puede identificar bordes horizontales.

En Keras, una capa convolucional se define utilizando la clase Conv2D:

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D

modelo = Sequential([
    Conv2D(filters=32, kernel_size=(3, 3), activation='relu', input_shape=(128, 128, 3))
])

Este código crea una capa con 32 filtros de tamaño 3x3 y función de activación ReLU, adecuada para imágenes RGB de 128x128 píxeles.

  • Capas de pooling: Las capas de pooling reducen la dimensión espacial de los mapas de características, disminuyendo el número de parámetros y la complejidad del modelo. Esto también ayuda a captar características a distintas escalas. El pooling máximo (max pooling) es una técnica común que selecciona el valor máximo dentro de una ventana específica, preservando las características más prominentes.
  • Funciones de activación: Las funciones de activación no lineales, como ReLU (Rectified Linear Unit), introducen no linealidades en el modelo, permitiendo capturar relaciones complejas entre las características. ReLU es especialmente popular porque simplifica los cálculos y mitiga el problema del desvanecimiento del gradiente.

Ventajas clave de las CNN

  1. Aprendizaje automático de características: Las CNN eliminan la necesidad de realizar ingeniería manual de características. Durante el entrenamiento, aprenden automáticamente qué patrones son más relevantes para la tarea, desde bordes simples hasta estructuras complejas como rostros o vehículos.
  2. Reducción de parámetros: Mediante el uso de pooling y convoluciones, las CNN reducen drásticamente la cantidad de parámetros en comparación con redes densas tradicionales, lo que mejora la eficiencia del modelo.
  3. Escalabilidad: Su arquitectura modular permite aumentar o disminuir el tamaño de la red según las necesidades, haciéndolas aptas para una amplia variedad de aplicaciones.

Proceso de entrenamiento

El entrenamiento de una CNN implica:

  1. Optimización de los filtros: Los pesos de los filtros se ajustan mediante algoritmos como el descenso del gradiente.
  2. Funciones de costo: Se utiliza una función de pérdida adecuada (por ejemplo, categorical_crossentropy para clasificación multiclase).
  3. Regularización: Técnicas como el dropout y la normalización por lotes ayudan a prevenir el sobreajuste y estabilizar el entrenamiento.

Aplicaciones de las CNN

Las CNN han transformado numerosos campos, incluyendo:

  • Visión por computadora: Clasificación de imágenes, detección de objetos, y segmentación semántica.
  • Reconocimiento facial: Identificación y autenticación basadas en imágenes.
  • Conducción autónoma: Interpretación de entornos visuales mediante cámaras.

Por ejemplo, en una tarea de clasificación de imágenes, una CNN puede aprender a reconocer características específicas que distinguen entre distintas categorías, como animales, vehículos o paisajes.

Optimización de las CNN

Para maximizar el rendimiento de una CNN, es crucial:

  • Ajustar hiperparámetros: Número de capas, tamaño de los filtros, y tasa de aprendizaje.
  • Implementar regularización: Dropout y normalización por lotes para evitar el sobreajuste.
  • Experimentar con arquitecturas avanzadas: Incorporar bloques convolucionales complejos como los usados en redes como ResNet o VGG.

Capas convolucionales y su uso en Keras

Las capas convolucionales son componentes esenciales en la construcción de redes convolucionales (CNN) utilizando Keras. Estas capas permiten la extracción automática de características a partir de los datos de entrada, como imágenes, mediante la aplicación de filtros que detectan patrones específicos.

En Keras, las capas convolucionales se implementan principalmente a través de la clase Conv2D para datos bidimensionales, aunque también existen variantes como Conv1D y Conv3D para datos unidimensionales y tridimensionales, respectivamente. La capa Conv2D es ampliamente utilizada en tareas de visión por computadora debido a su eficacia en el procesamiento de imágenes.

Al configurar una capa convolucional en Keras, es crucial definir varios parámetros que determinan su comportamiento:

  • filters: Número de filtros o kernels a aplicar. Cada filtro extrae una característica diferente de la entrada.
  • kernel_size: Tamaño de la ventana del filtro, especificado como una tupla de enteros, por ejemplo, (3, 3).
  • strides: Desplazamiento del filtro sobre la entrada. Un valor común es (1, 1).
  • padding: Tipo de relleno aplicado a la entrada. Puede ser 'valid' para sin relleno o 'same' para relleno que mantiene las dimensiones de la salida.
  • activation: Función de activación a aplicar, como 'relu', 'sigmoid' o funciones personalizadas.
  • input_shape: Forma de la entrada, requerida en la primera capa de la red. Por ejemplo, (128, 128, 3) para imágenes de 128x128 píxeles con 3 canales de color.

A continuación se presenta un ejemplo de cómo añadir múltiples capas convolucionales a un modelo secuencial en Keras:

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D

modelo = Sequential([
    Conv2D(filters=32, kernel_size=(3, 3), activation='relu', input_shape=(128, 128, 3)),
    Conv2D(filters=64, kernel_size=(3, 3), activation='relu'),
    MaxPooling2D(pool_size=(2, 2)),
    Conv2D(filters=128, kernel_size=(3, 3), activation='relu'),
    MaxPooling2D(pool_size=(2, 2))
])

En este ejemplo, el modelo comienza con una capa Conv2D que procesa imágenes de entrada de 128x128 píxeles con 3 canales de color. Se añaden dos capas convolucionales adicionales con un mayor número de filtros para capturar características más complejas. Las capas de pooling (MaxPooling2D) se intercalan para reducir la dimensión espacial de los mapas de características, facilitando la detección de patrones a mayor escala.

Es posible personalizar aún más las capas convolucionales utilizando otros parámetros avanzados:

  • kernel_initializer: Método para inicializar los pesos del filtro, como 'he_normal' o 'glorot_uniform'.
  • use_bias: Booleano que indica si se deben incluir sesgos en la capa.
  • dilation_rate: Factor de dilatación para la convolución, útil en tareas de segmentación.

La flexibilidad de las capas convolucionales en Keras permite a los desarrolladores diseñar arquitecturas adaptadas a necesidades específicas. Por ejemplo, al utilizar convoluciones dilatadas, es posible aumentar el campo receptivo sin incrementar el número de parámetros, lo que es beneficioso en tareas como la segmentación semántica.

Además, Keras soporta la integración de capas convolucionales personalizadas mediante la herencia de la clase Layer, permitiendo la implementación de comportamientos específicos que no están cubiertos por las capas estándar. Esto es particularmente útil para investigadores que buscan experimentar con nuevas técnicas de procesamiento de características.

El uso adecuado de las capas convolucionales es fundamental para el rendimiento de las CNN. Ajustar parámetros como el tamaño del kernel, el número de filtros y las estrategias de regularización puede influir significativamente en la capacidad del modelo para generalizar y evitar el sobreajuste. Asimismo, la combinación de capas convolucionales con otras capas, como las de normalización por lotes (BatchNormalization) y activación (Activation), contribuye a la estabilidad y eficiencia del entrenamiento.

En resumen, las capas convolucionales en Keras proporcionan una base sólida para construir modelos de aprendizaje profundo capaces de extraer y aprender representaciones complejas a partir de datos visuales, facilitando así el desarrollo de aplicaciones avanzadas en visión por computadora y otros campos relacionados.

Capas de pooling y su uso en Keras

Las capas de pooling son componentes fundamentales en las redes convolucionales, utilizadas para reducir las dimensiones espaciales de los mapas de características generados por las capas convolucionales. Esta reducción de dimensiones no solo disminuye la cantidad de parámetros y el costo computacional, sino que también ayuda a controlar el sobreajuste y a capturar características invariantes a pequeñas traslaciones en la entrada.

Existen varios tipos de capas de pooling, entre las cuales las más comunes son el pooling máximo y el pooling promedio. El pooling máximo (MaxPooling2D) selecciona el valor máximo dentro de una ventana de pooling, lo que permite resaltar las características más prominentes en esa región. Por otro lado, el pooling promedio (AveragePooling2D) calcula el promedio de los valores dentro de la ventana, proporcionando una representación más suavizada de las características.

En Keras, implementar una capa de pooling es sencillo gracias a las clases predefinidas. Por ejemplo, para añadir una capa de pooling máximo a un modelo secuencial, se utiliza la clase MaxPooling2D especificando parámetros como el tamaño de la ventana (pool_size) y el stride:

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D

modelo = Sequential([
    Conv2D(filters=32, kernel_size=(3, 3), activation='relu', input_shape=(128, 128, 3)),
    MaxPooling2D(pool_size=(2, 2), strides=(2, 2))
])

En este ejemplo, la capa MaxPooling2D reduce las dimensiones espaciales de los mapas de características a la mitad, aplicando una ventana de 2x2 con un desplazamiento (stride) de 2. Este tipo de configuración es común en muchas arquitecturas de redes neuronales profundas, ya que proporciona un equilibrio entre la reducción de dimensiones y la preservación de información relevante.

Además de las capas de pooling estándar, Keras ofrece capas de pooling global, como GlobalMaxPooling2D y GlobalAveragePooling2D. Estas capas reducen cada mapa de características a un solo valor, calculando el máximo o el promedio a lo largo de toda la dimensión espacial. Son especialmente útiles antes de las capas densas finales en modelos de clasificación, ya que consolidan toda la información espacial en vectores de características compactos.

from tensorflow.keras.layers import GlobalAveragePooling2D

modelo = Sequential([
    Conv2D(filters=64, kernel_size=(3, 3), activation='relu', input_shape=(128, 128, 3)),
    GlobalAveragePooling2D(),
    Dense(units=10, activation='softmax')
])

En este ejemplo, GlobalAveragePooling2D transforma los mapas de características en vectores de tamaño fijo, independientemente de las dimensiones espaciales de la entrada. Esto facilita la conexión con capas densas sin necesidad de aplanar manualmente los datos.

La elección del tipo de pooling y sus parámetros puede influir significativamente en el rendimiento del modelo. El pooling máximo es preferido cuando se busca resaltar las características más fuertes, mientras que el pooling promedio puede ser útil para obtener una representación más general de las características presentes. Por su parte, las capas de pooling global son ideales para tareas de clasificación donde se requiere una vectorización eficiente de las características extraídas.

Keras también permite personalizar el comportamiento de las capas de pooling mediante parámetros avanzados como el relleno (padding) y la dilatación (dilation_rate). Además, es posible combinar diferentes tipos de pooling en una misma arquitectura para aprovechar sus respectivas ventajas.

En resumen, las capas de pooling en Keras juegan un papel crucial en la construcción de modelos convolucionales eficientes y robustos. Al reducir las dimensiones espaciales y consolidar las características extraídas, facilitan el aprendizaje de representaciones más abstractas y mejoran la capacidad de generalización del modelo.

Usos comunes de las CNN con Keras

Las redes convolucionales (CNN) implementadas con Keras son ampliamente utilizadas en diversos campos debido a su capacidad para extraer y aprender características complejas a partir de datos visuales. A continuación, se detallan algunos de los usos más comunes de las CNN en combinación con Keras:

Clasificación de imágenes

La clasificación de imágenes es una de las aplicaciones más tradicionales de las CNN. Consiste en asignar una etiqueta a una imagen completa, identificando objetos, escenas o conceptos presentes en ella. Keras facilita la construcción de modelos de clasificación utilizando arquitecturas predefinidas como VGG16, ResNet50 o InceptionV3, que pueden ser utilizadas con pesos preentrenados para aprovechar el aprendizaje transferido.

from tensorflow.keras.applications import VGG16
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten

modelo = Sequential([
    VGG16(weights='imagenet', include_top=False, input_shape=(224, 224, 3)),
    Flatten(),
    Dense(units=256, activation='relu'),
    Dense(units=10, activation='softmax')
])

En este ejemplo, se utiliza la arquitectura VGG16 sin la parte superior (include_top=False) para extraer características de imágenes de 224x224 píxeles. Posteriormente, se añaden capas densas para realizar la clasificación en 10 clases.

Detección de objetos

La detección de objetos va más allá de la clasificación al identificar y localizar múltiples objetos dentro de una misma imagen. Modelos como YOLO (You Only Look Once) y SSD (Single Shot MultiBox Detector) son implementados en Keras para realizar esta tarea, permitiendo detectar objetos en tiempo real con alta precisión.

from tensorflow.keras.applications import MobileNetV2
from tensorflow.keras.layers import Conv2D
from tensorflow.keras.models import Model

base_model = MobileNetV2(weights='imagenet', include_top=False, input_shape=(224, 224, 3))
x = base_model.output
x = Conv2D(filters=10, kernel_size=(3,3), activation='relu')(x)
modelo = Model(inputs=base_model.input, outputs=x)

Este fragmento muestra una implementación básica donde MobileNetV2 se utiliza como base para extraer características, seguidas de una capa convolucional para detectar objetos específicos.

Segmentación de imágenes

La segmentación de imágenes implica clasificar cada píxel de una imagen en una categoría específica, permitiendo una comprensión detallada de la escena. U-Net y Fully Convolutional Networks (FCN) son arquitecturas populares para esta tarea, que pueden ser fácilmente construidas en Keras.

from tensorflow.keras.layers import Input, Conv2D, MaxPooling2D, UpSampling2D
from tensorflow.keras.models import Model

input_img = Input(shape=(128, 128, 1))
x = Conv2D(64, (3, 3), activation='relu', padding='same')(input_img)
x = MaxPooling2D((2, 2))(x)
x = UpSampling2D((2, 2))(x)
decoded = Conv2D(1, (3, 3), activation='sigmoid', padding='same')(x)
modelo = Model(inputs=input_img, outputs=decoded)

Este modelo sencillo de U-Net muestra cómo se pueden combinar capas de convolución, pooling y upsampling para realizar la segmentación de imágenes en Keras.

Reconocimiento facial

El reconocimiento facial utiliza CNN para identificar o verificar la identidad de individuos a partir de sus rasgos faciales. Keras permite implementar modelos especializados que pueden ser entrenados con bases de datos de imágenes faciales, aplicando técnicas como el embedding facial para mejorar la precisión.

from tensorflow.keras.applications import ResNet50
from tensorflow.keras.layers import GlobalAveragePooling2D, Dense
from tensorflow.keras.models import Model

base_model = ResNet50(weights='imagenet', include_top=False, input_shape=(224, 224, 3))
x = base_model.output
x = GlobalAveragePooling2D()(x)
embedding = Dense(units=128, activation='relu')(x)
modelo = Model(inputs=base_model.input, outputs=embedding)

En este ejemplo, se utiliza ResNet50 para extraer características faciales, seguidas de una capa de pooling global y una capa densa para generar embeddings de 128 dimensiones que representan de manera única cada rostro.

Análisis de video

El análisis de video aprovecha las CNN para procesar secuencias de imágenes, permitiendo tareas como la detección de actividades, seguimiento de objetos y reconocimiento de acciones. Keras facilita la implementación de modelos que integran capas convolucionales 3D o recurrencias para capturar la dinámica temporal de los videos.

from tensorflow.keras.layers import Conv3D, MaxPooling3D, Flatten, Dense
from tensorflow.keras.models import Sequential

modelo = Sequential([
    Conv3D(filters=32, kernel_size=(3, 3, 3), activation='relu', input_shape=(16, 128, 128, 3)),
    MaxPooling3D(pool_size=(2, 2, 2)),
    Flatten(),
    Dense(units=64, activation='relu'),
    Dense(units=10, activation='softmax')
])

Este modelo utiliza Conv3D para procesar clips de video de 16 frames, extrayendo características espaciales y temporales para realizar clasificaciones de acciones en 10 categorías diferentes.

Generación de arte y estilo

Las CNN también se aplican en la generación de arte, como en el transferencia de estilo neural, que combina el contenido de una imagen con el estilo de otra. Keras permite la implementación de modelos que pueden transformar imágenes de manera creativa, replicando estilos artísticos con alta fidelidad.

from tensorflow.keras.applications import VGG19
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Input, Conv2D

input_img = Input(shape=(224, 224, 3))
vgg = VGG19(weights='imagenet', include_top=False, input_tensor=input_img)
x = Conv2D(64, (3, 3), activation='relu', padding='same')(vgg.output)
modelo = Model(inputs=input_img, outputs=x)

En este ejemplo, se utiliza VGG19 para extraer características de la imagen de contenido y luego aplicar una capa convolucional para incorporar el estilo artístico de otra imagen.

Reconocimiento de señales médicas

En el ámbito de la medicina, las CNN con Keras son empleadas para el análisis de imágenes médicas, como radiografías, resonancias magnéticas y tomografías computarizadas. Estos modelos ayudan en la detección temprana de enfermedades, segmentación de tejidos y clasificación de patologías, mejorando la precisión y eficiencia en el diagnóstico.

from tensorflow.keras.applications import DenseNet121
from tensorflow.keras.layers import GlobalAveragePooling2D, Dense
from tensorflow.keras.models import Model

base_model = DenseNet121(weights='imagenet', include_top=False, input_shape=(256, 256, 3))
x = base_model.output
x = GlobalAveragePooling2D()(x)
predictions = Dense(units=1, activation='sigmoid')(x)
modelo = Model(inputs=base_model.input, outputs=predictions)

Este modelo utiliza DenseNet121 para extraer características de imágenes médicas de 256x256 píxeles, seguido de capas de pooling y una capa densa para realizar la clasificación binaria de una enfermedad específica.

Reconocimiento de gestos y acciones humanas

El reconocimiento de gestos y acciones humanas utiliza CNN para interpretar movimientos y posturas a partir de secuencias de imágenes o datos de sensores. Esto es aplicable en áreas como la interacción hombre-máquina, realidad aumentada y sistemas de vigilancia.

from tensorflow.keras.layers import Conv2D, LSTM, TimeDistributed, Dense
from tensorflow.keras.models import Sequential

modelo = Sequential([
    TimeDistributed(Conv2D(32, (3, 3), activation='relu'), input_shape=(10, 64, 64, 3)),
    TimeDistributed(MaxPooling2D(pool_size=(2, 2))),
    LSTM(50),
    Dense(units=5, activation='softmax')
])

En este ejemplo, se emplean capas convolucionales dentro de una estructura TimeDistributed para procesar secuencias de 10 frames de video, seguido de una capa LSTM para capturar la dinámica temporal y una capa densa para clasificar en 5 categorías de acciones.

Sistemas de recomendación visual

Las CNN también se utilizan en sistemas de recomendación que analizan contenido visual para sugerir productos, películas o imágenes similares a las preferencias del usuario. Estos sistemas aprovechan las capacidades de las CNN para extraer características visuales que representan de manera precisa los elementos a recomendar.

from tensorflow.keras.applications import ResNet50
from tensorflow.keras.layers import Dense, GlobalAveragePooling2D
from tensorflow.keras.models import Model

base_model = ResNet50(weights='imagenet', include_top=False, input_shape=(224, 224, 3))
x = base_model.output
x = GlobalAveragePooling2D()(x)
features = Dense(units=128, activation='relu')(x)
modelo = Model(inputs=base_model.input, outputs=features)

Este modelo extrae características visuales utilizando ResNet50, las cuales pueden ser comparadas o utilizadas en algoritmos de recomendación para identificar elementos visualmente similares.

En conclusión, las redes convolucionales con Keras ofrecen una amplia gama de aplicaciones en distintos dominios, desde la visión por computadora hasta la medicina y el arte. Su flexibilidad, junto con la facilidad de implementación que proporciona Keras, las convierte en una herramienta indispensable para el desarrollo de soluciones avanzadas basadas en aprendizaje profundo.

Aprende TensorFlow GRATIS online

Todas las lecciones de TensorFlow

Accede a todas las lecciones de TensorFlow y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.

Introducción Al Deep Learning Y Redes Neuronales

TensorFlow

Introducción Y Entorno

Introducción A Tensorflow

TensorFlow

Introducción Y Entorno

Introducción A Keras

TensorFlow

Introducción Y Entorno

Redes Neuronales De Múltiples Capas

TensorFlow

Introducción Y Entorno

Algoritmo De Backpropagation

TensorFlow

Introducción Y Entorno

Implementación De Una Red Neuronal Con Numpy

TensorFlow

Introducción Y Entorno

Modelo Con Api Secuencial

TensorFlow

Construcción De Modelos Con Keras

Modelo Con Api Funcional

TensorFlow

Construcción De Modelos Con Keras

Subclases De Modelos

TensorFlow

Construcción De Modelos Con Keras

Capas En Keras

TensorFlow

Construcción De Modelos Con Keras

Funciones De Activación

TensorFlow

Construcción De Modelos Con Keras

Redes Neuronales Densas De Regresión

TensorFlow

Construcción De Modelos Con Keras

Redes Neuronales Densas De Clasificación Binaria

TensorFlow

Construcción De Modelos Con Keras

Redes Neuronales Densas De Clasificación Multiclase

TensorFlow

Construcción De Modelos Con Keras

Redes Convolucionales Cnn

TensorFlow

Construcción De Modelos Con Keras

Redes Recurrentes Rnn

TensorFlow

Construcción De Modelos Con Keras

Redes Neuronales Mixtas

TensorFlow

Construcción De Modelos Con Keras

Api Dataset

TensorFlow

Procesamiento De Datos

Manejo De Valores Faltantes

TensorFlow

Procesamiento De Datos

Encoding De Valores Categóricos En Continuos

TensorFlow

Procesamiento De Datos

Preprocesados De Escalado, Normalización Y Estandarización

TensorFlow

Procesamiento De Datos

Generación De Nuevas Características

TensorFlow

Procesamiento De Datos

Algoritmos De Optimización

TensorFlow

Entrenamiento Y Evaluación De Modelos

Técnicas De Validación

TensorFlow

Entrenamiento Y Evaluación De Modelos

Monitorización De Entrenamiento

TensorFlow

Entrenamiento Y Evaluación De Modelos

Redes Generativas Adversariales Gans

TensorFlow

Técnicas Avanzadas

Transformers

TensorFlow

Técnicas Avanzadas

Autoencoders

TensorFlow

Técnicas Avanzadas

Carga De Capas Ya Hechas

TensorFlow

Técnicas Avanzadas

Regularización De Modelos

TensorFlow

Herramientas Y Optimización

Hiperparámetros Con Keras Tuner

TensorFlow

Herramientas Y Optimización

Tensorboard

TensorFlow

Herramientas Y Optimización

Uso De Tensorflow Keras En Gpu

TensorFlow

Herramientas Y Optimización

Accede GRATIS a TensorFlow y certifícate

Objetivos de aprendizaje de esta lección

  • Comprender la estructura y funcionamiento de las capas convolucionales, pooling y de activación en las CNN.
  • Diseñar arquitecturas CNN eficientes con Keras para tareas como clasificación y segmentación de imágenes.
  • Implementar regularización, normalización y ajuste de hiperparámetros para mejorar la generalización del modelo.
  • Usar arquitecturas preentrenadas para transfer learning en tareas complejas.
  • Desplegar CNN en aplicaciones avanzadas como detección de objetos, análisis de videos y reconocimiento de gestos.