海思NNIE開發(一):海思Hi3559AV100/Hi3519AV100 NNIE深度學習模塊開發與調試記錄

海思NNIE開發系列文章:

海思NNIE開發(一):海思Hi3559AV100/Hi3519AV100 NNIE深度學習模塊開發與調試記錄

海思NNIE開發(二):FasterRCNN在海思NNIE平臺上的執行流程(一)

海思NNIE開發(三):FasterRCNN在海思NNIE平臺上的執行流程(二)

海思NNIE開發(四):NNIE模塊讀入JPEG圖片或視頻

海思NNIE開發(五):基於Hi3559AV100的FasterRCNN、RFCN、SSD、Yolov2、Yolov3性能綜合測評

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

1. 開發流程

鏈接:https://pan.baidu.com/s/1SJ9OOfCjJvqLAuMoPpb1yA
提取碼:pjvu 
 

 

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個參數對應於屏幕中的窗口序號。

顯示效果如下,車輛標註框爲紅色,人的標註框爲藍色

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