[Cognitive Services] Explorando el Custom Vision Service

Traducido desde:
https://msdn.microsoft.com/en-us/magazine/mt829704

Uno de los servicios cognitivos más fascinantes disponibles en Microsoft Azure es el Custom Vision Service, que permite a los usuarios crear fácilmente modelos personalizados de visión por computadora. Tradicionalmente, el entrenamiento de un clasificador de imágenes requería miles, sino decenas de miles, de imágenes por clase para generar un modelo lo suficientemente preciso para su uso práctico. Además, también necesitarías una comprensión sólida de la mecánica de las redes neuronales. El Custom Vision Service proporciona una interfaz web fácil de usar que enmascara esta complejidad subyacente.

Mejor aún, el Custom Vision Service puede crear clasificadores de imágenes personalizados bastante precisos con tan solo 15 o 20 imágenes por clase, aunque la documentación recomienda un mínimo de 50 imágenes por clase. Generalmente, la calidad del clasificador de imágenes mejorará con más imágenes de entrenamiento. El Custom Vision Service también expone modelos entrenados a través de una API REST para simplificar la implementación de estos modelos.

En la conferencia Build 2018, una de las demostraciones principales involucró un vehículo aéreo no tripulado, o dron, volando sobre una serie de tuberías para detectar defectos y problemas de mantenimiento. En la demostración, un dron transmitía el vídeo desde su cámara a una computadora portátil. La computadora portátil evaluó las imágenes en comparación con un modelo de visión personalizado entrenado, que alertó al operador de drones de cualquier defecto que se vea en las tuberías. Para este artículo, voy a imitar un modelo de mantenimiento aumentado de inteligencia artificial similar para detectar problemas con las vías del tren. Para hacerlo, exploraré Custom Vision Service y demostraré lo fácil que es agregar una clasificación de imagen personalizada a cualquier aplicación o sitio web.

Abasteciendo Imágenes para el Entrenamiento

La creación de un modelo de visión por computadora con el Servicio de visión personalizada implica tres pasos simples:
  • Suba un conjunto de imágenes y etiquételas.
  • Entrene y genere el modelo haciendo clic en el botón Train (“Entrenar”).
  • Use la interfaz web o las API REST para evaluar el rendimiento del modelo.
En realidad, es así de fácil de comenzar. Pero debe tener cuidado al comenzar a buscar imágenes para su modelo en el que entrenar.

Recientemente, para una demostración de cliente, recopilé una serie de imágenes de vías de tren a través de Internet. Estas imágenes incluyen las vías normales del tren y las que tienen defectos severos. Con tan solo 30 imágenes, pude generar un modelo de visión personalizado para detectar defectos de seguimiento con aproximadamente un 80 por ciento de precisión como parte de mi presentación. Por impresionante que sea, me apresuré en señalarle al cliente que cualquier modelo de clasificación de imágenes listo para la producción requeriría imágenes de las vías del tren en una variedad de diversas condiciones de iluminación, ángulos, etc. Esta diversidad de datos de clasificación reduce la probabilidad de que el algoritmo aísle las características incorrectas de las imágenes de entrenamiento, lo que causaría estragos en los resultados.

Existe una historia de advertencia clásica, y posiblemente apócrifa, sobre el entrenamiento de redes neuronales. La leyenda explica a qué se enfrentaron los investigadores en los años ochenta cuando el ejército de los EE. UU. Decidió entrenar una red neuronal para detectar tanques. Según la historia, la red neuronal se comportó muy bien frente a los datos de prueba como parte del experimento. Sin embargo, cuando la red neuronal recibió nuevas imágenes para clasificar, funcionó terriblemente.

Los investigadores quedaron estupefactos hasta que se dieron cuenta de que todas las imágenes que contenían tanques habían sido tomadas en días nublados, mientras que todas las imágenes que carecían de tanques se tomaron en días soleados. La red neuronal separó las dos clases de fotos y eligió distinguir los dos conjuntos en función del color del cielo en lugar de la presencia de un tanque. Obviamente, esto no es lo que el Ejército necesitaba. Para una exploración completa de la historia de detección de tanques, puede consultar el escrito original de Neil Fraser en bit.ly/2llxudb, pero esta parte de su artículo vale la pena citar aquí:

“Es una ilustración perfecta del mayor problema detrás de las redes neuronales. Con cualquier red entrenada automáticamente con más de unas pocas docenas de neuronas es prácticamente imposible de analizar y comprender. Uno no puede decir si una red ha memorizado entradas, o está ‘engañando’ de alguna otra manera”.

