概述本文档旨在帮助用户了解SVP( Smart vision platforn)的硬件特弭舴及开发流程以期达到快速上手和开发出充分利用SVP特性的智能方案。
4 开发框架
4.1 软件开发框架
海思针对芯片各个硬件单元,提供统一的软件开发框架,如下图。媒体软件处理平台(Media Process Platform,简称MPP),可支持应用软件快速开发。该平台对应用软件屏蔽了芯片相关的复杂的底层处理,并对应用软件直接提供 MPI(MPP Program Interface)接口完成相应功能。该平台支持应用软件快速开发以下功能:输入视频捕获、H.265/H.264/JPEG 编码、H.265/H.264/JPEG 解码、视频输出显示、视频图像前处理(包括去噪、增强、锐化)、图像拼接、图像几何矫正、智能、音频捕获及输出、音频编解码等功能。
MPP软件层次图
海思支持Linux或Huawei LiteOS操作系统,为屏蔽OS之间的差异,在OS和MPP之间插入“操作系统适配层”。媒体相关之外的其它硬件交互,如RTC、CIPHER,由“其他驱动”模块进行。
4.2 功能模块划分
海思提供的MPP服务根据硬件的功能特性进行模块层次划分,参考如下:
MPP
├── SVP(Smart Vision Platform)
│ ├── CPU
│ ├── DSP
│ └── NNIE(Neural Network Inference Engine)
├── IVE(Intelligent Video Engine)
└── ISP(Image Signal Processor)
芯片的AI部分属于SVP模块,是本系列文章重点介绍的内容。
4.3 SVP开发框架
SVP(Smart Vision Platform)是海思媒体处理芯片智能视觉异构加速平台。该平台包含CPU、DSP、NNIE(Neural Network Inference Engine)等多个硬件处理单元和运行在这些硬件上的SDK开发环境,以及配套的工具链开发环境。
SVP开发框架如图所示。目前SVP中包含的硬件处理单元有CPU、vision DSP、NNIE,其中某些硬件可能有多核。
SVP开发框架
SVP是海思媒体处理芯片的智能加速平台,因此需要结合海思MPP平台一起来进行软件开发,可参考相关文档《HiMPP V4.0 媒体处理软件开发参考》。用户可以根据SVP的软硬件特性开发出能最大化利用 SVP硬件资源的视觉处理应用。
不同的芯片SVP会使用不同硬件资源配置,如表所示。
4.4 参考文献
- <HiSVP 开发指南.pdf>, <HI3516CV500开发资料2019\Hi3516DV300SDK\3516DV300\1\zh\01.software\board\SVP>
- <HiMPP V4.0 媒体处理软件开发参考.pdf>, <HI3516CV500开发资料2019\Hi3516DV300SDK\3516DV300\1\zh\01.software\board\MPP>
转载自 https://zhuanlan.zhihu.com/p/66921358
NNIE介绍
NNE是 Neural Network Inference Engine的简称,是海思媒体SoC中专门针对神经网络特别是深度学习卷积神经网络进行加速处理的硬件单元,支持现有大部分的公开网络,如 Alexnet.、VGGl6、 Googlenet、 Resnetl8ee等分类网络, Faster RCNN、YOLO、SSD、RFCN等检测网络,以及 SEANETYFCN等场景分割网络目前NNE配套软件及工具链仅支持以染使用其他框架的网络模型需要转化为 Caffe框架下的模型。
目前NNIE配套软件及工具链仅支持Caffe框架,使用其他框架的网络模型需要转化为Cafe框架下的模型。
3 运行NNIE示例程序
3.1 开发流程
海思芯片AI算法开发流程为:
- 离线模型训练:利用主流的深度学习框架,如caffe、TensorFlow、pyTorch、MXNet,训练神经网络模型。由于海思NNIE工具链编译要求只能输入caffe格式的模型文件,因此其它深度学习框架训练的模型,需要转换为caffe格式的模型文件;
- 模型编译:将caffe格式的模型文件编译成海思AI芯片NNIE运行的格式文件*.wk,同时利用校准图片集进行模型量化校准;(其他模型转换为caffe,将caffe格式的模型文件编译成可在NNIE运行的*.wk)
- 仿真调试:在PC机上,通过软件仿真调试器,加载编译生成的wk模型文件,对测试图片进行推理测试,验证算法模型的准确性,评估模型精度;
- 片上运行:经PC仿真验证评估后,在AI芯片上,初始化阶段,由CPU负责加载wk模型到NNIE硬件引擎上。预测推理阶段,由CPU负责准备图像数据,调用NNIE引擎进行推理,最后获取推理结果。
正常情况下,步骤3和4在相同测试图片下,得出的结果一致,步骤3方便算法开发人员验证评估,步骤4才是最终的运行方式。
3.2 工具链
在开发流程中,步骤2和3需要使用海思提供的专用工具链,包括开发所需的集成开发环境(IDE)、交叉编译工具链、仿真器、调试器等。Windows系统上安装方法参考《HiSVP开发指南.pdf》的第5章“RuyiStudio工具使用指南”,主要过程为:
- 安装MinGW-W64,本文安装7.3.0版本
- 解压RuyiStudio,查看Resources\iFEPCompiler\lib_win目录内容,已经自带protobuf和opencv,因此不需要重新编译这两个软件包。
3.3 在芯片上运行示例程序
解压SDK后,执行sdk.unpack脚本进行展开,找到海思开发包的参考程序,目录路径为:
Hi3516CV500R001C02SPC010/01.software/board/Hi3516CV500_SDK_V2.0.1.0/smp/a7_linux/mpp/sample/
进入参考程序的nnie目录,执行make编译。
smp/a7_linux/mpp/sample/svp/nnie$ make
将编译结果sample_nnie_main和data目录所有文件上传到摄像头模组/mnt/mtd目录下(df -hT查看分区使用情况)。
运行程序,以下是cnn和yolov3的运行日志。
/mnt/mtd # ./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) Yolov3(Read File).
9) LSTM(Read File).
a) Pvanet(Read File).
b) Rfcn(Read File).
/mnt/mtd #
/mnt/mtd # ./sample_nnie_main 4
[Level]:Debug,[Func]:SAMPLE_COMM_SVP_CheckSysInit [Line]:81 [Info]:Svp mpi init ok!
[Level]:Info,[Func]:SAMPLE_SVP_NNIE_Cnn [Line]:909 [Info]:Cnn Load model!
[Level]:Info,[Func]:SAMPLE_SVP_NNIE_Cnn [Line]:918 [Info]:Cnn parameter initialization!
[Level]:Info,[Func]:SAMPLE_SVP_NNIE_Cnn [Line]:930 [Info]:Cnn start!
[Level]:Info,[Func]:SAMPLE_SVP_NNIE_Cnn [Line]:951 [Info]:Cnn result:
[Level]:Info,[Func]:SAMPLE_SVP_NNIE_Cnn_PrintResult [Line]:875 [Info]:==== The 0th image info====
[Level]:Info,[Func]:SAMPLE_SVP_NNIE_Cnn_PrintResult [Line]:879 [Info]:0:4096
[Level]:Info,[Func]:SAMPLE_SVP_NNIE_Cnn_PrintResult [Line]:879 [Info]:1:0
[Level]:Info,[Func]:SAMPLE_SVP_NNIE_Cnn_PrintResult [Line]:879 [Info]:2:0
[Level]:Info,[Func]:SAMPLE_SVP_NNIE_Cnn_PrintResult [Line]:879 [Info]:3:0
[Level]:Info,[Func]:SAMPLE_SVP_NNIE_Cnn_PrintResult [Line]:879 [Info]:4:0
[Level]:Debug,[Func]:SAMPLE_COMM_SVP_CheckSysExit [Line]:94 [Info]:Svp mpi exit ok!
/mnt/mtd #
/mnt/mtd # ./sample_nnie_main 8
[Level]:Debug,[Func]:SAMPLE_COMM_SVP_CheckSysInit [Line]:81 [Info]:Svp mpi init ok!
[Level]:Info,[Func]:SAMPLE_SVP_NNIE_Yolov3 [Line]:3395 [Info]:Yolov3 Load model!
[Level]:Info,[Func]:SAMPLE_SVP_NNIE_Yolov3 [Line]:3404 [Info]:Yolov3 parameter initialization!
[Level]:Info,[Func]:SAMPLE_SVP_NNIE_Yolov3 [Line]:3411 [Info]:Yolov3 start!
[Level]:Info,[Func]:SAMPLE_SVP_NNIE_Yolov3 [Line]:3448 [Info]:Yolov3 result:
[Level]:Info,[Func]:SAMPLE_SVP_NNIE_Detection_PrintResult [Line]:1078 [Info]:==== The 2th class box info====
[Level]:Info,[Func]:SAMPLE_SVP_NNIE_Detection_PrintResult [Line]:1091 [Info]:59 92 312 311 0.996338
[Level]:Info,[Func]:SAMPLE_SVP_NNIE_Detection_PrintResult [Line]:1078 [Info]:==== The 8th class box info====
[Level]:Info,[Func]:SAMPLE_SVP_NNIE_Detection_PrintResult [Line]:1091 [Info]:257 60 374 121 0.957520
[Level]:Info,[Func]:SAMPLE_SVP_NNIE_Detection_PrintResult [Line]:1078 [Info]:==== The 17th class box info====
[Level]:Info,[Func]:SAMPLE_SVP_NNIE_Detection_PrintResult [Line]:1091 [Info]:65 165 175 387 0.999268
[Level]:Debug,[Func]:SAMPLE_COMM_SVP_CheckSysExit [Line]:94 [Info]:Svp mpi exit ok!
/mnt/mtd #
cnn例子中,读取手写体0的图片数据文件./data/nnie_image/y/0_28x28.y,程序正确的预测出数字0。
yolov3例子中,对图片数据文件./data/nnie_image/rgb_planar/dog_bike_car_416x416.bgr进行目标检测。
3.4 参考文档
- <HiSVP开发指南.pdf>, <HI3516CV500开发资料2019\Hi3516DV300SDK\3516DV300\1\zh\01.software\board\SVP>
转载自: https://zhuanlan.zhihu.com/p/65843837?from_voters_page=true