写点什么

动手实践丨轻量级目标检测与分割算法开发和部署 (RK3568)

  • 2024-02-26
    广东
  • 本文字数:1048 字

    阅读完需:约 3 分钟

动手实践丨轻量级目标检测与分割算法开发和部署(RK3568)

本文分享自华为云社区《自动驾驶(AIOT) - 轻量级目标检测与分割算法开发和部署(RK3568)【玩转华为云】》,作者:HouYanSong。


本文将在 ModelArts 平台上开发轻量级目标检测与分割算法,并使用 ModelBox 框架在 RK3568 开发板上实现模型推理和部署。


数据准备


我们收集了一份 200 张由 Labelme 标注的道路图像分割数据集,之后使用脚本将其转换为 VOC 格式的数据集并进行数据增强:



处理好的数据集已经分享到 AI Gallery 上,可以使用 OBS 下载:


算法简介


像素级的图像分割不仅需要精确,有时还需要高效以便应用到 real-time application 比如自动驾驶汽车等。现有的方法可能精度较高但往往参数量巨大,为了解决这个问题,我们使用LinkNet作为主干网络[Fig. 1],中间层[Fig. 2]使用 LeakyRelu 进行激活,最后一层使用 Sigmoid 做归一化,并在 Encoder Block 4 后增添目标检测分支,训练过程中进行梯度裁剪防止梯度爆炸。


云端训练


算法详情可以运行我发布的Notebook,并下载转换好的模型文件:



ONNXRuntime 推理:


下载 yolo_tf_seg.zip 并解压到本地,之后安装 opencv、numpy、onnxruntime 即可一键运行。

端侧推理



1、我们在 VS Code 中使用 Remote-SSH 远程连接ModelBox端云协同AI开发套件(RK3568)



2、在 SDK 目录下使用 create.py 脚本创建工程 object_detection_seg(od_seg):



3、创建推理功能单元 yolo_tf_seg:



4、将转换好的模型放到 yolo_tf_seg 目录下,我们的模型有一个输入和两个输出:



修改配置文件如下:



5、创建后处理功能单元 post_process:


对于后处理功能单元,我们在 config 中配置参数,接收 2 个 float 类型的推理结果,返回类别检测框和图像掩码:



对应的逻辑代码如下:



6、创建绘图功能单元 draw_image:



对于绘图功能单元,我们接收解码后的原始图像和目标检测框以及分割图像,对应的配置文件如下:



接下来补充逻辑代码生成新的图像:



7、查看流程图:



代码如下:



8、配置输入和输出,运行应用:



9、我们可以在 Chrome 浏览器 chrome://tracing/中加载性能统计文件:



通过分析耗时最久的是推理功能单元,720p 视频检测帧率在 6fps 左右。

小结


本文总体而言并没有太多的创新点,是一个纯工程化的项目,主要工作是将学术界的优秀论文落地到边缘设备上,通过对网络的魔改,得到一个兼顾精度、速度和体积的目标检测和分割模型,在模型量化过程中会出现精度损失,后续会通过优化算法以及选择不同的量化算法 kl_divergence(feature 分布不均匀时可以得到较好的改善效果)继续提高模型的检测效果,复现本案例所需资源(代码、模型、测试数据等)均可从 object_detection_seg.zip 获取。


点击关注,第一时间了解华为云新鲜技术~

发布于: 12 分钟前阅读数: 5
用户头像

提供全面深入的云计算技术干货 2020-07-14 加入

生于云,长于云,让开发者成为决定性力量

评论

发布
暂无评论
动手实践丨轻量级目标检测与分割算法开发和部署(RK3568)_人工智能_华为云开发者联盟_InfoQ写作社区