Aunque el artículo se actualizó por última vez en 2003, esta cita sigue siendo válida hoy. Se está trabajando para comprender mejor el funcionamiento interno de las redes neuronales complejas, pero este esfuerzo está en curso y está apenas más allá de su fase naciente. La mejor práctica actualmente es obtener datos que contengan un conjunto variado de datos de entrenamiento. Esto ayuda al algoritmo a distinguir las imágenes en función de las variables correctas.

Para evitar problemas de derechos de autor de imágenes, he decidido aprovechar la gran colección de trenes de juguete de mis hijos para este artículo. Esto también me permite crear imágenes de entrenamiento y prueba rápidamente. Tomé 34 imágenes y las dividí en tres carpetas llamadas Roto, Normal y Prueba. Las imágenes con las vías del tren “rotas” están en la carpeta Roto, y las imágenes con pistas contiguas están en la carpeta Normal. Elegí aleatoriamente una serie de imágenes para probar el modelo y las coloqué en la carpeta Prueba. Con mis imágenes de origen seleccionadas y etiquetadas, es hora de crear un modelo.

Creating the Model

En un navegador, voy a customvision.ai y hago clic en el botón Sign In para iniciar sesión con mi cuenta de Microsoft. Una vez que haya iniciado sesión, hago clic en New project para crear un nuevo proyecto de visión personalizado.

En el diálogo que sigue, ingreso “Toy Trains” para el nombre del proyecto y una breve descripción del proyecto. Dejo la lista desplegable de Resource Group en la configuración predeterminada de Limited trial, y me aseguro de que los botones de opción para Project Types y Domains estén configurados en Clasificación y General, respectivamente. A continuación, hago clic en el botón Create project para crear un nuevo proyecto de visión personalizado.

Subiendo las imágenes

Una vez que se crea el proyecto, el sitio web le pide que cargue imágenes. Hago clic en Add Images y, en el siguiente cuadro de diálogo, hago clic en Browse local files para encontrar las imágenes para cargar. Primero, cargo las imágenes en la carpeta “Broken” seleccionándolas todas y haciendo clic en Abrir en el cuadro de diálogo de navegación. En el cuadro de texto debajo de las imágenes, ingreso el término “Broken” y hago clic en el signo más azul para etiquetar las imágenes con la etiqueta “Broken”. A continuación, hago clic en el botón Upload para cargar las 15 imágenes. A continuación, hago clic en Listo para finalizar este paso.

Ahora que se cargan las imágenes de las vías del tren rotas, es hora de cargar las imágenes en la carpeta Normal. Para hacer esto, hago clic en el ícono en la esquina superior izquierda del panel con el signo más en él. Repito los pasos anteriores para cargar las imágenes de entrada, excepto que esta vez, elijo las imágenes en la carpeta “Normal” y etiqueto las imágenes con la etiqueta “Normal”. Haga clic en el botón Upload para transferir las imágenes y luego haga clic en Done para cerrar el cuadro de diálogo.

Con todas las imágenes de muestra cargadas y etiquetadas, es hora de entrenar y probar el modelo.

Entrenando el Modelo

Hacia la parte superior de la página, hay un botón verde con engranajes. Hago clic en esto para entrenar un modelo con las imágenes actualmente etiquetadas. Tarda uno o dos minutos antes de que la capacitación se complete y la página web regrese con las métricas de desempeño del modelo.

Las dos métricas principales que se muestran son precision y recall. Precision indica con qué frecuencia un resultado predicho es correcto, mientras que recall mide el porcentaje de la frecuencia con la que una etiqueta predicha fue correcta. En otras palabras, recall indica que cuando la respuesta correcta es “Broken”, con qué frecuencia el modelo predecirá “Broken”. Para obtener una explicación más detallada de la terminología de la Matriz de confusión, lea la “Guía simple sobre la terminología de la matriz de confusión” en bit.ly/2IbRoAi

Probando el Modelo

