图像分类
基于 Seeed Studio Grove Vision AI 模块 V2(Himax WiseEye2)

本实验将带你体验如何使用 Seeed Studio Grove Vision AI Module V2 ,这是一款专为嵌入式机器学习设计的小巧强大设备。该模块基于 Himax WiseEye2 芯片,能够在边缘设备上实现 AI 能力,非常适合边缘机器学习(Edge ML)应用。
简介
此前我们已经体验过 Seeed Studio 预置的多种计算机视觉模型,或通过 SenseCraft AI Studio 进行图像分类,但并未指定具体模型。现在,我们将从零开始开发自己的图像分类项目,自主选择数据和模型。
下图展示了项目的主要步骤及各环节的工作内容:

项目目标
任何机器学习(ML)项目的第一步都是明确目标。本项目旨在检测并分类一张图片中的两种特定物体。我们选用两个小玩具:一个机器人和一只巴西鹦鹉(Periquito),同时还会采集没有这两种物体的背景图片。

数据采集
明确了 ML 项目目标后,下一步也是最关键的一步就是数据集采集。如果你的项目需要使用公开数据集(如用于人物检测),可以直接下载 Wake Vision 数据集。
但在本项目中,我们需要的图片并未公开,因此需要自行采集。你可以用手机、电脑摄像头等设备拍照,离线或通过 Edge Impulse Studio 采集。
如果想用 Grove Vision AI V2 采集数据,可以像前面的实验一样用 SenseCraft AI Studio,或在本实验“后处理 / 获取视频流”部分介绍的 camera_web_server
示例。

本实验我们将使用 SenseCraft AI Studio 进行数据采集。
使用 SenseCraft AI Studio 采集数据
在 SenseCraft AI Studio 中,打开 训练 标签页。
默认情况下,如果有可用摄像头,会用 WebCam 训练 Classification
模型。我们选择 Grove Vision AI V2
,点击绿色 [Connect]
按钮 (1),弹出窗口后选择对应端口 (2),再点击蓝色 [Connect]
按钮 (3)。

此时会显示 Grove Vision AI V2 采集的实时图像。
图像采集
我们需要创建类别,建议按字母顺序:
- 类别 1:background(背景)
- 类别 2:periquito(鹦鹉)
- 类别 3:robot(机器人)

选择某个类别(窗口会有绿色边框),持续按下预览区下方的绿色按钮即可采集图片,采集的图片会显示在样本区。

采集完成后,建议检查并删除不合格的图片。

每个类别建议采集约 50 张图片。采集完三类后,分别在每个类别菜单中选择 Export Data
导出数据。

电脑下载区会得到三个以类别命名的 zip 文件,每个 zip 内含对应类别的图片文件夹。
上传数据集到 Edge Impulse Studio
我们将用 Edge Impulse Studio 训练模型。 Edge Impulse 是领先的边缘设备机器学习开发平台。
- 登录 Edge Impulse 账号(可免费注册)。
- 创建新项目:

数据集每个标签约 50 张图片,40 张用于训练,10 张用于测试。
Impulse 设计与预处理
Impulse 设计
Impulse 会将原始数据(本例为图片)进行特征提取(如图片缩放),再通过学习模块进行分类。
图像分类是深度学习最常见的应用之一,但通常需要大量数据。我们每类只有约 50 张图片,远远不够。解决办法是利用“迁移学习”(Transfer Learning, TL),即在已有大规模数据训练好的模型基础上微调。这样,即使数据量较小,也能获得不错的效果。

因此,我们将原始图片缩放至 96x96 像素,输入到迁移学习模块:

