海思部署:RuyiStudio流程解析(1)-RuyiStudio接口调用流程

文章详细介绍了YOLOv3检测网络在SvpSampleCnnDetYoloV3函数中的调用和执行过程,包括SvpSampleCnnDetectionOneSeg函数的功能,模型和图像路径的修改,以及网络初始化、图像读取、前向传播和结果解析等关键步骤。
摘要由CSDN通过智能技术生成

以YOLOv3为例:

1. main.cpp调用接口SvpSampleCnnDetYoloV3()函数接口。注意:其他不需要的可以都注释掉;

 (1) SvpSampleCnnDetYoloV3()函数介绍

//在SvpSampleCnnDetectionOneSeg.cpp脚本中
void SvpSampleCnnDetYoloV3()
{
    printf("%s start ...\n", __FUNCTION__);//开始标志,见下图,输出:SvpSampleCnnDetYoloV3 start ...
    //调用SvpSampleCnnDetectionOneSeg函数
    SvpSampleCnnDetectionOneSeg(
        g_paszModelName_d[SVP_SAMPLE_WK_DETECT_NET_YOLOV3],
        g_paszPicList_d[SVP_SAMPLE_WK_DETECT_NET_YOLOV3],
        SVP_SAMPLE_WK_DETECT_NET_YOLOV3
        );
    printf("%s end ...\n\n", __FUNCTION__);//结束标志
    fflush(stdout);
}

输出的开始标志:

 输出的结束标志:

 以上说明:整个过程都在SvpSampleCnnDetectionOneSeg()中进行。(有点小兴奋 ... fighting!)

(2) SvpSampleCnnDetectionOneSeg()函数介绍

    <1> 先介绍的别的 

    该函数存在于同名的SvpSampleCnnDetectionOneSeg.cpp脚本文件中,因为函数中会用到一些全局参数,故先对脚本文件进行介绍。

    首先在程序运行前,先将SvpSampleCnnDetectionOneSeg.cpp文件中对应的模型路径以及测试用的数据路径进行修改,如下图所示:

    A: 修改测试数据:

修改测试列表中的测试数据,此处配置的是     { "../../data/detection/yolov3/image_test_list.txt" },

 对应文件在 data/detection/yolov3 中

     此处列出需要仿真的文件表,需要根据自己的仿真数据类型进行选择:如果为U8,则为bgr,如果为YVU420sp则为yvu格式。

     B: 修改模型数据

    模型调用可以选择Instfunc,现在是做指令仿真,选inst模型修改就可以:

     上面这两个地方是必须要修改的,如上面提到的SvpSampleCnnDetectionOneSeg()函数也是应用了这里的数据的,如:

  仿真工程要切换到inst方式,右键选择:

   <2> SvpSampleCnnDetectionOneSeg函数正式介绍

    下面为伪代码,只保留函数内的关键函数

 

//参数1:模型路径 参数2:图像路径 参数3:网络类型,通过网络类型从设置的上述参数中选取数据(下面会介绍);
HI_S32 SvpSampleCnnDetectionOneSeg(const HI_CHAR *pszModelName, const HI_CHAR *paszPicList[], HI_U8 netType, HI_S32 s32Cnt)
{
    //加载模型,申请mmz空间
    s32Ret = SvpSampleOneSegDetCnnInit(&stDetCfg, &stDetParam);
        /*
    		stDetParam存储了模型信息
            stDetParam.stModel.astSeg[0]u16SrcNum:输入节点个数
            stDetParam.stModel.astSeg->astSrcNode[i].szName:输入节点 i 的名字
            stDetParam.stModel.astSeg->u16DstNum:输出节点个数
            stDetParam.stModel.astSeg->astDstNode[i].szName:输出节点 i 的名字
    	*/
    //读入图像
    s32Ret = SvpSampleReadAllSrcImg(stDetParam.fpSrc, stDetParam.astSrc, stDetParam.stModel.astSeg[0].u16SrcNum, imgNameRecoder);

    //forward 计算
    s32Ret = SvpSampleCnnDetectionForword(&stDetParam, &stDetCfg);
    //获取结果
    s32Ret = SvpSampleDetOneSegGetResult(&stDetParam, netType, &stSSDParam, strResultFolderDir, imgNameRecoder);
}

上述是大体的运行流程。

<A> 输入参数

        重点介绍第三个参数:netType,会根据此参数获得对应网络在参数设置中的索引,调用参数来自于:SvpSampleWk.hhiSVP_SAMPLE_WK_DETECT_NET_TYPE_E函数中:

 下面会根据 netType,选取模型路径和测试图像路径

<B> 参数核验

    在函数前期会进行输入的参数核验,以保证运行的有效性,

    1> : 参数核验

     2>: 变量声明初始化

     3> 根据网络格式建立对应的文件夹

    4> 结构体stDetCfg初始化,该结构体用于存放模型即检测结果信息 

  结构体如下所示:

<C> 网络初始化

通过以引用的方式传入stDetCfg, stDetParam,对网络进行初始化。

stDetCfg上面讲过了,而stDetParam上面在变量初始化时也提到,是由SvpSampleWk.h声明的结构体,在此进行声明初始化初始化

结构如下:

 

具体的函数介绍,将在博文网络初始化SvpSampleOneSegDetCnnInit介绍。

<D> 读入图像   

 具体函数介绍,将在博文图像读取SvpSampleReadAllSrcImg介绍。

<E> 前向传播,调用SvpSampleCnnDetectionForword()函数

  具体函数介绍,将在博文前向传播SvpSampleCnnDetectionForword介绍。

 <F> 获得粗略结果

     具体函数介绍,将在博文结果解析SvpSampleDetOneSegGetResult介绍。

 <G> 获得最终结果

F步获得的只是经过阈值粗略筛选的结果,还需要进行进一步的处理,才可以得到最终的结果,如NMS非极大值抑制等。

    具体函数介绍,将在博文结果精筛SvpSampleWKYoloV3BoxPostProcess介绍。

<H> 打印结果

     具体的函数介绍,将在博文打印结果SvpDetYoloResultPrint介绍。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值