Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Equipment >> Robot industrial

Cómo implementar el reconocimiento de dígitos con TensorFlow Lite usando una MCU i.MX RT1060 Crossover

Este artículo analiza la detección y el reconocimiento de dígitos utilizando MNIST eIQ como ejemplo, que consta de varias partes:el reconocimiento de dígitos se realiza mediante un modelo de TensorFlow Lite , y se utiliza una GUI para aumentar la usabilidad del dispositivo i.MX RT1060.

El MCU cruzado i.MX RT1060 es igualmente adecuado para aplicaciones industriales rentables y productos de consumo de alto rendimiento y uso intensivo de datos que requieren funcionalidades de visualización. Este artículo demuestra las capacidades de esta MCU basada en Arm® Cortex®-M7 al explicar cómo implementar una aplicación de aprendizaje automático integrada que puede detectar y clasificar la entrada escrita a mano de un usuario.

Para ello, este artículo se centra en el popular ejemplo MNIST eIQ, que consta de varias partes:el reconocimiento de dígitos lo realiza un modelo TensorFlow Lite y se utiliza una GUI para aumentar la usabilidad del dispositivo i.MX RT1060.

Una mirada al modelo y conjunto de datos MNIST

El conjunto de datos utilizado a lo largo de este artículo consta de 60.000 ejemplos de formación y 10.000 ejemplos de pruebas de imágenes centradas en escala de grises de dígitos escritos a mano. Cada muestra tiene una resolución de 28x28 píxeles:

Figura 1. Ejemplo de conjunto de datos MNIST

Las muestras se obtuvieron de estudiantes de secundaria y empleados de la Oficina del Censo en los EE. UU. Por lo tanto, el conjunto de datos contiene principalmente ejemplos de números tal como están escritos en América del Norte. Para los números de estilo europeo, por ejemplo, se debe utilizar un conjunto de datos diferente. Las redes neuronales convolucionales suelen ofrecer el mejor resultado cuando se utilizan con este conjunto de datos, e incluso las redes simples pueden lograr una alta precisión. Por lo tanto, TensorFlow Lite era una opción adecuada para esta tarea.

La implementación del modelo MNIST elegida para este artículo está disponible en GitHub como uno de los modelos oficiales de TensorFlow y está escrita en Python. El script usa la biblioteca de Keras y tf.data, tf.estimator.Estimator y la API tf.layers, y construye una red neuronal convolucional que puede lograr una alta precisión en las muestras de prueba:

Figura 2. Una visualización del modelo utilizado.

La definición del modelo correspondiente se muestra a continuación en la Figura 3.

Figura 3. La definición del modelo que corresponde a la visualización del modelo.

¿Qué es TensorFlow Lite y cómo se usa en este ejemplo?

TensorFlow es un marco de aprendizaje profundo conocido que es ampliamente utilizado en producción por grandes empresas. Es una biblioteca de aprendizaje profundo multiplataforma de código abierto desarrollada y mantenida por Google. Hay disponible una API de Python de bajo nivel, que es útil para desarrolladores experimentados y bibliotecas de alto nivel como las que se usan en este caso. Además, TensorFlow cuenta con el respaldo de una gran comunidad y una excelente documentación en línea, recursos de aprendizaje, guías y ejemplos de Google.

Para brindar a las máquinas computacionalmente restringidas, como los dispositivos móviles y las soluciones integradas, la capacidad de ejecutar aplicaciones de TensorFlow, Google desarrolló el marco TensorFlow Lite, que no es compatible con el conjunto completo de operaciones del marco TensorFlow. Permite que dichos dispositivos realicen inferencias en modelos de TensorFlow entrenados previamente que se convirtieron a TensorFlow Lite. Como recompensa, estos modelos convertidos no se pueden entrenar más, pero se pueden optimizar mediante técnicas como la cuantificación y la poda.

Conversión del modelo a TensorFlow Lite

El modelo entrenado de TensorFlow que se discutió anteriormente debe convertirse a TensorFlow Lite antes de que pueda usarse en la MCU i.MX RT1060. Para ese propósito, se convirtió usando tflite_convert y, por razones de compatibilidad, se usó la versión 1.13.2 de TensorFlow para entrenar y convertir el modelo:

tflite_convert

--saved_model_dir =

--output_file =modelo_convertido.tflite

--input_shape =1,28,28

--input_array =Marcador de posición

