摘要:基於HiLens Kit已經基本開發完成,可部署到HiLens Kit,模型的選擇為基於DarkNet53的YOLOv3模型,權重為基於COCO2014訓練的資料集,而車道線的檢測是基於OpenCV的傳統方法實現的,可透過ModelArts AI Gallery與HiLens Kit全流程端雲協同開發部署。
先來看看最終影片效果吧(PS:請忽略背景音樂)!https://v.qq.com/x/page/p32129x92de.html
主體流程介紹:1、(可選,忽略亦可,取決於攝像頭質量,對於相機畸變較大的需要先計算相機的畸變矩陣和失真係數,對圖片進行校正)圖片校正;
2、擷取感興趣區域,僅對包含車道線資訊的影象區域進行處理;
3、對感興趣區域使用透視變換;
4、針對不同顏色的車道線,不同光照條件下的車道線,不同清晰度的車道線,根據不同的顏色空間使用不同的梯度閾值,顏色閾值進行不同的處理。並將每一種處理方式進行融合,得到車道線的二進位制圖;
5、提取二進位制圖中屬於車道線的畫素;
6、對二進位制圖片的畫素進行直方圖統計,統計左右兩側的峰值點作為左右車道線的起始點座標進行曲線擬合;
7、使用二次多項式分別擬合左右車道線的畫素點(對於噪聲較大的畫素點,可以進行濾波處理,或者使用隨機取樣一致性演算法進行曲線擬合);
8、計算車道曲率及車輛相對車道中央的偏離位置;
9、效果顯示(可行域顯示,曲率和位置顯示);
10、檢測駕駛過程中道路中其他車輛狀態,顯示車輛類別、置信度,並透過YOLOv3進行檢測車輛,然後返回的車輛檢測框的座標與當前座標進行透視變換獲取大約的距離作為車輛之間的距離dis。
說明:
本Demo的主體框架基於HiLens Kit已經基本開發完成,模型的選擇為基於DarkNet53的YOLOv3模型,權重為基於COCO2014訓練的資料集,而車道線的檢測是基於OpenCV的傳統方法實現的,所以計算量較大,導致整體速度較慢。
關於部署和訓練——基於ModelArts 和HiLens Kit的端雲協同:
1、考慮到部署,已經測試過部署到HiLens Kit了,對了,也支援在HiLens Stuido執行模擬測試,更推薦在HiLensStudio哦,比較方便,而且不需要硬體支援,只需要在HiLens Kit或HiLens Studio上安裝pillow庫就行了,關於如何在HiLens Kit和HiLens Studio上安裝第三方庫,非常簡單的哦,可參考:
在HiLens Kit上:https://bbs.huaweicloud.com/forum/thread-94316-1-1.html
在HiLens Studio上:https://bbs.huaweicloud.com/forum/thread-94317-1-1.html
2、如果想訓練或最佳化,由沒有硬體(比如GPU),那麼很推薦使用ModelArts了,一站式開發,無縫銜接到HiLens Kit哦,關於ModelArts的介紹可參考:
https://www.huaweicloud.com/product/modelarts.html
同時也許還能提升下執行速度,這裡介紹三種演算法,親測都可以部署到HiLens Kit推理使用哦,就在最新的AI Gallery(原AI市場)中哦,這裡除了有演算法,還有模型、資料集等等,很豐富,大家可以自己探索一下,同時還可以分享自己的演算法給其他開發者,開發者訂閱即可建立訓練使用,很方便,相比於GitHub,不僅提供了原始碼,還提供了用於訓練的硬體資源,強大的Tesla V10032GB版本哦。
(1)YOLOv3_Darknet53,沒錯,就是著名的YOLOv3,經典的目標檢測網路,後續又推出了YOLOv4、YOLOv5(暫稱此名吧),AI Gallery也推出了YOLOv5的,不過由於PyTorch框架暫不支援模型轉換,所以暫時放棄了。
關於YOLOv3_Darknet53的使用方法,演算法介面介紹很詳細,這裡就不贅述了,可以參考使用,注意模型轉換部分請參考這篇博文中模型轉換部分哦:https://bbs.huaweicloud.com/blogs/199870
演算法備用連結為:
https://marketplace.huaweicloud.com/markets/aihub/modelhub/detail/?id=2d52a07e-ccbd-420f-8999-2ea7b4bdd691
(2)YOLOv3_Resnet18(GPU),如果我們只想做車輛的檢測或者為了簡化模型,提高速度,可以選用主幹網路為Resnet18的YOLOv3,網路更輕量,速度會快一些哦。
同樣給上鍊接:
https://marketplace.huaweicloud.com/markets/aihub/modelhub/detail/?id=948196c8-3e7a-4729-850b-069101d6e95c
(3)YOLOv3_Resnet18(Ascend910),和上面(2)版本差異不大,主要改為由GPU換為Ascend 910訓練的,大家可自由選擇哦。
連結為:
https://marketplace.huaweicloud.com/markets/aihub/modelhub/detail/?id=7087008a-7eec-4977-8b66-3a7703e9fd22
好了,演算法部分解決了,資料怎麼辦呢?ModelArts的AI Gallery同樣想到了,提供了資料集哦,免費訂閱,下載到自己的OBS匯入就能用了(注意OBS需要一定花費),這裡我也提供了開源資料集的5164張人車圖片,供大家使用哦,上鍊接:
https://marketplace.huaweicloud.com/markets/aihub/datasets/detail/?content_id=a337272b-6918-4282-83d6-2b15e2a4c716
那麼資料集和演算法都有了,該訓練了吧,在ModelArts上可以很好完成,憑藉強大的Tesla V100 32GB或Ascend 910可以很快完成哦。
上述整體操作流程部分可參考下述博文完成:https://bbs.huaweicloud.com/blogs/199870
執行效果:
完成執行如影片中所示處理的一幀需要約300ms,也就是FPS約為3,不較慢,需要最佳化。我覺得還有很大最佳化空間,比如:
(1)預處理和後處理很費時間,真正推理很快,可以從這方面加速,不知道開啟多執行緒是否有提升,應該有吧;
(2)應該可以更好發揮專用硬體,記得好像有DVPP和AIPP吧,可以用來做色域轉換的操作;
(3) YOLOv3的後處理解析比較麻煩,這裡用的是COCO的80類,但可以只用person、car兩類,或者再加一點,同時nms也比較費時間,如果能用運算元實現,融合到om模型中,會提速很多;
(4)這裡使用的是Python,如果用C++應該會提升一些,執行效率會高很多吧;
(5)最佳化提速要根據硬體效能,對費時的部分做分析,以最大壓榨硬體效能,需要做針對性、定製化地最佳化,我個人理解很淺,希望有熟悉的同學指教。
備註:
2、本Demo的模型精度以及執行速度不做保證,僅供學習交流使用。
3、其他未盡事宜,還請多多指教。