为便于对比,我们保持图片尺寸为 96x96。实际上 Grove Vision AI V2 内部 SRAM 达 2.4 MB,可支持更大图片(如 160x160)。
右上角选择 Target
设备为 Himax WiseEye2 (M55 400 MHz + U55)
。
预处理(特征生成)
除缩放图片外,还可选择转为灰度或保留 RGB。建议在 Image
部分选择 [RGB]
,此时每个样本为 27,648 维(96x96x3)。点击 [Save Parameters]
后进入 Generate Features
,再点击 [Generate Features]
生成特征。
模型设计、训练与测试
Google 于 2017 年推出 MobileNetV1 ,2018 年发布 MobileNetV2: Inverted Residuals and Linear Bottlenecks ,2019 年推出 V3。MobileNet 系列是专为移动端设计的通用视觉神经网络,支持分类、检测等任务,特点是小巧、低延迟、低功耗。
MobileNet 还引入了宽度因子 α(alpha),可进一步缩小模型体积、降低计算量。Edge Impulse Studio 提供了多种 MobileNet V1/V2 版本(96x96/160x160),α 从 0.05 到 1.0 可选。α 越大,准确率越高但资源消耗也越大;α 越小,模型更轻量。
本实验选用 MobileNet V2 0.1 作为基础模型(也可选更大 α)。模型输出层前有 8 个神经元,Dropout 率 10%,防止过拟合。
深度学习常用的另一个技巧是数据增强(Data Augmentation),即在训练过程中对数据做随机变换(如翻转、裁剪、旋转),以提升模型泛化能力。
超参数设置如下:
- 训练轮数(Epochs):20
- 批量大小(Batch Size):32
- 学习率(Learning Rate):0.0005
- 验证集比例:20%
训练结果:

模型分析显示 RAM 占用 146 KB,Flash 占用 187 KB,远低于 Grove AI Vision (V2) 的 2.5 MB SRAM,推理延迟约 4 ms。
虽然验证集准确率达 100%,但用测试集(量化 Int8 模型)测试时准确率为 81%。对于本实验已足够。
模型部署
在 Deployment 标签页选择 Seeed Grove Vision AI Module V2 (Himax WiseEye2)
,点击 [Build]
,下载生成的 ZIP 文件。
ZIP 包内含 model_vela.tflite
,这是用 Arm Vela 编译器优化过的 TensorFlow Lite 模型,适用于 Ethos-U NPU。

可按 README.txt
指引刷写模型,或直接用 SenseCraft AI Studio。本实验采用后者。
在 SenseCraft AI Studio 部署模型
在 SenseCraft AI Studio 的 Vision Workspace
标签页连接设备:

此时会显示设备上最后上传的模型。点击绿色 [Upload Model]
按钮,弹窗中填写模型名称、模型文件,并输入类别名称(objects)。类别建议按字母顺序:0: background
,1: periquito
,2: robot
,然后点击 [Send]
。

几秒后模型会被上传(刷写)到设备,摄像头实时画面会显示在 Preview 区域,下方显示分类结果。可在 Settings 调节推理置信度阈值。
在 Device Logger 可查看串口日志,观察延迟:预处理约 1~2 ms,推理约 4~5 ms,与 Edge Impulse Studio 估算一致。

其他截图示例:

该模型功耗约 70 mA,约合 0.4 W。
图像分类(非官方)基准测试
目前常见的嵌入式视觉 tinyML 开发板有 ESP32 CAM、Seeed XIAO ESP32S3 Sense 和 Arduino Nicla Vision。
我们将同样训练好的 MobilenetV2 96x96 α=0.1 模型部署到 ESP-CAM、XIAO 和树莓派 Zero W2,结果如下:

Grove Vision AI V2(ARM Ethus-U55)推理速度约为 ARM-M7 设备的 14 倍,Xtensa LX6(ESP-CAM)的 100 倍以上。即使对比树莓派,U55 也快近一倍,且功耗更低。详见 完整对比文章 。
后处理
模型已成功刷写并能正确分类图片后,我们希望将推理结果通过 IIC 输出给主控板,实现完全离线(如电池供电)运行。
主控板可选 XIAO、Arduino、树莓派等任意微控制器。
获取视频流
Grove Vision AI (V2) 本地完成图像处理和推理,推理结果通过 IIC 输出给 XIAO。我们将用 Arduino SSMA 库处理数据流(不含模型推理)。
Grove Vision AI (V2) 通过 IIC(地址 0x62)与 XIAO 通信,图片数据通过 USB 串口传输。
步骤 1: 从 GitHub 下载 Arduino SSMA 库 zip 包。

步骤 2: 在 Arduino IDE 通过 sketch > Include Library > Add .Zip Library
安装。
步骤 3: 安装 ArduinoJSON 库。

步骤 4: 安装 Eigen 库。

步骤 5: 用排针将 XIAO 与 Grove Vision AI (V2) 连接。

注意: Grove Vision AI 的 Type-C 接口方向需与 XIAO 的 Type-C 接口一致。
步骤 6: 用 USB-C 线连接 XIAO 到电脑。

步骤 7: 在 Arduino IDE 选择 Xiao 板卡和对应端口。
如需将视频流推送到网页,建议用带 WiFi 和大内存的 XIAO ESP32S3。选择 XIAO_ESP32S3
和对应端口:

