海思NNIE开发(一):海思Hi3559AV100/Hi3519AV100 NNIE深度学习模块开发与调试记录

海思NNIE开发系列文章:

海思NNIE开发(一):海思Hi3559AV100/Hi3519AV100 NNIE深度学习模块开发与调试记录

海思NNIE开发(二):FasterRCNN在海思NNIE平台上的执行流程(一)

海思NNIE开发(三):FasterRCNN在海思NNIE平台上的执行流程(二)

海思NNIE开发(四):NNIE模块读入JPEG图片或视频

海思NNIE开发(五):基于Hi3559AV100的FasterRCNN、RFCN、SSD、Yolov2、Yolov3性能综合测评

-----------------------------------------------------------------------------------------------------------------

附Caffe学习文章系列:

Caffe学习(一):安装Windows版Caffe与Faster RCNN过程中的报错及解决方法

Caffe学习(二):Windows训练与测试Caffe mnist

Caffe学习(三):Caffe solver文件参数详细解析

Caffe学习(四):Windows使用Cifar10训练及测试Caffe版DenseNet

Caffe学习(五):Caffe py-Faster-RCNN 源码解析(一)

Caffe学习(六):Caffe 添加自定义层

Caffe学习(七):Caffe添加自定义层(2):Python层

Caffe学习(八):Windows下编译及调试Debug版Caffe

Caffe学习(九):Caffe源码函数调用关系图

Caffe学习(十):Caffe中Solver、Net、Layer、Blob的构建流程

------------------------------------------------------------------------------------------------------------------------------

1. 开发流程


 

2. 例程解析

海思的NNIE例程包含以下几个模型:

~ # ./sample_nnie_main
Usage : ./sample_nnie_main <index> 
index:
         0) RFCN(VI->VPSS->NNIE->VGS->VO).
         1) Segnet(Read File).
         2) FasterRcnnAlexnet(Read File).
         3) FasterRcnnDoubleRoiPooling(Read File).
         4) Cnn(Read File).
         5) SSD(Read File).
         6) Yolov1(Read File).
         7) Yolov2(Read File).
         8) LSTM(Read File).

RFCN例程中,VI模块绑定了VPSS模块,VI从摄像头输入一路1080P视频,经VPSS分解为两路,一路stBaseFrmInfo保持原来的1080P分辨率,一路stExtFrmInfo转为CIF(352x288)分辨率,stExtFrmInfo输入到NNIE模块SAMPLE_SVP_NNIE_Rfcn_Proc得到分类与框位置信息,再将框位置信息通过SAMPLE_COMM_SVP_NNIE_FillRect给到VGS模块画框,最后通过HI_MPI_VO_SendFrame发送到VO,在HDMI显示器上显示。测试表明处理一帧数据的时间约为89毫秒,即帧率为11帧左右。

其他1)~8)例程直接读取图片文件给到NNIE处理,处理完后打印分类及框信息。

模型分类数量处理时间(毫秒)帧率
RFCN218911
FasterRcnnAlexnet21457
FasterRcnnDoubleRoiPooling42404
MINIST10未测试未测试
SSD211208
YOLO v1213727
YOLO v268112

sample_nnie_main.c例程函数调用关系:

3. 模型的颜色空间

需要注意的是RFCN的wk模型文件与后面1)~8)几个模型的wk模型文件的颜色格式是不同的,RFCN调用的wk文件是YVU420颜色空间,而1)~8)模型的是BGR颜色空间。原因是后面1)~8)的模型是通过读图片文件的方式,图片需为颜色空间为BGR的裸数据,后缀名为*.bgr格式。如果要使用1)~8)的模型对视频流数据(来源于VI或VDEC模块,即从摄像头输入或本地视频文件解码)进行处理,需要使用YVU420颜色空间的wk模型文件,否则模型处理会失败。

4. VDEC--VPSS--NNIE-- VGS--VO流程开发

该流程通过VDEC读入本地的视频文件并解码,经过VPSS给到NNIE做神经网络处理,再通过VGS大框,再从VO-HDMI输出。

流程如下:

(1)初始化相关参数

(2)初始化VB(SAMPLE_COMM_SYS_Init),必须先于VDEC,VPSS等模块之前初始化VB

(3)load模型文件(SAMPLE_COMM_SVP_NNIE_LoadModel)

(4)初始化模型参数(SAMPLE_SVP_NNIE_XXXXX_ParamInit)

(5)初始化VDEC(SAMPLE_COMM_VDEC_InitVBPool)

(6)开启VDEC(SAMPLE_COMM_VDEC_Start)

(7) 开启VPSS(SAMPLE_COMM_VPSS_Start)

(8) 开启VO(SAMPLE_COMM_VO_StartVO)

(9)绑定VDEC与VPSS(SAMPLE_COMM_VDEC_Bind_VPSS)

(10)开启解码线程(SAMPLE_COMM_VDEC_StartSendStream)

(11)开启NNIE处理线程,从VPSS取帧数据,NNIE处理,再用VGS加框

(12)结束,反初始化等操作

VDEC模块读取的视频文件需为H.264的裸数据文件(.h264格式),该模块可参考sample_vdec例程编写,一个通道对应一个视频文件。

VPSS模块有组(Group)与通道,一个组(Group)对应一个VDEC通道,即有多少个VDEC通道就有多少个VPSS Group。每个VPSS的Group, 有两个VPSS通道,一个对应原视频分辨率,一个对应wk模型文件要求输入的图像分辨率。需要注意的是,astVpssChnAttr[i].u32Depth参数必须大于0,因为需要调用HI_MPI_VPSS_GetChnFrame获取帧数据。

VO支持显示多个窗口,每个窗口对应1路视频,例如设置

stVoConfig.enVoMode   = VO_MODE_4MUX;

则显示为4分屏,VGS处理完后数据通过HI_MPI_VO_SendFrame给到VO,HI_MPI_VO_SendFrame的第2个参数对应于屏幕中的窗口序号。

显示效果如下,车辆标注框为红色,人的标注框为蓝色

海思开发包下载路径:

链接:百度网盘 请输入提取码
提取码:pjvu 

-----------------------------------------------------------------------
2020年8月末补充:
看我Hi3559av100文章的人,发现很少会去看我博客里的Caffe文章,也就说绝大多数人都只是做工程,而不是做算法的。然而海思提供的这几个sample(RFCN, Faster RCNN, YOLO等)也就只能做做简单的演示,距离实际能用还差很远。这几个模型的类别还是太粗了,还必须对模型分类做改造,只做特定场景下的分类,如仅有监控场景,车和人,车的类别、颜色、品牌、车牌,人的性别,年龄,穿着,是否骑车等,需要使用caffe重新做训练,这个才是核心点。

评论 53
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值