跳到主要内容

Edge Impulse模型部署

来源:https://docs.edgeimpulse.com/hardware/deployments/run-openmv

将 Impulse 导出为 OpenMV 库,并在兼容的摄像头开发板上运行。

Impulse 是 Edge Impulse 中由信号处理与机器学习模块组成的处理流程,可以导出为经过优化的 OpenMV 库。导出时,所有信号处理模块、配置和学习模块会被打包在一起。将这个包集成到自己的应用程序中,就能在设备本地运行整个处理流程。本教程将介绍如何导出 Impulse,并在兼容 OpenMV 的摄像头开发板上运行应用程序。

前提条件​

请先完成图像分类或 FOMO:面向资源受限设备的目标检测教程,获得训练完成的 Impulse,并安装 最新版 OpenMV IDE,版本须为 v5.0.0 或更高。

兼容的摄像头开发板​

将 Impulse 部署到 OpenMV 设备​

打开你的 Edge Impulse 项目,进入 Deployment(部署) 页面。在这里可以生成完整的库,其中包含 Impulse 以及所需的全部外部依赖库。选择 OpenMV library(OpenMV 库),单击 Build(构建),然后下载并解压生成的 .zip 文件。

从以下两种方式中选择一种,将模型和标签上传到设备。

1. 上传到 SD 卡​

这种方式适用于 较小的图像分类或目标检测模型。从 SD 卡加载模型时,模型会被复制到 RAM 中,因此设备必须有足够的内存,同时容纳模型文件和推理过程中所需的数据。

将 SD 卡插入 OpenMV 摄像头,然后把摄像头连接到计算机。像向 U 盘复制文件一样,将 ei-model.tflite 和 ei-model.txt 复制到 OpenMV Cam 卷对应的 SD 卡根目录。此时,设备上的模型路径为 /sdcard/ei-model.tflite。

接下来,按照下文 运行示例脚本 一节的说明,运行与你的模型对应的脚本。

在 OpenMV 摄像头上运行 Impulse

在 OpenMV 摄像头上运行 Impulse。

2. 上传到 ROM 文件系统​

对于支持 ROMFS 的开发板,可以将模型和标签存放在挂载于 /rom 的只读文件系统中。模型权重保留在闪存中,无须复制到 RAM,因此能为推理留出更多 RAM。不过,模型计算过程中产生的中间张量仍然需要占用 RAM。

  1. 在 OpenMV IDE 中连接摄像头。
  2. 选择 Tools > ROM File System > Edit ROMFS on OpenMV Cam(工具 > ROM 文件系统 > 编辑 OpenMV Cam 上的 ROMFS),打开摄像头的 ROM 文件系统。
  3. 将 ei-model.tflite 和 ei-model.txt 添加到 ROM 文件系统的根目录。查看空间使用情况,确认这些文件没有超出开发板 ROMFS 分区的容量。
  4. 单击 Commit(提交),选择将更新后的 ROM 文件系统写回摄像头。
  5. 在对应模型的示例脚本中设置 MODEL_FROM_ROMFS = True,然后按照下文 运行示例脚本 一节的说明运行。若编写自己的推理脚本,模型路径应使用 /rom/ei-model.tflite。

当 ei-model.txt 与 ei-model.tflite 位于同一目录时,ml.Model 构造函数会自动从 ei-model.txt 加载标签。模型所需的后处理逻辑仍须保留在推理脚本中。更多细节请参阅 OpenMV 的 ROM 文件系统编辑器指南和机器学习文档。

运行示例脚本​

上传 ei-model.tflite 和 ei-model.txt 后,在 OpenMV IDE 中打开部署包文件夹内的脚本。根据模型架构,部署包应包含下列脚本中的一个:

模型类型脚本输出结果
图像分类ei_image_classification.py打印得分最高的类别标签及其置信度。
FOMO 目标检测ei_fomo_object_detection.py在检测到的目标中心位置画圆,并打印坐标和得分。
YOLO-Pro 目标检测ei_yolopro_object_detection.py为检测到的目标绘制带有类别标签的边界框。

保持 MODEL_FROM_ROMFS = False 可从 SD 卡加载文件;设为 True 则从 /rom 加载。在 IDE 中连接摄像头,单击 Play(运行)。在串行终端中查看打印结果,在帧缓冲区查看器中查看叠加在图像上的检测结果。对于上述两个目标检测脚本,可以修改实际执行的模型加载分支中的 threshold=0.4,调整检测结果的最低置信度阈值。

将 Impulse 部署为 OpenMV 固件​

OpenMV 固件部署方式已弃用。请使用上文的 上传到 ROM 文件系统 方式,将模型上传到设备内部闪存。

故障排查​

仅支持 int8 量化模型​

构建输出:仅支持 int8 量化模型

OpenMV 仅支持经过 int8 量化的模型。

RuntimeError: Sensor control failed.(传感器控制失败)​

RuntimeError: Sensor control failed.(传感器控制失败)

Arduino Portenta 在此配置下仅支持灰度图像,请将:

sensor.set_pixformat(sensor.RGB565)

改为:

sensor.set_pixformat(sensor.GRAYSCALE)