默认 PSRAM 关闭,需在 Tools
菜单将 PSRAM 设为 "OPI PSRAM"
。

步骤 8: 打开 Arduino IDE 示例:
File
-> Examples
-> Seeed_Arduino_SSCMA
-> camera_web_server
。
编辑 camera_web_server.ino
中的 ssid
和 password
,填写 Wi-Fi 信息。
步骤 9: 上传程序,打开串口监视器,连接 Wi-Fi 后会显示板卡 IP 地址。

用浏览器访问该地址,进入视频应用。点击 [Sample Only]
和 [Start Stream]
仅查看 Grove Vision AI V2 的视频流。

如需采集图片数据集,可用该应用保存视频帧,点击 [Save Frame]
即可下载图片。

若不选 [Sample Only]
,理论上推理结果会叠加在视频上,但图像分类模型不会显示,仅目标检测或姿态估计模型会显示推理结果。
如用 YoloV8 进行人物检测:

获取推理结果
- 打开
File
->Examples
->Seeed_Arduino_SSCMA
->inference_class
示例。 - 上传程序,打开串口监视器。
- 用摄像头对准目标物体,即可在串口终端看到推理结果。

Arduino IDE 下推理时,平均电流 160 mA(800 mW),传输图片到 App 时峰值 330 mA(1.65 W)。
用 LED 做后处理
本实验后处理目标:检测到特定图片(如 Periquito,标签 1)时点亮用户 LED,检测到机器人或背景时关闭 LED。
将以下代码复制到 IDE:
#include <Seeed_Arduino_SSCMA.h>
SSCMA AI;
void setup()
{
AI.begin();
Serial.begin(115200);
while (!Serial);
Serial.println("Inferencing - Grove AI V2 / XIAO ESP32S3");
// 板载 LED 引脚初始化
pinMode(LED_BUILTIN, OUTPUT);
// 默认关闭 LED(低电平点亮,高电平熄灭)
digitalWrite(LED_BUILTIN, HIGH);
}
void loop()
{
if (!AI.invoke()){
Serial.println("\nInvoke Success");
Serial.print("Latency [ms]: prepocess=");
Serial.print(AI.perf().prepocess);
Serial.print(", inference=");
Serial.print(AI.perf().inference);
Serial.print(", postpocess=");
Serial.println(AI.perf().postprocess);
int pred_index = AI.classes()[0].target;
Serial.print("Result= Label: ");
Serial.print(pred_index);
Serial.print(", score=");
Serial.println(AI.classes()[0].score);
turn_on_led(pred_index);
}
}
/**
* @brief turn_off_led function - turn-off the User LED
*/
void turn_off_led(){
digitalWrite(LED_BUILTIN, HIGH);
}
/**
* @brief turn_on_led function used to turn on the User LED
* @param[in] pred_index
* label 0: [0] ==> ALL OFF
* label 1: [1] ==> LED ON
* label 2: [2] ==> ALL OFF
* label 3: [3] ==> ALL OFF
*/
void turn_on_led(int pred_index) {
switch (pred_index)
{
case 0:
turn_off_led();
break;
case 1:
turn_off_led();
digitalWrite(LED_BUILTIN, LOW);
break;
case 2:
turn_off_led();
break;
case 3:
turn_off_led();
break;
}
}
该代码通过 Seeed_Arduino_SSCMA.h 库与 Grove Vision AI V2 通信,初始化 AI 模块和 LED,并开启串口通信。
loop()
循环调用 invoke()
进行推理,推理成功后输出各阶段耗时和推理结果(类别及置信度),并根据分类结果点亮或关闭 LED。
推理结果如下:
检测到 Periquito(标签 1)时 LED 亮:

检测到机器人(标签 2)或背景(标签 0)时 LED 熄灭:

此时可用电池为 Grove Vision AI V2 + Xiao ESP32S3 供电,离线显示推理结果,功耗约 165 mA(825 mW)。
也可通过 WiFi、BLE 等主控板支持的通信协议发送推理结果。
可选:外接设备后处理
边缘 AI 最大优势之一是设备可完全离线运行,实现与现实世界的交互。前文已用板载 LED 实现,这里演示外接 LED(或其他执行器)。

LED 需通过 220 欧姆电阻接 XIAO GND。

