朱鑫鵬,李丹
(四川大學錦城學院計算機與軟件學院,四川成都,611731)
近年來伴隨著深度學習的發展,以及卷積神經網絡在對于人臉檢測方面得取得的巨大的研究成果以及技術性的突破,對于社會以及設備對于人臉檢測的需要也變得更加嚴謹,在疫情尚未完全散去的環境中,在火車站對于人們是否佩戴口罩,這一項具有需要耗費大量人力的工作,但是通過我們YOLO5Face算法的遮擋人臉檢測,就可以解放大量人力,來實現機器來自動檢測并且提醒未佩戴口罩的人們。本文將通過介紹YOLO5Face算法結構,優劣性能對比,以及最終在火車站的人臉檢測的實現,來展開說明。
在2015年誕生的YOLO算法,它與當時流行的twostage方法不用。它沒有將對象檢測看作分類問題,而是視為一個回歸問題。在所有基礎階段,它使用單個神經網絡就可以完成,并且可以取得優于其他算法的檢測性能,以及具有更快的實時處理的速度和能力。
在接下來這六年中,YOLO[2]算法更新了五個版本,前三個版本均有YOLO算法作者開發而成,YOLOv3[3]是這些算法是使用最為廣泛的一個,也是后代算法衍生出來的基礎,它主要使用了Darknet-53作為主干網絡,以及棄用了softmax損失函數,用二元交叉熵損失函數來取代,在性能和速度以及穩定性上都有了很大的提高。
我們在項目開始初期我們找到了很多圖片,對于這些圖片上的人臉識別,驗證,跟蹤,以及自動選取錨框,自動對齊,表達分析等等做了深入的分析。人臉檢測作為一個重要的計算機視覺項目,在不同的算法,不同的網絡層數,得到的結果都會是有所差異的。在做這些工作之間,我們去學習了CNN網絡的設計、損失函數的選取、數據增強以及訓練方法。最終我們通過對比YOLOv3[3],YOLOv4[1],YOLOv5,通過對于深度學習以及算法的了解,我們最終選擇了YOLO5Face,一個基于YOLOv5的人臉檢測算法。它從數據角度,將人臉具有的屬性,姿勢,大體輪廓,遮擋程度,外界的光線照明程度,以及在人們在活動的時候造成的重影模糊等。再如不同的人,面部表情的不同,或者有些人化妝等,都可以很有效的進行識別。YOLO5Face中加入的Landmars,在目標預測定位中是非常簡便,特別適用于大規模的,人臉非常小,以及人臉密集的場景。
我們使用的YOLO5Face的網絡結構,它與YOLOv5很相似,但其作者對于他的網絡結構有所更改,以便于提高了整體的平均精度和運行速度。使用了一種新設計的主干網CSPNet[5],在neck中使用了SPP[35]和PAN[36]用來聚合特征。
(1)用Stem塊 結 構 取 代YOLOv5的Focus層,是YOLO5Face中與YOLOv5的差異之處,YOLO5Face使用了Stem structure[38],目的為了提高泛化能力和降級計算復雜度。
(2)將YOLOv5的內核大小進行了更改,目的為了提高檢驗精度,以及對head的輸出標簽的修改,其中landmarks是YOLO5Face剛增加的,是對于YOLOv5算法的優化和改進,是一個 具有landmarks輸出的面部檢測器。
(3)主要是損失函數的修改,使用了wingloss損失函數,目的是為了在使用landmarks的應用場景下面變得更加有用,定位也將更加準確。
(4)增加了一個P6輸出塊,目的是有助于檢測到較大的人臉。因為現在的很多人臉探測器都專注于去攻破和提高對于很小的人臉進行檢測,也就以至于對大人臉的檢測很容易出現差錯,這里加入了P6輸出塊,也就是來彌補大人臉檢測的漏洞。
(5)對SPP塊進行了改變,對于這個塊,YOLOv5和YOLO5Face之間最大的區別就是兩者的內核大小不同,使用一個更小的內核。提高檢測效率和性能。
遮擋的人臉檢測是一個很有難度的項目,有兩個主要原因:(1)在現在的數據集中,大部分都是無遮擋的人臉,對于帶著口罩的人臉數據集很少。(2)口罩可以遮擋住大半張臉,也就會導致面部線索過少,會導致識別的效果不高,訓練困難,最終導致成功率不高。
近日期全球新型冠狀病毒肆虐,疫情嚴重地區每個人都需要佩戴口罩,遮擋數據集數量提高,該數據集用于幫助公共場所以及社區設計相應的數據支持,用于人員進出管控,車站,地鐵站,大商場,機場的人臉識別,也可用于社區和單位的門禁管理。
這里使用了遮擋人臉檢測數據集MAFA,這個數據集包括了30811張圖像,35806個遮擋人臉,圖像中每個人臉的形態各不相同,有著不同的朝向和遮擋程度,每張圖像中都至少有一個人臉被遮擋。首先我們對每個遮擋人臉人工標定屬性,由with_mask[3]作為佩戴口罩標簽,mask_weared_incorrect作為未正確佩戴口罩標簽,without_mask作為未佩戴口罩標簽,通過使用MAFA數據集,以及實驗結果的表現,都證明這個方法更加優越。
我們的系統程序主要通過了三個結構層次,來實現在火車站口罩佩戴的人臉檢測的界面交互以及算法功能。

