Hisi3559AV100 RuyiStudio使用 NNIE量化模型 板端运行成功

Posted 九章_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hisi3559AV100 RuyiStudio使用 NNIE量化模型 板端运行成功相关的知识,希望对你有一定的参考价值。

简介

RuyiStudio 集成 windows 版的 NNIE mapper 和仿真库,具有生成 NNIE wk 功能、仿真
NNIE 功能,同时具有代码编辑、编译、调试、执行功能、网络拓扑显示、目标检测画
框、向量相似度对比、调试定位信息获取等功能。

一、安装软件

1)安装wget
从http://gnuwin32.sourceforge.net/packages/wget.htm网页下载wget安装包,选择(Complete package, except sources)下载,下载得到wget-1.11.4-1-setup.exe,双击安装,安装完成后,将wget.exe所在安装目录(GnuWin32\\bin)添加到用户环境变量PATH中,用于从网页下载依赖的包。建议在用户环境变量中,先创建一个变量名为WGET_PATH的环境变量,变量值即为wget.exe的安装目录(GnuWin32\\bin),然后再将%WGET_PATH%添加到用户环境变量PATH中。

2)安装MinGW-W64
下载源码
进入官方下载网址:https://sourceforge.net/projects/mingw-w64/files/mingw-w64/,选择
7.3.0 的 x86_64-win32-seh 版本下载

解压并设置环境变量
计算机上点击右键->属性->高级系统设置->环境变量,在系统变量中添加以下变量(若已有同名变量则添加变量值用分号隔开):变量名 Path,变量值MinGW 的 bin 路径 C:\\MinGW\\bin

在 C:\\MinGW\\bin 目录下,将 x86_64-w64-mingw32-gcc.exe 再拷贝一份并重命名为mingw32-gcc.exe,否则 RuyiStudio 工具不能自动识别到 MinGW 工具链。

二、准备源码文件

将文件解压ruyi_env_setup 提取码:a6md

在这里插入图片描述

下载安装包文件安装包文件 链接:提取码:7h6d
1)将下载的文件放置到python35目录下

2)将libraries_v140_x64_py35_1.1.0.tar.bz2并放置在ruyi_env_setup文件夹下

3)caffe.zip 提取码:86ae ,需要放到python35\\Lib\\site-packages下解压

三、执行安装

点击setup_python.bat进行安装,setup_python.bat脚本会调用python_bat文件夹下的setup_download_python.bat,setup_extract_python.bat和setPath_python.bat,下载python,caffe的依赖包,(依赖包已经下载好了),进行安装。

opencv_python-3.4.2.16-cp35-cp35m-win_amd64.whl, protobuf-3.6.1-cp35-cp35m-win_amd64.whl, Cython-0.28.5-cp35-cp35m-win_amd64.whl以及PyYAML-3.13-cp35-cp35m-win_amd64.whl需要从cmd进到python35目录下,用pip install filename指令进行安装(如pip install opencv_python-3.4.2.16-cp35-cp35m-win_amd64.whl)。

四、添加环境变量

1)在用户环境变量中增加变量RUYI_PYTHON_PATH,变量值即为当前脚本所在位置,即,如果当前bat脚本放置在D:\\programFiles\\ruyi_env_setup目录下,那么就可以将RUYI_PYTHON_PATH的变量值为"D:\\programFiles\\ruyi_env_setup\\python35;D:\\programFiles\\ruyi_env_setup\\python35\\Scripts;D:\\programFiles\\ruyi_env_setup\\python35\\Library\\bin"。

2)手动添加"%RUYI_PYTHON_PATH%;"到用户环境变量path的开头。

3) 手动添加用户环境变量PYTHONPATH:D:\\programFiles\\ruyi_env_setup\\python35\\Lib\\site-packages\\caffe\\python,用于工具识别到caffe。

偶然出现明明环境变量已经设置成功,在cmd上执行python等都已经可以识别,但是在ruyi工具上就是不能识别到python时,需要重启电脑。

