Introducción a la visión por computadora: qué es y cómo funciona

Usar software para analizar el contenido visual del mundo es una revolución tan grande en informática como lo era el móvil hace 10 años, y proporcionará una ventaja importante para que los desarrolladores y las empresas construyan productos increíbles.

La visión por computadora es el proceso de usar máquinas para comprender y analizar imágenes (fotos y videos). Si bien este tipo de algoritmos han existido en varias formas desde la década de 1960, los recientes avances en Machine Learning, así como los saltos adelante en el almacenamiento de datos, las capacidades informáticas y los dispositivos de entrada baratos de alta calidad, han impulsado mejoras importantes en lo bien que nuestro software puede explorar este tipo de contenido.

¿Qué es la visión por ordenador?

La visión por computadora es el proceso de usar máquinas para comprender y analizar imágenes (fotos y videos). Si bien este tipo de algoritmos han existido en varias formas desde la década de 1960, los recientes avances en Machine Learning, así como los saltos adelante en el almacenamiento de datos, las capacidades informáticas y los dispositivos de entrada baratos de alta calidad, han impulsado mejoras importantes en lo bien que nuestro software puede explorar este tipo de contenido.

La visión por computadora es el nombre principal amplio para cualquier cálculo que involucre contenido visual, es decir, imágenes, videos, iconos y cualquier otra cosa con píxeles involucrados. Pero dentro de esta idea principal, hay algunas tareas específicas que son bloques de construcción básicos:

  • En la clasificación de objetos, entrena un modelo en un conjunto de datos de objetos específicos, y el modelo clasifica nuevos objetos como pertenecientes a una o más de sus categorías de entrenamiento.
  • Para la identificación del objeto, su modelo reconocerá una instancia específica de un objeto, por ejemplo, analizando dos caras en una imagen y etiquetando una como Tom Cruise y otra como Katie Holmes.

Una aplicación clásica de la visión por computadora es el reconocimiento de escritura a mano para digitalizar contenido escrito a mano (exploraremos más casos de uso a continuación). Fuera del reconocimiento justo, otros métodos de análisis incluyen:

  • El análisis de movimiento por vídeo utiliza visión por computadora para estimar la velocidad de los objetos en un vídeo, o la propia cámara.
  • En la segmentación de imágenes, los algoritmos particionan las imágenes en múltiples conjuntos de vistas.
  • La reconstrucción de escenas crea un modelo 3D de una escena introducida a través de imágenes o vídeo (consulte Selva).
  • En la restauración de imágenes, el ruido como el desenfoque se elimina de las fotos utilizando filtros basados en Machine Learning.

Cualquier otra aplicación que implique la comprensión de píxeles a través del software puede etiquetarse de forma segura como visión por computadora.


Cómo funciona la visión por ordenador

Una de las principales preguntas abiertas tanto en Neurociencia como en Machine Learning es: ¿cómo funcionan exactamente nuestros cerebros y cómo podemos aproximarnos a eso con nuestros propios algoritmos? La realidad es que hay muy pocas teorías operativas y exhaustivas de la computación cerebral; por lo tanto, a pesar del hecho de que se supone que las redes neuronales “imiten la forma en que funciona el cerebro”, nadie está muy seguro de si eso es realmente cierto. Jeff Hawkins tiene un libro completo sobre este tema llamado Sobre la inteligencia.

La misma paradoja se aplica a la visión por computadora: dado que no estamos decididos sobre cómo el cerebro y los ojos procesan las imágenes, es difícil decir qué tan bien se aproximan los algoritmos utilizados en la producción a nuestros propios procesos mentales internos. Por ejemplo, los estudios han demostrado que algunas funciones que pensamos que ocurren en el cerebro de las ranas realmente tienen lugar en los ojos. Estamos muy lejos de los anfibios, pero existe una incertidumbre similar en la cognición humana.

Las máquinas interpretan las imágenes de manera muy simple: como una serie de píxeles, cada uno con su propio conjunto de valores de color. Considere la imagen simplificada a continuación y cómo los valores de escala de grises se convierten en una simple matriz de números:

Fuente: Openframeworks

Piense en una imagen como una cuadrícula gigante de diferentes cuadrados o píxeles (esta imagen es una versión muy simplificada de lo que parece Abraham Lincoln o un Dementor). Cada píxel de una imagen puede ser representado por un número, generalmente de 0 a 255. La serie de números de la derecha es lo que el software ve cuando ingresa una imagen. Para nuestra imagen, hay 12 columnas y 16 filas, lo que significa que hay 192 valores de entrada para esta imagen.

