摘要:本案例将使用YOLOX模型,实现一个简单的垃圾分类应用。
本文分享自华为云社区《ModelBox社区案例 - 使用YOLOX做垃圾分类》,作者:HWCloudAI。
1 ModelBox社区案例 - 使用YOLOX做垃圾分类
本案例将使用YOLOX模型,实现一个简单的垃圾分类应用,最终效果如下所示:
本案例所需资源(代码、模型、测试数据等)均可从garbage_det下载
1.1 模型训练与转换
模型采用的是YOLOX网络结构,YOLOX是YOLO系列的优化版本,引入了解耦头、数据增强、无锚点以及标签分类等目标检测领域的优秀进展,拥有较好的精度表现,同时对工程部署友好。训练使用的是“华为云杯”生活垃圾图片分类数据集,该数据集包含一次性快餐盒、果皮果肉、旧衣服等44个类别,共14964张图片。其中,训练集与验证集划分比例为4/1,下图为模型迭代个300个Epoch取得的结果:
ModelArts提供了包括数据标注,训练环境,预置算法在内的丰富的功能,甚至可以通过订阅预置算法实现0代码的模型训练工作。当然你也可以在本地训练自己的模型。我们假设你现在已经拥有了训练好的模型,接下来我们需要将训练好的模型转换成为可以在开发板上运行的模型。我们发布了开发板模型转换案例,参见RK3568模型转换验证案例:
在这个案例中我们演示了从环境适配到模型的转换验证的全流程样例代码,开发者可以通过“Run in ModelArts”一键将Notebook案例在ModelArts控制台快速打开、运行以及进行二次开发等操作。
1.2 应用开发
打开VS Code,连接到ModelBox sdk所在目录或者远程开发板,开始进行垃圾分类应用的开发。下面以RK3568版本为例进行说明,其他版本与之类似。
1.2.1 1)下载模板
执行python solution.py -l
可看到当前公开的技能模板:
结果中的hand_det_yolox即为手部检测应用模板,可使用如下命令下载模板:
solution.py
工具的参数中,-l
代表list
,即列出当前已有的模板名称;-s
代表solution-name
,即下载对应名称的模板。下载下来的模板资源,将存放在ModelBox
核心库的solution
目录下。
1.2.2 2)创建工程
在ModelBox
sdk目录下使用create.py
创建garbage_det
工程,末尾-s
参数,表示将使用后面参数值代表的模板创建工程,而不是创建空的工程。
1.2.3 3)修改后处理功能单元 yolox_post
a. 修改yolox_post.toml流程图,将其内容修改为(以Windows版ModelBox
为例):
b. 修改yolox_post.py的draw函数实现如下:
1.2.4 4)修改输入输出配置
我们需要准备一个mp4文件拷贝到data
文件夹下,我们使用测试视频garbage.mp4
,然后打开工程目录下bin/mock_task.toml
文件,修改其中的任务输入和任务输出配置为如下内容:
该流程图在本地运行时的逻辑过程是:data_source_parser解析bin/mock_task.toml
文件中输入配置的data/garbage.mp4
文件,video_demuxer和video_decoder对该文件进行解码,resize、packed_planar_transpose、normalize对原始图像进行缩放、转码、归一化等预处理,然后detect_garbage在预处理后的图像上进行垃圾检测,yolox_post从推理结果中解码出检测框,并把检测框画到原始图像上,最后video_out将图像输出到bin/mock_task.toml
文件中输出配置的hilens_data_dir/garbage_detection_result.mp4
文件中。
1.2.5 5)用启动脚本执行应用
启动应用前执行build_project.sh
进行工程构建,该脚本将编译自定义的C++功能单元(本应用不涉及)、将应用运行时会用到的配置文件转码为Unix格式(防止执行过程中的格式错误):
然后执行bin/main.bat
运行应用:
运行结束后在hilens_data_dir
目录下生成了garbage_detection_result.mp4
文件,可以打开查看:
1.2.6 6)用摄像头检测
打开工程目录下bin/mock_task.toml
文件,修改其中的任务输入和任务输出配置为如下内容:
即使用编号为0的摄像头(默认为PC自带的摄像头),输出画面显示到名为garbage_det
的本地屏幕窗口中。
1.2.7 7)运行应用
执行bin/main.bat camera
运行应用,将会自动弹出实时的垃圾分类检测画面:
1.3 打包部署
1.3.1 打包
调试完成后,同样可以通过create.py
脚本将应用打包发布:
控制台中输出:
等待稍许,可以看到项目工程下已经生成了rpm文件夹和打包好的应用:
1.3.2 部署
将打包好的应用上传至华为云账号下的obs桶中:
在专业版设备管理中选择一个开发板,
点击创建部署:
最后添加作业:
这样我们就已经完成了一个AI应用,从模型训练到转换到开发到部署的全部流程。
关于ModelBox核心概念、功能单元和流程图开发的更多介绍,可查看ModelBox手册。