Cython-0.28.5-cp35-cp35m-win_amd64.whl和PyYAML-3.13-cp35-cp35m-win_amd64.whl,setup_roi_caffe.bat是针对带了proposal层的网络做的,如果并不涉及,相关错误提示可不用处理。

五、使用RuyiStudio-2.0.21

在这里插入图片描述
加载工程文件,这里使用官方提供的源码
在这里插入图片描述
点击yolov3_inst.cfg文件,弹出如下对话框.
1)log_level No print 编译快
2)Chip 在板子上运行,simulator PC仿真
3)输出文件.wk路径
4)image_type YUV420SP用于实时视频流而不是单张图片。
在这里插入图片描述
在这里插入图片描述

点击在这里插入图片描述生成.wk文件

以yolov3为例,最终生成 inst_yolov3_inst.wk文件
在这里插入图片描述
量化损失对比(待)
1)mapper量化的结果;
2)使用RuyiStudio提供的python中间层输出工具 CNN_convert_bin_and_print_featuremap.py
3)板子上运行的时候生成的的文件;

使用Ruyi Studio的向量对比工具Vector Comparison

六,移植yolov3

进入nnie/sample文件夹,打开并编辑sample_nnie.c 文件,找到下面这两部分,按照自己的需求进行更改
SAMPLE_SVP_NNIE_Yolov3_SoftwareInit
    pstSoftWareParam->u32OriImHeight = pstNnieParam->astSegData[0].astSrc[0].unShape.stWhc.u32Height;
    pstSoftWareParam->u32OriImWidth = pstNnieParam->astSegData[0].astSrc[0].unShape.stWhc.u32Width;
    pstSoftWareParam->u32BboxNumEachGrid = 3;
    pstSoftWareParam->u32ClassNum = 80;
    pstSoftWareParam->au32GridNumHeight[0] = 13;//图片大小/32 
    pstSoftWareParam->au32GridNumHeight[1] = 26;//图片大小/16
    pstSoftWareParam->au32GridNumHeight[2] = 52;//图片大小/8
    pstSoftWareParam->au32GridNumWidth[0] = 13;
    pstSoftWareParam->au32GridNumWidth[1] = 26;
    pstSoftWareParam->au32GridNumWidth[2] = 52;
    pstSoftWareParam->u32NmsThresh = (HI_U32)(0.3f*SAMPLE_SVP_NNIE_QUANT_BASE);
    pstSoftWareParam->u32ConfThresh = (HI_U32)(0.5f*SAMPLE_SVP_NNIE_QUANT_BASE);
    pstSoftWareParam->u32MaxRoiNum = 10; //每个图片最多由多少个目标
    pstSoftWareParam->af32Bias[0][0] = 116;
    pstSoftWareParam->af32Bias[0][1] = 90;
    pstSoftWareParam->af32Bias[0][2] = 156;
    pstSoftWareParam->af32Bias[0][3] = 198;
    pstSoftWareParam->af32Bias[0][4] = 373;
    pstSoftWareParam->af32Bias[0][5] = 326;
    ...

将模型拷贝到开发板

七、板端运行出现的问题

1)版本不一致

[Level]:Debug,[Func]:SAMPLE_COMM_SVP_CheckSysInit [Line]:82 [Info]:Svp mpi init ok!
[Level]:Info,[Func]:SAMPLE_SVP_NNIE_Yolov3 [Line]:2898 [Info]:Yolov3 Load model!
[Func]:HI_MPI_SVP_NNIE_LoadModel [Line]:420 [Info]:Error(0xa0338003): the nnie_mapper version(1.2) should be 1.1, please check nnie_mapper version!
 [Level]:Error,[Func]:SAMPLE_COMM_SVP_NNIE_LoadModel [Line]:560 [Info]:Error,HI_MPI_SVP_NNIE_LoadModel failed!
 [Level]:Error,[Func]:SAMPLE_SVP_NNIE_Yolov3 [Line]:2901 [Info]:Error,SAMPLE_COMM_SVP_NNIE_LoadModel failed!
[Level]:Debug,[Func]:SAMPLE_COMM_SVP_CheckSysExit [Line]:95 [Info]:Svp mpi exit ok!

使用的mapper版本与SDK版本不一致

