海思Hi3519A SVP从入门到精通(二 NNIE开发指南)

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 转化成在仿真器、仿真库或板端上可加载执行的数据指令文件。一般在开发前期,用户可使用仿真器对训练出来的模型进行精度、性能、带宽进行初步评估, 符合用户预期后再使用仿真库进行完整功能的仿真,最后将程序移植到板端。

海思Hi3519A SVP从入门到精通(二 NNIE开发指南)_第1张图片

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 进行扩展。

你可能感兴趣的:(嵌入式)