本文分享自華爲雲社區《自動駕駛(AIOT) - 輕量級目標檢測與分割算法開發和部署(RK3568)【玩轉華爲雲】》,作者:HouYanSong。
本文將在ModelArts平臺上開發輕量級目標檢測與分割算法,並使用ModelBox框架在RK3568開發板上實現模型推理和部署。
數據準備
我們收集了一份200張由Labelme標註的道路圖像分割數據集,之後使用腳本將其轉換爲VOC格式的數據集並進行數據增強:
處理好的數據集已經分享到AI Gallery上,可以使用OBS下載:
算法簡介
像素級的圖像分割不僅需要精確,有時還需要高效以便應用到real-time application比如自動駕駛汽車等。現有的方法可能精度較高但往往參數量巨大,爲了解決這個問題,我們使用LinkNet作爲主幹網絡[Fig. 1],中間層[Fig. 2]使用LeakyRelu進行激活,最後一層使用Sigmoid做歸一化,並在Encoder Block 4後增添目標檢測分支,訓練過程中進行梯度裁剪防止梯度爆炸。
雲端訓練
算法詳情可以運行我發佈的Notebook,並下載轉換好的模型文件:
ONNXRuntime推理:
下載yolo_tf_seg.zip並解壓到本地,之後安裝opencv、numpy、onnxruntime即可一鍵運行。
端側推理
1、我們在VS Code中使用Remote-SSH遠程連接ModelBox端雲協同AI開發套件(RK3568):
2、在SDK目錄下使用create.py腳本創建工程object_detection_seg(od_seg):
3、創建推理功能單元yolo_tf_seg:
4、將轉換好的模型放到yolo_tf_seg目錄下,我們的模型有一個輸入和兩個輸出:
修改配置文件如下:5、創建後處理功能單元post_process:
對於後處理功能單元,我們在config中配置參數,接收2個float類型的推理結果,返回類別檢測框和圖像掩碼:
對應的邏輯代碼如下:
6、創建繪圖功能單元draw_image:
對於繪圖功能單元,我們接收解碼後的原始圖像和目標檢測框以及分割圖像,對應的配置文件如下:
接下來補充邏輯代碼生成新的圖像:
7、查看流程圖:
代碼如下:
8、配置輸入和輸出,運行應用:
9、我們可以在Chrome瀏覽器chrome://tracing/中加載性能統計文件:
通過分析耗時最久的是推理功能單元,720p視頻檢測幀率在6fps左右。
小結:
本文總體而言並沒有太多的創新點,是一個純工程化的項目,主要工作是將學術界的優秀論文落地到邊緣設備上,通過對網絡的魔改,得到一個兼顧精度、速度和體積的目標檢測和分割模型,在模型量化過程中會出現精度損失,後續會通過優化算法以及選擇不同的量化算法kl_divergence(feature分佈不均勻時可以得到較好的改善效果)繼續提高模型的檢測效果,復現本案例所需資源(代碼、模型、測試數據等)均可從object_detection_seg.zip獲取。