精华内容
下载资源
问答
  • NNIE

    2020-07-02 10:42:37
    NNIE 是 Neural Network Inference Engine 的简称,是海思媒体 SoC 中专门针对神经网络特别是深度学习卷积神经网络进行加速处理的硬件单元,支持现有大部分的公开网络,如 Alexnet、VGG16、Googlenet、Resnet18、Resnet...

    https://blog.csdn.net/ywcpig/article/details/85260752

    1. NNIE介绍

    NNIE 是 Neural Network Inference Engine 的简称,是海思媒体 SoC 中专门针对神经网络特别是深度学习卷积神经网络进行加速处理的硬件单元,支持现有大部分的公开网络,如 Alexnet、VGG16、Googlenet、Resnet18、Resnet50 等分类网络,Faster R- CNN、YOLO、SSD、RFCN 等检测网络,以及 SegNet、FCN 等场景分割网络。

    目前 NNIE 配套软件及工具链仅支持以 Caffe 框架,使用其他框架的网络模型需要转化为 Caffe 框架下的模型。

    2. 工具链介绍

    SVP NNIE 在 HiSVP_PC_Vx.x.x.x.rar 组件包中,提供如下的工具链:

        nnie_mapper(tool\nnie\linux\mapper 目录):简称 mapper,该工具将用户开通过开源深度学习框架训练得到的模型转化成在 Hi35xx 芯片上或者在仿真库中可以加载的数据指令文件(文件后缀为 wk,后文中提到的 wk 文件即由该工具生成)。

        仿真库(software\x64 目录):模拟 NNIE 的硬件执行和软件接口调用,在“相同的输入”下仿真库与硬件得到相同的结果。仿真库可以使用户脱离硬件在 PC 环境下仿真,且便于调试,有助于用户提前快速开发算法原型。仿真库有基于 Visual Studio 和 MinGW 版本,后者集成在 RuyiStudio 中。

        仿真 Sample 工程(software\sample_simulator 目录):,包含仿真 sample 源代码供开发者学习参考,支持 Visual Studio 或 RuyiStudio 环境运行。

        模型包(software\data):包含若干 sample 中用到的网络的 caffe 模型文件及对应的 NNIE mapper 配置文件、wk 文件、图像文件等。

        Windows 版 IDE(tool\nnie\windows 目录)工具 RuyiStudio,集成 Windows 版的 NNIE mapper 和仿真库,用户可以将仿真 Sample 工程导入运行、调试;IDE 还集 成了代码编辑、编译、调试、执行、画框、相似度比对等功能,具体参考  “RuyiStudio 工具使用指南”章节。

    3. 开发流程

    以 Caffe 框架上训练的模型为例,NNIE 的开发流程如图所示。在 Caffe 上训练、 使用 NNIE 的 mapper 工具转化都是离线的。通过设置不同的模式,mapper 将 *.caffemodel 转化成在仿真器、仿真库或板端上可加载执行的数据指令文件。一般在开发前期,用户可使用仿真器对训练出来的模型进行精度、性能、带宽进行初步评估, 符合用户预期后再使用仿真库进行完整功能的仿真,最后将程序移植到板端。

    4. 网络层分类

    一个网络的层可分为如下的 3 类:

        标准层:NNIE 支持的 Caffe 标准层,比如 Convolution,Pooling 层等;

        扩展层:NNIE 支持的公开但非 Caffe 标准层,分为 2 种:

            −  一种是基于 Caffe 框架进行自定义扩展的层,比如 Faster RCNN 中的 ROIPooling 层、SSD 中 Normalize 层、RFCN 中的 PSROIPooling 层,SegNet 中 的 UpSample 层等;

            −  另外一种是来源于其他深度学习框架的自定义层,比如 YOLOv2 中 Passthrough 层等;

        Non-support 层:NNIE 不支持的层,比如 Caffe 中专用于 Tranning 的层、其他非 Caffe 框架中的一些层或者用户自定义的私有层等。

    5. 扩展层规则

    Faster RCNN、SSD、RFCN 和 SegNet 等网络都包含了一些原始 Caffe 中没有定义的层 结构,如 ROIPooling、Normalize、PSROI Pooling 和 Upsample 等。NNIE 的 mapper 目 前仅支持 Caffe 框架,且以 Caffe-1.0 为基础。为了使 mapper 能支持这些网络,需要对 原始的 Caffe 进行扩展。
    https://blog.csdn.net/ywcpig/article/details/85260752

    展开全文
  • 海思NNIE开发系列文章: 海思NNIE开发(一):海思Hi3559AV100/Hi3519AV100 NNIE深度学习模块开发与调试记录 海思NNIE开发(二):FasterRCNN在海思NNIE平台上的执行流程(一) 海思NNIE开发(三):FasterRCNN在...

    海思NNIE开发系列文章:

    海思NNIE开发(一):海思Hi3559AV100/Hi3519AV100 NNIE深度学习模块开发与调试记录

    海思NNIE开发(二):FasterRCNN在海思NNIE平台上的执行流程(一)

    海思NNIE开发(三):FasterRCNN在海思NNIE平台上的执行流程(二)

    海思NNIE开发(四):NNIE模块读入JPEG图片或视频

    海思NNIE开发(五):基于Hi3559AV100的FasterRCNN、RFCN、SSD、Yolov2、Yolov3性能综合测评

    -----------------------------------------------------------------------------------------------------------------

    附Caffe学习文章系列:

    Caffe学习(一):安装Windows版Caffe与Faster RCNN过程中的报错及解决方法

    Caffe学习(二):Windows训练与测试Caffe mnist

    Caffe学习(三):Caffe solver文件参数详细解析

    Caffe学习(四):Windows使用Cifar10训练及测试Caffe版DenseNet

    Caffe学习(五):Caffe py-Faster-RCNN 源码解析(一)

    Caffe学习(六):Caffe 添加自定义层

    Caffe学习(七):Caffe添加自定义层(2):Python层

    Caffe学习(八):Windows下编译及调试Debug版Caffe

    Caffe学习(九):Caffe源码函数调用关系图

    Caffe学习(十):Caffe中Solver、Net、Layer、Blob的构建流程

    ------------------------------------------------------------------------------------------------------------------------------

     

     

    1. 开发流程


     

     

    2. 例程解析

    海思的NNIE例程包含以下几个模型:

    ~ # ./sample_nnie_main
    Usage : ./sample_nnie_main <index> 
    index:
             0) RFCN(VI->VPSS->NNIE->VGS->VO).
             1) Segnet(Read File).
             2) FasterRcnnAlexnet(Read File).
             3) FasterRcnnDoubleRoiPooling(Read File).
             4) Cnn(Read File).
             5) SSD(Read File).
             6) Yolov1(Read File).
             7) Yolov2(Read File).
             8) LSTM(Read File).

    RFCN例程中,VI模块绑定了VPSS模块,VI从摄像头输入一路1080P视频,经VPSS分解为两路,一路stBaseFrmInfo保持原来的1080P分辨率,一路stExtFrmInfo转为CIF(352x288)分辨率,stExtFrmInfo输入到NNIE模块SAMPLE_SVP_NNIE_Rfcn_Proc得到分类与框位置信息,再将框位置信息通过SAMPLE_COMM_SVP_NNIE_FillRect给到VGS模块画框,最后通过HI_MPI_VO_SendFrame发送到VO,在HDMI显示器上显示。测试表明处理一帧数据的时间约为89毫秒,即帧率为11帧左右。

    其他1)~8)例程直接读取图片文件给到NNIE处理,处理完后打印分类及框信息。

    模型 分类数量 处理时间(毫秒) 帧率
    RFCN 21 89 11
    FasterRcnnAlexnet 2 145 7
    FasterRcnnDoubleRoiPooling 4 240 4
    MINIST 10 未测试 未测试
    SSD 21 120 8
    YOLO v1 21 37 27
    YOLO v2 6 81 12

    sample_nnie_main.c例程函数调用关系:

     

     

    3. 模型的颜色空间

    需要注意的是RFCN的wk模型文件与后面1)~8)几个模型的wk模型文件的颜色格式是不同的,RFCN调用的wk文件是YVU420颜色空间,而1)~8)模型的是BGR颜色空间。原因是后面1)~8)的模型是通过读图片文件的方式,图片需为颜色空间为BGR的裸数据,后缀名为*.bgr格式。如果要使用1)~8)的模型对视频流数据(来源于VI或VDEC模块,即从摄像头输入或本地视频文件解码)进行处理,需要使用YVU420颜色空间的wk模型文件,否则模型处理会失败。

    4. VDEC--VPSS--NNIE-- VGS--VO流程开发

    该流程通过VDEC读入本地的视频文件并解码,经过VPSS给到NNIE做神经网络处理,再通过VGS大框,再从VO-HDMI输出。

    流程如下:

    (1)初始化相关参数

    (2)初始化VB(SAMPLE_COMM_SYS_Init),必须先于VDEC,VPSS等模块之前初始化VB

    (3)load模型文件(SAMPLE_COMM_SVP_NNIE_LoadModel)

    (4)初始化模型参数(SAMPLE_SVP_NNIE_XXXXX_ParamInit)

    (5)初始化VDEC(SAMPLE_COMM_VDEC_InitVBPool)

    (6)开启VDEC(SAMPLE_COMM_VDEC_Start)

    (7) 开启VPSS(SAMPLE_COMM_VPSS_Start)

    (8) 开启VO(SAMPLE_COMM_VO_StartVO)

    (9)绑定VDEC与VPSS(SAMPLE_COMM_VDEC_Bind_VPSS)

    (10)开启解码线程(SAMPLE_COMM_VDEC_StartSendStream)

    (11)开启NNIE处理线程,从VPSS取帧数据,NNIE处理,再用VGS加框

    (12)结束,反初始化等操作

     

    VDEC模块读取的视频文件需为H.264的裸数据文件(.h264格式),该模块可参考sample_vdec例程编写,一个通道对应一个视频文件。

    VPSS模块有组(Group)与通道,一个组(Group)对应一个VDEC通道,即有多少个VDEC通道就有多少个VPSS Group。每个VPSS的Group, 有两个VPSS通道,一个对应原视频分辨率,一个对应wk模型文件要求输入的图像分辨率。需要注意的是,astVpssChnAttr[i].u32Depth参数必须大于0,因为需要调用HI_MPI_VPSS_GetChnFrame获取帧数据。

    VO支持显示多个窗口,每个窗口对应1路视频,例如设置

    stVoConfig.enVoMode   = VO_MODE_4MUX;

    则显示为4分屏,VGS处理完后数据通过HI_MPI_VO_SendFrame给到VO,HI_MPI_VO_SendFrame的第2个参数对应于屏幕中的窗口序号。

    显示效果如下,车辆标注框为红色,人的标注框为蓝色

    海思开发包下载路径:

    链接:https://pan.baidu.com/s/1SJ9OOfCjJvqLAuMoPpb1yA
    提取码:pjvu 

    -----------------------------------------------------------------------
    2020年8月末补充:
    看我Hi3559av100文章的人,发现很少会去看我博客里的Caffe文章,也就说绝大多数人都只是做工程,而不是做算法的。然而海思提供的这几个sample(RFCN, Faster RCNN, YOLO等)也就只能做做简单的演示,距离实际能用还差很远。这几个模型的类别还是太粗了,还必须对模型分类做改造,只做特定场景下的分类,如仅有监控场景,车和人,车的类别、颜色、品牌、车牌,人的性别,年龄,穿着,是否骑车等,需要使用caffe重新做训练,这个才是核心点。

     

     

    展开全文
  • NNIE-lite ⚡️ Using NNIE as simple as using ncnn ⚡️ Accelerate model's inference time on camera using NNIE. NNIE 是 Neural Network Inference Engine 的简称,是海思媒体 SoC 中专门针对神经网络特别是...
  • 海思NNIE开发(一):海思Hi3559AV100/Hi3519AV100 NNIE深度学习模块开发与调试记录 海思NNIE开发(二):FasterRCNN在海思NNIE平台上的执行流程(一) 海思NNIE开发(三):FasterRCNN在海思NNIE平台上的执行流程...

    系列文章

    海思NNIE开发(一):海思Hi3559AV100/Hi3519AV100 NNIE深度学习模块开发与调试记录

    海思NNIE开发(二):FasterRCNN在海思NNIE平台上的执行流程(一)

    海思NNIE开发(三):FasterRCNN在海思NNIE平台上的执行流程(二)

    海思NNIE开发(四):NNIE模块读入JPEG图片或视频

    海思NNIE开发(五):基于Hi3559AV100的FasterRCNN、RFCN、SSD、Yolov2、Yolov3性能综合测评

    -------------------------------------------------------------------------------------------------------------------------------------------------

    海思提供的Sample的网络文件(即.wk文件)仅支持bgr格式图片,该wk文件对应的prototxt文件中设置了输入图片的颜色空间为BGR格式,每次放入测试图片时都要转为bgr格式稍显麻烦,其实还有一种方法直接读入JPEG格式图片,方法就是调用VDEC模块,而VDEC模块解码出来的是YUV颜色空间图像,因此还需要将.wk文件的颜色空间转为YVU格式,处理流程如下:

    使用VDEC模块需要绑定VPSS模块,使用VPSS模块还有个好处就是可以对图片进行缩放,VPSS模块转换为2路输出,一路将图片或视频转换为网络模型所需要的分辨率,再经过NNIE处理;另一路转换为输出所需要的分辨率如1920x1080;NNIE处理的结果经过VGS模块叠加在1920x1080分辨率图片/文件上,再经过VO输出。

    真实的输出结果如下:

    展开全文
  • nnie-master.zip

    2020-08-23 15:16:56
    用C++重新封装了一下NNIE的代码。把sample里面大部分的那坨垃圾代码全部弃用了,主要贡献如下,代码量是sample代码的几十分之一,结构清晰简单易懂
  • :high_voltage:使用NNIE就像使用ncnn一样简单 :high_voltage: 使用NNIE在相机上加快模型的推断时间。 NNIE是神经网络推理引擎的简称,是海思媒体SoC中专门针对神经网络的特别之处,是深度学习卷积神经网络进行加速...
  • NNIE精度问题定位步骤,算法移植海思芯片,运行在NNIE协处理器上,经常会精度下降,本文档描述这种情况下,如何分析和定位问题,提供思路。
  • nnie-yolov3 Platform: <1> VS2017 (v141工具集,debug x64) solution 或者 <2> HISI3516CV500(Makefile) Inspiration: 海思的文档以及ruyistudio的环境,调试、开发很是不方便, 因此简单重新组织了下NNIE的代码,把...
  • 海思NNIE开发系列文章: 海思NNIE开发(一):海思Hi3559AV100/Hi3519AV100 NNIE深度学习模块开发与调试记录 海思NNIE开发(二):FasterRCNN在海思NNIE平台上的执行流程(一) 海思NNIE开发(三):FasterRCNN...

    海思NNIE开发系列文章:

     

    海思NNIE开发(一):海思Hi3559AV100/Hi3519AV100 NNIE深度学习模块开发与调试记录

    海思NNIE开发(二):FasterRCNN在海思NNIE平台上的执行流程(一)

    海思NNIE开发(三):FasterRCNN在海思NNIE平台上的执行流程(二)

    海思NNIE开发(四):NNIE模块读入JPEG图片或视频

    海思NNIE开发(五):基于Hi3559AV100的FasterRCNN、RFCN、SSD、Yolov2、Yolov3性能综合测评

    -----------------------------------------------------------------------------------------------------------------------------------

    前文:

    本博客将以系列文章讲解FasterRCNN等深度学习网络模型在海思NNIE平台上的执行原理。本篇将讲解NNIE平台上几个存储模型网络参数的几个结构体,以及NNIE分段执行的概念。

    正文:

    以SAMPLE_SVP_NNIE_FasterRcnn这个sample为例解析海思NNIE模型网络参数。

    首先来看以下函数:

    s32Ret = SAMPLE_COMM_SVP_NNIE_LoadModel(pcModelName,&s_stFasterRcnnModel);

    该函数用于从wk文件中解析出模型的网络参数。我们来看s_stFasterRcnnModel这个参数,它是一个结构体,如下:

    typedef struct hiSAMPLE_SVP_NNIE_MODEL_S
    {
        SVP_NNIE_MODEL_S    stModel;
        SVP_MEM_INFO_S      stModelBuf;//store Model file
    }SAMPLE_SVP_NNIE_MODEL_S;

    stModel存储解析出来的模型网络参数,我们来看SVP_NNIE_MODEL_S这个结构体:

    /*NNIE model*/
    typedef struct hiSVP_NNIE_MODEL_S
    {
        SVP_NNIE_RUN_MODE_E     enRunMode;/*枚举类型,网络模型运行模式*/
    
        HI_U32                  u32TmpBufSize; /*辅助内存大小temp buffer size*/
        HI_U32                  u32NetSegNum;/*网络模型中 NNIE 执行的网络分段数,取值[1,8]*/
        SVP_NNIE_SEG_S          astSeg[SVP_NNIE_MAX_NET_SEG_NUM]/*网络在 NNIE 引擎上执行的段信息*/;
        SVP_NNIE_ROIPOOL_INFO_S astRoiInfo[SVP_NNIE_MAX_ROI_LAYER_NUM]; /*网络模型中 RoiPooling 以及 PsRoiPooling 的信息数组ROIPooling info*/
    
        SVP_MEM_INFO_S          stBase/*网络其他信息*/;
    }SVP_NNIE_MODEL_S;

    在Sample_nnie_main这个sample中加入打印语句,输出如下:

    enRunModel:为枚举类型,表示网络模型的运行模式,有SVP_NNIE_RUN_MODE_CHIP(只能在Chip上运行),以及SVP_NNIE_RUN_MODE_FUNC_SIM(只能用于PC端功能仿真)两个枚举值。通过以上打印可以看到FasterRCNN网络模型只能在Chip上运行。

    u32TempBufSize:为辅助内存大小,以上打印为21094400.

    u32NetSegNum:为网络模型中NNIE执行的网络分段数,取值为1~8。这里的分段是指模型执行中可能会分成多段,一些段在NNIE上执行,一些段在CPU或DSP上执行。如下图所示:

    这个u32NetSegNum就是指有多少段是在NNIE上执行的,如果一个网络模型全部都是在NNIE上执行,那么这个u32NetSegNum就是1。通过以上打印可知FasterRCNN网络的NNIE执行分为两段。

    astSeg[SVP_NNIE_MAX_NET_SEG_NUM]:这个参数是一个结构体数组,SVP_NNIE_MAX_NET_SEG_NUM在hi_nnie.h中定义为8,这个数组表示每一段NNIE网络的各段的具体信息,具体信息有哪些,我们来看SVP_NNIE_SEG_S这个结构体:

    /*Segment information*/
    typedef struct hiSVP_NNIE_SEG_S
    {
        SVP_NNIE_NET_TYPE_E enNetType; /*网络段的类型*/
        HI_U16              u16SrcNum; /*网络段的输入节点数*/
        HI_U16              u16DstNum;/*网络段的输出节点数*/
        HI_U16              u16RoiPoolNum;/*络段中包含的 RoiPooling 以及 PSRoiPooling layer 数*/
        HI_U16              u16MaxStep;/*RNN/LSTM 网络中序列的最大“帧数”*/
    
        HI_U32              u32InstOffset;
        HI_U32              u32InstLen;
    
        SVP_NNIE_NODE_S     astSrcNode[SVP_NNIE_MAX_INPUT_NUM]; /*网络段的第 i 个输入节点信息, SVP_NNIE_MAX_INPUT_NUM为16*/
        SVP_NNIE_NODE_S     astDstNode[SVP_NNIE_MAX_OUTPUT_NUM];/*网络段的第 i 个输出节点信息, SVP_NNIE_MAX_OUTPUT_NUM为16*/
        HI_U32              au32RoiIdx[SVP_NNIE_MAX_ROI_LAYER_NUM_OF_SEG]; /*网络段的第 i 个 RoiPooling 或者 PsRoiPooling 在SVP_NNIE_MODEL_S 中 SVP_NNIE_ROIPOOL_INFO_S 数组的下标,SVP_NNIE_MAX_ROI_LAYER_NUM_OF_SEG为2*/
    }SVP_NNIE_SEG_S;

    enNetType:这个参数枚举类型,如下:

    typedef enum hiSVP_NNIE_NET_TYPE_E
    {
        SVP_NNIE_NET_TYPE_CNN  = 0x0, /* Non-ROI input cnn net,普通的CNN\DNN网络类型 */
        SVP_NNIE_NET_TYPE_ROI  = 0x1, /* With ROI input cnn net,有RPN层输出框信息的网络类型*/
        SVP_NNIE_NET_TYPE_RECURRENT = 0x2, /* RNN or LSTM net */
    
        SVP_NNIE_NET_TYPE_BUTT
    }SVP_NNIE_NET_TYPE_E;

    包含4种类型:SVP_NNIE_NET_TYPE_CNN表示普通的的CNN网络, SVP_NNIE_NET_TYPE_ROI有RPN层输出框信息的网络类型,这里其实就是指Faster RCNN的NNIE模型中的Proposal层,这个层包含RPN输出框信息,且由CPU来执行。SVP_NNIE_NET_TYPE_RECURRENT则表示RNN循环神经网络或者LSTM长短期记忆网络。

    u16SrcNum:表示这个段的输入节点数,即这个段网络有多少个输入,也是后面的astSrcNode数组的元素的有效个数

    u16DstNum:表示这个段的输出节点数,即这个段网络有多少个输出,也是后面的astDstNode数组的元素的有效个数

    astSrcNode与astDstNode:表示这个段的输入和输出节点的具体信息,其类型为SVP_NNIE_NODE_S,如下:

    /*Node information*/
    typedef struct hiSVP_NNIE_NODE_S
    {
        SVP_BLOB_TYPE_E  enType;/*节点的类型*/
        union
        {
            struct
            {
                HI_U32 u32Width; /*节点内存形状的宽*/
                HI_U32 u32Height;/*节点内存形状的高*/
                HI_U32 u32Chn;/*节点内存形状的通道数*/
            }stWhc;
            HI_U32 u32Dim;/*节点内存的向量维度*/
        }unShape;
        HI_U32 u32NodeId;/*节点在网络中的 Id*/
    	HI_CHAR szName[SVP_NNIE_NODE_NAME_LEN];/*Report layer bottom name or data layer bottom name*/
    }SVP_NNIE_NODE_S;

    enType是枚举类型,其类型SVP_BLOB_TYPE_E如下:

    /*Blob type*/
    typedef enum hiSVP_BLOB_TYPE_E
    {
        SVP_BLOB_TYPE_S32       =  0x0,/*Blob 数据元素为 S32 类型*/
        SVP_BLOB_TYPE_U8        =  0x1,/*Blob 数据元素为 U8 类型*/
        /*channel = 3*/
        SVP_BLOB_TYPE_YVU420SP  =  0x2,/*Blob 数据内存排布为 YVU420SP*/
        /*channel = 3*/
        SVP_BLOB_TYPE_YVU422SP  =  0x3,/*Blob 数据内存排布为 YVU422SP*/
        SVP_BLOB_TYPE_VEC_S32   =  0x4,/*Blob 中存储向量,每个元素为 S32 类型*/
        SVP_BLOB_TYPE_SEQ_S32   =  0x5,/*Blob 中存储序列,数据元素为 S32 类型*/
        SVP_BLOB_TYPE_BUTT
    }SVP_BLOB_TYPE_E;

    通过打印输出SVP_NNIE_MODEL_S结构体中的astSeg,即打印两段NNIE网络信息的输入输出节点信息,如下:

    从打印的 信息,我们首先看段与节点的类型,这个对于以后的分析有用,因为后面的一些初始化操作会根据不同的类型有不同的操作,如下表:

    段类型/段类型值 输入/输出 节点名 节点类型/节点类型值

    第1段

    SVP_NNIE_NET_TYPE_CNN/0 输入 data SVP_BLOB_TYPE_S32/0
    输出 conv5 SVP_BLOB_TYPE_S32/0
    rpn_cls_score SVP_BLOB_TYPE_S32/0
    rpn_bbox_pred SVP_BLOB_TYPE_S32/0
    rpn_cls_prob_reshape SVP_BLOB_TYPE_S32/0

    第2段

    SVP_NNIE_NET_TYPE_ROI/1 输入 conv5 SVP_BLOB_TYPE_S32/0
    输出 bbox_pred SVP_BLOB_TYPE_VEC_S32/4
    cls_prob SVP_BLOB_TYPE_VEC_S32/4

    将以上打印与下面网络图结合,这里的节点名szName,个人的理解是,如果作为输入节点,则显示的是该层的bottom的名字,如果作为输出节点,则显示top的名字。第1段有1个输入节点,即data层的输入。输出节点的数量打印显示是4个输出,而下面的网络图中只有3个输出,即conv5, rpn_bbox_pred, rpn_cls_prob_reshape,打印显示多了一个rpn_cls_score。在RuyiStudio的网络图里rpn_cls_score是在第一段的中间,并非作为输出,为什么会把它当输出呢?玄机就在网络描述文件.prototxt里面,我们来看rpn_cls_score这一层,如下:

    layer {
      name: "rpn_cls_score"
      type: "Convolution"
      bottom: "rpn/output"
      top: "rpn_cls_score_report"
      convolution_param {
        num_output: 18   # 2(bg/fg) * 9(anchors)
        kernel_size: 1 pad: 0 stride: 1
        weight_filler { type: "gaussian" std: 0.01 }
        bias_filler { type: "constant" value: 0 }
      }
    }

    这一层的top输出是rpn_cls_score_report,即rpn_cls_score加了后缀_report。我们打开《HiSVP开发指南》的3.2.7章节,如下:

    可以看到,中间层的top加上_report后当作该段的一个输出,因此从打印那里可以看到这一段有rpn_cls_score作为输出。

     

    第2段有1个输入节点,conv5,这里显示的u32NodeId为0,那么这个u32NodeId应该是指该节点在该段中的序号。这个段的输出节点bbox_pred, cls_prob,显示序号为7和9。

    这里还有个疑问,不知道这个u32NodeId序号是怎么排的,例如第1段的输出节点conv5,序号为8,但从下图来看,应该是7(relu层应该跟conv5同一个序号)。但是rpn_cls_prob_reshape的序号怎么是19,rpn_bbox_pred的序号为13也对不上。

     

    注:以上网络使用的是以下FasterRCNN网络

    展开全文
  • 海思的NNIE精度问题定位步骤 精度损失问题原因很多,但是从我们的开发经验来讲,有80%的问题是因为转换工具配置错误,还有一部分是模型训练的时候有问题,不是工具转换的问题,剩下的才去找海思定位,找海思定位...
  • 海思NNIE开发(一):海思Hi3559AV100/Hi3519AV100 NNIE深度学习模块开发与调试记录 海思NNIE开发(二):FasterRCNN在海思NNIE平台上的执行流程(一) 海思NNIE开发(三):FasterRCNN在海思NNIE平台上的执行流程...
  • cmake构建NNIE工程

    2020-06-30 17:53:59
    cmake构建NNIE工程 《cmake构建NNIE工程》   利用海思芯片在摄像头端做模型推理是大势所趋,本文介绍了笔者在做 NNIE 开发的过程中使用 cmake 构建 NNIE 工程的过程,因为一直使用 CLion 进行C++开发,所以 IDEA...
  • HI3519AV100 NNIE

    2020-06-27 11:28:57
    海思NNIE开发系列文章: 海思NNIE开发(一):海思Hi3559AV100/Hi3519AV100 NNIE深度学习模块开发与调试记录 海思NNIE开发(二):FasterRCNN在海思NNIE平台上的执行流程(一) 海思NNIE开发(三):FasterRCNN在...
  • 海思NNIE仿真

    2021-05-25 11:08:02
    参考:https://www.freesion.com/article/9347833035/ ...仿真配置文件编辑 双击工程sim_out目录下nnie_sim.ini文件,配置: 保存设置: 仿真工程编译与运行 打开海思自带的sample_simulator/src文件夹下的
  • 基于自己数据集的Faster RCNN模型训练、验证以及nnie上仿真和运行。 2.基于自己数据集的RFCN模型训练、验证以及nnie上仿真和运行。 3.基于自己数据集的SSD模型训练、验证以及nnie上仿真和运行。 4.基于自己数据集的...
  • NNIE模型转换环境搭建

    千次阅读 2020-06-30 16:54:22
    NNIE模型转换环境搭建 《NNIE模型转换环境搭建》   写点重要的东西 Key Words:多版本gcc安装、NNIE模型转换 Beijing, 2020 作者:RaySue Code:https://github.com/RaySue/NNIE-lite Agile Pioneer  ...
  • 三、基于NNIE实现摄像头视频识别的完整应用1)模型量化选项详解2)直接对摄像头输出的视频数据流进行yolov3识别,附上源代码并详细讲解。 四、如何将本课程代码merge到SDK中1)如何将本课程代码merge到SDK中
  • 本课程一共分为三个部分,如下所示。 一、课程内容、特色、目标以及答疑 ...三、基于NNIE构建一个jpeg图片识别的完整应用1)模型量化选项详解2)直接对jpeg图片进行目标检测,附上源代码并详细讲解。
  • centerface-nnie-master.zip

    2021-07-28 17:13:11
    centerface on nnie 训练代码参考DBface,此代码所用模型进行了重新训练,代码使用C++ opencv方式编写,简洁易用。 416 * 416 45ms 320 * 320 20ms WiderFace: -- -- Easy 92 Medium 91 Hard 78
  • nnie yolov3 svp

    2020-07-01 10:18:56
    在ubuntu上进入SDK目录下的mpp/sample/svp/big-little,并将自己的wk文件与bgr图像放入nnie/data中 注意可以在板子上运行的wk文件只能是指令仿真的wk文件(inst),功能性仿真的文件(func)不能被板子载入 step2....
  • 海思 3559 SVP NNIE demo解读

    千次阅读 2020-10-18 17:44:58
    海思3559 SVP NNIE demo解读 图片处理——yolo3为例 1. 先看函数void SAMPLE_SVP_NNIE_Yolov3(void) - 部分1 HI_CHAR *pcSrcFile = "./data/nnie_image/rgb_planar/dog_bike_car_416x416.bgr"; HI_CHAR *pcModelName...
  • 相同点: 都是神经网络的深度学习框架; 不同点: NNIE专为于嵌入式芯片研发。
  • NNIE-lite 为算法工程师而生

    千次阅读 2020-07-03 11:51:06
    NNIE-lite》   趟过NNIE的小伙伴可能都知道,NNIE是有很多坑的,而且是纯C的环境,除非你有几年C的开发经验,否则阅读起来不是那么容易的,而作为算法工程师,我相信更多人和我一样擅长Python和C++,所以在把...
  • HI3519,3559 nnie

    2020-06-17 15:34:04
    NNIE 是 Neural Network Inference Engine 的简称,是海思媒体 SoC 中专门针对神经网络特别是深度学习卷积神经网络进行加速处理的硬件单元,支持现有大部分的公开网络,如 Alexnet、VGG16、Googlenet、Resnet18、Resnet...
  • 海思NNIE开发(一):海思Hi3559AV100/Hi3519AV100 NNIE深度学习模块开发与调试记录 海思NNIE开发(二):FasterRCNN在海思NNIE平台上的执行流程(一) 海思NNIE开发(三):FasterRCNN在海思NNIE平台上的执行流程...
  • 海思NNIE Hi3559量化部署Mobilefacenet与RetinaFace

    千次阅读 热门讨论 2020-05-19 11:21:55
    目录海思NNIE Hi3559量化部署Mobileface模型环境介绍前言准备工作1、完成Ruyi Studio的安装2、下载模型、数据集NNIE量化1、创建工程2、配置cfg文件并生成仿真wk3、中间层结果对比验证4、生成inst WK板上运行代码附录...
  • RuyiStudio 集成 windows 版的 NNIE mapper 和仿真库,具有生成 NNIE wk 功能、仿真 NNIE 功能,同时具有代码编辑、编译、调试、执行功能、网络拓扑显示、目标检测画 框、向量相似度对比、调试定位信息获取等功能。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 652
精华内容 260
关键字:

nnie