Detección humana liviana con microcontroladores que utilizan redes neuronales personalizadas

Los sistemas de visión por computadora impulsados ​​por inteligencia artificial se están convirtiendo cada vez más en una parte de nuestra vida diaria en aplicaciones industriales y de consumo. La introducción de modelos de aprendizaje automático (ML) en dispositivos de borde también está ganando atención debido a los beneficios de un mejor rendimiento y seguridad de los datos porque los datos no se envían a la nube para su procesamiento.

La mayoría de las implementaciones tradicionales de detección de personas utilizan procesadores de aplicaciones o dispositivos GPU para la informática, pero hay aplicaciones sensibles al costo que necesitan lograr una funcionalidad similar con dispositivos microcontroladores (MCU) de bajo costo. Uno de esos casos de uso es cuando un aparato de oficina (impresora, escáner, fotocopiadora, etc.) regresa del modo de ahorro de energía y se prepara para funcionar cuando las personas se acercan.

En este blog, le mostraremos cómo una aplicación basada en ML puede analizar secuencias de video capturadas por una cámara RGB de baja resolución conectada a un dispositivo para identificar la presencia humana y la proximidad dentro de un radio de 3 metros.

Desde la tecnología clásica de visión por computadora hasta los enfoques basados ​​en el aprendizaje profundo, hay muchas formas de detectar a una persona. Estos incluyen Haar Cascades, que están disponibles en la biblioteca OpenCV para SSD Mobilenet, Posenet, Openpose, Openpifpaf y más. Para obtener más información sobre estos métodos, se incluyen algunos recursos excelentes al final de este blog. Sin embargo, con las limitaciones de RAM, flash y computacionales de la MCU de destino en mente, hemos desarrollado nuestra propia red neuronal personalizada que es lo suficientemente liviana. Las siguientes secciones describen el enfoque de desarrollo.

Preparación del conjunto de datos

Se recopiló un gran corpus de datos humanos en el marco de una variedad de fuentes a través de bases de datos de código abierto y ejercicios de recopilación de datos utilizando cámaras específicas utilizadas en la electrónica de destino. Se tuvo cuidado de recopilar datos de todos los ángulos de aproximación posibles dentro del campo de visión (FoV) de la cámara objetivo. Los datos recopilados se aislaron cuidadosamente mediante una combinación de agrupamiento basado en procesamiento de imágenes y agrupamiento manual.

etiquetado

El equipo de etiquetado de datos etiquetó el conjunto de datos limpiado utilizando un marco de anotación estándar.

Modificación del modelo

Hemos construido una red neuronal liviana personalizada que puede detectar con precisión si una persona en un marco está cerca o lejos.

La tarea más difícil fue construir una red neuronal personalizada que funcionara dentro de una frecuencia de CPU ajustada y un presupuesto de espacio de RAM. A continuación se muestran algunas de las configuraciones de red de CNN que investigamos antes de congelarlas en el modelo final.

  1. Determinar las dimensiones ideales de la imagen de entrada: esto requirió las compensaciones correctas para no perder información espacial y al mismo tiempo reducir la RAM consumida por las capas.
  2. Encuesta de varias escalas de color.
  3. Determine el tamaño del kernel y ajuste el número de filtros utilizados como entrada para la capa de convolución.
  4. Mejora del modelo al visualizar la salida de la capa intermedia
  5. Determinar el número de bloques repetidos para reutilizar
Implementación en dispositivos de hardware

Una vez que el modelo estuvo listo y validado, el siguiente paso fue implementar el modelo en el hardware de destino (un dispositivo de clase MCU Renesas Rx64M que se ejecuta a una frecuencia máxima de 120 MHz y 512 Kbytes de SRAM). El modelo de TensorFlow se convirtió a C mediante una combinación de kits de herramientas proporcionados por el proveedor y scripts manuales desarrollados para implementar capas y operadores personalizados.

La salida de la cámara se transfiere a la MCU mediante el protocolo de captura de datos en paralelo (PDC) y los píxeles de entrada YUV se convierten a formato RGB. Luego, la imagen RGB se proporciona al algoritmo de red neuronal de detección de personas.

La salida de la cámara y los resultados de la detección de personas se visualizan a través de una página web. En un escenario de aplicación real, el resultado de la detección activa una señal de activación a través de GPIO.

Instantánea de la aplicación
Captura de pantalla de la aplicación que muestra que se ha detectado a una persona
Captura de pantalla de la aplicación cuando no se detecta a ninguna persona
resultado

Pudimos generar un modelo de aprendizaje automático personalizado con una huella de memoria de menos de 200 KB (uint8). Esto le permite clasificar con precisión si una persona está cerca.

índice

El modelo uint8 tardó aproximadamente 513 milisegundos (~ 2 fps) en procesar la imagen.

Toda la aplicación, incluidos los búferes de imagen, el preprocesamiento y los componentes de la GUI, consumió hasta 800 KB de espacio. Dado que el dispositivo tiene solo unos 500 KB de SRAM disponibles, el código se modularizó cuidadosamente en segmentos persistentes y no persistentes utilizando secciones de código no persistentes que se cargan dinámicamente desde la ROM.

Conclusión

Los modelos livianos basados ​​en redes neuronales se pueden implementar de manera efectiva en dispositivos microcontroladores de bajo costo para una gran cantidad de aplicaciones industriales y de electrónica de consumo que requieren la detección de personas que se acercan.

Recursos:

Los siguientes enlaces le ayudarán a conocer más sobre algunos de ellos.

Deja una respuesta

Subir