Skip to main content

Introducción al Asistente de IA

Introducción

El kit de desarrollo del Asistente de IA, creado conjuntamente por Seeed Studio y STMicroelectronics. Esta es una plataforma de desarrollo diseñada para aplicaciones de IA de vanguardia en el borde. Centrado en el MCU STM32N657 de alto rendimiento con su acelerador de IA ST Neural-ART integrado, combina perfectamente potentes capacidades de computación de IA con las ventajas clásicas de los MCU de bajo consumo de energía, factor de forma pequeño y rentabilidad. El kit viene equipado con una cámara de obturador global integrada, un sensor IMU con una unidad de procesamiento de IA, una pantalla táctil de alta definición y un módulo Wi-Fi, ofreciendo una solución completa de hardware y software para desarrollar productos de próxima generación de visión inteligente e interacción por voz.

Características

  • Característica 1: Microcontrolador de IA Insignia Alimentado por el ST STM32N657, con un núcleo Arm® Cortex®-M55 de alto rendimiento y una NPU ST Neural-ART integrada que ofrece hasta 600 GOPS para una aceleración eficiente de modelos de IA.
  • Característica 2: Sensor de Visión de Grado Profesional Equipado con una cámara de obturador global ST VD55G1, proporcionando imágenes nítidas y sin distorsión de objetos en movimiento rápido, lo cual es crítico para tareas de visión por computadora de alta precisión.
  • Característica 3: Detección Inteligente con ISPU Cuenta con un IMU LSM6DSO16IS con una Unidad de Procesamiento de Sensor Inteligente (ISPU) integrada, permitiendo reconocimiento de gestos y actividades de ultra bajo consumo sin despertar el procesador principal.
  • Característica 4: Periféricos Interactivos Ricos Integra una pantalla táctil capacitiva de 4.0 pulgadas 480x480, un micrófono digital de alta fidelidad y un códec de audio, proporcionando una base de hardware completa para desarrollar aplicaciones de IA interactivas desde el primer momento.
  • Característica 5: Conectividad Integral Incluye un módulo Wi-Fi integrado para conectividad IoT sin problemas, junto con un puerto USB-C y múltiples conectores de expansión para máxima flexibilidad de desarrollo.

Descripción General del Hardware

Antes de que todo comience, es bastante esencial tener algunos parámetros básicos del producto. La siguiente tabla proporciona información sobre las características del Asistente de IA.

CategoríaCaracterísticaEspecificación
Sistema CentralControlador PrincipalSTMicroelectronics STM32N657X0H3Q
Arquitectura del NúcleoArm® Cortex®-M55
Unidad de Procesamiento NeuralST Neural-ART, 600 GOPS
Memoria Externa128MB NOR Flash, 32MB DRAM
SensoresCámaraSTMicroelectronics VD55G1 (800x700, Obturador Global)
IMUSTMicroelectronics LSM6DSO16IS (6 ejes con ISPU integrado)
MagnetómetroSTMicroelectronics LIS2MDL
PeriféricosPantallaTFT LCD de 4.0" (480x480), Táctil Capacitivo
AudioCódec Cirrus Logic WM8994 y Micrófono Digital ST MP34DT06JTR
ConectividadInalámbricoMódulo Wi-Fi MXCHIP EMW3080
InterfacesUSB-C x1, Puerto SWD x1, Expansión de Micrófono x1, Interfaz de Cámara RPi x1
Mecánico y EnergíaDimensiones (Carcasa)130mm x 90mm
Fuente de Alimentación5V vía USB-C o Puerto de Batería de Litio

Descripción General de la Capa Superior de la Placa

Descripción General de la Capa Inferior de la Placa


Comenzar con la Aplicación de Referencia del Asistente de IA

Para comenzar, clona el repositorio desde el enlace de GitHubgit clone https://github.com/stm32-hotspot/STM32N6-AI-Assistant-People-Detection.git en tu carpeta local preferida.

Aplicación de Visión por Computadora para habilitar el despliegue de modelos de detección de objetos en la placa del Asistente de IA. Está basada en el lanzamiento oficial del paquete de aplicación n6-ai-people-detection-v1.0.0 para la placa STM32N6570-DK.

Esta aplicación está preconstruida con un modelo de detección de personas "TinyYOLOv2".

Esta sección proporciona una descripción general de la aplicación. Documentación adicional está disponible en la Documentación Adicional de la Aplicación.

Características Demostradas en Este Ejemplo

  • Flujo de aplicación multi-hilo (Azure RTOS ThreadX)
  • Inferencia de modelo de IA cuantizado acelerado por NPU
  • Tuberías duales DCMIPP
  • Recorte, decimación, reducción de escala DCMIPP
  • Implementación de doble capa LTDC
  • Uso de ISP DCMIPP
  • Modo de desarrollo
  • Arranque desde Flash Externo

