本文上接:
[HI3516DV300開發筆記]HiSi NNIE + opencv解算openpose人體關鍵點輸出
https://blog.csdn.net/abc517789065/article/details/103592190
在上文中,已經初步實現了移植openpose模型到HISI3516開發板並且檢測出人體2D關鍵點位置
整個檢測的邏輯結構如下圖所示(也許爲了這張圖該寫系列博客,這張圖放在最前面,可惜我懶):
目前這裏有一個問題:VPSS輸出的 368*368 YVU420SP圖像數據,我並不是直接輸入到NNIE的,而是先保存成.yuv文件再讀取輸入到NNIE。這麼做的原因是爲了儘快打通整個流程,實際上並沒有必要多此一舉,就是將上圖優化爲:
還是之前說的思路,遇到問題解決問題。
隨着本文的寫作,我將嘗試做兩件事情:
<1>如何將HiSi3516DV300 SDK已有的yolov3 demo從檢測單張bgr圖片改造成YVU420SP數據
<2>如何將VPSS輸出的YVU420SP數據直接送入我移植的openpose模型進行預測
藉此熟悉HISI SVP NNIE SDK的各種花裏胡哨的數據結構的含義
0:在RuyiStudio上修改模型輸入並重新生成wk
首先把目光從開發板轉移到RuyiStudio,打開yolov3_func.cfg或者yolov3_inst.cfg,找到:
沒錯,就是把image_type從U8改爲YVU420SP,重新生成wk文件即可
大部分神經網絡算法是檢測bgr格式的,但是HiSi系列芯片VPSS輸出一般都是YVU格式,如果要向NNIE輸入bgr還需要轉一道。筆者親測修改此處的image_type重新生成wk文件再將開發板VPSS的YVU420SP格式直接輸入網絡也是可以用的。至於怎麼做的沒有細究,可能和IVE有關。
修改image_type爲YVU420SP後重新生成的wk文件並不會影響在PC上對png等格式圖片進行的仿真(所以改了image_type重新生成wk後還能用之前的圖片仿真,什麼都不用改),可以看下RuyiStudio裏的代碼,幾個關鍵函數:
SvpSampleReadAllSrcImg
SvpSampleImgReadFromImglist
s_SvpSampleImgRead
SvpSampleImgReadRaw / svpsample_utils_cv::SVPUtils_ReadImage
SVPUtils_MatToBlob_U8 / SVPUtils_MatToBlob_YVU420SP / SVPUtils_MatToBlob_YVU422SP
仿真時輸入到NNIE的數據格式會先被轉化
重新生成的以YVU420SP格式爲輸入的wk文件自然要拷貝到開發板並且重新載入,加載方法參考SAMPLE_SVP_NNIE_Yolov3即可;載入時被自動填寫的參數:SAMPLE_SVP_NNIE_PARAM_S/SAMPLE_SVP_NNIE_SEG_DATA_S/SVP_SRC_BLOB_S的enType可以看到以自動變爲了SVP_BLOB_TYPE_YVU420SP
既然提到了SVP_SRC_BLOB_S,就先弄得HiSi NNIE的一些關鍵數據結構:
1:數據結構 SAMPLE_SVP_NNIE_PARAM_S
待續