Skip to main content

AI Assistant 入门指南

介绍

AI Assistant 开发套件由 Seeed Studio 和 STMicroelectronics 联合打造。这是一个专为前沿边缘 AI 应用设计的开发平台。以高性能 STM32N657 MCU 为核心,集成了 ST Neural-ART AI 加速器,完美融合了强大的 AI 计算能力与经典 MCU 的低功耗、小尺寸和成本效益优势。该套件配备了板载全局快门相机、带 AI 处理单元的 IMU 传感器、高清触摸屏和 Wi-Fi 模块,为开发下一代智能视觉和语音交互产品提供了完整的硬件和软件解决方案。

特性

  • 特性 1:旗舰级 AI 微控制器 采用 ST STM32N657,具有高性能 Arm® Cortex®-M55 内核和集成的 ST Neural-ART NPU,可提供高达 600 GOPS 的高效 AI 模型加速。
  • 特性 2:专业级视觉传感器 配备 ST VD55G1 全局快门相机,为快速移动物体提供清晰、无失真的图像,这对高精度计算机视觉任务至关重要。
  • 特性 3:带 ISPU 的智能感知 配备内置智能传感器处理单元(ISPU)的 LSM6DSO16IS IMU,可实现超低功耗手势和活动识别,无需唤醒主处理器。
  • 特性 4:丰富的交互外设 集成 4.0 英寸 480x480 电容触摸显示屏、高保真数字麦克风和音频编解码器,为开箱即用的交互式 AI 应用开发提供完整的硬件基础。
  • 特性 5:全面的连接性 包含板载 Wi-Fi 模块,实现无缝 IoT 连接,以及 USB-C 端口和多个扩展接头,提供最大的开发灵活性。

硬件概述

在开始之前,了解产品的一些基本参数是非常重要的。下表提供了 AI Assistant 特性的信息。

类别特性规格
核心系统主控制器STMicroelectronics STM32N657X0H3Q
核心架构Arm® Cortex®-M55
神经处理单元ST Neural-ART, 600 GOPS
外部存储器128MB NOR Flash, 32MB DRAM
传感器相机STMicroelectronics VD55G1 (800x700, 全局快门)
IMUSTMicroelectronics LSM6DSO16IS (6 轴,内置 ISPU)
磁力计STMicroelectronics LIS2MDL
外设显示屏4.0" TFT LCD (480x480), 电容触摸
音频Cirrus Logic WM8994 编解码器 & ST MP34DT06JTR 数字麦克风
连接性无线MXCHIP EMW3080 Wi-Fi 模块
接口USB-C x1, SWD 端口 x1, 麦克风扩展 x1, RPi 相机接口 x1
机械和电源尺寸(外壳)130mm x 90mm
电源供应5V 通过 USB-C 或锂电池端口

电路板顶层概述

电路板底层概述


开始使用 AI Assistant 参考应用

要开始使用,请从 GitHub 链接克隆仓库git clone https://github.com/stm32-hotspot/STM32N6-AI-Assistant-People-Detection.git 到您首选的本地文件夹。

计算机视觉应用,用于在 AI Assistant 板上部署目标检测模型。它基于 STM32N6570-DK 板的 n6-ai-people-detection-v1.0.0 应用包的官方发布版本。

此应用预构建了人员检测模型"TinyYOLOv2"。

本节提供应用的概述。更多文档可在应用的附加文档中找到。

此示例演示的特性

  • 多线程应用流程(Azure RTOS ThreadX)
  • NPU 加速量化 AI 模型推理
  • 双 DCMIPP 管道
  • DCMIPP 裁剪、抽取、缩放
  • LTDC 双层实现
  • DCMIPP ISP 使用
  • 开发模式
  • 从外部 Flash 启动

硬件支持

  • AI Assistant 套件

  • 支持 3 种相机:

    • MB1854B IMX335

带 VD55G1 相机的 AI Assistant 套件。

工具版本

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

右侧连接器

左侧连接器

调试器连接

接头引脚定义

启动模式

STM32N6 没有任何内部 flash。要在重启后保留固件,您必须将其编程到外部 flash 中。 或者,您可以直接从 SRAM(开发模式)加载固件。但是,在开发模式下,如果您关闭板子,程序将丢失。

启动模式:

  • 开发模式:从调试会话在 RAM 中加载固件(启动开关向右)
  • 从 flash 启动:将固件编程到外部 flash(启动开关向左)