Soporte de Hardware

  • Kit del Asistente de IA

  • Se soportan 3 cámaras:

    • MB1854B IMX335

Kit del Asistente de IA con Cámara VD55G1.

Versión de Herramientas

  • STM32CubeIDE (STM32CubeIDE 1.18.0)
  • STM32CubeProgrammer (v2.18.0)
  • STEdgeAI (v2.1.0)

Conectores del Lado Derecho

Conectores del Lado Izquierdo

Conexión del Depurador

Pinout de los Conectores

Modos de Arranque

El STM32N6 no tiene flash interno. Para conservar tu firmware después de un reinicio, debes programarlo en el flash externo. Alternativamente, puedes cargar tu firmware directamente desde SRAM (modo de desarrollo). Sin embargo, en modo de desarrollo, si apagas la placa, tu programa se perderá.

Modos de arranque:

  • Modo de desarrollo: cargar firmware desde sesión de depuración en RAM (interruptor de arranque hacia la derecha)
  • Arranque desde flash: Programar firmware en flash externo (interruptor de arranque hacia la izquierda)

Inicio Rápido Usando Binarios Preconstruidos

Flashear Binarios Preconstruidos

Tres binarios deben ser programados en el flash externo de la placa usando el siguiente procedimiento:

  1. Cambiar el interruptor BOOT a la posición superior.
  2. Programar Binary/ai_assistant_fsbl.hex (Se hace una vez) (Cargador de arranque de primera etapa).
  3. Programar Binary/network_data.hex (parámetros de las redes; Se cambia solo cuando la red es cambiada).
  4. Programar Binary/AI_Assistant_Ref_Project.hex (aplicación de firmware).
  5. Cambiar el interruptor BOOT a la posición inferior.
  6. Realizar una secuencia de apagado/encendido.

Cómo Programar Archivos Hex Usando la UI de STM32CubeProgrammer

Ver Cómo Programar Archivos Hex STM32CubeProgrammer.

Cómo Programar Archivos Hex Usando Línea de Comandos

Asegúrate de tener la carpeta bin de STM32CubeProgrammer agregada a tu ruta.

export DKEL="<STM32CubeProgrammer_N6 Install Folder>/bin/ExternalLoader/MX66UW1G45G_STM32N6570-DK.stldr"

# First Stage Boot Loader
STM32_Programmer_CLI -c port=SWD mode=HOTPLUG -el $DKEL -hardRst -w Binary/ai_fsbl.hex

# Network Parameters and Biases
STM32_Programmer_CLI -c port=SWD mode=HOTPLUG -el $DKEL -hardRst -w Binary/network_data.hex

# Application Firmware
STM32_Programmer_CLI -c port=SWD mode=HOTPLUG -el $DKEL -hardRst -w Binary/x-cube-n6-ai-people-detection.hex

Inicio Rápido Usando Código Fuente

Antes de compilar y ejecutar la aplicación, tienes que programar network_data.hex (pesos y sesgos del modelo).

Este paso solo debe realizarse una vez a menos que cambies el modelo de IA. Ver Inicio Rápido Usando Binarios Preconstruidos para más detalles.

Más información sobre los modos de arranque está disponible en Resumen de Arranque .

Compilación y Ejecución de la Aplicación - Modo Dev

Asegúrate de tener el interruptor hacia el lado derecho.

STM32CubeIDE

Haz doble clic en STM32CubeIDE/.project para abrir el proyecto en STM32CubeIDE. Compila y ejecuta con los botones de compilar y ejecutar.

Makefile

Antes de ejecutar los comandos a continuación, asegúrate de tener los comandos en tu PATH.

  1. Compila el proyecto usando el Makefile proporcionado:
make -j8
  1. Abre un servidor GDB conectado al objetivo STM32:
ST-LINK_gdbserver -p 61234 -l 1 -d -s -cp <path-to-stm32cubeprogramer-bin-dir> -m 1 -g
  1. En una sesión de terminal separada, inicia una sesión GDB para cargar la imagen del firmware en la memoria del dispositivo:
$ arm-none-eabi-gdb build/Project.elf
(gdb) target remote :61234
(gdb) monitor reset
(gdb) load
(gdb) continue

Compilación y Ejecución de la Aplicación - Arranque desde Flash

Asegúrate de tener el interruptor en el lado derecho.

STM32CubeIDE

Haz doble clic en STM32CubeIDE/.project para abrir el proyecto en STM32CubeIDE. Compila con el botón de compilar.

Makefile

Antes de ejecutar los comandos a continuación, asegúrate de tenerlos en tu PATH.

  1. Compila el proyecto usando el Makefile proporcionado:
make -j8

