En artículos anteriores hemos hablado de las Redes Convolucionales, de las Redes LSTM y de las Redes Transformer, que son diferentes tipos de Redes Neuronales que han permitido realizar desarrollos impresionantes en diferentes áreas, incluida la Visión por Computador.
De hecho, en la Academia Online se encuentra el curso Fundamentos de Deep Learning con Python, en donde vemos toda la teoría y la práctica relacionada con este tipo de modelos de Inteligencia Artificial.
El propósito de este artículo es dar una introducción general a la Visión por Computador y a los principales tipos de aplicaciones de este campo de la Inteligencia Artificial.
Así que comencemos con lo esencial: entendiendo qué es la Visión por Computador y cómo se relaciona con el Deep Learning, es decir con los diferentes tipos de Redes Neuronales existentes en la actualidad.
¿Qué son la Visión por Computador y el Deep Learning?
La visión por computador es un campo de la Inteligencia Artificial que busca lograr que los computadores puedan interpretar y “comprender” la información de tipo visual de manera similar a como lo hacemos nosotros los seres humanos.
Es decir que la idea de la visión por computador es lograr que los computadores logren extraer información relevante de imágenes y videos, generalmente, para realizar diferentes tipos de tareas (de las cuales vamos a hablar en un momento).
Por otra parte, el Deep Learning es un campo del aprendizaje de máquina (o Machine Learning) y de la Inteligencia Artificial que se enfoca en la implementación de sistemas basados en Redes Neuronales.
Y este campo de la Inteligencia Artificial ha comenzado a jugar un papel importante en la Visión por Computador, pues ha permitido crear diferentes sistemas que en muchos casos lograr superar la capacidad del ser humano al momento de extraer y procesar información proveniente de imágenes y videos.
Así que ya tenemos una idea clara de lo que es la visión por computador y de su relación con el Deep Learning. Entonces a continuación vamos a ver las principales aplicaciones de Visión por Computador que se pueden desarrollar precisamente con ayuda del Deep Learning.
Aplicaciones de la Visión por Computador
Clasificación de imágenes
La primera tarea o aplicación de la Visión Computador es a la vez la más sencilla de todas: la clasificación de imágenes.
La idea básica es que se presentan al modelo (usualmente una Red Convolucional o un Vision Transformer) y el modelo se encarga de predecir a la salida la categoría a la que pertenece cada una de las imágenes:

Y la clasificación de imágenes tiene muchas aplicaciones por ejemplo en los ámbitos de la salud (para la clasificación de imágenes médicas) o en entornos industriales (para por ejemplo detectar productos con anomalías resultado del proceso de fabricación).
Detección de objetos
Una segunda aplicación de la Visión por Computador es la detección de objetos.
En esta tarea le presentamos al modelo una imagen y el modelo se encarga de detectar la ubicación exacta de los objetos de interés dentro de dicha escena:

Así, en la imagen anterior podemos ver que la escena (es decir la imagen) contiene varios tipos de objetos pero en este ejemplo en particular lo que interesa es determinar la ubicación dentro de la imagen de dos tipos de objetos: «peatón» y «vehículo».
Y con este sencillo ejemplo podemos ver que en esencia la detección de objetos combina dos tareas:
- La localización de los objetos, que equivale a encontrar el «bounding box» que delimita las coordenadas del objeto en la imagen (los recuadros verdes y amarillos en la imagen anterior)
- La clasificación de cada objeto detectado, para indicar la categoría a la que pertenecen los objetos de interés (en la imagen anterior se trata de las categorías «peatón» y «vehículo»)
Esta detección de objetos es por ejemplo la base de aplicaciones como el desarrollo de vehículos autónomos o también el procesamiento de imágenes médicas, entre otras.
Verificación e identificación de rostros
En la verificación de rostros (o reconocimiento facial) el sistema analiza una imagen que contiene el rostro de una persona y determina si es quien dice ser:

Un ejemplo de la verificación de rostros son algunas aplicaciones de entidades bancarias disponibles en los teléfonos móviles: durante el registro toman varias imágenes de nuestro rostro y al momento de usar la aplicación en ocasiones para acceder a la cuenta bancaria debemos hacerlo precisamente mediante la verificación de nuestro rostro.
En estos sistemas (como vemos en la imagen anterior) un modelo de Deep Learning se encarga de extraer una representación vectorial de la imagen de entrada y compara dicha representación vectorial con representaciones de referencia obtenidas previamente.
Para ver cómo funciona esto en la práctica sugiero el tutorial de Reconocimiento Facial con Machine Learning en Python, disponible acá en el sitio web.
Y una segunda aplicación similar a la anterior es la identificación de rostros. En esta tarea lo que se intenta es determinar quién es la persona que aparece en la imagen:

Así, en este caso el sistema intenta determinar a qué persona dentro de una base de datos de referencia corresponde la imagen de entrada.
En el fondo la manera de abordar este problema es similar a la verificación de rostros, es decir que el sistema calcula y compara la representación vectorial de la imagen de entrada con las representaciones de referencia de diferentes personas para determinar si hay posibles coincidencias o no.
Y de hecho, estos dos sistemas (la verificación y la identificación de rostros) hacen uso de un sistema de detección de rostros (que también se basa por ejemplo en Redes Convolucionales) que se encarga de detectar las regiones de una imagen que contienen un rostro. De hecho, esta detección de rostros es un paso previo a la verificación o la identificación y de esta aplicación hablo en detalle en el artículo detección de rostros con Machine Learning disponible acá en el sitio web.
Segmentación de imágenes
La segmentación de imágenes es similar a una tarea de clasificación, pero en este caso no se asigna una categoría a la totalidad del contenido de la imagen sino que la clasificación se hace a nivel de pixeles:

