首页 > 其他分享 >海思YOLOv3 wk模型在nnie设备上面推理 转载的文章

海思YOLOv3 wk模型在nnie设备上面推理 转载的文章

时间:2022-11-18 10:46:40浏览次数:64  
标签:YOLOv3 af32Bias 模型 wk pstSoftWareParam nnie sample

前言
本文主要讲述如何运行在nnie设备SOC上面来运行YOLOv3模型,在开始知道,我们默认读者已经把YOLOv3模型转换完成并取得还是wk指令模型,如果不明白如何获取wk指令模型,可以参考我的上一篇博文。
Pytorch版本YOLOv3模型转Darknet weights模型然后转caffemodel再转wk模型在nnie上面推理

1. nnie推理代码
nnie的代码位于官方的SDK文件Hi3519A V100R001C02SPC010.rar下面,需要我们按照要求解压并安装SDK
Hi3519A V100R001C02SPC010.rar\Hi3519A V100R001C02SPC010\01.software\board\Hi3519AV100_SDK_V2.0.1.0.tgz文件。
安装的过程请看ReleaseDoc.rar\ReleaseDoc\zh\01.software\board\Hi3519AV100 SDK 安装及升级使用说明.pdf
安装完成以后,我们就看到有一个叫mpp的文件夹,推理的代码就在下面了,我们需要在:
/mpp/sample/svp/nnie
下面去编译整个项目。其中这个demo默认是没有集成YOLO需要自己去新增,这里我已经改好相关的代码,并上传到gitee中:
https://gitee.com/liangjiaxi2019/yolov3_nnie_infer

2. 修改代码
nnie的代码需要根据模型进行适配,这里有部分文件需要修改的,具体需要修改的内容如下。

sample_nnie.c
mpp/sample/svp/nnie/sample/sample_nnie.c里面:

第3803行需要修改类别的数目,这里是11。另外下面是进入YOLO层时候featuremap的大小值,这里分别是19,38,76从小到大写即可。分别写2次,代表是长和宽的值,这里是长宽相等的。

pstSoftWareParam->u32BboxNumEachGrid = 3;
pstSoftWareParam->u32ClassNum = 11;
pstSoftWareParam->au32GridNumHeight[0] = 19;
pstSoftWareParam->au32GridNumHeight[1] = 38;
pstSoftWareParam->au32GridNumHeight[2] = 76;
pstSoftWareParam->au32GridNumWidth[0] = 19;
pstSoftWareParam->au32GridNumWidth[1] = 38;
pstSoftWareParam->au32GridNumWidth[2] = 76;
1
2
3
4
5
6
7
8
第3814行,需要修改模型的anchor的数值。这里需要从大到小来填写,因为小的featuremap对应的是大的anchor,大的featuremap对应的是小的anchor。

pstSoftWareParam->af32Bias[0][0] = 147;
pstSoftWareParam->af32Bias[0][1] = 308;
pstSoftWareParam->af32Bias[0][2] = 308;
pstSoftWareParam->af32Bias[0][3] = 254;
pstSoftWareParam->af32Bias[0][4] = 430;
pstSoftWareParam->af32Bias[0][5] = 440;
pstSoftWareParam->af32Bias[1][0] = 110;
pstSoftWareParam->af32Bias[1][1] = 74;
pstSoftWareParam->af32Bias[1][2] = 75;
pstSoftWareParam->af32Bias[1][3] = 170;
pstSoftWareParam->af32Bias[1][4] = 195;
pstSoftWareParam->af32Bias[1][5] = 137;
pstSoftWareParam->af32Bias[2][0] = 21;
pstSoftWareParam->af32Bias[2][1] = 22;
pstSoftWareParam->af32Bias[2][2] = 58;
pstSoftWareParam->af32Bias[2][3] = 37;
pstSoftWareParam->af32Bias[2][4] = 37;
pstSoftWareParam->af32Bias[2][5] = 82;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
3811行 nms阈值以及置信度的阈值

pstSoftWareParam->u32NmsThresh = (HI_U32)(0.3f*SAMPLE_SVP_NNIE_QUANT_BASE);
pstSoftWareParam->u32ConfThresh = (HI_U32)(0.1f*SAMPLE_SVP_NNIE_QUANT_BASE);
1
2
3934行 需要打印的置信度阈值

/*Set configuration parameter*/
f32PrintResultThresh = 0.5f;
1
2
3924行,修改推理的模型名称
这里指定模型的名称,以及需要推理图像的名称,图片的名称格式是gbr。