2)

[Func]:HI_MPI_SVP_NNIE_LoadModel [Line]:443 [Info]:Error(0xa0338003): the enRunMode(1) of input model should be 0!
 [Level]:Error,[Func]:SAMPLE_COMM_SVP_NNIE_LoadModel [Line]:562 [Info]:Error,HI_MPI_SVP_NNIE_LoadModel failed!

 [Level]:Error,[Func]:SAMPLE_SVP_NNIE_Yolov3 [Line]:2904 [Info]:Error,SAMPLE_COMM_SVP_NNIE_LoadModel failed!

[Level]:Debug,[Func]:SAMPLE_COMM_SVP_CheckSysExit [Line]:95 [Info]:Svp mpi exit ok!
<3>[svp_nnie] [Func]:SVP_NNIE_CheckForwardParamKernel [Line]:1145 [Info]:<3>[svp_nnie] Error(0xa0338003),info in astSrc[] is illegal
<3>[svp_nnie] [Func]:SvpNnieForward [Line]:625 [Info]:<3>[svp_nnie] Error(0xa0338003),Check forward param failed!
<3>[svp_nnie] [Func]:SVP_NNIE_CheckSrcBlob [Line]:476 [Info]:<3>[svp_nnie] Error(0xa0338003),astBlob[0].u32Stride(352) should be equal to or greater than 416
<3>[svp_nnie] [Func]:SVP_NNIE_CheckForwardParamKernel [Line]:1145 [Info]:<3>[svp_nnie] Error(0xa0338003),info in astSrc[] is illegal
Error(0xa0338003),astBlob[0].u32Stride(352) should be equal to 
[SAMPLE_SVP_NNIE_yolov3_ViToVo]-1757: Error(0xa0338003),SAMPLE_SVP_NNIE_Yolov3_Proc failed!
 [Level]:Error,[Func]:SAMPLE_SVP_NNIE_RoiToRect [Line]:1490 [Info]:Error(0xa0338003),u32ClassNum(1061997773) must be less than or equal 30 to!
[Func]:HI_MPI_SYS_MmzFlushCache [Line]:1102 [Info]:Null point 
[Func]:SVP_NNIE_CheckForwardWithBboxParamUser [Line]:528 [Info]:Error(0xa0338003),pstForwardCtrl->u32SrcNum(0) must be [1,16]
[Func]:HI_MPI_SVP_NNIE_ForwardWithBbox [Line]:759 [Info]:Error(0xa0338003): Check forward with roi parameters failed!
 [Level]:Error,[Func]:SAMPLE_SVP_NNIE_ForwardWithBbox [Line]:211 [Info]:Error,HI_MPI_SVP_NNIE_ForwardWithBbox failed!

 [Level]:Error,[Func]:SAMPLE_SVP_NNIE_Yolov3_Proc [Line]:1590 [Info]:Error,SAMPLE_SVP_NNIE_Forward failed!

[SAMPLE_SVP_NNIE_yolov3_ViToVo]-1751: Error(0xa0338003),SAMPLE_SVP_NNIE_Rfcn_Proc failed!

1)视频没有数据,查一下VI,VPSS
2)使用的模型不是xxx_inst.wk,而且xxx_func.wk。生成的时候没有选择chip。
3)s_stYolov3SoftwareParam.stRect得到的参数不对

以上是关于Hisi3559AV100 RuyiStudio使用 NNIE量化模型 板端运行成功的主要内容,如果未能解决你的问题,请参考以下文章

HISI3559A 使用yolov3 (VI-VPSS-VO)实时目标检测

Hi3559AV100 OSD开发安装库文件

一款8K相机神经网络AI开发板,双千兆 多路视频,算力高达4.0 TOPs—AIO-3559AV100JD4

海思hi3559A开发板(59AV100SCN)视觉应用开发板防雷防静电推荐图

关于 在海思3559AV100上使用QProcess和QStorageInfo获取磁盘总大小和可用大小失败 的解决方法

关于 在海思3559AV100上使用QProcess和QStorageInfo获取磁盘总大小和可用大小失败 的解决方法