1、实验环境
Ubuntu虚拟机+一根网线+USB转串口+小相机(支持IMX334等,可以查看)
2、资料准备
《HiMPP V4.0 媒体处理软件开发参考.pdf》
这个资料主要介绍了图像是通过什么方式进行输入,处理,以及输出的。
VI-VPSS-VO,VENC和VDEC,VGS画图等
《HiSVP开发指南.pdf》
这个资料主要介绍如何使用NNIE模块进行图像处理,以及ruyistudio的安装和使用教程。
《HiSVP API 参考.pdf》等
API等资料可以编写代码的时候在重点关注。
推荐想学习的朋友看一下刘山老师的博客,很有帮助。
本教程只是使用预训练的Yolov3模型生成的.wk文件,只能作为一个初学者入门。真正要学会掌握需要很长的路去学习。由于ubuntu下的vim开发不够熟练,所以我是在ubuntu下安装了一个vscode编译器进行开发。
3、整体思路
借鉴RFCN的输入输出模式进行修改即可。
4、具体实现
三板斧
1>模型初始化
2>硬件初始化
3>软件参数初始化
软件参数初始化里面,如果今后要修改模型,需要将对应的软件参数进行修改
SAMPLE_COMM_IVE_StartViVpssVencVo函数在common里面,主要实现vi-vpss-vo的绑定操作。
SAMPLE_COMM_SYS_GetPicSize函数主要得到图像的大小
这里用的是Yolov3,需要修改为416*416
该SAMPLE_SVP_NNIE_My_Yolov3_ViToVo函数是由RFCN对应的函数进行简单修改得到的。
HI_MPI_VPSS_GetChnFrame是从一个通道获取到图像数据,YOLOv3是通过两路(上文结构已说明),所以使用两个HI_MPI_VPSS_GetChnFrame
获取完图像数据之后,模型的参数主要通过SAMPLE_SVP_NNIE_My_Yolov3_Proc完成,里面主要通过前向传播的函数SAMPLE_SVP_NNIE_Forward以及SAMPLE_SVP_NNIE_Yolov3_GetResult函数,得到了pstSwParam的结构体的结果,里面有strect,包含4个值,但是yolov3的参数结构体没有定义,需要定义一下。
得到最终的检测框strect,需要经过SAMPLE_SVP_NNIE_RoiToRect函数,里面有VGS的模块,该模块主要功能如下所示:
5、如何编译:
将cfg.mak.multicore改为cfg.mak即可在svp中的multi-core中进行编译
6、实验结果