圖1 系統框架結構圖
實體層:我們通過連接各大車站以及人群密集的大型商場的出入口攝像頭,來對于人群進行實時的采樣和收集傳回,并且存儲在一個函數之中。
識別層:識別層也就是我們主要的人臉檢測層,圖像處理層,將回傳的圖像通過YOLO5Face算法模型來進行對于其中人群佩戴口罩的情況進行檢測,通過與預判值進行對比,得到每個人臉的實際值,通過與我們預先設置的值進行比較,在一定范圍之內則會判定為正確佩戴口罩,最終將差別出入很大的結果返回給服務層。
服務層:這個也就是人機交互層,可以讓通過人員時刻收到信息和監控圖像,接受上層傳送回來的檢測結果,再由工作人員在現場進行實時的管理和組織。
在圖2是我們系統通過調參獲得的梯度下降圖片。圖2中Objectness:是目標檢測loss均值,越小目標檢測越準確,Classification:是分類loss均值,越小分類越準確,Precision:準確率,就是找對的/找到的比值。Recall:為召回率,是找對的/該找對的比值。mAP@0.5 &mAP@0.5:0.95:就是AP是用Precision和Recall作為兩軸作圖后圍成的面積,m表示平均,@后面的數表示判定iou為正負樣本的閾值,@0.5:0.95表示閾值取0.5:0.05:0.95后取均值。

圖2 梯度下降
我們主要通過修改epochs,默認為300,由于數據集過大,為了節省時間,我們將epoch修改為了10輪。通過修改了超參數進化evolve,其中第一個參數parent我們選擇了single只選擇上一代中最好的結果,第二個參數method改為了2,通過第二個模式來進化。其中使用了cache_images:將我們預處理后的訓練數據存在RAM中,來提高訓練速度,對于batch_size電腦原因我們使用的16,在img_size使用的[640,640],device參數方面由于速度以及電腦的原因,我們選擇的CUDA。
在最近疫情還沒有平靜的時期,我們設計出一個關于人們是否佩戴口罩的檢測系統,以用于去提高各大城市火車站安全性,來協助工作人員來判斷被檢測者是否佩戴了口罩,以及口罩是否佩戴正確,雖然在全球新冠的影響之下,佩戴口罩已經是非常正常不過的事情,但是仍有小部分人不去佩戴口罩,對于大城市,一天萬計的人流量,屬實會讓工作人員感覺到疲憊,有了口罩佩戴檢測系統,就會自動檢測出未帶口罩的人,或者口罩佩戴不正確的人,然后發出警報,提醒佩戴口罩,這個系統十分重要,對于疫情的防控,已經人力的解放都有著十分重要的作用。當然也可以通過視頻監控對于過往的人來進行識別,可以將其監控返回給工作人員,有效的管理監督公共場所佩戴口罩問題。
車站在不同場景有著不用情況的檢測需求,如果在車站門口,在我們這個系統上面增加口罩-體溫檢測,也只需要在此模型上增加現有的體溫檢測系統,既可以實現自動化的通行。
我們在MAFA[4]數據集上關于檢測口罩佩戴情況表現優秀,結果如下,基本上都可以很快的而且很正確的識別和鑒定出是否佩戴口罩,并且對于口罩佩戴不正確的人,也有著,較高的檢測準確性。如圖3中所示,粉紅色框:代表著檢測的人正確佩戴口罩(with_mask),在中間圖中的紅色框:代表著未佩戴口罩(without_mask),而在最右邊的橘色框,則是表示口罩為佩戴正確(mask_weared_incorrect)。

圖3 實驗結果圖
在各城市火車站,人流量巨大,而且會有很多外來人員,也就會導致會有疫情出現的可能,所以安排工作人員進行監督和管理是必不可少的,隨著深度學習的發展和進步,人臉檢測技術的提高,也就可以將昂貴的人工成本降低,來使用機器檢測,如圖3中所示,無論是正臉側臉,不管是近距離的大臉還是遠距離的小臉,都可以很準確,此模型都可以很好的應對。
該系統的意圖是在疫情這個大環境下,對于人們的出行,以及在各城市的火車站中,為了監督人們佩戴口罩的工作人員,減輕工作負擔,解放勞動力,此系統可以更準確的識別戴口罩和未戴口罩,以及口罩佩戴錯誤的人們,進行識別。該系統目前仍處于實驗初期,存在著許多不足之處,后期我們會結合更好的數據集,來進行系統的優化和改進,爭取去實現一個更完美的系統。