動手實踐丨輕量級目標檢測與分割算法開發和部署(RK3568)

本文分享自華爲雲社區《自動駕駛(AIOT) - 輕量級目標檢測與分割算法開發和部署(RK3568)【玩轉華爲雲】》,作者:HouYanSong。

本文將在ModelArts平臺上開發輕量級目標檢測與分割算法,並使用ModelBox框架在RK3568開發板上實現模型推理和部署。

cke_145.jpeg

數據準備

我們收集了一份200張由Labelme標註的道路圖像分割數據集,之後使用腳本將其轉換爲VOC格式的數據集並進行數據增強:

cke_146.png

處理好的數據集已經分享到AI Gallery上,可以使用OBS下載:

cke_147.png

算法簡介

像素級的圖像分割不僅需要精確,有時還需要高效以便應用到real-time application比如自動駕駛汽車等。現有的方法可能精度較高但往往參數量巨大,爲了解決這個問題,我們使用LinkNet作爲主幹網絡[Fig. 1],中間層[Fig. 2]使用LeakyRelu進行激活,最後一層使用Sigmoid做歸一化,並在Encoder Block 4後增添目標檢測分支,訓練過程中進行梯度裁剪防止梯度爆炸。

cke_148.jpeg

雲端訓練

算法詳情可以運行我發佈的Notebook,並下載轉換好的模型文件:

cke_149.png

ONNXRuntime推理:

下載yolo_tf_seg.zip並解壓到本地,之後安裝opencv、numpy、onnxruntime即可一鍵運行。

端側推理

cke_150.jpeg

1、我們在VS Code中使用Remote-SSH遠程連接ModelBox端雲協同AI開發套件(RK3568)

cke_151.png

2、在SDK目錄下使用create.py腳本創建工程object_detection_seg(od_seg):

cke_152.png

3、創建推理功能單元yolo_tf_seg:

cke_153.png

4、將轉換好的模型放到yolo_tf_seg目錄下,我們的模型有一個輸入和兩個輸出:

cke_154.png

修改配置文件如下:cke_155.png5、創建後處理功能單元post_process:

對於後處理功能單元,我們在config中配置參數,接收2個float類型的推理結果,返回類別檢測框和圖像掩碼:

cke_156.png

對應的邏輯代碼如下:

cke_157.png

6、創建繪圖功能單元draw_image:

cke_158.png

對於繪圖功能單元,我們接收解碼後的原始圖像和目標檢測框以及分割圖像,對應的配置文件如下:

cke_159.png

接下來補充邏輯代碼生成新的圖像:

cke_160.png

7、查看流程圖:

cke_161.png

代碼如下:

cke_162.png

8、配置輸入和輸出,運行應用:

cke_163.png

9、我們可以在Chrome瀏覽器chrome://tracing/中加載性能統計文件:

cke_164.png

通過分析耗時最久的是推理功能單元,720p視頻檢測幀率在6fps左右。

小結:

本文總體而言並沒有太多的創新點,是一個純工程化的項目,主要工作是將學術界的優秀論文落地到邊緣設備上,通過對網絡的魔改,得到一個兼顧精度、速度和體積的目標檢測和分割模型,在模型量化過程中會出現精度損失,後續會通過優化算法以及選擇不同的量化算法kl_divergence(feature分佈不均勻時可以得到較好的改善效果)繼續提高模型的檢測效果,復現本案例所需資源(代碼、模型、測試數據等)均可從object_detection_seg.zip獲取。

 

點擊關注,第一時間瞭解華爲雲新鮮技術~

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