Una vez que tu aplicación esté compilada con Makefile, STM32CubeIDE, o EWARM, puedes agregar una firma al archivo bin:

STM32_SigningTool_CLI -bin build/Project.bin -nk -t ssbl -hv 2.3 -o build/Project_sign.bin

Puedes programar el archivo bin firmado en la dirección 0x70100000.

export DKEL="<STM32CubeProgrammer_N6 Install Folder>/bin/ExternalLoader/MX66UW1G45G_STM32N6570-DK.stldr"

# Adapta la ruta de compilación a tu IDE
STM32_Programmer_CLI -c port=SWD mode=HOTPLUG -el $DKEL -hardRst -w build/Project_sign.bin 0x70100000

Nota: Solo el binario de la aplicación necesita ser programado si el FSBL y network_data.hex fueron programados previamente.

Problemas Conocidos y Limitaciones

  • (NN_WIDTH * NN_BPP) debe ser un múltiplo de 16.
  • (LCD_BG_WIDTH * 2) debe ser un múltiplo de 16.

Documentación Adicional de la Aplicación

Resumen de la Aplicación

Flujo de Datos de la Aplicación

Diagrama de Temporización de la Aplicación

Detalles de Huella de Memoria

Datos de Solo Lectura

NombreTamañoUbicaciónNotas
network_data10.59 MB.rodataFLASH xSPI2 8b

Datos de Lectura-Escritura

NombreTamañoUbicaciónNotas
lcd_bg_buffer2300 KB.psram_bssPSRAM / (800x480x2) x 3 / RGB565
lcd_fg_buffer1500 KB.psram_bssPSRAM / (800x480x2) x 2 / ARGB4444
nn_input_buffers294 KB.psram_bssPSRAM / (224x224x3) x 2 / RGB888
nn_output_buffers12 KB.bssSRAM / 5880 x 2
activations507 KB0x34200000NPURAMS
threads stacks20 KB.bssSRAM / 4096 * 5

DCMIPP e ISP

Resumen de DCMIPP

  • El Pipe 1 se habilita usando CMW_CAMERA_Start(DCMIPP_PIPE1, *ptr_dst, CAMERA_MODE_CONTINUOUS); para transmitir continuamente imágenes desde imx335 al lcd_bg_buffer[] con buffer DISPLAY_BUFFER_NB. Nota que ptr_dst se actualizará en el frame_event del pipe1.
  • El Pipe 2 se habilita usando CMW_CAMERA_Start(DCMIPP_PIPE2, *ptr_dst, CAMERA_MODE_CONTINUOUS); para transmitir continuamente imágenes desde imx335 al nn_input_buffers[] con doble buffer. Nota que ptr_dst se actualizará en el frame_event del pipe2. Esto permite descartar el frame anterior si el buffer aún está en uso por el hilo nn.
  • Para cada captura, la configuración ISP se actualiza para mejorar la calidad de imagen dependiendo de las condiciones de iluminación. Se inicializa a través de ISP_Init y luego se ejecuta con ISP_BackgroundProcess.

Para más detalles sobre DCMIPP, ver la sección Digital Camera Interface Pixel Pipeline (DCMIPP) en el Manual de Referencia STM32N6.

Resumen de Arranque

Modo Dev

Arranque desde Flash con First Stage Boot Loader

Opciones de Compilación

Algunas características se habilitan usando opciones de compilación o usando app_config.h:

Esta documentación explica esas características y cómo modificarlas.

Orientación de la Cámara

Las cámaras permiten voltear la imagen a lo largo de dos ejes.

  • CMW_MIRRORFLIP_MIRROR: Modo selfie
  • CMW_MIRRORFLIP_FLIP: Voltear boca abajo
  • CMW_MIRRORFLIP_FLIP_MIRROR: Voltear ambos ejes
  • CMW_MIRRORFLIP_NONE: Por defecto
  1. Abre app_config.h.

  2. Cambia la definición CAMERA_FLIP:

/* Defines: CMW_MIRRORFLIP_NONE; CMW_MIRRORFLIP_FLIP; CMW_MIRRORFLIP_MIRROR; CMW_MIRRORFLIP_FLIP_MIRROR; */

#define CAMERA_FLIP CMW_MIRRORFLIP_NONE

Despliega Tu Modelo TFLite

Para ejecutar tu propio modelo de detección de objetos, sigue estos pasos:

1. Generar Modelo C desde Modelo TFLite

Para generar el network.c, network_ecblobs.h y el archivo que contiene los parámetros de red, debes instalar STM32Cube.AI

  1. Agrega <folderInstall>/Utilities/<your_os>/ a tu path para que stedgeai sea conocido por tu bash.

  2. Agrega <stm32cubeide_folderInstall>/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-<plugin_version>/tools/bin a tu path para que arm-none-eabi-objcopy sea conocido por tu bash.