Cuando empezamos a añadir color, las cosas se complican. Las computadoras generalmente leen el color como una serie de 3 valores – rojo, verde y azul (RGB) – en esa misma escala de 0 a 255. Ahora, cada píxel en realidad tiene 3 valores para que el ordenador los almacene además de su posición. Si coloreáramos al presidente Lincoln (o el peor miedo de Harry Potter), eso llevaría a 12 x 16 x 3 valores, o 576 números.

Fuente: Xaraxona

Para tener alguna idea de lo computacionalmente caro que es esto, considere este árbol:

  • Cada valor de color se almacena en 8 bits.
  • 8 bits x 3 colores por píxel = 24 bits por píxel.
  • Una imagen de tamaño normal de 1024 x 768 x 24 bits por píxel = casi 19 millones de bits, o aproximadamente 2,36 megabytes.

Eso es mucha memoria para requerir para una imagen, y muchos píxeles para que un algoritmo itere. Pero para entrenar a un modelo con una precisión significativa, especialmente cuando hablas de aprendizaje profundo, generalmente necesitarías decenas de miles de imágenes, y cuanto más mejor. Incluso si usaras Transfer Learning para usar los conocimientos de un modelo ya entrenado, todavía necesitarías unos pocos miles de imágenes para entrenar las tuyas.

Con la gran cantidad de potencia informática y almacenamiento necesarios solo para entrenar modelos de aprendizaje profundo para la visión por computadora, no es difícil entender por qué los avances en esos dos campos han impulsado el aprendizaje automático hasta tal grado.

Casos de uso comercial para visión por computadora

La visión por computadora es una de las áreas en Machine Learning donde los conceptos básicos ya se están integrando en los principales productos que utilizamos todos los días. Google está utilizando mapas para aprovechar sus datos de imagen e identificar nombres de calles, negocios y edificios de oficinas. Facebook está usando la visión por computadora para identificar a las personas en las fotos y hacer una serie de cosas con esa información.

Pero no son solo las empresas tecnológicas las que aprovechan Machine Learning para aplicaciones de imagen. Ford, el fabricante de automóviles estadounidense que ha existido literalmente desde principios de 1900, está invirtiendo mucho en vehículos autónomos (AV). Gran parte de la tecnología subyacente en los AV se basa en analizar las múltiples transmisiones de vídeo que entran en el automóvil y en el uso de la visión por computadora para analizar y elegir un camino de acción.

Otra área importante en la que la visión por computadora puede ayudar es en el campo médico. Gran parte del diagnóstico es procesamiento de imágenes, como lectura de rayos X, resonancias magnéticas y otros tipos de diagnóstico. Google ha estado trabajando con equipos de investigación médica para explorar cómo el aprendizaje profundo puede ayudar a los flujos de trabajo médicos, y ha hecho progresos significativos en términos de precisión. Parafraseando desde su página de investigación:

Colaborando estrechamente con médicos y sistemas internacionales de salud, desarrollamos un sistema de visión por computadora de última generación para leer imágenes de fondo de retina para la retinopatía diabética y determinamos que el rendimiento de nuestro algoritmo está a la par con los oftalmólogos certificados por la junta de los Estados Unidos. Recientemente hemos publicado algunas de nuestras investigaciones en el Journal of the American Medical Association hemos resumido los aspectos más destacados en una entrada de blog”.

Fuente: Investigación en Google

En una nota menos seria, este clip de Silicon Valley de HBO sobre el uso de la visión por computadora para distinguir a un perrito caliente de, bueno, cualquier otra cosa, fue bastante popular en las redes sociales.

Pero aparte de las cosas innovadoras, cada vez es más fácil integrar la visión por computadora en sus propias aplicaciones. Varios proveedores externos de alta calidad como Clarifai ofrecen una API simple para etiquetar y comprender imágenes, mientras que Kairos proporciona funcionalidad en torno al reconocimiento facial. Nos sumergiremos en los paquetes de código abierto disponibles para su uso a continuación.

visión por computadora y redes neuronales convolucionales

Gran parte del progreso realizado en la precisión de la visión por computadora en los últimos años se debe en parte a un tipo especial de algoritmo. Las redes neuronales convolucionales son un subconjunto de Deep Learning con algunas operaciones adicionales, y se ha demostrado que logran una precisión impresionante en tareas asociadas a imágenes.

