本系列为华为海思海思AI芯片(Hi3519A/3559A)方案学习系列之十七,系列文章请关注海思AI芯片方案学习。
作者:ltshan139
前言
前面的博客系列 已经介绍了如何将caffemodel转换成wk文件,如何将jpg文件转成bgr格式数据以及如何在PC上仿真模型推理等,基于这些基础,本文来结合代码分析如何在板子上推理yolov3模型。
代码
SDK提供的nnie AI推理相关的样例代码路径在这里:
sample_nnie_main.c很简单,主要是提供入口函数main, 其所带的参数0/1/2。。。 。。。决定了哪个算法模型(比如YOLOV1/YOLOV2/YOLOV3/SSD中的一个)被推理。 本文选的是yolov3。所以对应地,函数void SAMPLE_SVP_NNIE_Yolov3(void)被调用。
在SAMPLE_SVP_NNIE_Yolov3函数里面,其过程分为如下步骤:
1)初始化,包括svp/nnie系统初始化,wk模型文件加载以及参数初始化
参数初始化函数里面包括模型参数初始化和软件参数初始化。其中软件参数初始化部分是 随着模型配置改变而改变的。 比如说同一个算法模型框架,但是网络size不一样,分类数目不一样等,就要在这里修改。 代码如下所示
static HI_S32 SAMPLE_SVP_NNIE_Yolov3_SoftwareInit(SAMPLE_SVP_NNIE_CFG_S* pstCfg,
SAMPLE_SVP_NNIE_PARAM_S *pstNnieParam, SAMPLE_SVP_NNIE_YOLOV3_SOFTWARE_PARAM_S* pstSoftWareParam)
{
。。。 。。。
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;
pstSoftWareParam->au32GridNumHeight[1] = 26;
pstSoftWareParam->au32GridNumHeight[2] = 52;
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;
pstSoftWareParam->af32Bias[1][0] = 30;
pstSoftWareParam->af32Bias[1][1] = 61;
pstSoftWareParam->af32Bias[1][2] = 62;
pstSoftWareParam->af32Bias[1][3] = 45;
pstSoftWareParam->af32Bias[1][4] = 59;
pstSoftWareParam->af32Bias[1][5] = 119;
pstSoftWareParam->af32Bias[2][0] = 10;
pstSoftWareParam->af32Bias[2][1] = 13;
pstSoftWareParam->af32Bias[2][2] = 16;
pstSoftWareParam->af32Bias[2][3] = 30;
pstSoftWareParam->af32Bias[2][4] = 33;
pstSoftWareParam->af32Bias[2][5] = 23;
。。。 。。。
}
2)加载图片
3)nnie推理
4)软件处理三个yolo层的数据,并通过NMS来得到最终 bbox
同样的,在sample_svp_nnie_software.h中,有几个参数也是和网络模型结构相关的,需要根据实际情况手动修改。
5)最后就是结果打印
运行
交叉编译以及如何在板子上运行, 请参考海思AI芯片(Hi3519A/3559A)方案学习(四)如何在3519A板子上运行sample code。
版权声明:本文为CSDN博主「ltshan139」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/avideointerfaces/article/details/93891881
海思AI芯片系列文章
- 海思AI芯片(Hi3519A/3559A)方案学习(十六)对图像进行不变形缩放,可以提高识别准确度
- 海思AI芯片(Hi3519A/3559A)方案学习(十五)基于nnie引擎进行推理的仿真代码浅析
- 海思AI芯片(Hi3519A/3559A)方案学习(十四)JPEG图片转换成bgr文件
- 海思AI芯片(Hi3519A/3559A)(十三)在hi3519A ARM上运行yolov3模型
更多海思AI芯片方案学习笔记欢迎关注海思AI芯片方案学习。