Utilice un módulo de bajo costo y MicroPython para construir rápidamente dispositivos de visión y audición basados en inteligencia artificial
Colaboración de Editores de DigiKey de América del Norte
2019-08-01
Para satisfacer el creciente deseo de productos inteligentes y conectados, los desarrolladores recurren cada vez más a métodos de inteligencia artificial (IA) como el aprendizaje automático (ML). Sin embargo, estos, a menudo, se enfrentan a una difícil elección de hardware. Pueden basar sus diseños en procesadores de propósito general que son rentables pero carecen de rendimiento suficiente para algoritmos complejos, o pueden usar soluciones especializadas que brindan alto rendimiento pero aumentan el costo y la complejidad del diseño.
Esas ya no son las únicas opciones. Este artículo describe una alternativa más simple y rentable de Seeed Technology que les permite a los desarrolladores implementar soluciones basadas en IA de alto rendimiento al usar el conocido lenguaje de programación MicroPython.
Enfoques de aprendizaje automático
El éxito de los algoritmos de ML ha atraído la atención de desarrolladores que buscan enfoques más efectivos para la detección de objetos y el reconocimiento de voz en una amplia gama de aplicaciones. Entre estos algoritmos, las redes neuronales convolucionales (CNN) han demostrado el tipo de reconocimiento altamente preciso que se requiere en las aplicaciones de visión artificial y audición. Como resultado, las CNN y redes neuronales profundas (DNN) similares han encontrado una creciente aplicación en los diseños de electrónica personal, dispositivos portátiles e internet de las cosas (IoT).
Para las aplicaciones con requisitos modestos de inferencia de CNN, los desarrolladores pueden implementar soluciones exitosas utilizando bibliotecas de software de redes neuronales que se ejecutan en procesadores de propósito general de instrucción única y datos múltiples (SIMD) y extensiones de procesador de señal digital (DSP) (consulte "Crear una aplicación de aprendizaje automático con un Raspberry Pi").
Para requisitos más exigentes, los desarrolladores pueden construir diseños más potentes basados en CNN al utilizar arreglos programables de puertas en campo (FPGA) que incorporan bloques DSP de alto rendimiento capaces de acelerar algoritmos de aprendizaje automático (consulte, "Use los FPGA para construir aplicaciones de visión integrada de alto rendimiento con el aprendizaje automático").
Los diseños de ML basados en procesadores suelen ser más simples de implementar que los diseños basados en FPGA, pero la complejidad matemática de los modelos de CNN generalmente ralentiza la inferencia de soluciones basadas en procesadores. Las soluciones basadas en FPGA pueden usar la implementación de hardware de pasos de procesamiento clave para acelerar el rendimiento de inferencia, pero los requisitos de desarrollo pueden dificultar la implementación rápida de soluciones optimizadas.
Con la disponibilidad del módulo Sipeed MAIX‑I 114991684 de Seeed Technology, los desarrolladores tienen una solución alternativa capaz de acelerar la implementación de soluciones de inferencia de CNN de alto rendimiento en productos inteligentes y dispositivos informáticos de última generación.
Módulo de procesamiento de CNN de alto rendimiento
El módulo MAIX-1 combina un procesador de doble núcleo de alto rendimiento, un microcontrolador Wi-Fi ESP8285 de Espressif Systems, una memoria flash serie Winbond W25Q128FW de 128 megabits (Mbit), un regulador de voltaje y un conector de antena IPEX. Una versión inalámbrica, el módulo Sipeed MAIX-I 114991695, viene sin el microcontrolador ESP8285. Diseñado para acelerar una amplia gama de cargas de trabajo de aplicaciones, el procesador de doble núcleo integra un par de procesadores RISC-V de 64 bits con unidades de coma flotante (FPU) y aceleradores para modelos de CNN, procesamiento de audio, criptografía y cálculo de la transformada rápida de Fourier (FFT) (Figura 1).
Figura 1: El módulo MAIX-I de Seeed Technology combina un microcontrolador inalámbrico, memoria flash, un regulador de voltaje de CC y un conector de antena IPEX con un procesador de doble núcleo de alto rendimiento y aceleradores para el procesamiento de redes neuronales convolucionales (CNN) y otras funciones. (Fuente de la imagen: Seeed Technology)
Junto con 8 megabytes (MB) de memoria estática de acceso aleatorio (SRAM) y 128 kilobits (Kb) de memoria programable única (OTP), el procesador de doble núcleo integra un conjunto completo de interfaces que incluye un puerto de pantalla de cristal líquido (LCD) y un puerto de video digital (DVP) para una cámara de video. Los desarrolladores pueden utilizar el multiplexor de matriz de entrada y salida programable en campo (FPIOA) del procesador para asignar 255 funciones internas a los 48 puertos de entrada y salida de uso general (GPIO) disponibles.
Los aceleradores y la funcionalidad integrada del procesador admiten una variedad de requisitos para los diseños típicos de productos inteligentes. Por ejemplo, la unidad de procesador de audio (APU) admite hasta ocho micrófonos e incluye su propio acelerador especializado FFT de 512 puntos. Al utilizar solo estas capacidades de APU, los desarrolladores pueden usar de manera eficiente matrices de micrófonos para implementar la captación direccional de formación de haces de audio utilizada en interfaces de voz para productos inteligentes. Para las capacidades de la interfaz de voz, tales como la activación de frases clave, los desarrolladores pueden usar la salida de audio preprocesada de la APU para controlar el acelerador de CNN integrado del procesador.
Acelerador de CNN
Para todas sus capacidades, la característica más distintiva del módulo MAIX-I de Sipeed reside en el acelerador de CNN integrado en el procesador de doble núcleo del módulo. Diseñado para acelerar el procesamiento de las funciones kernel individuales subyacentes a las CNN, el procesador de red neuronal, aquí denominado "KPU" (unidad de procesamiento kernel), proporciona implementaciones de hardware en espiral, normalización por lotes, activación y agrupación de funciones kernel que componen las capas individuales de los modelos de CNN (consulte "Comenzar con el aprendizaje automático con el uso de hardware y software fácilmente disponibles").
Con estas capacidades, los desarrolladores pueden implementar diseños de baja potencia que utilizan CNN para reconocer frases de activación de voz en interfaces de audio o detectar y clasificar objetos en aplicaciones basadas en la visión. De hecho, la KPU puede usar la SRAM integrada del procesador para realizar inferencia en tiempo real con modelos de inferencia de CNN de punto fijo de hasta 5.9 MB, o modelos de coma flotante precuantificados de hasta 11.8 MB. En aplicaciones de visión artificial, por ejemplo, la KPU realiza inferencias a más de 30 fotogramas por segundo con un tipo de fotograma relativamente pequeño utilizado para la detección de rostros u objetos en productos inteligentes. Para aplicaciones que no son en tiempo real, los desarrolladores pueden usar un flash externo para manejar tamaños de modelo, limitados solo por la capacidad de flash.
Internamente, la KPU ejecuta modelos de inferencia utilizando un búfer de primero en entrar, primero en salir (FIFO) para procesar secuencialmente cada capa de un modelo CNN típico (Figura 2, arriba). Para cada capa, la KPU lee los parámetros del modelo y los datos de su SRAM en el chip o flash externo y ejecuta la función del kernel de esa capa con la función del kernel acelerada asociada (Figura 2, abajo). Integrado en esta tubería de procesamiento de capa, un mecanismo de devolución de llamada les permite a los desarrolladores ejecutar sus propias rutinas a medida que el hardware de la KPU completa cada secuencia de procesamiento.
Figura 2: Al realizar la inferencia, la tarea completa de la KPU (arriba) comprende múltiples capas, cada una de las cuales involucra la ejecución de las funciones apropiadas del kernel (abajo). (Fuente de la imagen: Seeed Technology)
Plataformas de desarrollo
La KPU abstrae la complejidad de la ejecución del algoritmo de CNN detrás de su hardware especializado. Para los desarrolladores, Seeed facilita la complejidad del desarrollo basado en CNN con una combinación de ofertas de hardware y paquetes de software. Junto con el módulo MAIX-I, los desarrolladores pueden evaluar y desarrollar rápidamente diseños basados en él con productos de nivel de placa Seeed que proporcionan una funcionalidad creciente.
En el nivel base, el kit de desarrollo Seeed 110991188 combina un módulo MAIX-I montado en una placa base con una pantalla LCD de 2.4 pulgadas y una cámara OV2640 ojo de pez 114991881 de Seeed. El kit 110991189 de Seeed proporciona las mismas características que la versión sin Wi-Fi del módulo MAIX-I.
Para el desarrollo de prototipos, la placa de evaluación de bits Seeed 102991150 monta un módulo MAIX-I en una placa diseñada específicamente para el tablero de prueba. El kit de bits MAIX-I 110991190 de Seeed Technology combina la placa de evaluación de bits, una pantalla de 2.4 pulgadas, una cámara OV2640 y un par de cabeceras para conectar la placa bit a un tablero de pruebas.
Para el desarrollo de aplicaciones más complejas, el kit de placa Sipeed MAIX Go 110991191 de Seeed combina el módulo MAIX-I con un microcontrolador STMicroelectronics STM32F103C8, una cámara, un micrófono I2S, un altavoz, administración de batería de litio, una ranura MicroSD y conectores de interfaz múltiple (Figura 3). Al colocar la pantalla LCD de 2.8 pulgadas incluida en la parte posterior de la placa, los desarrolladores pueden usar efectivamente el kit como plataforma para un sistema de video digital impulsado por IA.
Figura 3: Una de una serie de placas MAIX de Seeed Technology, la placa Sipeed MAIX Go combina el módulo MAIX-I con un microcontrolador STM32F103C8 de STMicroelectronics, una cámara, una pantalla y múltiples interfaces para proporcionar un sistema de imagen independiente para el reconocimiento de objetos. (Fuente de la imagen: Seeed Technology)
Las placas proporcionan una solución independiente para muchos requisitos de productos inteligentes y su soporte para MicroPython las hace fáciles de usar. Utilizando la combinación de las placas Sipeed de Seeed y MicroPython, los desarrolladores pueden aprovechar un enfoque más simple para desarrollar productos inteligentes basados en la inteligencia artificial.
Desarrollo rápido con MicroPython
MicroPython fue creado para proporcionar un subconjunto optimizado del lenguaje de programación Python para microcontroladores con recursos limitados. Con su soporte directo para acceso de hardware, MicroPython aporta la relativa simplicidad del desarrollo basado en Python al desarrollo de software de sistemas integrados.
En lugar de bibliotecas C, los desarrolladores utilizan el mecanismo de importación de Python para cargar las bibliotecas requeridas. Por ejemplo, los desarrolladores simplemente importan el módulo de máquina MicroPython para obtener acceso a la interfaz I2C de un microcontrolador, temporizadores y más. Para los diseños que utilizan sensores de imagen, los desarrolladores pueden capturar una imagen al importar el módulo del sensor y al llamar a sensor.snapshot(), que devuelve un cuadro desde el sensor de imagen.
El proyecto MaixPy de Seeed amplía a MicroPython con un soporte para el procesador K210 de doble núcleo en el corazón del módulo MAIX-I y las placas de desarrollo asociadas. Al ejecutarse en el procesador K210 del módulo MAIX-I, el intérprete MaixPy de MicroPython utiliza características de MicroPython y módulos MaixPy especializados como el módulo KPU MaixPy, que encapsula la funcionalidad KPU del procesador.
Los desarrolladores pueden usar MaixPy y el módulo de la KPU para implementar fácilmente una inferencia de CNN. De hecho, la biblioteca de modelos Seeed, MaixHub, proporciona una serie de modelos de CNN previamente entrenados para ayudar a los desarrolladores a comenzar con el módulo MAIX-I. Para descargar estos modelos, los desarrolladores deben proporcionar una ID de máquina disponible con una herramienta generadora de ID en la placa MAIX.
Por ejemplo, al utilizar el kit Sipeed MAIX Go de Seeed con la pantalla LCD conectada, los desarrolladores pueden cargar un modelo previamente entrenado para la detección de rostros. Realizar la inferencia con el modelo requiere solo unas pocas líneas de código Python (Listado 1).
Copyimport sensorimport imageimport lcdimport KPU as kpu lcd.init()sensor.reset()sensor.set_pixformat(sensor.RGB565)sensor.set_framesize(sensor.QVGA)sensor.run(1)task = kpu.load(0x300000) # you need put model(face.kfpkg) in flash at address 0x300000# task = kpu.load("/sd/face.kmodel")anchor = (1.889, 2.5245, 2.9465, 3.94056, 3.99987, 5.3658, 5.155437, 6.92275, 6.718375, 9.01025)a = kpu.init_yolo2(task, 0.5, 0.3, 5, anchor)while(True): img = sensor.snapshot() code = kpu.run_yolo2(task, img) if code: for i in code: print(i) a = img.draw_rectangle(i.rect()) a = lcd.display(img)a = kpu.deinit(task)
Listado 1: Los desarrolladores solo necesitan unas pocas líneas de MicroPython para implementar la inferencia utilizando un modelo de red neuronal residente en flash. (Código fuente: Seeed Technology)
El modelo previamente capacitado implementa un tipo de CNN llamado modelo Yolo (you only look once o solo se ve una vez), que acelera la inferencia al usar una imagen completa durante el entrenamiento y utiliza dicha inferencia en lugar de una serie de ventanas deslizantes subyacentes a los algoritmos anteriores de CNN. Otras optimizaciones de Yolo se incorporan en el modelo "Tiny Yolo2" proporcionado en la biblioteca de modelos MaixHub. El resultado es un modelo de alto rendimiento que permite la detección de rostros en tiempo real en el MAIX Go (Figura 4).
Figura 4: Al usar la placa Sipeed MAIX Go, los desarrolladores pueden explorar rápidamente la detección de rostros en tiempo real construida con un modelo especial de inferencia de CNN previamente capacitado. (Fuente de la imagen: Seeed Technology)
Por supuesto, la inferencia es solo la etapa de implementación del complejo proceso de desarrollo del modelo de DNN, y la aparente simplicidad de este ejemplo puede ocultar los desafíos involucrados en la implementación de un modelo efectivo.
Para desarrollar un modelo personalizado, los desarrolladores deben adquirir un conjunto de muestras suficientemente grande para la capacitación del modelo. Para los desarrolladores de capacitación, use un marco de aprendizaje profundo como TensorFlow para configurar un modelo y realizar la capacitación utilizando los datos de esta.
Aunque esos pasos pueden ser engañosamente exigentes, el ecosistema MAIX-I hace que el despliegue de inferencia sea relativamente sencillo.
Seeed proporciona convertidores que les permiten a los desarrolladores convertir modelos desarrollados en TensorFlow, Keras o Darknet al formato especial kmodel de KPU. Al igual que con los modelos previamente capacitados descargados de la biblioteca de modelos MaixHub, los desarrolladores pueden cargar sus modelos personalizados al módulo MAIX-I y evaluar su rendimiento con MicroPython como se indicó anteriormente.
Seeed también proporciona kits de desarrollo de software (SDK) para crear aplicaciones de software personalizadas en el lenguaje de programación C. Los SDK independientes admiten aplicaciones C independientes o aplicaciones C integradas en el sistema operativo RTOS en tiempo real.
Conclusión
La rápida aceptación de las interfaces basadas en imagen y voz para productos inteligentes continúa generando interés en el uso de algoritmos de aprendizaje automático en los diseños con recursos limitados que subyacen a esos productos. En el pasado, los desarrolladores encontraron pocas opciones efectivas para soluciones que fueran simples de implementar y lo suficientemente potentes como para proporcionar la funcionalidad de aprendizaje automático en tiempo real.
Como se muestra, al utilizar el módulo MAIX-I y las placas asociadas de Seeed Technology, los desarrolladores pueden implementar rápidamente modelos de inferencia en una plataforma de hardware capaz de ofrecer reconocimiento en tiempo real de voz u objetos de datos de transmisión de audio o video.
Descargo de responsabilidad: Las opiniones, creencias y puntos de vista expresados por los autores o participantes del foro de este sitio web no reflejan necesariamente las opiniones, las creencias y los puntos de vista de DigiKey o de las políticas oficiales de DigiKey.




