NNIE与Caffe学习

NNIE是海思的一个AI加速硬件,他是硬件实现了caffe的一些层

NNIE是Neural Network Inference Engine的简称,是海思媒体SoC中专门针对神经网

络特别是深度学习卷积神经网络进行加速处理的硬件单元,支持现有大部分的公开网

络,如Alexnet、VGG16、Googlenet、Resnet18、Resnet50等分类网络,Faster R-

CNN、YOLO、SSD、RFCN等检测网络,以及SegNet、FCN等场景分割网络。实质他是将Caffe网络定义的几个层硬件化了,而且中间传输的blob数据结构也可以硬件直接访问。

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

Caffe框架下的模型。

Caffe框架是一个开源的深度学习框架,跟yolov3的darknet,google的tensorflow这些是类似。我的理解是定义了一些层的基本要素,数据交互的方式,通过层的组合。就像是Caffe是C语言,提供了很多基本语句语法。模型就是算法,就是具体怎么通过基本语句语法实现。而prototxt则是描述这个算法是怎么实现的。

caffe的核心组件

Caffe主要由Blob,Layer,Net 和 Solver这几个部分组成。

Blob(数据交互传递)

主要用来表示网络中的数据,包括训练数据,网络各层自身的参数(包括权值、偏置以及它们的梯度),网络之间传递的数据都是通过 Blob 来实现的,同时 Blob 数据也支持在 CPU 与 GPU 上存储,能够在两者之间做同步。

Layer(层,硬件实现)

是对神经网络中各种层的一个抽象,包括我们熟知的卷积层和下采样层,还有全连接层和各种激活函数层等等。同时每种 Layer 都实现了前向传播和反向传播,并通过 Blob 来传递数据。

Net(各种算法就是通过layer组合)

是对整个网络的表示,由各种 Layer 前后连接组合而成,也是我们所构建的网络模型。

Solver(prototxt描述整个网络)

定义了针对 Net 网络模型的求解方法,记录网络的训练过程,保存网络模型参数,中断并恢复网络的训练过程。自定义 Solver 能够实现不同的网络求解方式。

那获得对应算法以及框架得到的神经网络,再训练后得到xxx.caffemodel 与xxx.prototxt,这就是相应模型,然后通过mapper(nnie_mapper)量化得到NNIE运行指令段。

量化是模型使用的一般是float32的运算,在牺牲精度的前提下,将量化成INT8之类,可大幅度提高运算速度,而且因为硬件NNIE可能只实现了INT8/INT16的,无法运行float32或者运行float32很慢。

因为mapper量化或者转换工具实现的层方式跟标准有一点不一样,所以产生的prototxt文件一般需要修改一下Ruyi或者mapper才能认识,并正确转化。而且很多层如果不支持还得CPU实现,这种在sample_nnie_main.c里有例子(Faster RCNN),但要自己实现,估计比较困难,要相当明白每一步的意义,好在sample已经很完整,只需要稍微修改一下classnum这些就可以运行。而且在列出的算法也基本上能满足常用的网络,只是需要各使用者调整训练集后即可。

流程:使用caffe框架,确定算法,训练得到模型,通过mapper量化(可得仿真与chip运行),量化后先PC模拟测试,然后指定一张图来做测试,得到结果看软件结果(直接模型运行,时间长)与量化后的结果是否一致,或者误差在可接受范围。

实时需要从VI>>VPSS 获取图像,然后通过TDE的hi_tde_quick_resize转为bgr格式(BBB...GGG...RRR),然后给NNIE,获取分类或者检测结果

参考:

https://zhuanlan.zhihu.com/p/107548509

https://blog.csdn.net/u011728480/article/details/92069793


Caffe网络

 

这是一个Caffe的算法模型网络,这里可以看出,显示是从底到上的,所以prototxt定义的模型网络里,bottom代表是输入,top代表是输出。每一层用bottom来输入数据,用top来输出数据。如果只有top没有bottom,则此层只有输出,没有输入。反之亦然。如果有多个 top或多个bottom,表示有多个blobs数据的输入和输出。这里的知识在NNIE生成的模型文件 .wk里,会有seg_data,里面的type会指示输入还是输出。对应Ruyi软件分析 的prototxt文件,这里的上下是反的,可能是为了阅读,所以会奇怪为什么是bottom代表输入,这样就可以对应上转换后的模型

blobs、layers与nets之间的关系可以总结为:caffe使用blobs结构来存储、交换和处理网络中正向和反向迭代时的数据(值)和导数信息(梯度),blobs是caffe的标准数组结构,他提供了一个统一的内存接口,layer是caffe模型和计算的基本单元,net则是一系列layers和其连接的集合,blobs详细描述了信息是如何在layer和net中存储和交换的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值