5 pasos para crear e implementar redes neuronales de aprendizaje profundo

La utilización del aprendizaje profundo para simplificar y acelerar la implementación de la visión artificial.

Introducción

La frase “una imagen vale más que mil palabras” nunca fue tan cierta como ahora, si la aplicamos al ámbito de la visión artificial. Con el aprendizaje profundo, miles o incluso millones de líneas de códigos pueden reemplazarse simplemente por una red neuronal entrenada con imágenes y muy poca codificación.

La buena noticia es que el aprendizaje profundo ya no es un método que solo está disponible para los investigadores, los expertos o las personas que manejan grandes presupuestos. Hoy en día, muchas herramientas son gratuitas, los tutoriales son fáciles de encontrar y el coste del hardware es bajo; incluso el material de capacitación se encuentra disponible sin coste alguno. Esto aporta tanto oportunidades como amenazas, ya que surgen nuevos actores que alteran los nombres reconocidos y e incentiva a la innovación. También proporciona oportunidades para que sus sistemas de visión artificial realicen lo que antes era inimaginable. Por ejemplo, el aprendizaje profundo se puede utilizar para reconocer anomalías inesperadas, algo que por lo general es muy difícil o casi imposible de lograr con la codificación convencional.

Un beneficio digno de mencionar sobre la implementación de redes neuronales de aprendizaje es que permiten tomar decisiones perimetrales complejas con muy poco hardware y muy poco procesamiento de energía. Esto es posible gracias a los sistemas de bajo coste basados en dispositivos ARM o en la matriz de puertas lógicas programable en campo (FPGA, por sus siglas en inglés), y a las nuevas cámaras de inferencia, como la FLIR Firefly DL.

Este artículo cubre:

  • El glosario básico utilizado en el aprendizaje profundo
  • Los tipos de tareas de visión artificial compatibles con el aprendizaje profundo
  • Los 5 pasos para desarrollar e implementar una red neuronal para la inferencia perimetral
  • Las plataformas y las herramientas disponibles para comenzar
  • Consejos sobre cómo hacer más fácil el proceso
  • Posibles limitaciones a tener en cuenta sobre el aprendizaje profundo

Aprendizaje profundo: aspectos fundamentales

Se denomina aprendizaje profundo a un subconjunto del aprendizaje automático inspirado en la manera en la que funciona el cerebro humano. Se dice que es “profundo” por la existencia de varias “capas” de neuronas de distinto peso, que ayudan a que la red neuronal tome su decisión. El aprendizaje profundo puede dividirse en dos etapas: entrenamiento e inferencia.

Durante la fase de entrenamiento, el usuario define la cantidad de neuronas y de capas que tendrá la red neuronal y las expone en los datos de capacitación etiquetados. Con estos datos, la red neuronal aprende por sí misma qué cosas son “buenas” o “malas”. Por ejemplo, si el usuario clasifica frutas, deberá mostrarle a la red neuronal imágenes de frutas etiquetadas como “Grado A”, “Grado B”, “Grado C”, y así sucesivamente. Entonces la red neuronal descubre las propiedades de cada grado como el tamaño, la forma, el color, la consistencia del color, entre otros. No es necesario definir estas características de forma manual ni programar qué es demasiado grande o demasiado pequeño: la red neuronal lo hará por sí misma. Una vez que la etapa de entrenamiento finaliza, el resultado es una red neuronal capacitada.

El proceso de evaluar nuevas imágenes y utilizar una red neuronal para tomar decisiones se conoce como inferencia. Cuando se le presenta una nueva imagen a la red neuronal capacitada, proporcionará una inferencia (es decir, una respuesta) como “Grado A con un 95 % de seguridad”.

5 pasos para desarrollar una aplicación de aprendizaje profundo

En términos generales, el desarrollo de una aplicación de aprendizaje profundo se logra en 5 pasos. A continuación encontrará una descripción a grandes rasgos de cada paso:

