Roadmap to Computer Vision
This article is a translation of the original that appears on
KDnuggets:
https://www.kdnuggets.com/2020/10/roadmap-computer-vision.html
Thank you very much for allowing its publication in Spanish.
Muchas gracias por permitir su
publicación en español.
Hoja de ruta de la visión por computador
Share
Etiquetas: Computer
Vision, Convolutional Neural Networks, Data Preprocessing, Neural
Networks
Disfrute de esta introducción sobre los pasos más importantes que
componen un sistema de visión por computador, comenzando por cómo se procesan
previamente las imágenes, siguiendo por cómo se extraen las características y finalmente
cómo se realizan las predicciones.
Autor: Pier Paolo Ippolito, Universidad de
Southampton
Foto de Ennio Dybeli en Unsplash
Introducción
La visión por computador (VC) es hoy en día una de las principales aplicaciones
de la inteligencia artificial (por ejemplo el reconocimiento de imágenes, el
seguimiento de objetos, la clasificación multietiqueta). En este artículo, le acompañaré
a través de algunos de los pasos más importantes que componen un sistema de
visión por computador.
La siguiente es una presentación estándar del flujo de trabajo de un
sistema de visión por computador:
1.
Se introduce un conjunto de imágenes en el sistema.
2.
Se utiliza un extractor de características para extraer y preprocesar las
características de las imágenes.
3.
Un sistema de aprendizaje automático hace uso de las características
extraídas para entrenar un modelo y hacer predicciones.
A continuación, analizaremos brevemente algunos de los principales procesos
que tienen lugar en cada uno de estos tres pasos.
Introducción de imágenes en el sistema
Al intentar implementar un sistema de VC, debemos tener en cuenta dos
componentes principales: el hardware de adquisición de imágenes y el software
de procesamiento de las mismas. Uno de los principales requisitos para
implementar un sistema VC es probar su robustez. Nuestro sistema debería, de
hecho, ser invariable a los cambios ambientales (como cambios en la
iluminación, orientación, escalado) y ser capaz de realizar la tarea diseñada
de manera repetida. Para satisfacer estos requisitos, podría ser necesario
aplicar algún tipo de restricción al hardware o al software de nuestro sistema
(por ejemplo, controlar de forma remota el entorno de iluminación).
Una vez que un dispositivo hardware adquiere una imagen, hay muchas
formas posibles de representar numéricamente los colores (espacios de color)
dentro de un sistema de software. Dos de los espacios de color más conocidos son
RGB (rojo, verde, azul) y HSV (tono, saturación, valor). Una de las principales
ventajas de usar un espacio de color HSV es que al tomar solo los componentes
HS podemos hacer que la iluminación de nuestro sistema sea invariable (Figura
1).
Figura 1: espacios de color RGB versus
HSV [1]
Extractor de características
Preprocesado de imágenes
Una vez que una imagen entra en el sistema y se representa usando un espacio de
color, podemos aplicar diferentes operadores a la imagen para mejorar su
representación:
Operadores de puntos: utilizamos
todos los puntos de una imagen para crear una versión transformada de la imagen
original (para hacer explícito el contenido dentro de una imagen, sin cambiar
su contenido). Algunos ejemplos de operadores de puntos son: normalización de
intensidad, ecualización de histogramas y umbralización. Los operadores de
puntos se usan comúnmente para ayudar a que las personas visualicen mejor una
imagen, pero no necesariamente ofrecen alguna ventaja para un sistema de visión
por computadoro.
Operadores de grupo: en este caso,
tomamos un grupo de puntos de la imagen original para crear un único punto en
la versión transformada de la imagen. Este tipo de operación se realiza
normalmente mediante una convolución. Se pueden usar diferentes tipos de
kernels que se convolucionan con la imagen para obtener y transformar nuestro
resultado (Figura 2). Algunos ejemplos son: promedio directo, promedio
gaussiano y filtro de la mediana. La aplicación de una operación de convolución
a una imagen puede dar como resultado la disminución de la cantidad de ruido en
la imagen y mejorar el suavizado (aunque esto también puede terminar borrando
ligeramente la imagen). Dado que estamos usando un grupo de puntos para crear
un único punto nuevo en la nueva imagen, las dimensiones de la nueva imagen
serán necesariamente menores que la original. Una solución a este problema es
aplicar rellenos con ceros (estableciendo los valores de los píxeles a cero) o
utilizando una plantilla más pequeña en el borde de la imagen. Una de las
principales limitaciones del uso de la convolución es su velocidad de ejecución
cuando se trabaja con plantillas de gran tamaño. Una posible solución a este
problema es utilizar en su lugar la transformada de Fourier.
Figure 2: Convolución del kernel
Una vez preprocesada una imagen, podemos aplicar técnicas más
avanzadas para intentar extraer los bordes y las formas en la imagen mediante distintos
métodos, como la detección de bordes de primer orden (por ejemplo, el operador
de Prewitt, el operador de Sobel o el detector de borde Canny) y las transformaciones
de Hough.
Extracción de
características
Una vez preprocesada una imagen,
existen 4 tipos principales de morfologías de características que se pueden
extraer de la misma mediante el uso de un extractor de características:
- Características globales: toda la imagen se analiza como una unidad
y el extractor de características entrega un único vector de
características. Un sencillo ejemplo de una característica global puede
ser un histograma de valores de pixeles agrupados.
- Características basadas en cuadrículas o bloques: la imagen se divide en
diferentes bloques y las características se extraen de cada uno de los
bloques. Una de las principales técnicas que se utilizan para extraer
características de los bloques de una imagen es Dense SIFT (Scale
Invariant Feature Transform). Este tipo de características se utiliza
principalmente para entrenar modelos de aprendizaje automático.
- Características basadas en la región: la imagen se segmenta en
diferentes regiones (por ejemplo, utilizando técnicas como la creación de
umbrales o K-Means Clustering y luego se conectan en segmentos utilizando Connected
Components) y se extraen las características de cada una de estas
regiones. Las características se pueden extraer mediante el uso de
técnicas de descripción de regiones y límites (como son Moments y Chain
Codes).
- Características locales: se detectan varios puntos de interés
únicos en la imagen y las características se extraen analizando los
píxeles vecinos a los puntos de interés. Dos de los principales tipos de
puntos de interés que se pueden extraer de una imagen son las esquinas y
las manchas, que se pueden extraer mediante métodos como el detector Harris
& Stephens y el Laplacian of Gaussians. Las características finalmente
se pueden extraer de los puntos de interés detectados mediante el uso de
técnicas como SIFT (Scale Invariant Feature Transform). Las características
locales se utilizan normalmente para hacer coincidir imágenes con el
objetivo de crear una reconstrucción panorámica / 3D o para recuperar
imágenes de una base de datos.
Una vez extraído un conjunto de
características discriminatorias, podemos usarlas para entrenar un modelo de
aprendizaje automático para hacer inferencias. Los descriptores de
características se pueden aplicar fácilmente en Python utilizando bibliotecas
como OpenCV.
Aprendizaje automático
Uno de los principales conceptos utilizados en la visión por computador para
clasificar una imagen es el Bag of Visual Words (BoVW) (bolsa de palabras
visuales). Para elaborar una bolsa de palabras visuales, primero necesitamos
crear un vocabulario extrayendo todas las características de un conjunto de
imágenes (por ejemplo, usando características basadas en cuadrículas o
características locales). Sucesivamente, podemos contar la cantidad de veces
que aparece una característica extraída en una imagen y elaborar un histograma
de frecuencia a partir de los resultados. Utilizando el histograma de
frecuencia como plantilla básica, finalmente podemos clasificar si una imagen
pertenece a la misma clase o no comparando sus histogramas (Figura 3).
Este proceso se
puede resumir en los siguientes pasos:
- Primero elaboramos un vocabulario extrayendo las diferentes
características de un conjunto de datos de imágenes usando algoritmos de
extracción de características como SIFT y Dense SIFT.
- En segundo lugar, agrupamos todas las características de nuestro
vocabulario usando algoritmos como K-Means o DBSCAN y usamos los
centroides del grupo para resumir nuestra distribución de datos.
- Finalmente, podemos elaborar un histograma de frecuencia a partir
de cada imagen contando el número de veces que aparecen en la imagen
diferentes características del vocabulario.
Entonces, las
imágenes nuevas se pueden clasificar repitiendo este mismo proceso para cada imagen
que queremos clasificar, y a continuación usamos cualquier algoritmo de
clasificación para averiguar qué imagen en el vocabulario se parece más a la
imagen de prueba.
Figura 3: Bolsa de palabras
visuales [2]
Actualmente,
gracias a las arquitecturas de redes neuronales artificiales, como las redes
neuronales convolucionales (RNC) and redes neuronales artificiales recurrentes (RNAR),
ha sido posible idear un flujo de trabajo alternativo para la visión por computador
(Figure 4).
Figure 4: Computer Vision Workflow
[3]
En este caso, el algoritmo de aprendizaje profundo incorpora los pasos
de extracción de características y clasificación del flujo de trabajo de visión
por computador. Cuando se utilizan redes neuronales convolucionales, cada capa
de la red neuronal aplica las diferentes técnicas de extracción de
características según se hayan descrito (por ejemplo, la capa 1 detecta bordes,
la capa 2 encuentra formas en una imagen, la capa 3 segmenta la imagen, etc.)
antes de proporcionar los vectores de características al clasificador de capa
densa.
Otras aplicaciones del aprendizaje automático en la visión por
computadora incluyen áreas como la clasificación de múltiples etiquetas y el
reconocimiento de objetos. En Multilabel Classification (clasificación
multietiqueta), nuestro objetivo es elaborar un modelo capaz de identificar
correctamente cuántos objetos hay en una imagen y a qué clase pertenecen. En Object
Recognition (reconocimiento de objetos), en cambio, nuestro objetivo es llevar
este concepto un paso más allá al identificar también la posición de los
diferentes objetos en la imagen.
Contacto
Si quiere estar al día en mis últimos artículos y proyectos, sígame en Medium y suscríbase a
mi lista
de correo. Estos son mis datos de contacto:
·
Linkedin
·
GitHub
·
Kaggle
Bibliografía
[1] Robot modular que se utiliza para limpiador de playas, Felippe Roza. Researchgate.
Se accede en: https://www.researchgate.net/figure/RGB-left-and-HSV-right-color-spaces_fig1_310474598
[2] Bolsa de palabras visuales en OpenCV, Vision & Graphics Group. Jan
Kundrac. Se accede en: https://vgg.fiit.stuba.sk/2015-02/bag-of-visual-words-in-opencv/
[3] Aprendizaje profundo vs. visión tradicional por computador. Haritha
Thilakarathne, NaadiSpeaks.
Se accede en: https://naadispeaks.wordpress.com/2018/08/12/deep-learning-vs-traditional-computer-vision/
Biografía: Pier Paolo Ippolito es estudiante
de último año de maestría en inteligencia artificial en la Universidad de
Southampton. Es un entusiasta de la inteligencia artificial, es científico de
datos y desarrollador de RPA.
Original. Publicado de
nuevo con el correspondiente permiso.
Enlaces relacionados:
·
Roadmap to Natural Language Processing (NLP)