Ahora es el momento de probar el modelo en las imágenes reservadas para las pruebas y ver qué tan bien funcionará el modelo cuando se presente con nuevas imágenes. A la derecha inmediata del botón de entrenamiento verde, hay un botón etiquetado como Quick Test. Hago clic en esto para abrir el cuadro de diálogo de prueba y luego en el botón Browse local files para que aparezca el cuadro de diálogo de carga de archivos. Uso este cuadro de diálogo para seleccionar una imagen en la carpeta “Prueba” y hago clic en “Abrir” para cargar el archivo. Después de un momento, el algoritmo mostrará sus resultados después de evaluar la imagen. La siguiente imagen muestra que esta imagen tiene un 79.2 por ciento de probabilidad de ser una pista Normal y un 60.2 por ciento de probabilidad de ser Rota. Recuerde que para este proyecto, Normal significa que la pista no está rota o es contigua.

Ejecuto la prueba nuevamente con otra imagen de una pista rota, al hacer clic de nuevo en el botón Examinar archivos locales. Esta vez escogí una imagen de un conjunto de pistas rotas. El modelo informa que hay un 95.9 por ciento de posibilidades de que esta sea una pista rota y solo el 11.2 por ciento de que la pista sea normal. Probé el modelo con el resto de los archivos en la carpeta Prueba para tener una idea de dónde funciona bien el modelo y dónde tiene problemas para identificar el estado correcto de las pistas.
Para una mayor experimentación, realizo una búsqueda de imágenes en Internet y copio la URL de la imagen y la pego en el cuadro de texto de la interfaz de usuario de prueba. Estas imágenes representan vías de tren desde diferentes ángulos y en diferentes superficies en condiciones de iluminación a diferencia del conjunto de imágenes de entrenamiento. Esto proporcionará una perspectiva de cómo funcionan las redes neuronales y por qué un conjunto diverso de datos de muestra es crucial para el éxito de un modelo listo para la producción. Las siguientes tres URL apuntan a algunas imágenes de ejemplo que encontré en línea (observe cómo el modelo clasifica cada una de las imágenes):
Además, es útil saber cómo se comportará el clasificador cuando se le proporcione una imagen fuera de su alcance. Por ejemplo, ¿cómo funcionará este clasificador, diseñado para determinar el estado de las vías del tren de juguete, cuando se le presente una imagen de un letrero de neón? Esto se conoce como manejo de imagen negativo, y un modelo efectivo debería predecir valores cercanos a cero en estos casos. Para probar esto, introduzco la siguiente URL en el cuadro de texto: http://datadriven.tv/wp-content/uploads/2018/05/50k.png. Mi modelo predictivo produjo un resultado de 1.7 por ciento para Normal y 0 por ciento para “Broken”.

Yendo más lejos

Para los fines de este ejemplo, creé un sistema de clasificación de imágenes de dos clases, donde el modelo solo tenía que etiquetar las imágenes de las vías del tren de juguete como rotas o normales. Sin embargo, puedo crear modelos más complejos. Actualmente, el nivel S0 (estándar) de Custom Vision Service puede admitir hasta 250 etiquetas únicas, lo que significa que puede capacitarse para clasificar 250 etiquetas diferentes. Además, el servicio puede manejar hasta 50,000 imágenes por proyecto.

Además, los modelos generados por el Custom Vision Service se pueden exportar para su uso en dispositivos informáticos de última generación y no dependen del acceso al servicio en la nube. Esto significa que podría cargar el modelo en un dispositivo y clasificar imágenes en un escenario fuera de línea. Actualmente, Custom Vision Service admite exportaciones de modelos en tres formatos: TensorFlow para dispositivos Android, CoreML para dispositivos iOS y ONNX para dispositivos Windows. Además, el Servicio de visión personalizada puede crear un contenedor de Windows o Linux que incorpore un modelo y un código de TensorFlow para llamar a la API de REST. Para obtener más detalles sobre la exportación de modelos para ejecutar dispositivos de borde, asegúrese de consultar la documentación en bit.ly/2K4ibjL.

En este artículo, demostré lo fácil que es comenzar con el Servicio de Visión Personalizada y construir un modelo de visión por computadora con un conjunto limitado de datos de capacitación. Un posible uso de esta tecnología sería acceder a los datos de imagen de las cámaras de tráfico y entrenar un modelo para detectar diferentes niveles de congestión basados ​​únicamente en esos datos. Anteriormente, la automatización de dicha tarea sería desalentadora, ya que requería conocimiento especializado y una gran cantidad de datos de entrenamiento etiquetados. Sin embargo, el Custom Vision Service combina una tecnología de red neuronal de vanguardia con una interfaz fácil de usar para crear una herramienta que abre la visión artificial a un uso más generalizado.

Agregue un comentario

Su dirección de correo no se hará público.