抽菸識別冠軍方案|ECV 2022

語言: CN / TW / HK

↑ 點選 藍字  關注極市平臺

作者丨鹹菜配稀飯

編輯丨極市平臺

極市導讀

本文為ECV2022競賽獲得抽菸識別的冠軍方案分享,作者團隊簡要分享了他們的比賽思路。   >> 加入極市CV技術交流群,走在計算機視覺的最前沿

2022年5月-7月,我參加了極市平臺ECV2022計算機視覺開發者榜單大賽.獲得了抽菸識別賽道的冠軍,以下是我對本次比賽的總結和回顧.

賽題要求

在工廠、工地等場所,由於可能存在易燃易爆物,都嚴禁抽菸,在辦公區域、後廚、園區等一些公共場所,也禁止抽菸。鑑於此需求,本賽題希望開發者能夠基於工廠、後廚、辦公室、園區等多個場景,開發出演算法以檢測是否有人在進行抽菸。

賽題難點

香菸檢測屬於小目標物體,檢測存在難度。

抽菸和打電話/摸耳朵等動作很容易混淆,筆者之前參加過一個打手機識別的比賽,該比賽中很多打手機的負樣本就是拿抽菸做的,因為兩個行為在攝像頭底下很容易被誤解,因此需要解決這兩個行為的區別,不能僅用目標檢測來解決。

題目需要輸出:

頭部框位置並區分正臉 側臉  背臉

人臉 五個關鍵點:左眼  右眼  鼻子  左嘴角 右嘴角

手部框位置

抽菸框位置

菸頭框位置

菸頭線位置

由於涉及隱私保護和資料保護, 編碼環境裡面的人臉都被打了馬賽克,如下圖:

這樣造成臉部幾個關鍵點和菸頭的關鍵點資訊都被抹去了, 靠樣本資料無法在程式設計環境中訓練一個簡單關鍵點模型來除錯;。

這樣會有些麻煩, 無法在程式設計環境中除錯輸出 ,除非你之前就在極市平臺上面做過打榜的題目,熟悉題目要求,如果是像筆者一樣第一次做這個題目的話,需要很多時間去摸索,我花了很多積分和時間在這上面做除錯。

因此也推薦大家沒事的時候也可以先到極市的打榜頻道鍛鍊一下,據筆者觀察他們的很多比賽題目都是從榜單這裡選的,事先熟悉一下極市的資料和要求,這樣在比賽開始後可以比別人快很多進入主題。

資料分析

比賽資料集共包含31065張影象 資料均為JPG格式,標註型別為VOC+關鍵點,標註檔案格式為XML,標籤型別bounding box、polyline、point。

訓練集解析度:

'3840 2160': 14189'1920 1080': 8558'1920 1440': 3663'1280 720': 2084'2560 1440': 412'1512 848': 289'2560*1920': 109

做了下標註的統計,基本還是均衡的,符合實際的情況

模型選擇

選擇一個好的演算法模型,往往要從以下幾點入手:

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模型為基礎,輔助以人臉特性,得到一個新的人臉檢測器。

主要特點是:

  1. 在YOLOv5網路中新增五個人臉關鍵點回歸,迴歸的損失函式用的是Wing loss。(類比MTCNN、RetinaFace) MTCNN中使用L2損失作為5個人臉關鍵點的迴歸損失,但是L2對小的誤差並不敏感,為了克服這個問題,Wing-Loss出現了;

  2. 用Stem模組替代網路中原有的Focus模組,提高了網路的泛化能力,降低了計算複雜度,同時效能也沒有下降;

  3. 對SPP模組進行更新,使用更小的kernel,使yolov5更適用於人臉檢測並提高了檢測精度;

  4. 新增一個stride = 64的P6輸出塊,P6可以提高對大人臉的檢測效能;

  5. 發現一些目標檢測的資料增廣方法並不適合用在人臉檢測中,包括上下翻轉和Mosaic資料增廣;

  6. 基於ShuffleNetv2設計了兩個輕量級模型,backbone和CSP網路不同,模型非常小,可以在嵌入式裝置和移動裝置達到SOTA。

該演算法的網路架構圖如下所示

本方案最終的方案是修改yolo5face為從單一的人臉檢測修改為多類別的目標檢測(關鍵點)演算法 ;

訓練和推理

訓練過程

首先是資料處理,需要將訓練資料處理成yolov5所需要的格式;yolov5工程化做的比較好,各類比賽中使用的非常多,這裡就不介紹這個VOC格式到yolov5格式轉換,如果有疑問可以其他人的比賽總結或者極市打榜經驗文章中均有提到;值得注意幾點是:

1.需要處理人臉關鍵點座標,注意輸入輸出的關鍵點順序;

2.在本方案中,菸頭的兩個端點也作為關鍵點輸入訓練;

3.所有的關鍵點資料都要歸一化處理;

4.增加對樣本資料增強的處理: 比如高斯模糊, 隨機裁剪等等;

本方案由於改變了模型backbone ,並沒有使用任何預訓練的權重,而是基於比賽資料從頭訓練的;

推理過程

1.為了加快速度, 需要使用TensorRT來推理模型,因此需要將訓練好的模型轉成tensorrt engine格式部署;

2.將影象resize成合適的大小,輸入推理網路,這個需要做很多測試;

3.推理的前處理後處理儘量在放到GPU上面執行,以加快推理速度;

工程部分總結

1.選擇一個能走通的方案作為base line ,在此基礎上面迭代改進演算法和流程;

2.修改演算法backbone為你自己的方案,並且嘗試不同的方案組合,以提高精度;

3.改變影象推理的尺寸大小,找到一個合適的大小作為輸入;

4.將模型轉到合適的部署方案,比如TensorRT/onnxruntime等;

5.將程式碼精簡,理順流程,減少不必要的處理過程;

6.不斷除錯,直到選擇到合適的超引數;

最終效果

最終本方案獲得了榜上第一名的成績;

筆者也嘗試了轉換openvino的測試,在CPU上面也能獲得較好的速度,如果沒有GPU的情況可以使用openvino來推理;

關於極市平臺的比賽

最後,筆者還想說一下極市比賽和其他比賽的不同。

極市比賽是非常偏向工程實際應用的, 要求精度同時也對效能要求很高 , 因此很多其他比賽的技巧在這裡可能都無法使用,比如偽標籤, 多模型融合推理這些;反而一些工程方面的技巧應用會上分更多.這些都是需要自己多去嘗試.

極市乾貨

演算法競賽: 國際賽事證書,220G資料集開放下載!ACCV2022國際細粒度影象分析挑戰賽開賽!

技術綜述 BEV 學術界和工業界方案、優化方法與tricks綜述 PyTorch下的視覺化工具(網路結構/訓練過程視覺化)

極視角動態: 極視角與華為聯合釋出基於昇騰AI的「AICE賦能行業解決方案」 演算法誤報怎麼辦?自訓練工具使得演算法迭代效率提升50%!

# CV技術社群邀請函  #

△長按新增極市小助手

新增極市小助手微信 (ID : cvmart2)

備註: 姓名-學校/公司-研究方向-城市(如:小極-北大-目標檢測-深圳)

即可申請加入極市 目標檢測/影象分割/工業檢測/人臉/醫學影像/3D/SLAM/自動駕駛/超解析度/姿態估計/ReID/GAN/影象增強/OCR/影片理解 等技術交流群

極市&深大CV技術交流群 已建立,歡迎深大校友加入,在群內自由交流學術心得,分享學術訊息,共建良好的技術交流氛圍。

點選閱讀原文進入CV社群

收穫更多技術乾貨