WOT

Friday, October 30, 2020

Roadmap to Computer Vision - Hoja de ruta a la visión por computador

 


 
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 VisionConvolutional Neural NetworksData PreprocessingNeural 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:

  1. 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.
  2. 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.
  3. 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

·         Personal Blog

·         Personal Website

·         Medium Profile

·         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)

·         Accelerated Computer Vision: A Free Course From Amazon

·         Computer Vision Recipes: Best Practices and Examples

Saturday, October 24, 2020

Free From MIT: Intro to Computational Thinking and Data Science (Introducción al pensamiento computacional y a la ciencia de datos)

 

Free From MIT: Intro to Computational Thinking and Data Science

 

This article is a translation of the original that appears on KDnuggets: 

https://www.kdnuggets.com/2020/10/free-mit-intro-computational-thinking-data-science-python.html

Thank you very much for allowing its publication in Spanish.

Muchas gracias por permitir su publicación en español. 

 

 

Free From MIT: Intro to Computational Thinking and Data Science (Introducción al pensamiento computacional y a la ciencia de datos)

 



 

Share

Etiquetas: Computer ScienceCoursesData ScienceMITPython



Este curso gratuito del MIT le ayudará en su transición al pensamiento computacional y, en última instancia, a resolver problemas complejos de ciencia de datos.

https://www.kdnuggets.com/aps/e-sas-20m06.gif?ms979



 

Autor: Matthew Mayo, KDnuggets.

 

La programación es una parte importante de la ciencia de datos, así como los conceptos subyacentes de informática. Si planeamos implementar soluciones computacionales a los problemas de la ciencia de datos, está claro que la programación es de absoluta necesidad. Para facilitar a aquellas personas que buscan establecer o solidificar estas habilidades, y para empezar compartimos un excelente curso gratuito de Open Courseware del MIT.

 

Una vez que uno aprende lo básico de la programación, cambiar al pensamiento computacional es un buen paso en la transición hacia la resolución de problemas complejos del mundo real, incluso desde una perspectiva de ciencia de datos. Hoy compartimos Computational Thinking and Data Science (El pensamiento computacional y la ciencia de datos), otra oferta de cursos abiertos del MIT, de primer nivel, disponible de forma gratuita para cualquier persona interesada en aprender.

 



 

En el sitio web del curso se describe el mismo como:

[L] a continuación de 6.0001 Introduction to Computer Science and Programming in Python (6.0001 Introducción a la informática y la programación en Python) está destinada a estudiantes con poca o ninguna experiencia en programación. Su objetivo es proporcionar a los estudiantes una comprensión del papel que puede desempeñar la computación en la resolución de problemas y ayudar a los estudiantes, independientemente de su especialidad, a sentirse justificadamente seguros de su capacidad para escribir pequeños programas que les permitan lograr metas útiles. La clase usa el lenguaje de programación Python 3.5.

La versión de otoño de 2016 de este curso la imparten Eric Grimson, John Guttag y Ana Bell. En el curso se utiliza para la implementación únicamente Python como lenguaje de programación.

Los temas del programa de estudios se muestran a continuación:

1.    Introducción y problemas de optimización

2.    Problemas de optimización

3.    Modelos de teoría de grafos

4.    Pensamiento estocástico

5.    Paseos aleatorios

6.    Simulación Monte Carlo

7.    Intervalos de confianza

8.    Muestreo y error estándar

9.    Comprensión de los datos experimentales

10. Comprensión de los datos experimentales (cont.)

11. Introducción al aprendizaje automático

12. Agrupación

13. Clasificación

14. Pecados de clasificaciones y estadísticos

15. Pecados estadísticos y resumen

 

En particular me gusta cómo se ha dividido el curso aparentemente en secciones distintas. La primera sección (hasta la lección 6) pone el foco en conceptos computacionales. La siguiente sección (lecciones 7 a 10) se dedica a la estadística, y las lecciones restantes conforman una sección final sobre aprendizaje automático, aunque nunca se aleja mucho de la estadística, y acertadamente la retoma al final.

Esta estructura les brinda a los estudiantes la oportunidad de aprender estos conceptos sin confundirlos. Pensar de manera computacional no tiene nada que ver con el aprendizaje automático; facilita la división de un problema en problemas más pequeños y permite pensar en las formas más eficientes de resolverlos. Es una gran habilidad para desarrollar en cualquier aspecto de su vida o trabajo. Sin embargo, aunque no está intrínsecamente vinculada al aprendizaje automático, proporciona a los profesionales los conocimientos necesarios para comprender el funcionamiento interno de los algoritmos de aprendizaje automático, las soluciones a los problemas que utilizan estos algoritmos y cómo iterar y mejorar estas soluciones para hacerlas más eficientes, precisas y útiles.

La estadística siempre está cerca del centro de un problema de ciencia de datos o de su solución. La discusión de los errores de muestreo, los intervalos de confianza y el enfoque en la comprensión de los datos experimentales así como el posible uso indebido de los resultados del aprendizaje estadístico generalmente no reciben la atención que merecen en un curso introductorio de ciencia de datos, pero sí se hace en Intro to Computational Thinking and Data Science aparte de muchas otras cosas.

Añadir título


 

La versión Open Courseware de este curso incluye diapositivas de las conferencias y los necesarios archivosuna colección de problemas, lecturas (desafortunadamente, el texto del curso no es gratuito) y, en particular, videos de las conferencias. En este sentido, el curso que se ofrece gratuitamente puede considerarse realmente completo.

 

Este material también forma la base del curso edX del mismo nombre. Si está interesado en un entorno de aprendizaje más estructurado o un certificado verificado cuando haya terminado con el material del curso, puede inscribirse allí y seguir esta opción.

 

Cuando se combinan con Intro to Computer Science and Programming in Python del MIT, estos cursos gratuitos ofrecen un comienzo intensivo para alguien que esté aprendiendo los fundamentos de la programación, ciencias de la computación, Python, computación, estadística y aprendizaje automático, muchos de los ingredientes para una carrera de ciencia de datos exitosa.

 
Enlaces relacionados:

·         Free From MIT: Intro to Computer Science and Programming in Python

·         Going Beyond Superficial: Data Science MOOCs with Substance

·         Free Introductory Machine Learning Course From Amazon