使用预构建二进制文件快速开始

烧录预构建二进制文件

必须使用以下程序将三个二进制文件编程到板子的外部 flash 中:

  1. 将 BOOT 开关切换到上位置。
  2. 编程 Binary/ai_assistant_fsbl.hex(只需执行一次)(第一阶段引导加载程序)。
  3. 编程 Binary/network_data.hex(网络参数;仅在网络更改时需要更改)。
  4. 编程 Binary/AI_Assistant_Ref_Project.hex(固件应用)。
  5. 将 BOOT 开关切换到下位置。
  6. 执行断电/上电序列。

如何使用 STM32CubeProgrammer UI 编程 Hex 文件

请参阅[如何编程 Hex 文件 STM32CubeProgrammer](#如何烧录 Hex 文件)。

如何使用命令行编程 Hex 文件

确保将 STM32CubeProgrammer bin 文件夹添加到您的路径中。

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

使用源代码快速开始

在构建和运行应用程序之前,您必须编程 network_data.hex(模型权重和偏置)。

除非您更改 AI 模型,否则此步骤只需执行一次。 详细信息请参见使用预构建二进制文件快速开始

有关启动模式的更多信息,请参见启动概述

应用程序构建和运行 - 开发模式

确保将开关拨到右侧。

STM32CubeIDE

双击 STM32CubeIDE/.project 在 STM32CubeIDE 中打开项目。使用构建和运行按钮进行构建和运行。

Makefile

在运行以下命令之前,请确保这些命令在您的 PATH 中。

  1. 使用提供的 Makefile 构建项目:
make -j8
  1. 打开连接到 STM32 目标的 GDB 服务器:
ST-LINK_gdbserver -p 61234 -l 1 -d -s -cp <path-to-stm32cubeprogramer-bin-dir> -m 1 -g
  1. 在单独的终端会话中,启动 GDB 会话将固件映像加载到设备内存中:
$ arm-none-eabi-gdb build/Project.elf
(gdb) target remote :61234
(gdb) monitor reset
(gdb) load
(gdb) continue

应用程序构建和运行 - 从闪存启动

确保将开关拨到右侧。

STM32CubeIDE

双击 STM32CubeIDE/.project 在 STM32CubeIDE 中打开项目。使用构建按钮进行构建。

Makefile

在运行以下命令之前,请确保它们在您的 PATH 中。

  1. 使用提供的 Makefile 构建项目:
make -j8

一旦您的应用程序使用 Makefile、STM32CubeIDE 或 EWARM 构建完成,您可以为 bin 文件添加签名:

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

您可以在地址 0x70100000 处编程已签名的 bin 文件。

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

# Adapt build path to your IDE
STM32_Programmer_CLI -c port=SWD mode=HOTPLUG -el $DKEL -hardRst -w build/Project_sign.bin 0x70100000

注意:如果之前已编程 FSBL 和 network_data.hex,则只需编程应用程序二进制文件。

已知问题和限制

  • (NN_WIDTH * NN_BPP) 必须是 16 的倍数。
  • (LCD_BG_WIDTH * 2) 必须是 16 的倍数。

应用程序的附加文档

应用程序概述

应用程序数据流

应用程序时序图

内存占用详情

只读数据

名称大小位置备注
network_data10.59 MB.rodataFLASH xSPI2 8b

读写数据

名称大小位置备注
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 和 ISP

DCMIPP 概述

  • 管道 1 使用 CMW_CAMERA_Start(DCMIPP_PIPE1, *ptr_dst, CAMERA_MODE_CONTINUOUS); 启用,以连续将图像从 imx335 传输到 DISPLAY_BUFFER_NB 缓冲的 lcd_bg_buffer[]。注意 ptr_dst 将在 pipe1 frame_event 时更新。
  • 管道 2 使用 CMW_CAMERA_Start(DCMIPP_PIPE2, *ptr_dst, CAMERA_MODE_CONTINUOUS); 启用,以连续将图像从 imx335 传输到双缓冲的 nn_input_buffers[]。注意 ptr_dst 将在 pipe2 frame_event 时更新。这允许在缓冲区仍被 nn 线程使用时丢弃前一帧。
  • 对于每次捕获,ISP 配置会根据照明条件更新以增强图像质量。它通过 ISP_Init 初始化,然后通过 ISP_BackgroundProcess 执行。

有关 DCMIPP 的更多详细信息,请参见 STM32N6 参考手册中的数字摄像头接口像素管道 (DCMIPP) 部分。

启动概述

开发模式

使用第一阶段引导加载程序从闪存启动

构建选项

某些功能通过构建选项或使用 app_config.h 启用:

本文档解释了这些功能以及如何修改它们。

摄像头方向

摄像头允许沿两个轴翻转图像。

  • CMW_MIRRORFLIP_MIRROR:自拍模式
  • CMW_MIRRORFLIP_FLIP:上下翻转
  • CMW_MIRRORFLIP_FLIP_MIRROR:沿两个轴翻转
  • CMW_MIRRORFLIP_NONE:默认
  1. 打开 app_config.h

  2. 更改 CAMERA_FLIP 定义:

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

#define CAMERA_FLIP CMW_MIRRORFLIP_NONE

部署您的 TFLite 模型

要运行您自己的目标检测模型,请按照以下步骤操作:

1. 从 TFLite 模型生成 C 模型

要生成 network.cnetwork_ecblobs.h 和包含网络参数的文件,您必须安装 STM32Cube.AI

  1. <folderInstall>/Utilities/<your_os>/ 添加到您的路径中,以便您的 bash 识别 stedgeai

  2. <stm32cubeide_folderInstall>/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-<plugin_version>/tools/bin 添加到您的路径中,以便您的 bash 识别 arm-none-eabi-objcopy

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

您可以在 Model/generate-n6-model.sh 找到以下脚本

2. 编程您的网络数据

现在您可以在外部闪存中编程您的网络数据。

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

# Weights and parameters
STM32_Programmer_CLI -c port=SWD mode=HOTPLUG -el $DKEL -hardRst -w Model/network_data.hex

3. 在 app_config.h 中提供 NN 信息

您需要编辑 Inc/app_config.h 的最后几行,以使应用程序与您的网络兼容。

后处理类型

此应用程序支持四种类型的目标检测后处理。您可以选择其中一种。使用以下值之一编辑 POSTPROCESS_TYPE

#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 */
NN 大小信息

编辑您的 NN_WIDTHNN_HEIGHT

警告: NN_WIDTH * NN_BPP 必须是 16 的倍数。

警告: 仅测试了 RGB888 格式。

类别标签

使用您自己的类别标签和类别数量修改 NB_CLASSESclasses_table

显示延迟

使用 DISPLAY_DELAY 可以延迟显示的图像,以便模型的显示信息与显示的图像对齐。根据模型推理时间调整此值。

通过用户文件配置后处理参数

要更改您的后处理参数,您需要编辑 Inc/postprocess_conf.h

后处理库的文档可在 Postprocess lib 获得。

您可以编辑 IOU 阈值、锚点值和其他参数。

其中一些参数需要与您的模型对齐(例如类别数量)。

配置输出缓冲区大小

编辑 NN_BUFFER_OUT_SIZE,使其具有输出张量的字节大小。

4. 构建应用程序

一旦您的网络数据已编程(步骤 2)并且网络详细信息已配置(步骤 3),您可以按照以下方式构建您的应用程序:

应用程序构建和运行

5. 运行应用程序

开发模式

更多详细信息请参见应用程序构建和运行部分。

从闪存启动

请参见在外部闪存中编程应用程序来编程您的固件。

如何烧录 Hex 文件

  1. 确保开发板处于开发模式(启动开关在开发模式位置)。
  2. 打开 STM32CubeProgrammer。
  3. 通过 External loaders 选项卡选择 MX66UW1G45G_STM32N6570-DK 闪存。
  4. ST-Link 配置:将模式设置为"Hot plug"。
  5. 连接开发板。
  6. 从"Erasing & programming"选项卡中,选择 Binary/ai_assistant_fsbl.hex 文件。
  7. 等待烧录完成。
  8. 从"Erasing & programming"选项卡中,选择 Binary/network_data.hex 文件。
  9. 等待烧录完成。
  10. 从"Erasing & programming"选项卡中,选择 Binary/AI_Assistant_Ref_Project.hex 文件。
  11. 等待烧录完成。

资源

技术支持

本产品由 STMicroelectronics 提供支持。 如有任何技术问题或咨询,请联系: 技术支持联系方式: [点击这里]

Loading Comments...