Las redes neuronales convolucionales (CNN o ConvNets) utilizan los mismos conceptos principales de redes neuronales, pero agregan algunos pasos antes de la arquitectura normal. Estos pasos se centran en la extracción de características o en encontrar la mejor versión posible de nuestra entrada que produzca el mayor nivel de comprensión para nuestro modelo. Idealmente, estas características serán menos redundantes y más informativas que la entrada original.

CNN utiliza tres tipos de filtros para la extracción de características. Para más detalles y diagramas interactivos, el tutorial de Ujjwal Karn sobre el tema es excelente.

Convolución

Durante el proceso de convolución (tal vez por qué se llama CNN), los píxeles de la imagen de entrada son modificados por un filtro. Esto es solo una matriz (más pequeña que la matriz de píxeles original) por la que multiplicamos diferentes piezas de la imagen de entrada. La salida, a menudo llamada Mapa de Características, generalmente será más pequeña que la imagen original y teóricamente será más informativa.

ReLU

Este acrónimo de sonido futurista significa Unidad Lineal Rectificada, que es una función fácil de introducir la no linealidad en el mapa de características. Todos los valores negativos simplemente se cambian a cero, eliminando todo el negro de la imagen. La función formal es y = max(0, x).

Agrupación

En la agrupación, la imagen se escanea con un ancho establecido de píxeles, y el máximo, la suma o el promedio de esos píxeles se toman como una representación de esa parte de la imagen. Este proceso reduce aún más el tamaño de los mapas de características en un factor del tamaño que se agrupa.

Todas estas operaciones – Convolution, ReLu y Pooling – a menudo se aplican dos veces seguidas antes de concluir el proceso de extracción de características. Los resultados de todo este proceso se pasan luego a una red neuronal para su clasificación. La arquitectura final tiene el siguiente aspecto:

Fuente: Ujjwal Karn

Si te has perdido en los detalles, no te preocupes. Solo recuerda:

  • Las redes neuronales convolucionales (CNN) son un tipo especial de aprendizaje profundo que funciona muy bien en tareas de visión por computadora
  • Se realiza mucho trabajo de preprocesamiento en las imágenes de entrada para que estén mejor optimizadas para las capas completamente conectadas de la red neuronal

¡Y eso es todo!


Visión por computadora sobre Algoritmia

Algorithmia facilita la implementación de aplicaciones de visión artificial como microservicios escalables. Nuestro mercado tiene algunos algoritmos para ayudar a hacer el trabajo:

  • SalNet identifica automáticamente las partes más importantes de una imagen
  • La detección de desnudez detecta desnudez en las imágenes
  • El reconocimiento de emociones analiza las emociones exhibidas en las imágenes
  • DeepStyle transfiere filtros de siguiente nivel a tu imagen
  • Reconocimiento facial… reconoce caras.
  • La memorizabilidad de la imagen juzga lo memorable que es una imagen.

Un flujo de trabajo típico para su producto podría implicar pasar imágenes de una cámara de seguridad al reconocimiento de emociones y izar una bandera si se exhibe alguna emoción agresiva, o usar Detección de Desnudez para bloquear imágenes de perfil inapropiadas en su aplicación web.

Para una exploración más detallada de cómo puede utilizar la plataforma Algorithmia para implementar tareas complejas y útiles de visión por computadora, consulte nuestro manual aquí.


Recursos de visión artificial

Paquetes y marcos

OpenCV – “OpenCV fue diseñado para la eficiencia computacional y con un fuerte enfoque en aplicaciones en tiempo real. Adoptado en todo el mundo, OpenCV tiene más de 47 mil personas de la comunidad de usuarios y un número estimado de descargas que supera los 14 millones. El uso va desde arte interactivo hasta inspección de minas, coser mapas en la web o a través de la robótica avanzada”.

SimpleCV – “SimpleCV es un marco de código abierto para crear aplicaciones de visión artificial. Con él, obtiene acceso a varias bibliotecas de visión artificial de alta potencia, como OpenCV, sin tener que aprender primero sobre profundidades de bits, formatos de archivo, espacios de color, gestión de búfer, valores propios o almacenamiento de matriz versus mapa de bits”.