cd Model
stedgeai generate --no-inputs-allocation --no-outputs-allocation --model quantized_tiny_yolo_v2_224_.tflite --target stm32n6 --st-neural-art default@user_neuralart.json
cp st_ai_output/network_ecblobs.h .
cp st_ai_output/network.c .
cp st_ai_output/network_atonbuf.xSPI2.raw network_data.xSPI2.bin
arm-none-eabi-objcopy -I binary network_data.xSPI2.bin --change-addresses 0x70380000 -O ihex network_data.hex

Puedes encontrar el siguiente script en Model/generate-n6-model.sh

2. Programar Tus Datos de Red

Ahora puedes programar tus datos de red en la flash externa.

export DKEL="<STM32CubeProgrammer_N6 Install Folder>/bin/ExternalLoader/MX66UW1G45G_STM32N6570-DK.stldr"

# Pesos y parámetros
STM32_Programmer_CLI -c port=SWD mode=HOTPLUG -el $DKEL -hardRst -w Model/network_data.hex

3. Proporcionar Información NN en app_config.h

Necesitas editar las últimas líneas de Inc/app_config.h para hacer la aplicación compatible con tu red.

Tipo de Post Proceso

Esta aplicación soporta cuatro tipos de post-procesamiento de detección de objetos. Puedes seleccionar uno de estos. Edita POSTPROCESS_TYPE con uno de estos valores.

#define POSTPROCESS_OD_YOLO_V2_UF       (10) /* Yolov2 postprocessing; Input model: uint8; output: float32         */
#define POSTPROCESS_OD_YOLO_V5_UU (11) /* Yolov5 postprocessing; Input model: uint8; output: uint8 */
#define POSTPROCESS_OD_YOLO_V8_UF (12) /* Yolov8 postprocessing; Input model: uint8; output: float32 */
#define POSTPROCESS_OD_YOLO_V8_UI (13) /* Yolov8 postprocessing; Input model: uint8; output: int8 */
Información de Tamaño NN

Edita tu NN_WIDTH y NN_HEIGHT.

ADVERTENCIA: NN_WIDTH * NN_BPP debe ser un múltiplo de 16.

ADVERTENCIA: Solo el formato RGB888 ha sido probado.

Etiquetas de Clase

Modifica el NB_CLASSES y classes_table con tus propias etiquetas de clase y número de clases.

Retraso de Pantalla

Usar DISPLAY_DELAY permite retrasar la imagen mostrada para que la información mostrada del modelo esté alineada con la imagen mostrada. Ajusta este valor según el tiempo de inferencia del modelo.

Configurar Parámetros de Post Proceso a Través de Archivo de Usuario

Para cambiar tus parámetros de post-proceso, necesitas editar el Inc/postprocess_conf.h.

La documentación de la biblioteca de post-procesamiento está disponible en Postprocess lib.

Puedes editar umbrales IOU, valores de ancla, y otros parámetros.

Algunos de estos parámetros necesitan estar alineados con tu modelo (número de clases, por ejemplo).

Configurar Tamaño del Buffer de Salida

Edita NN_BUFFER_OUT_SIZE para que tenga el tamaño en bytes de tu tensor de salida.

4. Compilar Aplicación

Una vez que tus datos de red hayan sido programados (paso 2) y los detalles de red configurados (paso 3), puedes compilar tu aplicación siguiendo:

Compilación y ejecución de aplicación

5. Ejecutar Aplicación

Modo Dev

Ver la sección Compilación y ejecución de aplicación para más detalles.

Arranque desde Flash

Ver Programar aplicación en flash externa para programar tu firmware.

Cómo Programar Archivos Hex

  1. Asegúrese de que la placa esté en modo dev (interruptor de arranque en posición de modo dev).
  2. Abra STM32CubeProgrammer.
  3. Seleccione el flash MX66UW1G45G_STM32N6570-DK a través de la pestaña External loaders.
  4. Configuración ST-Link: establezca el modo en "Hot plug".
  5. Conecte la placa.
  6. Desde la pestaña "Erasing & programming", seleccione el archivo Binary/ai_assistant_fsbl.hex.
  7. Espere a que se complete la programación.
  8. Desde la pestaña "Erasing & programming", seleccione el archivo Binary/network_data.hex.
  9. Espere a que se complete la programación.
  10. Desde la pestaña "Erasing & programming", seleccione el archivo Binary/AI_Assistant_Ref_Project.hex.
  11. Espere a que se complete la programación.

Recursos

Soporte Técnico

Este producto está respaldado por STMicroelectronics. Para cualquier problema técnico o consulta, póngase en contacto con: Contacto de Soporte Técnico: [Haga clic aquí]

Loading Comments...