--output_array =Softmax

--inference_type =FLOAT

--input_data_type =FLOAT

--post_training_quantize

--target_ops TFLITE_BUILTINS

Por último, se usó la utilidad xdd para convertir el modelo de TensorFlow Lite en una matriz binaria que cargará la aplicación:

xxd -i modelo_convertido.tflite> modelo_convertido.h

xdd es una utilidad de volcado hexadecimal que se puede utilizar para convertir la forma binaria de un archivo a la representación de volcado hexadecimal correspondiente y viceversa. En este caso, el archivo binario de TensorFlow Lite se convierte en un archivo de encabezado C / C ++ que se puede agregar a un proyecto eIQ. El proceso de conversión y la utilidad tflite_convert se describen en las guías del usuario de eIQ con mayor detalle. La utilidad también se describe en la documentación oficial de Google.

Introducción rápida a Embedded Wizard Studio

Para hacer uso de las capacidades gráficas del MIMXRT1060-EVK, se incluyó una GUI en este proyecto. Para ello, se utilizó Embedded Wizard Studio, un IDE para desarrollar GUI para aplicaciones que se ejecutarán en dispositivos integrados. Aunque hay disponible una versión de evaluación gratuita del IDE, esta versión limita la complejidad máxima de la interfaz gráfica de usuario y también agrega una marca de agua sobre la GUI.

Una de las ventajas de Embedded Wizard Studio es su capacidad para generar proyectos MCUXpresso e IAR basados ​​en el SDK de XNP, lo que significa que después de crear la interfaz de usuario en el IDE, el desarrollador puede probarla inmediatamente en su dispositivo.

El IDE ofrece objetos y herramientas como botones, áreas sensibles al tacto, formas y muchos más, que se colocan en un lienzo. Luego, sus propiedades se configuran para adaptarse a las necesidades y expectativas del desarrollador. Todo esto funciona de una manera intuitiva y fácil de usar, y acelera en gran medida el proceso de desarrollo de la GUI.

Sin embargo, varios pasos de conversión deben fusionar el proyecto de GUI con el proyecto de aplicación eIQ existente, ya que el proyecto de GUI generado está en C y los ejemplos de qIQ están en C / C ++. Por lo tanto, algunos archivos de encabezado deben tener su contenido rodeado por:

#ifdef __cplusplus

extern "C" {

#endif

/ * código C * /

#ifdef __cplusplus

}

#endif

Además, la mayoría de los archivos de origen y encabezado se movieron a una nueva carpeta en la carpeta de middleware del SDK, y se agregaron nuevas rutas de inclusión para reflejar estos cambios. Por último, se compararon y fusionaron correctamente algunos archivos de configuración específicos del dispositivo.

La aplicación terminada y sus características

La GUI de la aplicación se muestra en una pantalla LCD sensible al tacto. Contiene un área de entrada para escribir dígitos y otra que muestra el resultado de la clasificación. El botón ejecutar inferencia ejecuta la inferencia y el botón borrar borra los campos de entrada y salida. La aplicación genera el resultado y la confianza de la predicción en la salida estándar.

Figura 4. La GUI de la aplicación de ejemplo contiene un campo de entrada, un campo de salida y dos botones. El resultado y la confianza también se imprimen en la salida estándar.

Precisión del modelo de TensorFlow Lite

Como se mencionó anteriormente, el modelo puede lograr una alta precisión en los datos de entrenamiento y prueba cuando clasifica un número escrito a mano al estilo estadounidense. Sin embargo, este no es el caso cuando se usa en esta aplicación, principalmente porque los dígitos escritos en una pantalla LCD con un dedo nunca son los mismos que los dígitos escritos en papel con un bolígrafo. Esto resalta la importancia de entrenar modelos de producción en datos de producción reales.

Para obtener mejores resultados, se debe recopilar un nuevo conjunto de datos. Además, los medios tendrían que ser los mismos. En este caso, las muestras deben recolectarse usando una entrada de pantalla táctil para dibujar los números. Existen otras técnicas para aumentar la precisión de las predicciones. El sitio web de la comunidad NXP contiene un tutorial sobre el uso de la técnica de aprendizaje por transferencia.

Detalles de implementación

El asistente integrado utiliza ranuras como disparadores para reaccionar a las interacciones de la GUI, por ejemplo, cuando un usuario arrastra el dedo sobre el área de entrada. En ese caso, la ranura dibuja continuamente una línea de píxeles de ancho debajo del dedo. El color de esa línea está definido por la constante de color principal.