Paso 1] Identificación de la función de aprendizaje profundo adecuada

En el ámbito del aprendizaje profundo, las tareas se clasifican según varias funciones. Las más comunes en cuanto a visión automática son las siguientes:

Clasificación

La aplicación más básica y fundamental del aprendizaje profundo es la clasificación. Este proceso consiste en clasificar imágenes en diferentes clases y agruparlas según sus propiedades comunes. Por ejemplo, se puede utilizar la clasificación durante el control de calidad para separar una pieza defectuosa en una línea de producción o cuando se llevan a cabo inspecciones de las soldaduras de las placas de circuito impreso (PCB, por sus siglas en inglés) como muestra la Fig.1 a continuación (utilizando una cámara de inferencia FLIR Firefly DL).

flir-firefly-pcb_solder_inspection.jpg

Fig.1. Clasificación utilizada para identificar soldaduras defectuosas mediante la FLIR Firefly DL.

Detección y localización

Otra tarea del aprendizaje profundo ideal para la visión artificial es la denominada detección y localización. Gracias a esta función, se pueden identificar características en una imagen y proporcionar coordenadas al cuadro delimitador para determinar su ubicación y tamaño. A modo de ejemplo, se puede utilizar para detectar si una persona rompe el parámetro de seguridad cerca de los robots de una línea de producción o identificar una pieza defectuosa en el sistema transportador de una línea de producción o ensamblaje.

Segmentación

El tercer tipo de aprendizaje profundo es la segmentación, que por lo general se utiliza para identificar a qué objetos corresponden los píxeles en una imagen. La segmentación es ideal para aplicaciones donde se necesita determinar el contexto de un objeto y su relación con otros objetos (por ejemplo, vehículos autónomos o el sistema de asistencia avanzado a la conducción, popularmente conocido como ADAS, por sus siglas en inglés).

Fig.2. Detección, localización y segmentación utilizada para identificar objetos y sus ubicaciones.

Detección de anomalías

Este tipo de tarea de aprendizaje profundo se puede utilizar para identificar regiones donde no coincide un patrón. Un ejemplo típico de una aplicación donde la detección de una anomalía puede ser de gran valor es la gestión de inventario y el control de existencias en las tiendas de alimentos, como se muestra en la Fig. 4. Esta aplicación implica la utilización de una cámara de inferencia para detectar y señalar los estantes vacíos o que pronto necesitarán reposición, lo que brinda notificaciones en tiempo real y mejora la eficiencia.

Paso 2] Selección de la plataforma

Una vez que el usuario determine la función de aprendizaje profundo que desea utilizar, necesitará un juego de herramientas (los desarrolladores lo llaman “plataforma”) que se adapte a sus necesidades de manera apropiada. Estas plataformas le proporcionarán una selección de herramientas y redes neuronales iniciales con el fin de entrenar y probar la red.

Con varias de las empresas de tecnología más grandes del mundo compitiendo por el primer puesto en el mercado del aprendizaje profundo, las plataformas como TensorFlow de Google, Caffe2 de Facebook y OpenVino de Intel (todas gratuitas) demuestran el impacto del flujo de inversiones y recursos hacia el mercado del aprendizaje profundo. Por otra parte, también está Pytorch, una solución de código abierto que ahora es parte de Facebook. Estas herramientas son tan fáciles de utilizar y proporcionan tanta documentación (incluidos ejemplos), que incluso un usuario principiante puede entrenar e implementar una red neuronal sin mayores esfuerzos.

Si quisiéramos hablar de todas las plataformas disponibles necesitaríamos escribir un artículo aparte, pero a continuación detallamos las ventajas y desventajas principales de 3 de las plataformas más populares:

Pytorch

  • Fácil y simple de usar.
  • Utilizada en la mayoría de los proyectos de investigación.
  • No es muy adecuada para grandes usos.
  • Solamente compatible con Python.

