图像识别¶
把物品放到 Reef 的摄像头前录制几秒、在电脑上训练、部署到开发板,之后开发板的 NPU 会实时识别画面中央方框里的物品,并把结果叠加在摄像头画面上。全程在 IPRO AI Studio 的 Teach 页面完成,无需编写代码。
前提条件¶
- IPRO7AI Reef EVK 已烧录 Edge AI 固件,见烧录 Edge AI 固件。
- OV5640 摄像头模组:在断电状态下把排线插入 FPC1,并确认 SW7 在 CAM 位置。插拔摄像头排线前务必先拔掉 USB-C。
- 一条支持数据传输的 USB-C 线,连接 Reef 的 USB-C 与电脑。
- 已安装 IPRO AI Studio,并允许它使用摄像头,见安装 IPRO AI Studio。
工作原理¶
- OV5640 以 1280×720 采集,ISP 同时产生两路输出:640×360 的预览画面压缩成 MJPEG,作为标准 USB 摄像头(UVC)发送到电脑;画面中央的方框缩放成 128×128 送给 NPU。
- 预览画面中央的方框就是模型看到的范围。Teach 页面从预览画面中裁出同一个方框作为训练图片。
- 模型是冻结的 MobileNet 骨干网络加一个分类层,只训练最后一层,所以在电脑的 CPU 上几秒就能完成。每一层都在 NPU 上执行。
- 部署时,Studio 经 USB 串口把模型与类别名称发送到开发板;开发板先检查大小、CRC-32 与模型格式,确认无误才写入 Flash,再自动重启。
- 开发板把识别结果画在方框外面,方框里始终保持摄像头的原始图像,因为 Teach 页面要从这里裁出训练图片。
连接开发板¶
-
接上 USB-C:电脑上出现名为 IPRO7 UVC Cam 的摄像头与串口。没有出现时,说明开发板不在
image模式,先执行下一步。 -
打开 Teach 页面:在 Studio 左侧导航栏点击 Teach(macOS 为 Command+5,Windows 为 Ctrl+5)。开发板处于其他模式时,页面上方出现
The Reef is in … mode.与 Switch to Teach,点击后等待开发板重启(约 2 秒)。也可以在控制台输入mode image。 -
确认摄像头画面:Camera 区域出现 Reef 的摄像头画面,中央有绿色方框。板上还没有图像模型时,画面上方显示
IPRO AI TEACH与NO MODEL。 -
确认状态:页面上方状态栏的 Board 显示
on USB;Put it on the board 区域显示开发板当前的状态,例如Board found, no model on it yet.或Running 3 classes: …。
Teach 页面的界面¶
| 区域 | 说明 |
|---|---|
| 状态栏 | Board(on USB 表示找到开发板)、Crops(已采集的图片数)、Held-out accuracy(留出验证准确率)、Last deploy(上次部署所用的时间) |
| Camera | Reef 的摄像头画面。绿框是模型看到的范围,方框外是开发板叠加的识别结果。左下角的 Mirror 只对预览做左右镜像、不影响训练,默认关闭 |
| Hold to record | 按住录制当前选中的类别,每秒采集 5 张,松开即停止;按钮上显示类别名称,例如 Hold to record CLASS 1 |
| Classes | 类别列表。每行有名称、图片数、最近的缩略图,以及 Review(查看并删除不好的图片)、Clear(清除这一类的所有图片)、Remove(删除类别;BACKGROUND 不能删除)。上方有 Open…、Save…、+ Add class |
| Train | 骨干网络的下拉菜单与 Train 按钮;下方显示训练结果 |
| Put it on the board | 开发板当前运行的模型与 Deploy 按钮;下方逐步显示部署进度 |
建立类别并录制¶
-
命名类别:列表默认有 BACKGROUND、CLASS 1、CLASS 2。点击名称字段即可重命名,点击 + Add class 增加类别,最多 8 类。名称可使用英文字母、数字、空格、下划线、连字符与句点,最多 15 个字符;Studio 会转换为大写。开发板用内置的点阵字体显示名称,所以不支持中文。
-
录制 BACKGROUND:选中 BACKGROUND,方框内什么都不放,按住 Hold to record 几秒。这一类让开发板能回答“没有东西”,必须录制。
-
录制每一类物品:点击要录制的类别,把物品放进方框,按住 Hold to record 几秒。录制中预览画面的方框变成红色,标示
REC与类别名称;类别旁的数字是这一类已采集的图片数。 -
检查图片:每一类录完后点击 Review,删除不好的图片,例如物品有一半在方框外的画面。整类需要重录时点击 Clear。
录制要点:
- 小物品要靠近镜头,让它占满方框的大部分。
- 录制时慢慢转动、前后移动物品,让模型看到不同的角度与距离。外观或颜色相近的两类,在某些角度可能互相误判,请在这些角度多补录。
- 在实际使用的光线与背景下录制。训练时会自动为每张图加上左右镜像与两种亮度变化,无需另外录制镜像。
- 预览画面默认不镜像,看到的就是摄像头实际拍到的方向;如果想像照镜子一样操作,勾选 Mirror,不影响训练。
训练¶
-
选择骨干网络:在 Train 的下拉菜单中选择一个(见下表)。默认是 MobileNetV2 0.35。
-
点击 Train:训练在电脑的 CPU 上进行,通常几秒内完成。至少要有两类有图片,否则显示
Record at least two classes, then train.;没有图片的类别会被跳过。 -
查看结果:完成后显示
Trained in <秒数> s: <百分比> of held-out crops right,状态栏的 Held-out accuracy 同步更新。
每一类每 4 张图片中留出 1 张不参与训练,训练完后用来评分,这就是 Held-out accuracy。同一次录制的图片彼此很像,所以这个分数只代表“这些类别能区分开”,不代表换一个场景也一样准确。图片太少、无法留出验证数据时,显示 Too few crops to hold any out for checking.。
结果中出现 <A> taken for <B> (<n>x) 时,表示有 n 张 A 类的图片被判为 B 类,常见原因是录制时物品离开了方框。对这两类点击 Review,删除这些图片后重新训练。
| 下拉菜单的选项 | 特点 | 模型大小 |
|---|---|---|
| MobileNetV2 0.35(默认) | 较准确 | 461 KB |
| MobileNetV1 0.25 | 较快,模型约小一半 | 237 KB |
菜单上标示的 NPU 时间为近似值;INTELPRO 用 Edge AI 固件 2.0.0 实测,MobileNetV2 0.35 在板上 NPU 每次约 10.5 ms。
部署¶
-
确认开发板:Put it on the board 区域找到了开发板,并显示开发板当前运行的类别或
Board found, no model on it yet.。 -
点击 Deploy:Studio 依次执行三个步骤并打勾:Compile the model(生成模型)、Send and write(发送并写入)、Restart the board(重启)。
-
等待摄像头恢复:开发板重启时摄像头画面会暂时消失,画面显示
Deploying… the camera comes back when the board does.,这是正常的;重启后摄像头自动恢复。 -
确认完成:显示
On the board in <秒数> s与It now recognises …,列出开发板现在能识别的类别。
开发板在写入前会先检查收到的模型;被拒绝时,板上原有的模型不受影响,可以直接再部署一次。写入过程中断电或拔线时,由于图像识别只有一个槽位,板上会没有模型,摄像头画面显示 NO MODEL: DEPLOY INTERRUPTED,重新部署即可。
在板上查看结果¶
部署完成后,把物品放进方框,开发板的 NPU 实时识别,并把结果叠加在摄像头画面上:
| 位置 | 内容 |
|---|---|
| 上方 | IPRO AI TEACH、NPU 每次识别的时间与每秒识别次数 |
| 方框左侧 | 得分最高的类别及其置信度 |
| 方框右侧 | 每个类别的概率;得分最高的一类以绿色显示 |
| 下方 | 模型的类别数,例如 3 CLASSES |
这个画面是 Reef 自己绘制到 USB 摄像头图像中的,任何能打开 USB 摄像头的程序都能看到,不限于 Studio。
在控制台也可以确认状态:
| 命令 | 作用 |
|---|---|
teach |
模型状态、类别列表与实时概率、NPU 速率、USB 连接状态 |
teach print on/teach print off |
在控制台打印每一条结果 |
teach mirror on/teach mirror off |
镜像开发板发送的摄像头画面(默认关闭;Teach 页面需要摄像头的原始方向,平时请保持关闭) |
teach dump |
转储当前送给 NPU 的 128×128 输入 |
验证结果¶
- 每一类物品放进方框时,方框左侧显示该类的名称,右侧该类的概率最高并以绿色显示。
- 方框为空时显示 BACKGROUND。
- 画面下方的类别数与 Teach 页面的类别数相同。
- 重新插拔 USB-C 或重启后,模型仍在板上:摄像头画面不再显示
NO MODEL,Put it on the board 显示Running <n> classes: …。
补录与重新训练¶
训练分数只代表采集到的图片能区分开。请在实际场景中测试,发现误判就针对那个角度或光线补录,再训练、部署一次:
- 选中误判的类别,在误判的角度与光线下按住 Hold to record 补录;必要时点击 Review 删除不好的图片。
- 点击 Train。类别或图片改变后,训练结果区域会提示
The crops changed since training. Train again.。 - 点击 Deploy。
保存与重用采集到的图片:
- Save…:选择一个文件夹,Studio 在其中为每一类建立一个子文件夹,保存为 PNG 图片。
- Open…:打开同样结构的文件夹(每类一个子文件夹,
.png或.jpg),就能补录或重新训练,无需从头采集。128×128 的图片直接作为训练图片,其他尺寸的图片作为摄像头画面,裁出中央方框。文件夹名称就是类别名称。 -
同一个文件夹也可以不打开窗口,用命令行训练成模型套件再部署:
--backbone可以是mnv2_035(MobileNetV2 0.35)或mnv1_025(MobileNetV1 0.25)。
规格¶
| 项目 | 规格 |
|---|---|
| 摄像头画面(USB 摄像头) | 640×360 MJPEG,USB Full-Speed |
| 模型输入 | 画面中央方框(预览画面的 x 192–447、y 52–307),缩放成 128×128 RGB |
| 类别数 | 2~8 类(含 BACKGROUND) |
| 类别名称 | 最多 15 个字符:英文大写字母、数字、空格、下划线、连字符与句点 |
| 训练方式 | 冻结的 MobileNet 骨干网络,只训练最后一层;在电脑的 CPU 上运行 |
| 模型 | MobileNetV2 0.35(461 KB,63 层全部在 NPU 上)或 MobileNetV1 0.25(237 KB) |
| 板上 NPU 时间 | MobileNetV2 0.35 约 10.5 ms;模型加载约 0.74 秒 |
| 模型存放位置 | 图像模型槽位,可容纳 508 KB |
使用建议¶
- 必须有 BACKGROUND 类别。 没有它,方框为空时开发板仍会从已知类别中挑一个作为回答。
- 图像识别没有“不认识”这个答案。 没教过的物品会被归到最相似的一类,而且置信度可能很高。会出现在画面中的其他物品,请另外建立一个类别(例如 OTHER)并录制。
- 方框里的画面才是模型看到的内容;物品只出现在方框外时不会被识别。
故障排除¶
| 现象 | 原因 | 处理 |
|---|---|---|
摄像头列表里没有 IPRO7 UVC Cam;Studio 显示 No board with the Teach firmware on USB. |
开发板不在 image 模式、没有 Edge AI 固件,或 USB-C 线仅支持充电 |
在 Teach 页面点击 Switch to Teach 或在控制台输入 mode image;换一条支持数据传输的线 |
Camera 区域一直显示 Looking for the IPRO7 UVC Cam… |
同上 | 同上 |
| macOS 上 Camera 区域没有画面,显示摄像头权限信息 | IPRO AI Studio 没有摄像头权限 | 见操作系统权限 |
| macOS 上所有程序都看不到摄像头画面 | 另一个程序仍占用摄像头 | 关闭那个程序,再重新插拔 USB-C |
控制台反复出现 no camera answers |
摄像头没有接好,或 SW7 不在 CAM | 拔掉 USB-C,检查摄像头排线,把 SW7 拨到 CAM |
摄像头画面显示 NO MODEL: NO MODEL IN MFG |
还没有部署图像模型 | 训练后点击 Deploy |
摄像头画面显示 NO MODEL: DEPLOY INTERRUPTED |
上次部署没有完成 | 重新部署 |
摄像头画面显示 NO MODEL: WRONG MODEL |
槽位中是其他类型的模型 | 重新部署一次 |
Camera 区域显示 The board went away. Waiting for it… |
开发板正在重启(例如刚部署或切换模式),或 USB-C 被拔掉 | 部署后属于正常现象,摄像头会自动恢复;没有恢复就重新插拔 USB-C |
训练结果显示 <A> taken for <B> |
录制时物品离开了方框 | 对这两类点击 Review,删除不好的图片后重新训练 |
| 实际使用时经常把某一类误判成另一类 | 某些角度或光线的数据不足,或两类外观相近 | 在误判的角度与光线下补录,再训练、部署 |
| 方框为空时也回答某个物品类别 | 没有 BACKGROUND 类别,或 BACKGROUND 录得太少 | 录制 BACKGROUND 后重新训练、部署 |
其他情况见故障排除。
下一步¶
- 声纹识别:让同一块 Reef 识别谁在说话。
- 浏览器版图像 Teach:无需安装 Studio,在 Chrome 或 Edge 中完成同样的流程。