Mahotas – “Mahotas es una biblioteca de visión por computadora y procesamiento de imágenes para Python. Incluye muchos algoritmos implementados en C++ para mayor velocidad mientras se opera en matrices numpy y con una interfaz Python muy limpia. Mahotas actualmente tiene más de 100 funciones para el procesamiento de imágenes y la visión por computadora y sigue creciendo”.

Openface – “OpenFace es una implementación de Python y Antorcha de reconocimiento facial con redes neuronales profundas y se basa en el documento de CVPR 2015 FaceNet: A Unified Embedding for Face Recognition and Clustering de Florian Schroff, Dmitry Kalenichenko y James Philbin en Google. Torch permite que la red se ejecute en una CPU o con CUDA”.

Ilastik – “Ilastik es una herramienta simple y fácil de usar para la clasificación, segmentación y análisis interactivos de imágenes. Está construido como un marco de software modular, que actualmente tiene flujos de trabajo para la clasificación automatizada (supervisada) a nivel de píxeles y objetos, seguimiento automatizado y semiautomatizado de objetos, segmentación semiautomática y conteo de objetos sin detección. Usarlo no requiere experiencia en el procesamiento de imágenes”.

Cursos y vídeos en línea

Introducción a la visión por computadora (Georgia Tech y Udacity) – “Este curso proporciona una introducción a la visión por computadora que incluye los fundamentos de la formación de imágenes, la geometría de imágenes de la cámara, la detección y coincidencia de características, la geometría multivista que incluye estéreo, la estimación y el seguimiento del movimiento y la clasificación. Nos centramos menos en el aspecto de aprendizaje automático del CV, ya que esa es realmente la teoría de clasificación que se aprende mejor en un curso de ML”.

Redes neuronales convolucionales (Deeplearning.ai y Coursera) – “Este curso te enseñará cómo construir redes neuronales convolucionales y aplicarlas a los datos de imagen. Gracias al aprendizaje profundo, la visión por computadora está funcionando mucho mejor que hace solo dos años, y esto está permitiendo numerosas aplicaciones emocionantes que van desde la conducción autónoma segura, el reconocimiento facial preciso y la lectura automática de imágenes radiológicas”.

Introducción a la visión por computadora (marrón) – “Este curso proporciona una introducción a la visión por computadora, que incluye los fundamentos de la formación de imágenes, la geometría de imágenes de la cámara, la detección y coincidencia de características, el estéreo, la estimación y el seguimiento del movimiento, la clasificación de imágenes, la comprensión de la escena y el aprendizaje profundo con redes neuronales. Desarrollaremos métodos básicos para aplicaciones que incluyen la búsqueda de modelos conocidos en imágenes, recuperación de profundidad desde estéreo, calibración de cámara, estabilización de imagen, alineación automatizada, seguimiento, detección de límites y reconocimiento”.

También hay una serie de buenas series de YouTube disponibles. Dos de las opciones más populares incluyen Fundamentos de la Visión por Computadora y una Introducción Gentil a la Visión por Computadora. También echa un vistazo al tutorial detallado de Algorithmia sobre el reconocimiento facial usando OpenFace.

Libros

Visión por computadora: Algoritmos y aplicaciones – “Computer Vision: Algorithms and Applications explora la variedad de técnicas comúnmente utilizadas para analizar e interpretar imágenes. También describe aplicaciones desafiantes del mundo real donde la visión se está utilizando con éxito, tanto para aplicaciones especializadas como imágenes médicas, como para tareas divertidas a nivel de consumidor, como la edición y costura de imágenes, que los estudiantes pueden aplicar a sus propias fotos y videos personales”.

Programación de la visión por computadora con Python (O’Reilly) – “Si quieres una comprensión básica de la teoría y los algoritmos subyacentes de la visión por computadora, esta introducción práctica es el lugar ideal para comenzar. Aprenderás técnicas para el reconocimiento de objetos, la reconstrucción 3D, la imagen estéreo, la realidad aumentada y otras aplicaciones de visión por computadora a medida que sigues ejemplos claros escritos en Python”.

Aprendizaje de OpenCV (O’Reilly) – “Aprender OpenCV te pone en medio del campo de la visión por computadora en rápida expansión. Escrito por los creadores de la biblioteca gratuita OpenCV de código abierto, este libro le presenta la visión por computadora y demuestra cómo puede crear rápidamente aplicaciones que permitan a las computadoras “ver” y tomar decisiones basadas en esos datos”.