【云驻共创】基于 ModelBox 实现 AI 应用快速开发:AI 养猪,实时看护猪的健康
文章目录
- 前言
- 一、ModelBox 产品介绍
- 1.1、什么是 ModelBox,有什么功能?
- 1.2、ModelBox 具备哪些特性?
- 1.3、相比直接调用底层 API 开发 AI 业务,ModelBox 有什么优势?
- 1.4、ModelBox 手册
- 二、ModelBox AI 应用开发全景
- 2.1、ModelBox AI 应用开发全景运行架构
- 2.2、ModelBox 如何搭配使用?
- 2.3、ModelBox 目前支持哪些框架训练的模型?
- 2.4、ModelBox 跟华为云 ModelArts、HiLens 服务的关系?
- 三、基于 ModelBox 实现“AI 养猪”
- 3.1、什么是“AI 养猪”?
- 3.2、“AI 养猪”应用开发和部署架构
- 四、“AI 养猪”数据处理与模型训练
- 4.1、数据采集与处理
- 4.2、模型训练与转换
- 五、“AI 养猪”应用开发
- 5.1、下载模板
- 5.2、新建项目
- 5.3、查看流程图
- 5.4、查看输入、输出配置
- 5.5、用启动脚本执行应用
- 5.6、性能评估
- 总结
ModelBox 是一个 AI 应用的推理框架,中文名称为“模盒”或“模核”。ModelBox 通过编排和插件化的形式支持 AI 应用的开发,支持的数据有视频,音频,语音,文本,通用数据的编排处理。
作为 AI 应用开发框架,ModelBox 具备以下三大特点:
- 屏蔽底层软硬件差异,一次开发,端边云多处部署。
- 智能调度,保证极致 AI 推理运行性能。
- 全场景灵活开发模式,可视化图编排和 API 开发。
ModelBox 主要聚焦解决 AI 应用开发的问题,相比直接调用底层 API,开发者需要关注每个底层的 API 使用方法,关注并发,关注 GPU,NPU 设备编程接口,关注 TensorRT,TensorRT 等推理框架的编程 API,与云计算结合的接口,和分布式通信,日志等琐碎而复杂的周边代码。
ModelBox 解决的就是业务开发的周边问题,将周边问题交由 ModelBox 处理,ModelBox 通过对内存,CPU,GPU,周边组件的精细化管理,使 AI 推理业务开发更高效,性能也更高,质量也更好。
关于 ModelBox 核心概念、功能单元和流程图开发的更多介绍,可以查看 ModelBox 手册,具体如下图所示:
ModelBox 是在 AI 应用开发的“推理阶段”使用的高性能开发框架,其运行架构具体如下图所示:
ModelBox AI 应用开发可以基于以下三个方面:
- 基于 ModelBox 开源社区源码开发 AI 应用。
- 基于华为云 ModelArts 平台开发 ModelBox AI 应用。
- 基于 HiLens 平台提供的 ModelBox SDK 开发 AI 应用。
目前支持的模型有 TensorFlow、TensorRT、Ascend ACL 模型。
ModelBox 框架里面包含了支持 TensorFlow、Caffe、LibTorch、MindSpore 模型运行所需的功能单元 Flowunit,我们称为推理功能单元(Inference Flowunit),这些推理功能单元可以直接加载对应的模型文件,而不需要编写代码,只需提供一个简单的配置文件,即可将模型引入到 ModelBox 的流程中。
ModelBox 是由华为云开发并开源的 AI 应用开发框架。
- 华为云 ModelArts 服务在线开发环境 Notebook 中,提供了 ModelBox AI 应用开发镜像,方便开发者可选用后便捷在线开发,开发完成后可在线部署到云上。
- 华为云 HiLens 服务基于 ModelBox 源码,提供了适用在多种端侧设备的 ModelBox SDK,方便开发者开发运行在这类设备上的 AI 应用,且在设备注册后,可以在 HiLens 管理控制台上在线部署到设备上运行。
说到这,可能就有好奇的同学提问了,“什么是“AI 养猪”呢?具体一点,与传统人工队相比,这玩意有什么优势呢?”
别急,我来给你讲,AI 养猪可以实现:
- 通过人工智能全天候监控猪场的实时动态。
- 摄像头联通物联网设备,实现生产指标的自动统计,弥补了传统养殖业对人力资源需求的不足。
- 猪只体态可以直观地反映猪只的生理状态,为猪只疾病预防提供重要依据。
- 基于 ModelBox 展开收拢单元开发,识别猪的站立和躺卧两种姿态和猪只数量。
根据在 2.1 中 ModelBox AI 应用开发全景运行架构,我们可以通过如下流程进行“养猪”的 AI 应用开发和部署,具体如下图所示:
“AI 养猪”,我们需要先训练一个模型,这里我们使用 ModelArts。ModelArts 是一站式 AI 开发平台,支持图像自动标注。
实验数据采用猪只检测数据集,包含 500 张图片以及对应的 xml 文件,目前已发布到 AI Gallery 上,具体如下图所示:
目标检测模型采用 YOLOX 网络结构,YOLOX 是 YOLO 系列的优化版本,引入了解耦头、数据增强、无锚点以及标签分类等目标检测领域的优秀进展,拥有较好的精度表现,同时对工程部署友好,具体如下图所示:
我们在 ModelArts 的 Notebook 环境中训练后,再转换成对应平台的模型格式:onnx 格式可以运行在 Windows 设备上,RK 系列设备上需要转换为 rknn 格式,模型训练 300 个 Epoch 取得的结果,具体如下图所示:
体态识别模型使用 MobileNetV2 作为卷积基,分别使用迁移学习和从头开始训练网络,实验表明训练网络所有层明显优于迁移学习。模型的训练与转换教程已经开放在 AI Gallery 中,其中包含训练数据、训练代码、模型转换脚本以及模型推理代码。
开发者如果希望尝试自己训练模型,或者对模板中提供的模型效果不满意,可以进入体态识别模型的训练与转换页面,点击右上角的 Run in ModelArts 按钮,也可以修改其中的代码、更换新的数据集训练出自己的模型,具体如下图所示:
使用 VS Code 连接到 ModelBox sdk 所在目录或者远程开发板,开始进行猪只体态识别应用的开发。
说明:本文以 RK3568 版本为例进行说明,其他版本与之类似。
本案例所需模板资源(代码、模型、测试数据等)均可从 multi_pig_pose_yolox_mbv2 下载,下载模板到 ModelBox 核心库的 solution 目录下,具体如下图所示:
在 ModelBox sdk 目录下使用 create.py 创建 multi_pig_pose 工程,末尾 -s 参数,表示将使用后面参数值代表的模板创建工程,而不是创建空的工程,具体如下图所示:
ModelBox 提供了可视化图编排工具:Editor,我们可以使用 python ./create.py -t editor 开启图编排服务,具体如下图所示:
可以看到条件功能单元 yolox_post 的两个输出分别对接到不同的功能单元:
- 在未检测到猪只时,no_pig 分支直接对接到 video_out 进行视频编码。
- 检测到猪只时,has_pig 对接到之后的展开/收拢功能单元做全部猪的体态识别。
而展开功能单元 expand_box 与收拢功能单元 collapse_pig_pose 之间其他功能单元的使用方式,与正常流程并无不同。
multi_pig_pose 需要根据检测结果选择不同的分支进行后续操作:
- 如果没有检测到猪,直接输出原始图像。
- 如果检测到猪,需要对图中检测到的每只猪都识别体态。
使用展开功能单元 expand_box,将图中的所有检测框展开为多个输出,传递到后面的功能单元分别做体态识别;最后又增加了收拢功能单元 collapse_pig_pose,对同一张图的多只猪的体态数据进行合并输出,使得后面的画图功能单元能收集到同一张图片的完整数据。
另外,可以看到预处理功能单元 resize、normalize 等分别使用了两次(两次的属性不同),每种功能单元在图中也相应的定义了两个实例,使用不同的节点名称进行区分。
查看任务配置文件 bin/mock_task.toml,可以看到其中的任务输入和任务输出配置为如下内容,具体如下图所示:
即使用本地视频文件 data/pig.mp4 作为输入,解码、预处理、猪只检测、后处理、猪只体态识别后,输出画面显示到名为 modelbox_show 的本地屏幕窗口中。
启动应用前执行 build_project.sh 进行工程构建,该脚本将编译自定义的 C++ 功能单元(本应用不涉及)、将应用运行时会用到的配置文件转码为 Unix 格式(防止执行过程中的格式错误),实现代码如下:
███$ ./build_project.sh
dos2unix: converting file xxx.toml to Unix format...
...
build success: you can run main.bat in ./bin folder
Press ‘p’ to pause…, any key to exit
然后执行 bin/main.bat 运行应用,实现代码如下:
███$ ./bin/main.bat
…
将会自动弹出实时的猪只体态识别的画面,具体如下图所示:
我们在技能流程图中开启性能统计配置项,配置代码如下:
[profile]
profile=true
trace=true
之后双击 bin/main.bat 或在 powershell 中运行技能,实现代码如下:
./bin/main.bat
运行完成后生成的视频与性能统计文件都在 hilens_data_dir 文件夹下,具体如下图所示:
我们可以在 Chrome 浏览器 chrome://tracing/ 中加载性能统计文件查看,具体如下图所示:
逐项查看后发现耗时最久的是体态识别功能单元,平均耗时 10.69ms,因为 ModelBox 是静态图并行推理,fps 取决于耗时最久的功能单元,理论计算 fps = 1000 / 10.69 \approx 94fps=1000/10.69≈94,ModelBox 真的很快!
本文参与华为云社区【内容共创】活动第22期。
- 点赞
- 收藏
- 关注作者
评论(0)