文章目录
前言
ModelBox 是一套专门为 AI 开发者提供的易于使用,高效,高扩展的 AI 应用开发框架,它可以帮助 AI 开发者快速完成从模型文件到 AI 推理应用的开发和上线工作,降低 AI 算法落地门槛,同时带来 AI 应用的高稳定性和极致性能。通过 ModelBox 框架,我们可以快速实现 AI 推理业务的开发,同时可以增加推理的数据吞吐量,降低 AI 分析耗时。在本文中我们将通过讲解 ModelBox 的案例——AI 养猪,实时看护猪的健康来进一步说明这个天赋异禀的 AI 应用开发框架。一、ModelBox 产品介绍
1.1、什么是 ModelBox,有什么功能?
ModelBox 是一个 AI 应用的推理框架,中文名称为“模盒”或“模核”。ModelBox 通过编排和插件化的形式支持 AI 应用的开发,支持的数据有视频,音频,语音,文本,通用数据的编排处理。
1.2、ModelBox 具备哪些特性?
作为 AI 应用开发框架,ModelBox 具备以下三大特点:
- 屏蔽底层软硬件差异,一次开发,端边云多处部署。
- 智能调度,保证极致 AI 推理运行性能。
- 全场景灵活开发模式,可视化图编排和 API 开发。
1.3、相比直接调用底层 API 开发 AI 业务,ModelBox 有什么优势?
ModelBox 主要聚焦解决 AI 应用开发的问题,相比直接调用底层 API,开发者需要关注每个底层的 API 使用方法,关注并发,关注 GPU,NPU 设备编程接口,关注 TensorRT,TensorRT 等推理框架的编程 API,与云计算结合的接口,和分布式通信,日志等琐碎而复杂的周边代码。
ModelBox 解决的就是业务开发的周边问题,将周边问题交由 ModelBox 处理,ModelBox 通过对内存,CPU,GPU,周边组件的精细化管理,使 AI 推理业务开发更高效,性能也更高,质量也更好。
1.4、ModelBox 手册
关于 ModelBox 核心概念、功能单元和流程图开发的更多介绍,可以查看 ModelBox 手册,具体如下图所示:
二、ModelBox AI 应用开发全景
2.1、ModelBox AI 应用开发全景运行架构
ModelBox 是在 AI 应用开发的“推理阶段”使用的高性能开发框架,其运行架构具体如下图所示:
2.2、ModelBox 如何搭配使用?
ModelBox AI 应用开发可以基于以下三个方面:
- 基于 ModelBox 开源社区源码开发 AI 应用。
- 基于华为云 ModelArts 平台开发 ModelBox AI 应用。
- 基于 HiLens 平台提供的 ModelBox SDK 开发 AI 应用。
2.3、ModelBox 目前支持哪些框架训练的模型?
目前支持的模型有 TensorFlow、TensorRT、Ascend ACL 模型。
ModelBox 框架里面包含了支持 TensorFlow、Caffe、LibTorch、MindSpore 模型运行所需的功能单元 Flowunit,我们称为推理功能单元(Inference Flowunit),这些推理功能单元可以直接加载对应的模型文件,而不需要编写代码,只需提供一个简单的配置文件,即可将模型引入到 ModelBox 的流程中。
2.4、ModelBox 跟华为云 ModelArts、HiLens 服务的关系?
ModelBox 是由华为云开发并开源的 AI 应用开发框架。
- 华为云 ModelArts 服务在线开发环境 Notebook 中,提供了 ModelBox AI 应用开发镜像,方便开发者可选用后便捷在线开发,开发完成后可在线部署到云上。
- 华为云 HiLens 服务基于 ModelBox 源码,提供了适用在多种端侧设备的 ModelBox SDK,方便开发者开发运行在这类设备上的 AI 应用,且在设备注册后,可以在 HiLens 管理控制台上在线部署到设备上运行。
三、基于 ModelBox 实现“AI 养猪”
3.1、什么是“AI 养猪”?
说到这,可能就有好奇的同学提问了,“什么是“AI 养猪”呢?具体一点,与传统人工队相比,这玩意有什么优势呢?”
别急,我来给你讲,AI 养猪可以实现:
- 通过人工智能全天候监控猪场的实时动态。
- 摄像头联通物联网设备,实现生产指标的自动统计,弥补了传统养殖业对人力资源需求的不足。
- 猪只体态可以直观地反映猪只的生理状态,为猪只疾病预防提供重要依据。
- 基于 ModelBox 展开收拢单元开发,识别猪的站立和躺卧两种姿态和猪只数量。
3.2、“AI 养猪”应用开发和部署架构
根据在 2.1 中 ModelBox AI 应用开发全景运行架构,我们可以通过如下流程进行“养猪”的 AI 应用开发和部署,具体如下图所示:
四、“AI 养猪”数据处理与模型训练
4.1、数据采集与处理
“AI 养猪”,我们需要先训练一个模型,这里我们使用 ModelArts。ModelArts 是一站式 AI 开发平台,支持图像自动标注。
实验数据采用猪只检测数据集,包含 500 张图片以及对应的 xml 文件,目前已发布到 AI Gallery 上,具体如下图所示:
4.2、模型训练与转换
目标检测模型采用 YOLOX 网络结构,YOLOX 是 YOLO 系列的优化版本,引入了解耦头、数据增强、无锚点以及标签分类等目标检测领域的优秀进展,拥有较好的精度表现,同时对工程部署友好,具体如下图所示:
我们在 ModelArts 的 Notebook 环境中训练后,再转换成对应平台的模型格式:onnx 格式可以运行在 Windows 设备上,RK 系列设备上需要转换为 rknn 格式,模型训练 300 个 Epoch 取得的结果,具体如下图所示:
体态识别模型使用 MobileNetV2 作为卷积基,分别使用迁移学习和从头开始训练网络,实验表明训练网络所有层明显优于迁移学习。模型的训练与转换教程已经开放在 AI Gallery 中,其中包含训练数据、训练代码、模型转换脚本以及模型推理代码。
开发者如果希望尝试自己训练模型,或者对模板中提供的模型效果不满意,可以进入体态识别模型的训练与转换页面,点击右上角的 Run in ModelArts 按钮,也可以修改其中的代码、更换新的数据集训练出自己的模型,具体如下图所示:
五、“AI 养猪”应用开发
使用 VS Code 连接到 ModelBox sdk 所在目录或者远程开发板,开始进行猪只体态识别应用的开发。
说明:本文以 RK3568 版本为例进行说明,其他版本与之类似。
5.1、下载模板
本案例所需模板资源(代码、模型、测试数据等)均可从 multi_pig_pose_yolox_mbv2 下载,下载模板到 ModelBox 核心库的 solution 目录下,具体如下图所示:
5.2、新建项目
在 ModelBox sdk 目录下使用 create.py 创建 multi_pig_pose 工程,末尾 -s 参数,表示将使用后面参数值代表的模板创建工程,而不是创建空的工程,具体如下图所示:
5.3、查看流程图
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 等分别使用了两次(两次的属性不同),每种功能单元在图中也相应的定义了两个实例,使用不同的节点名称进行区分。
5.4、查看输入、输出配置
查看任务配置文件 bin/mock_task.toml,可以看到其中的任务输入和任务输出配置为如下内容,具体如下图所示:
即使用本地视频文件 data/pig.mp4 作为输入,解码、预处理、猪只检测、后处理、猪只体态识别后,输出画面显示到名为 modelbox_show 的本地屏幕窗口中。
5.5、用启动脚本执行应用
启动应用前执行 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
…
将会自动弹出实时的猪只体态识别的画面,具体如下图所示:
5.6、性能评估
我们在技能流程图中开启性能统计配置项,配置代码如下:
[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 真的很快!
总结
在本案例中我们使用 ModelBox 的展开/合并功能单元进行猪只体态识别应用的开发,有一类常见的视频 AI 应用是检测 + 分类,或者检测 + 识别,需要对检测到的所有对象分别处理,如人脸识别、车牌识别等,此时可以使用 ModelBox 中的展开/合并功能单元,它能保证大部分模块的处理逻辑与正常数据流相同,又能对展开的子数据流进行高效的并发处理,提高运行速度。最后打包部署,就完成了一个 AI 应用的开发,从模型的训练到转换再到开发到部署的全部流程。ModelBox 加速跨平台高性能 AI 应用开发和落地,打通 AI 应用落地最后一公里,ModelBox 让模型以统一的格式和接口更高效地运行,给开发者提供以下能力:开发者无需关注底层开发、聚焦核心业务逻辑、提升 AI 应用开发效率。我是白鹿,一个不懈奋斗的程序猿。望本文能对你有所裨益,欢迎大家的一键三连!若有其他问题、建议或者补充可以留言在文章下方,感谢大家的支持!