華爲海思支持網絡調研

概述本文檔旨在幫助用戶瞭解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算法開發流程爲:

  1. 離線模型訓練:利用主流的深度學習框架,如caffe、TensorFlow、pyTorch、MXNet,訓練神經網絡模型。由於海思NNIE工具鏈編譯要求只能輸入caffe格式的模型文件,因此其它深度學習框架訓練的模型,需要轉換爲caffe格式的模型文件;
  2. 模型編譯:將caffe格式的模型文件編譯成海思AI芯片NNIE運行的格式文件*.wk,同時利用校準圖片集進行模型量化校準;(其他模型轉換爲caffe,將caffe格式的模型文件編譯成可在NNIE運行的*.wk)
  3. 仿真調試:在PC機上,通過軟件仿真調試器,加載編譯生成的wk模型文件,對測試圖片進行推理測試,驗證算法模型的準確性,評估模型精度;
  4. 片上運行:經PC仿真驗證評估後,在AI芯片上,初始化階段,由CPU負責加載wk模型到NNIE硬件引擎上。預測推理階段,由CPU負責準備圖像數據,調用NNIE引擎進行推理,最後獲取推理結果。

正常情況下,步驟3和4在相同測試圖片下,得出的結果一致,步驟3方便算法開發人員驗證評估,步驟4纔是最終的運行方式。

3.2 工具鏈

在開發流程中,步驟2和3需要使用海思提供的專用工具鏈,包括開發所需的集成開發環境(IDE)、交叉編譯工具鏈、仿真器、調試器等。Windows系統上安裝方法參考《HiSVP開發指南.pdf》的第5章“RuyiStudio工具使用指南”,主要過程爲:

  1. 安裝MinGW-W64,本文安裝7.3.0版本
  2. 解壓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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章