ECV2023|安全帶規(guī)范佩戴檢測冠軍方案分享
點擊下方卡片,關(guān)注“新機器視覺”公眾號
重磅干貨,第一時間送達
作者丨山東大學萬有引力 編輯丨極市平臺 導(dǎo)讀
本文為ECV2023安全帶規(guī)范佩戴檢測賽題的冠軍方案分享,詳細的闡述了該賽題的分析和算法實現(xiàn)流程。
1.賽題分析:題目解讀
項目背景:安全帶規(guī)范佩戴檢測算法主要用在建筑工地等施工現(xiàn)場,檢測施工人員是否佩戴了安全帶,從而提升施工區(qū)域內(nèi)的管控工作效率,保證施工人員的人身安全。
訓(xùn)練集:訓(xùn)練數(shù)據(jù)包含9000張圖片;測試集包含1000張圖片;
評價指標:模型榜和算法榜都采用準確率、算法性能絕對值綜合得分的形式,其中IoU為0.5. Score=算法精度 * 0. 95 + 算法性能值 * 0.05
從賽題中可以得到如下的重要信息:
目標檢測類問題 類別種類共三類:belt,belt_person,no_belt_person 通過上面的分析,我們有了一個簡單的猜測:
安全帶類別相比于其他兩個類別,屬于是“小目標”,如下面兩個圖所示,我們認為可能是影響最終排名的決定性因素。
2.賽題分析:模型選擇
一個合適的模型將直接決定最終的結(jié)果,我們以賽題提供的代碼作為baseline(極市目標檢測開發(fā)套件)先熟悉極視平臺訓(xùn)練流程(我們是第一次參加極市的比賽);然后跑通baseline;
極市開發(fā)套件包含了三個模型的運行腳本:yolov5,yolox,yolov7。這里我們選擇了yolov5:
YOLOv5的部署比較完善,推理速度快。 參數(shù)量也比較合適 3. 算法流程及實現(xiàn)
3.1 劃分訓(xùn)練集和測試集
![]()
我們首先調(diào)整的參數(shù)是,提高訓(xùn)練集和驗證集的比例:8:2 —> 9:1
進行這個參數(shù)的特征,主要有如下兩點考慮:
訓(xùn)練數(shù)據(jù)一共有9000張圖片,總體比較少; 希望模型能接觸到更多訓(xùn)練數(shù)據(jù); 使用更多的訓(xùn)練數(shù)據(jù)進行模型的訓(xùn)練,也有可能帶來一定的危害,如測試集合過少,驗證出的最優(yōu)模型可能在測試集上并不是最優(yōu)的,也就是驗證集過少,可能不能驗證模型的真實性能,但是值得一試。
具體的實現(xiàn)方式:采用隨機劃分
實驗表明,我們的修改是正確的,提高了模型的f-score
3.2 標簽平滑
![]()
為了更好的性能,我們使用了標簽平滑的技術(shù),標簽平滑是一種正則化的策略,通過soft label來加入噪聲,減少真實樣本的類別在計算損失時的權(quán)重,起到抑制過擬合的效果。除此之外,該方法還可以提高模型的泛化能力。
我們的平滑參數(shù)設(shè)置:??=0.1,獲得了模型榜第一名
3.3數(shù)據(jù)增強
數(shù)據(jù)增強有多種方式,這里我們幾乎能用的數(shù)據(jù)增強方式都用到了:
隨機旋轉(zhuǎn)、隨機裁剪、隨機觀察角度 隨機模糊、隨機灰度化、降低圖像質(zhì)量 在HSV顏色空間上進行數(shù)據(jù)增強,像素級別數(shù)據(jù)增強 Mosaic:一張主圖和隨機三張圖片平成一張圖片 MixUp:將原圖和隨機選取的圖片進行混合 數(shù)據(jù)增強對于提高模型的泛化能力和提高模型識別的準確率非常重要。
4 測試結(jié)果分析
![]()
采用上面的方法改進后,我們對模型進行了訓(xùn)練和測試,結(jié)果如上圖所示,可以看到,模型的f-score是0.9565,已經(jīng)是比較高的了。這說明訓(xùn)練和測試的數(shù)據(jù)并不復(fù)雜,簡單的yolov5s模型就可以學習到比較好的特征。
然后我們還分析了每個類別的精確率和召回率,我們發(fā)現(xiàn),belt和belt_person兩個類別無論是精確率還是召回率都非常高,no_belt_person反而是最低的。
這和我們最初的猜測是相違背的,我們猜測,可能是因為:
belt和belt_person兩個類別是有關(guān)聯(lián)的,模型可學習到了這種關(guān)聯(lián),因此belt的識別率并不低,而no_belt_person需要分別出沒有帶belt,反而性能降低了; belt和belt_person是“相容”的,而no_belt_person與之不“相容”; 5 其他模型嘗試
除了yolov5s之外,我們也嘗試了yolov7和yolox。
在精度方面:yolov7精度表現(xiàn)和yolov5s基本相同,而yolox精度則要低一些。
在性能方面:yolov5s的性能幾乎是他們的兩倍。
綜上,我們考慮使用yolov5s作為最終的檢測框架。
6 模型測試階段調(diào)試
![]()
在查看測試結(jié)果的時候,我們發(fā)現(xiàn)每個類型的精確率都是低于召回率的。考量模型性能的一個指標是f-score,而f-score是精確率和召回率的調(diào)和平均值,如下面公式所示:
可以通過簡單的數(shù)據(jù)分析可以知道,f-score的值只有在Precision和Recall都很高的情況下才會變得高。目前我們是召回率很高,通過提高置信度的閾值,由原來的0.2提高到0.45,損失一點召回率,提高了模型的精確率,最終提高f-score也是非常值得的。實驗的結(jié)果也證明了我們的想法。
7 模型部署
起初,我們使用了極市平臺提供的C++部署套件,并按照賽題的要求,修改其中的業(yè)務(wù)邏輯,并使用tensorRT進行加速。但是最終的測試性能,卻遠沒有我們預(yù)想的那么快,可能是出現(xiàn)了bug。后期,因為平臺也支持python,所以我們最終采用python代碼來進行測試,先將pytorch模型轉(zhuǎn)換成onnx模型,然后再使用tensorRT進行優(yōu)化。
![]()
配置好一切的環(huán)境后,在部署榜上的性能結(jié)果基本上接近模型榜的上的性能。
8. 總結(jié)及可能的改進
總結(jié):
數(shù)據(jù)并不復(fù)雜,不需要特別大的模型 使用多個數(shù)據(jù)增強,提高模型的泛化能力 可以增加正則損失,避免模型過擬合 要根據(jù)訓(xùn)練結(jié)果調(diào)整訓(xùn)練參數(shù),置信度閾值等等參數(shù) 推理性能,使用TensorRT進行推理優(yōu)化。 可能的改進:
嘗試使用半精度推理,進一步提高模型的性能 嘗試模型融合,多個模型的結(jié)果進行合并,進一步提高f-score 采用交叉驗證方式,選擇更好的模型參數(shù)
聲明:部分內(nèi)容來源于網(wǎng)絡(luò),僅供讀者學習、交流之目的。文章版權(quán)歸原作者所有。如有不妥,請聯(lián)系刪除。