Así, en la figura de arriba, la imagen de entrada es procesada por el sistema y a la salida genera lo que se conoce como una máscara de segmentación.
Esta máscara de segmentación es una imagen del mismo tamaño de la original pero donde cada pixel ha sido asignado a una categoría en particular. Un ejemplo de esta máscara de segmentación se puede ver en la parte inferior de la figura anterior.
Y la categoría asignada a cada pixel depende del tipo de aplicación. Por ejemplo, volviendo al caso de la imagen anterior, podríamos tener las etiquetas «árbol», «edificaciones», «vehículo», «vía» y «andén», entre otras:

Si te interesa aprender más acerca de la segmentación te sugiero revisar la práctica 3 del curso Fundamentos de Deep Learning con Python (disponible acá en la Academia Online) donde vemos en detalle cómo construir desde cero un sistema de segmentación de imágenes basado en Redes Convolucionales.
Reconocimiento de caracteres (OCR: Optical Character Recognition)
El OCR es otra de las aplicaciones más comunes de la Visión por Computador.
La idea básica es que le presentamos al sistema una imagen o cualquier otro tipo de documento (incluyendo archivos PDF) que contiene texto y el modelo se encarga el texto presente en ese archivo fuente. Y lo importante es que este texto extraído está en formato editable:

En el fondo muchos de estos sistemas hacen uso de Redes Convolucionales en combinación con Redes LSTM o incluso Redes Transformer.
El seguimiento de objetos
El seguimiento de objetos sigue el mismo principio de la detección de objetos vista anteriormente.
Sin embargo, en la detección de objetos lo que nos interesa es detectar un mismo tipo de objeto en una secuencia de imágenes (es decir en un video):

Así por ejemplo, en la imagen anterior lo que interesa en esta aplicación es determinar la ubicación de cada vehículo dentro de cada frame de una secuencia de video.
Descripción de imágenes
En la descripción de imágenes (o image captioning) el sistema toma como entrada una imagen y genera a la salida su correspondiente descripción en formato texto:

En la actualidad este tipo de aplicaciones se implementan haciendo uso de Grandes Modelos de Lenguaje multimodales.
La super-resolución
La super resolución es una técnica de restauración de imágenes en donde lo que se busca es incrementar la resolución de una imagen.
Es decir, si por ejemplo tenemos una imagen de 600×600 pixeles, lo que se busca en la super-resolución es incrementar este número de pixeles (por ejemplo a 1200×1200) pero preservando o incluso mejorando los detalles de los elementos presentes en la imagen:

Este tipo de aplicación hace uso de Redes Convolucionales entrenadas precisamente para incrementar la resolución de una imagen mejorando a la vez su nivel de detalle.
Restauración y colorización de imágenes y videos
En la restauración el objetivo es tomar imágenes (generalmente antiguas) que contienen artefactos (como manchas o porciones eliminadas que no son propias de la imagen) y llevarlas a un sistema que intente recuperar algunas de las características originales de dicha imagen:

Por su parte, en la colorización se toman imágenes que originalmente fueron capturadas en blanco y negro y se llevan a un sistema que intenta añadir el color que hubiesen tenido originalmente:

Estas dos aplicaciones hacen uso igualmente de Redes Convolucionales y su aplicación se puede extender incluso a los videos para tareas de restauración y colorización.
Reconocimiento de actividades
En este tipo de aplicación se usan Redes Convolucionales y Redes Neuronales que, en conjunto, son capaces de analizar secuencias de video y extraer puntos de interés de diferentes partes del cuerpo humano con el fin de determinar el tipo de actividad que está realizando una persona, lo cual tiene aplicaciones por ejemplo en el desarrollo de sistemas de vigilancia (pues permite detectar actividades sospechosas):

Estimación de pose
La estimación de pose es una tarea similar al reconocimiento de actividades. En este caso lo que se busca es detectar puntos de interés en diferentes partes del cuerpo para estimar la posición de la persona dentro de la escena.
Esto resulta de utilidad por ejemplo en sistemas de Inteligencia Artificial que permiten cuantificar la marcha de una persona o que pueden apoyar terapias de movimiento para la recuperación de la función física después de una lesión o de ciertas enfermedades:

La generación de imágenes
Esta es una de las aplicaciones más recientes de la Visión por Computador y consiste en desarrollar sistemas que aceptan como entrada la descripción de una imagen en formato texto y a la salida generan la imagen con las características deseadas:

En este caso se usan modelos generativos, como por ejemplo Stable Diffusion y Grandes Modelos de Lenguaje multimodales.
Conclusión
Muy bien, en este artículo hemos visto un panorama general de lo que es la Visión por Computador así como algunas de sus principales aplicaciones en la actualidad.
Y además vimos el papel y el potencial que tiene el Deep Learning en el desarrollo de este tipo de aplicaciones y especialmente las Redes Convolucionales y los modelos basados en Redes Transformer, que son la base de la mayoría de sistemas de Visión por Computador existentes en la actualidad.