HI_CHAR *pcSrcFile = "./data/nnie_image/rgb_planar/testimage3.bgr";
HI_CHAR *pcModelName = "./data/nnie_model/detection/yolov36c_inst.wk";
1
2
sample_svp_nnie_software.h
修改mpp/sample/svp/nnie/sample_nnie_software/sample_svp_nnie_software.h的相关代码。

第47行 这个数值为 num_classes+5,我这里的类别数是11,所以为16

#define SAMPLE_SVP_NNIE_YOLOV3_EACH_BBOX_INFER_RESULT_NUM 16
1
3. 交叉编译
在进行交叉编译之前,我们先要确保安装好交叉编译器arm-himix200-linux-gcc。使用下面命令查看交叉编译器是否安装成功,如果返回编译器信息,说明交叉编译器已经安装成功了。

arm-himix200-linux-gcc -v
1
然后我们再nnie的目录下执行

make clean
make all
1
2
成功编译以后,目录就会生成sample_nnie_main可执行文件,可以直接挂载到SOC设备上面执行。

4. nfs挂载
通过nfs挂载并在SOC上面执行命令,ip可以根据实际的环境进行修改。直接执行sample_nnie_main文件就可以了。下面是在SOC上面的挂载命令。

mount -t nfs 192.168.4.120:/root/nfs /home/nfs -o nolock
cd /home/nfs/yolov3_nnie_infer/mpp/sample/svp/nnie
./sample_nnie_main b
1
2
3
好了以上是本期分享的全部内容了,如果你觉得对你还有帮助,建议点赞分享并收藏哦。如果大家想对我表示肯定,扫描下面的二维码即可哦,原创不易,一分钱也是爱哦。
————————————————
版权声明:本文为CSDN博主「HELLOWORLD2424」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/HELLOWORLD2424/article/details/125008325

标签:YOLOv3,af32Bias,模型,wk,pstSoftWareParam,nnie,sample
From: https://www.cnblogs.com/eastgeneral/p/16902408.html

相关文章

  • linux 中awk 命令同时指定多个分割符
     001、[root@pc1test3]#lsa.txt[root@pc1test3]#cata.txt##测试数据ad_33;hh_kkdd;ff;dd;77uu_77_88_99[root@pc1test3]#awk-F"[_;]"'{p......
  • awk命令详解
    awk是行处理器:相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息awk处理过程: 依次对每一行进行处理,然后输出awk命令形式......
  • Github的基本功能教程_F_hawk189_新浪博客
    今天在知乎上看到的一个介绍,虽然不是特比详细,但是生动易懂,看完之后,大概就知道怎么用了Repository:你和我一起做“知乎首页”,“知乎首页”就是Repository,即项目或者”未......
  • decorator的用法及原理_F_hawk189_新浪博客
    060、概念什么叫装饰器,其实也可以叫做包装器。即对于一个既有的函数func(args),在调用它之前和之后,我们希望都做一些事情,把这个函数包装起来。python中的装饰器分为两类:函数......
  • python爬取智联招聘信息_F_hawk189_新浪博客
    分享今天写的一个爬取智联招聘信息的爬虫,使用了requests和re模块,没有写注释,但是代码都比较简单,不是太难,这是爬取的信息:​​​​​​以下是源码部分:复制过来又没......
  • python中同时迭代对个iterable对象_F_hawk189_新浪博客
    题外话:最近因为课程需要开始深入了解Python语言。因为以前一直用的Java、C++等强类型的静态语言,现在突然使用Python确实感受到了很大的不同。直观感觉就是,在Python中总是......
  • QT客户端与Java服务端进行https通信_F_hawk189_新浪博客
    网上也有一部分教程,不过我还是踩了许多的坑,所以整理了一下网上看到的和自己的一些收获。首先:,Tomcat.truststore(包含信任库),首先说明一下这个两个文件   cl......
  • virtviewerUsbredirUSB重定向_F_hawk189_新浪博客
    编译virtviewer之前执行的configure命令,是没有使能usb-redir相关的功能,virtviewer是否支持usbredir是完全依赖于spice-gtk的。virtviewer对spice-gtk的依赖关系,可以从vi......
  • Chrome 将 Notification.requestPermission() 的“default”结果视​​为“dennied”
    当用户第三次关闭权限对话框时,Chrome会自动将权限设置为denied(automaticallyblocked在导航栏的权限弹出窗口中显示以下消息)。因此,用户关闭对话框的前三次default结果是,但......
  • 基于DIou改进的YOLOv3目标检测
    计算机视觉研究院专栏作者:Edison_G​背景&引言文中指出DIoU要比GIou更加符合目标框回归的机制,将目标与anchor之间的距离,重叠率以及尺度都考虑进去,使得目标框回归变得更加稳......