ModelBox端云协同AI开发套件RK3568实现视频防挡弹幕【玩转华为云】
ModelBox端云协同AI开发套件RK3568
摘要:
ModelBox端云协同AI开发套件RK3568是一款体积小巧、功能强大的人工智能嵌入式开发板,结合ModelBox开发框架以及HiLens管理平台,开发者可以快速的进行AI应用的开发和部署,开发板零配件如下图所示:
小编收到开发板至今大约过去6个月了,昨晚突然梦到开发板抱怨在这期间为何对它置之不理😭。虽然只有0.8Tops的算力,但是也能完成绝大多数任务了,于是小编怀着愧疚之情写了这篇文章。以往的案例都是进行实时的检测,小编觉得还可以通过开发板实现视频的分割。只需要训练一个轻量化的图像分割模型,再对其进行模型转换和量化,就可以通过ModelBox部署到开发板上并实现视频防挡弹幕应用的开发,本案例最终运行效果如下:
模型训练:
我们使用的是香港中文大学的数据集:
Deep Automatic Portrait Matting
The Chinese Univeristy of Hong Kong
像素级的图像语义分割有时不仅需要精确,还要高效,以便达到到实时应用(real-time application)的要求,比如自动驾驶等场景。现有的方法可能精度比较高,但是往往参数量巨大,运算开销很高,为了解决这个问题,论文提出了LinkNet。
应用开发
1)运行应用
首先使用ModelBox在Windows上开发一个视频防挡弹幕的AI应用测试模型效果,本案例使用Windows版本的ModelBox SDK进行二次开发,案例所需资源(代码、模型、测试数据等)均可从网盘下载,解压到工作目录下面,执行bin/main.bat
运行应用:
ModelBox提供了可视化图编排工具:Editor
,使用./create.bat -t editor
开启图编排服务,可以查看项目的流程图:
我们使用CPU进行推理,可以看到该应用基本达到实时检测的要求。如果对ModelBox AI应用开发还不熟悉,请先阅读ModelBox端云协同AI开发套件(Windows)开发环境篇,或ModelBox 端云协同AI开发套件(RK3568)上手指南。如果对ModelBox AI应用开发感兴趣,欢迎参加我们的ModelBox实战营。如果只是使用此工程不关注开发细节,则可以只阅读本节,接下来我们将给出该应用在ModelBox中的完整开发过程(以Windows为例)。
2)创建工程
在ModelBox
sdk目录下使用create.bat
创建fangdan
工程
末尾-s
参数,表示将使用后面参数值代表的模板创建工程,而不是创建空的工程,workspace
目录下将创建出fangdan
工程
将我们导出的模型linknet.onnx放到yolox_infer目录下,接着编辑.toml配置文件,主要修改模型路径,对配置文件编辑如下:
修改模型后处理功能单元process函数:
修改绘图功能单元:
修改流程图:
修改mock_task.toml输入输出配置,执行bin/main.bat
运行应用,测试视频人像分割效果:
3)多路视频流分割
参考上文修改流程图和功能单元:
执行bin/main.bat multi
运行应用,最终运行效果如下:
4)HTTP调用测试
执行.\bin\main.bat http INFO
运行应用,HTTP服务启动后,可以进入工程目录的 data 文件夹下,使用 test_http.py 脚本发起HTTP请求进行测试,最终运行效果如下:
5)创建弹幕功能单元
我们需要实现弹幕穿人而过的效果,因此在SDK目录下再使用./create.bat -t python -n danmu -p fangdan创建一个通用功能单元,补充功能单元的逻辑代码如下:
由于内容较多,就不一一列出,感兴趣的小伙伴可以下载该应用运行一下,生成的视频在hilens_data_dir目录下面:
模型转换
训练得到的onnx模型后可以参考我的Notebook模型转换得到rknn模型。当然在我们的资源包中包含了转换好的模型,如果对模型转换的部分不感兴趣,可以迈着愉快的步伐前往下一节。
模型部署
在Hilens平台下载对应设备的插件,目前ModelBox SDK 1.5.3支持rk多系统和多硬件(包括rk3568、rk3588、rk3399和rk1080),选择对应版本下载安装即可:
我们将Windows上开发好的功能单元一键复制到开发板上,之后修改流程图并开启性能统计选项:
执行bin/main.sh
运行应用(如果运行报错请切换到root
账号再运行,本应用需要事先使用pip安装好OpenCV和NumPy以及Pillow),运行结束后在hilens_data_dir
目录下生成了F201_result.mp4
文件与性能评估结果文件夹mb_profile
:
使用root账号运行fangdan_http.toml
流程图,然后在vscode中打开另一个终端,执行test_http.py脚本,将在fangdan/data
下生成测试图片的推理结果:
当然,也可以将测试脚本和图片拷贝到PC上,并将test_http.py
中的ip变量修改为开发板的ip进行远程调用测试。
性能评估
配置启动后,启动运行流程图,profile会每隔60s记录一次统计信息,trace会在任务执行过程中和结束时,输出统计信息。
运行流程图后,会生成性能相关的json文件,通过将json文件加载到浏览器中即可查看timeline信息。
- 打开chrome浏览器。
- 浏览器中输入
chrome://tracing/
。 - 点击界面中的
Load
按钮,加载trace的json文件。 - 加载成功后,将看到类似下面的timeline视图:
逐项查看后发现耗时最久的是弹幕合成功能单元,平均耗时931.699ms,因为ModelBox是静态图并行推理,fps取决于耗时最久的功能单元。
优化思路
模型后处理输出的是图像二维矩阵,可以直接以图片的形式返回,没必要转换为str使用json.dumps和json.loads再转化为numpy数组,对于掩模图的处理可以合并到后处理功能单元,这里小编主要是为了贴合原文的写法尽量不做修改。后面可以再单独创建一个generate功能单元用于视频弹幕的生成,而弹幕功能单元只负责对视频层和弹幕层在alpha通道进行合成,从而提高应用的运行效率。
小结
本文使用ModelBox开发了一个视频防挡弹幕的AI应用,并将其部署到RK3568开发板上。Windows和RK3568版本的应用可以从我们提供网盘链接中下载,解压到工作目录下面就可以一键运行。感兴趣的小伙伴也可以对该应用进行性能优化,或者在基础案例上进行二次开发,即可得到一个可玩的AI应用,期望大家都可以在此一展抱负😉。
- 点赞
- 收藏
- 关注作者
评论(0)