TensorFlow

  • Gran base para los usuarios con buena documentación.
  • Curva de aprendizaje más elevada en comparación con Pytorch.
  • Brinda implementación expansible de la producción y es compatible con la implantación móvil.

Caffe2

  • Liviana, lo que significa una implementación eficiente.
  • Una de las plataformas más viejas (bibliotecas compatibles con una gran variedad de redes neuronales convolucionales [CNN, por sus siglas en inglés] y visión de ordenador).
  • Mejor compatibilidad con dispositivos móviles que usen OpenCV.

La elección de la red neuronal dependerá eventualmente de la complejidad de la tarea y de la velocidad que la inferencia necesita para ejecutarse. Por ejemplo, se puede escoger una red neuronal con más capas y más neuronas, pero la inferencia se ejecutaría más lento. Por lo general, una red neuronal entrenada necesita muy poca potencia computacional y puede generar resultados en cuestión de milisegundos. Esto permite inferencias perimetrales de aprendizaje profundo complejas con placas ARM de baja potencia o inferencias perimetrales, especialmente con cámaras de inferencia fabricadas como la FLIR Firefly DL.

Además, aunque existen empresas que no cuentan con los recursos y empleados para aprender e implementar una solución de aprendizaje profundo sí cuentan con la consultoría de terceros, que pueden ayudar a muchos interesados a través de todo el ciclo de desarrollo, desde la conceptualización hasta la implementación. Un ejemplo de ello es Enigma Pattern (https://www.enigmapattern.com).

Paso 3] Preparación de los datos de entrenamiento para la red neuronal

Según el tipo de datos que desee evaluar, se necesitará un repositorio de imágenes con la mayor cantidad de características que el usuario quiera utilizar en su evaluación y deben estar etiquetadas de manera apropiada. A modo de ejemplo, si la red neuronal necesita diferenciar una buena soldadura de una mala, necesitará cientos de variaciones sobre cómo luce una buena soldadura y un conjunto similar de cómo luce una mala soldadura con etiquetas que las identifiquen como tales.

