計算機視覺life』,選擇『星標』
快速獲得最新幹貨
文章轉載極市平臺
賽題要求
在工廠、工地等場所,由於可能存在易燃易爆物,都嚴禁抽菸,在辦公區域、後廚、園區等一些公共場所,也禁止抽菸。
鑒於此需求,本賽題希望開發者能夠基於工廠、後廚、辦公室、園區等多個場景,開發出算法以檢測是否有人在進行抽菸。
賽題難點
香菸檢測屬於小目標物體,檢測存在難度。
題目需要輸出:
頭部框位置並區分正臉 側臉 背臉
人臉 五個關鍵點:左眼 右眼 鼻子 左嘴角 右嘴角
手部框位置
抽菸框位置
菸頭框位置
菸頭線位置
由於涉及隱私保護和數據保護,編碼環境裡面的人臉都被打了馬賽克,如下圖:
這樣造成臉部幾個關鍵點和菸頭的關鍵點信息都被抹去了,靠樣本數據無法在編程環境中訓練一個簡單關鍵點模型來調試;。
這樣會有些麻煩,無法在編程環境中調試輸出 ,除非你之前就在極市平臺上面做過打榜的題目,熟悉題目要求,如果是像筆者一樣第一次做這個題目的話,需要很多時間去摸索,我花了很多積分和時間在這上面做調試。
因此也推薦大家沒事的時候也可以先到極市的打榜頻道鍛煉一下,據筆者觀察他們的很多比賽題目都是從榜單這裡選的,事先熟悉一下極市的數據和要求,這樣在比賽開始後可以比別人快很多進入主題。
數據分析
比賽數據集共包含31065張圖像 數據均為JPG格式,標註類型為VOC+關鍵點,標註文件格式為XML,標簽類型bounding box、polyline、point。
訓練集分辨率:
做了下標註的統計,基本還是均衡的,符合實際的情況
模型選擇
選擇一個好的算法模型,往往要從以下幾點入手:
1、更快更強的Backbone架構;
2、更有效的Neck特征集成方法;
3、更準確的檢測Head方法;
賽題思路
通常看到題目的對臉部幾個關鍵點的要求很容易想到這賽道需要一個臉部關鍵點檢測的算法來實現。
因此直覺就是選擇了retinaface 這個算法可以檢測人臉並輸出5個關鍵點:剛好是賽題要求的幾個點。
最初的baseline 的流程如下圖所示:
利用兩個模型合並推理來實現 ,一開始我就是這樣實現,但是在這個比賽上速度跟不上。
出於推理性能考慮,加上筆者對於yolov5的網絡結構比較熟悉,筆者選擇了另外一個模型yolo5face(其實retinaface也能改)
yolov5face是深圳神目科技推出的人臉檢測模型。
論文地址:https://arxiv.org/abs/2105.12931
通過上圖的表格我們可以看到相對於RetinaFace 和SCRFD ,Yolo5-Face在精度和計算量都要好一些.
Yolo5face算法把人臉檢測視為一般的目標檢測任務,以現在比較熱門的YOLOv5模型為基礎,輔助以人臉特性,得到一個新的人臉檢測器。
主要特點是:
在YOLOv5網絡中添加五個人臉關鍵點回歸,回歸的損失函數用的是Wing loss。
《類比MTCNN、RetinaFace》 MTCNN中使用L2損失作為5個人臉關鍵點的回歸損失,但是L2對小的誤差並不敏感,為了克服這個問題,Wing-Loss出現了;
用Stem模塊替代網絡中原有的Focus模塊,提高了網絡的泛化能力,降低了計算復雜度,同時性能也沒有下降;
對SPP模塊進行更新,使用更小的kernel,使yolov5更適用於人臉檢測並提高了檢測精度;
添加一個stride = 64的P6輸出塊,P6可以提高對大人臉的檢測性能;
發現一些目標檢測的數據增廣方法並不適合用在人臉檢測中,包括上下翻轉和Mosaic數據增廣;
基於ShuffleNetv2設計了兩個輕量級模型,backbone和CSP網絡不同,模型非常小,可以在嵌入式設備和移動設備達到SOTA。
該算法的網絡架構圖如下所示
本方案最終的方案是修改yolo5face為從單一的人臉檢測修改為多類別的目標檢測(關鍵點)算法 ;
訓練和推理 訓練過程