赞
踩
文章作者:白鹿第一帅,作者主页:https://blog.csdn.net/qq_22695001,未经授权,严禁转载,侵权必究!
ModelBox 是一个 AI 应用的推理框架,中文名称为“模盒”或“模核”。ModelBox 通过编排和插件化的形式支持 AI 应用的开发,支持的数据有视频,音频,语音,文本,通用数据的编排处理。
作为 AI 应用开发框架,ModelBox 具备以下三大特点:
ModelBox 主要聚焦解决 AI 应用开发的问题,相比直接调用底层 API,开发者需要关注每个底层的 API 使用方法,关注并发,关注 GPU,NPU 设备编程接口,关注 TensorRT,TensorRT 等推理框架的编程 API,与云计算结合的接口,和分布式通信,日志等琐碎而复杂的周边代码。
ModelBox 解决的就是业务开发的周边问题,将周边问题交由 ModelBox 处理,ModelBox 通过对内存,CPU,GPU,周边组件的精细化管理,使 AI 推理业务开发更高效,性能也更高,质量也更好。
关于 ModelBox 核心概念、功能单元和流程图开发的更多介绍,可以查看 ModelBox 手册,具体如下图所示:
ModelBox 是在 AI 应用开发的“推理阶段”使用的高性能开发框架,其运行架构具体如下图所示:
ModelBox AI 应用开发可以基于以下三个方面:
目前支持的模型有 TensorFlow、TensorRT、Ascend ACL 模型。
ModelBox 框架里面包含了支持 TensorFlow、Caffe、LibTorch、MindSpore 模型运行所需的功能单元 Flowunit,我们称为推理功能单元(Inference Flowunit),这些推理功能单元可以直接加载对应的模型文件,而不需要编写代码,只需提供一个简单的配置文件,即可将模型引入到 ModelBox 的流程中。
ModelBox 是由华为云开发并开源的 AI 应用开发框架。
说到这,可能就有好奇的同学提问了,“什么是“AI 养猪”呢?具体一点,与传统人工队相比,这玩意有什么优势呢?”
别急,我来给你讲,AI 养猪可以实现:
根据在 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 的两个输出分别对接到不同的功能单元:
而展开功能单元 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 真的很快!
文章作者:白鹿第一帅,作者主页:https://blog.csdn.net/qq_22695001,未经授权,严禁转载,侵权必究!
我是白鹿,一个不懈奋斗的程序猿。望本文能对你有所裨益,欢迎大家的一键三连!若有其他问题、建议或者补充可以留言在文章下方,感谢大家的支持!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。