Existen muchas maneras de obtener un conjunto de datos sobre una imagen:

  • Para los casos de uso comunes, es posible encontrar un conjunto de datos previamente etiquetados que coincida con los requisitos particulares del usuario disponibles para la compra en línea (en algunos casos, incluso de manera gratuita).
  • Probablemente, una opción eficiente para muchas aplicaciones sería generar datos sintéticos, en especial porque no requieren etiquetado. Las empresas como Cvedia; respaldadas por FLIR (https://www.cvedia.com) utilizan tecnología de simulación y una teoría de visión de ordenador avanzada para construir paquetes de entrenamiento sintéticos. Estos conjuntos de datos se registran y se optimizan para el entrenamiento de algoritmos.
  • Si las dos primeras opciones no están disponibles, el usuario deberá tomar sus propias imágenes y etiquetarlas de manera individual. Este proceso es simple gracias a varias herramientas disponibles en el mercado (a continuación se detallan algunas herramientas y técnicas para acortar el intervalo de desarrollo)

Consejos útiles:

Durante el proceso de construir su propio código de aprendizaje profundo, muchos desarrolladores comparten de manera gratuita su solución con código abierto. Si su conjunto de datos no está etiquetado previamente una herramienta especialmente útil es LabelImg; una herramienta de recolección de imágenes gráficas que ayuda a etiquetar objetos en cuadros delimitadores dentro de las imágenes (https://github.com/tzutalin/labelImg). De manera alternativa, todo el proceso puede derivarse a terceras partes.

Otra manera de acortar la etapa de preparación de datos incluye el procesamiento de imágenes, que consiste en optimizar una imagen en diferentes imágenes (rotar, recortar, estirar, aclarar u oscurecer, entre otras acciones). Esto también reduciría tiempo de desarrollo, ya que el proceso de recoger datos y etiquetar las imágenes se aliviaría para los usuarios principiantes.

Por otro lado, esto es incluso más importante si el usuario tiene preferencias o limitaciones de hardware en particular, ya que las herramientas de aprendizaje profundo que mencionaremos en la próxima sección son compatibles con un conjunto de hardware limitado y por lo general no son intercambiables.

Paso 4] Entrenamiento y validación de la red neuronal para asegurar la precisión

Después de preparar los datos, se necesita entrenar, probar y validar la precisión de la red neuronal. Esta etapa incluye la configuración y la ejecución de scripts en el ordenador hasta que el proceso de entrenamiento genere niveles aceptables de precisión para un caso de uso específico. Se recomienda mantener los datos de entrenamiento y de prueba por separado para asegurarse de que los datos de prueba para la evaluación no se utilicen durante el entrenamiento.

Este proceso se puede acelerar aprovechando la transferencia de aprendizaje, ya que consiste en utilizar una red entrenada previamente y asignarle otra finalidad para otra tarea. Dado que la mayoría de estas capas en una red neuronal profunda se encuentran realizando una extracción de características, no necesitan que se las vuelva a entrenar para clasificar nuevos objetos. Por ejemplo, se pueden aplicar técnicas de transferencia de aprendizaje a redes previamente entrenadas como punto de inicio y solo volver a entrenar algunas capas y no toda la red. Algunas plataformas como Caffe2 y TensorFlow le brindan esta opción de manera gratuita.

Además, agregar nuevas características de detección a una red neuronal ya entrenada es tan sencillo como añadir imágenes adicionales a un conjunto de imágenes defectuosas y aplicar transferencia de aprendizaje para volver a entrenar la red. Esto es verdaderamente más sencillo y más fácil que la programación lógica, donde se debe añadir la nueva lógica al código, recoger y ejecutar mientras se verifica que el nuevo código agregado no introduzca errores sin explicación.

Si el usuario no cuenta con experiencia en codificación para entrenar su propia red neuronal, existen varios software basados en la interfaz gráfica de usuario (GUI, por sus siglas en inglés) que trabajan con diferentes plataformas. Estas herramientas hacen que los procesos de entrenamiento e implantación se vuelvan muy intuitivos incluso para usuarios con poca experiencia. Un ejemplo en el ámbito de la visión artificial es Matrox MIL

Paso 5] Implementación de la red neuronal y ejecución de inferencias sobre nuevos datos

El último paso es implementar la red neuronal entrenada en el hardware seleccionado para probar su desempeño y recoger datos en campo. Idealmente, las primeras fases de inferencia se deben usar en campo para recoger datos de prueba adicionales que pueden usarse como datos de entrenamiento para futuras generaciones.

En la siguiente sección figura un pequeño resumen de los métodos típicos de implementación junto a algunas ventajas y desventajas relacionadas:

Implementación en la nube

  • Ahorros considerables en el coste de hardware
  • Capacidad de aumentar rápidamente
  • Capacidad de implementar y propagar cambios en varias ubicaciones
  • Mayor desventaja: depende de una conexión de Internet
  • Mayor latencia en comparación con la implementación perimetral (debido al volumen de transferencias de datos entre el hardware local y la nube).
  • Menor fiabilidad (los problemas de conexión pueden causar fallos graves)

Perimetral (ordenador estándar)

  • Ideal para aplicaciones de alto desempeño
  • Completamente personalizable (se construye en base a secciones que son relevantes para la aplicación)
  • Precio accesible (los componentes pueden seleccionarse según la aplicación)
  • Mayor coste
  • Tamaño considerablemente más grande en términos generales

