海思YOLOv3 wk模型在nnie设备上面推理

海思YOLOv3 wk模型在nnie设备上面推理

文章目录

    • 海思YOLOv3 wk模型在nnie设备上面推理
      • 前言
      • 1. nnie推理代码
      • 2. 修改代码
        • sample_nnie.c
      • sample_svp_nnie_software.h
      • 3. 交叉编译
      • 4. nfs挂载

前言

本文主要讲述如何运行在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;

第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;

3811行 nms阈值以及置信度的阈值

pstSoftWareParam->u32NmsThresh = (HI_U32)(0.3f*SAMPLE_SVP_NNIE_QUANT_BASE);
pstSoftWareParam->u32ConfThresh = (HI_U32)(0.1f*SAMPLE_SVP_NNIE_QUANT_BASE);

3934行 需要打印的置信度阈值

/*Set configuration parameter*/
f32PrintResultThresh = 0.5f;

3924行,修改推理的模型名称
这里指定模型的名称,以及需要推理图像的名称,图片的名称格式是gbr。

HI_CHAR *pcSrcFile = "./data/nnie_image/rgb_planar/testimage3.bgr";
HI_CHAR *pcModelName = "./data/nnie_model/detection/yolov36c_inst.wk";

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

3. 交叉编译

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

arm-himix200-linux-gcc -v

然后我们再nnie的目录下执行

make clean
make all

成功编译以后,目录就会生成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

好了以上是本期分享的全部内容了,如果你觉得对你还有帮助,建议点赞分享并收藏哦。如果大家想对我表示肯定,扫描下面的二维码即可哦,原创不易,一分钱也是爱哦。
在这里插入图片描述

你可能感兴趣的:(深度学习,pytorch,人工智能)