La ranura del botón de borrar establece el color de cada píxel en ambos campos al color de fondo, y el botón de ejecución de inferencia guarda las referencias al área de entrada, el mapa de bits subyacente y el ancho y alto del área, y luego los pasa a un nativo Programa C que los procesa.

Dado que los mapas de bits del modelo de aprendizaje automático tienen un tamaño de solo 28x28 píxeles y el área de entrada se creó como un cuadrado de 112x112 para que el uso de la aplicación sea más cómodo, se requiere un preprocesamiento adicional al reducir la escala de la imagen. De lo contrario, ese proceso distorsionaría demasiado la imagen.

Primero, se crea una matriz de números enteros de 8 bits con las dimensiones del área de entrada y se llena con ceros. Luego, la imagen y la matriz se repiten y cada píxel dibujado en la imagen se almacena como 0xFF en la matriz. Al procesar la entrada, los píxeles del color principal se consideran blancos y todo lo demás, negro. Además, cada píxel se expande en un cuadrado de 3x3 para engrosar la línea, lo que hará que la reducción de escala de la imagen sea mucho más segura. Antes de escalar la imagen a la resolución requerida de 28x28, el dibujo se recorta y se centra para parecerse a las imágenes MNIST:

Figura 5. Una visualización de la matriz que contiene los datos de entrada preprocesados.

El modelo de aprendizaje automático se asigna, carga y prepara cuando se inicia la aplicación. Con cada solicitud de inferencia, el tensor de entrada del modelo se carga con la entrada de preprocesamiento y se pasa al modelo. La entrada debe copiarse en el tensor píxel a píxel y los valores enteros deben convertirse a valores de punto flotante en el proceso. Esta nota de la aplicación NXP contiene una huella de memoria detallada del código.

TensorFlow Lite:una solución viable

El reconocimiento de dígitos escritos a mano mediante el aprendizaje automático puede plantear problemas para los sistemas integrados, y TensorFlow Lite ofrece una solución viable. Con esta solución, se podrían implementar casos de uso más complejos, como un campo de entrada de pin en una cerradura digital. Como se discutió en este artículo, el entrenamiento de modelos de producción con datos de producción reales es crucial. Los datos de entrenamiento utilizados en este artículo consistieron en números que se escribieron con un bolígrafo en una hoja de papel. Esto, a su vez, reduce la precisión general del modelo cuando se usa para detectar números que se dibujaron en una pantalla táctil. Además, deben tenerse en cuenta las diferencias regionales.

La serie de MCU cruzados i.MX RT se puede implementar en una variedad de aplicaciones integradas, como el ejemplo proporcionado en este artículo. NXP tiene amplia información sobre la serie de MCU cruzados i.MX RT que puede ayudar a cerrar la brecha entre rendimiento y usabilidad.

Para obtener más información sobre las MCU cruzadas i.MX RT, visite la página del producto i.MX RT.

Los artículos de la industria son una forma de contenido que permite a los socios de la industria compartir noticias, mensajes y tecnología útiles con los lectores de All About Circuits de una manera que el contenido editorial no es adecuado. Todos los artículos de la industria están sujetos a estrictas pautas editoriales con la intención de ofrecer a los lectores noticias útiles, experiencia técnica o historias. Los puntos de vista y las opiniones expresados ​​en los artículos de la industria son los del socio y no necesariamente los de All About Circuits o sus redactores.


Robot industrial

  1. Cómo reducir el desperdicio con robots autónomos
  2. Reconocimiento de dígitos AI con PiCamera
  3. Optimización de la administración de energía con la MCU cruzada i.MX RT500 de NXP
  4. Comprensión de la habilitación de DSP mediante el MCU cruzado i.MX RT500 de NXP
  5. Cómo crear un codificador automático variable con TensorFlow
  6. Uso de resina epoxi con obras de arte
  7. Qué es la interfaz en Java:cómo implementar la interfaz con un ejemplo
  8. ¿Atender máquinas CNC? Aquí se explica cómo hacerlo con un cobot
  9. Cómo comenzar con la programación de robots de Yaskawa
  10. Cómo comenzar con RoboDK para Raspberry Pi
  11. Cómo llamar a un bloque de funciones desde un cliente OPC UA utilizando un modelo de información