Perimetral (dispositivos ARM, FPGA y cámaras de inferencia como la FLIR Firefly DL)

  • Consumo de energía reducido
  • Ahorros considerables en hardware periférico
  • Alta fiabilidad
  • Ideal para aplicaciones que requieren varias cámaras en un sistema (descarga de los requerimientos de procesamiento en varias cámaras)
  • Segura (se puede aislar el hardware de otras interferencias)
  • Ideal para aplicaciones que requieren un tamaño compacto
  • No compatible con tareas muy demandantes por parte del ordenador
  • Una solución basada en una unidad de procesamiento de visión (VPU, por sus siglas en inglés) tiene un rendimiento/rango de potencia más alto en comparación con las soluciones de FPGA
  • Una solución de FPGA tiene mejor rendimiento en comparación con una solución basada en VPU

Imagen: ejemplo de una cámara de inferencia para DL – FLIR Firefly DL

Posibles limitaciones del aprendizaje profundo

Ahora que hemos dado una descripción general del proceso de desarrollo e implementación, también sería razonable analizar algunas limitaciones.

  • El aprendizaje profundo es en su mayoría territorio desconocido, y es muy difícil ejemplificar o saber cómo es que la red neuronal toma sus decisiones. Es posible que esto no tenga repercusiones para algunas aplicaciones, pero las empresas que se encuentran en el rubro médico, de salud y ciencias biológicas tienen requisitos estrictos para encriptar la documentación de los productos aprobados por la Administración de Alimentos y Medicamentos (FDA, por sus siglas en inglés) de EE. UU. o sus equivalentes en otras regiones. En la mayoría de los casos, se necesita poner mucha atención a la manera en que funciona vuestro software y se necesita documentar la operación por completo y en detalle.
  • Otro problema que puede surgir durante la implementación del aprendizaje profundo es que es muy difícil optimizar la red neuronal de manera predictiva. Muchas redes neuronales usadas y entrenadas en la actualidad toman ventaja de la transferencia de aprendizaje para volver a entrenar redes existentes con poca optimización.
  • La exactitud de la red neuronal se puede arruinar incluso si se comete el más mínimo error a la hora de etiquetar los datos de entrenamiento, y esto ocurre con mucha frecuencia debido al error humano. Además, es verdaderamente tedioso depurar el problema ya que se deberá revisar todos los datos de entrenamiento de manera individual para encontrar la etiqueta incorrecta.

A estas limitaciones se suma que muchas aplicaciones son mucho más compatibles con soluciones basadas en la lógica. Por ejemplo, si el problema está bien definido, determinado o es predecible, es posible que las soluciones basadas en la lógica proporcionen mejores resultados que el aprendizaje profundo. Algunos ejemplos comunes son la lectura de código de barras, alineación de piezas, medición precisa, entre otros.

Conclusión

A pesar de las limitaciones, los posibles beneficios generados del aprendizaje profundo tienen más peso que los aspectos negativos (para mencionar solo algunos: desarrollo rápido, capacidad de resolver problemas complejos, uso e implementación fácil). Es más, estos inconvenientes se superan gracias a las mejoras constantes que se realizan en el ámbito del aprendizaje profundo. A modo de ejemplo, los mapas de activación se pueden usar para verificar de manera visual que los píxeles en una imagen se tienen en cuenta cuando una red neuronal toma su decisión, para que podamos entender mejor cómo es que la red llegó a esa conclusión. Del mismo modo, su gran aceptación muestra que hoy en día muchas empresas se encuentran desarrollando sus propias redes neuronales en vez de basarse en la transferencia de aprendizaje. Gracias a ello, mejoran su rendimiento y personalizan la solución para problemas específicos. El aprendizaje profundo puede asistir la lógica subyacente para aumentar la precisión general del sistema incluso en aplicaciones compatibles con programación lógica. Para finalizar, comenzar a desarrollar su propio sistema de aprendizaje profundo es cada vez más fácil y económico. Haga clic aquí para aprender cómo crear un sistema de clasificación de DL por menos de 600 USD.

¡Estamos aquí para ayudarlo!

Póngase en contacto hoy mismo con un especialista en cámaras.

Contacto