我们将修改前述代码,实现三色 LED 控制:
目标:检测到 Periquito 时点亮绿色 LED,检测到机器人点亮黄色 LED,检测到背景点亮红色 LED。
依然用 Arduino SSMA 库,代码如下:
#include <Seeed_Arduino_SSCMA.h>
SSCMA AI;
// 定义 LED 引脚
// LED 负极通过 220 欧姆电阻接 XIAO GND
int LEDR = D1; // XIAO ESP32S3 引脚 1
int LEDY = D2; // XIAO ESP32S3 引脚 2
int LEDG = D3; // XIAO ESP32S3 引脚 3
void setup()
{
AI.begin();
Serial.begin(115200);
while (!Serial);
Serial.println("Inferencing - Grove AI V2 / XIAO ESP32S3");
// 初始化外接 LED
pinMode(LEDR, OUTPUT);
pinMode(LEDY, OUTPUT);
pinMode(LEDG, OUTPUT);
// 默认关闭所有 LED(高电平点亮,低电平熄灭)
digitalWrite(LEDR, LOW);
digitalWrite(LEDY, LOW);
digitalWrite(LEDG, LOW);
}
void loop()
{
if (!AI.invoke()){
Serial.println("\nInvoke Success");
Serial.print("Latency [ms]: prepocess=");
Serial.print(AI.perf().prepocess);
Serial.print(", inference=");
Serial.print(AI.perf().inference);
Serial.print(", postpocess=");
Serial.println(AI.perf().postprocess);
int pred_index = AI.classes()[0].target;
Serial.print("Result= Label: ");
Serial.print(pred_index);
Serial.print(", score=");
Serial.println(AI.classes()[0].score);
turn_on_leds(pred_index);
}
}
/**
* @brief turn_off_leds function - turn-off all LEDs
*/
void turn_off_leds(){
digitalWrite(LEDR, LOW);
digitalWrite(LEDY, LOW);
digitalWrite(LEDG, LOW);
}
/**
* @brief turn_on_leds function used to turn on a specific LED
* @param[in] pred_index
* label 0: [0] ==> 红灯亮
* label 1: [1] ==> 绿灯亮
* label 2: [2] ==> 黄灯亮
*/
void turn_on_leds(int pred_index) {
switch (pred_index)
{
case 0:
turn_off_leds();
digitalWrite(LEDR, HIGH);
break;
case 1:
turn_off_leds();
digitalWrite(LEDG, HIGH);
break;
case 2:
turn_off_leds();
digitalWrite(LEDY, HIGH);
break;
case 3:
turn_off_leds();
break;
}
}
Grove Vision AI V2 与 XIAO 通过 I2C Grove 连接,建议用 扩展板 (也可直接接线)。供电可用 USB-C 或电池。

运行效果如下:

绿灯峰值电流 240 mA(1.2 W),黄/红灯 14 mA(0.7 W),串口输出对功耗无影响。
总结
本实验完整演示了基于 Seeed Studio Grove Vision AI Module V2(Himax WiseEye2 芯片)的图像分类系统开发流程。从项目目标设定到模型部署与实际交互,涵盖了机器学习全流程。
Grove Vision AI V2 推理延迟仅 4-5ms,性能远超同类 tinyML 平台。基准测试显示,其速度为 ARM-M7 设备的 14 倍、ESP-CAM 的 100 倍以上,甚至比树莓派 Zero W2 还快近一倍,且功耗更低。
通过迁移学习,即使自定义图片数据集较小,也能获得良好分类效果。MobileNetV2 α=0.1 模型仅需 146 KB RAM、187 KB Flash,完全适配 Grove Vision AI V2 的 2.4 MB SRAM。
我们还探索了多种部署方式,从 SenseCraft AI Studio 实时查看推理结果,到用 LED 实现离线视觉反馈,甚至支持网页视频流。系统功耗低至 70mA(0.4W),驱动外设峰值 240mA(1.2W),非常适合电池供电场景。
本实验证明,复杂的计算机视觉任务已可完全在边缘设备独立完成,无需依赖云端或高性能计算机。借助 Edge Impulse Studio 和 SenseCraft AI Studio,即使没有深厚 ML 背景,也能轻松开发嵌入式 AI 应用。
随着边缘 AI 技术不断进步,像 Grove Vision AI Module V2 这样的小型高效设备将为智能传感器、物联网和日常嵌入式智能应用带来更多可能。
资源
- 使用 SenseCraft AI Studio 采集图片
- Edge Impulse Studio 项目
- SenseCraft AI Studio - Vision Workplace(模型部署)
- 更多 Himax 示例
- Arduino 示例代码