劉國明,江巨浪,查 兵,任 鈺,嚴華鋒
(安慶師范大學電子工程與智能制造學院,安徽安慶 246133)
2020年初新冠肺炎疫情蔓延全球,對人類生命健康構成嚴重威脅,在公共場所佩戴口罩是預防疫情傳播的最有效措施。采用深度神經網絡自動檢測口罩佩戴,能夠彌補人工管控的不足。在新冠肺炎疫情發生之前,還沒有專門研究口罩佩戴檢測算法的文獻,但在人臉檢測、目標檢測和物體分類等方面已經提出了很多算法。2019年,Insightface團隊提出了基于one-state的RetinaFace算法[1],該算法具有較高的檢測精度和較快的檢測速度。牛作東等[2]通過改進RetinaFace人臉檢測算法,實現對口罩佩戴的有效檢測,該方法用于自建的3 000 張圖片數據集,口罩目標檢測準確率為87.7%,但該算法需要檢測到眼、口、鼻等特征,存在對小目標和戴口罩側臉漏檢的不足。本文基于ResNet-34深度神經網絡模型[3],研究網絡輸入圖片的預處理方法、網絡模型的最優學習率和批數據量大小(batch size),對自建的包含12 000幅口罩佩戴圖片樣本集進行訓練。相比于文獻[1]的算法,口罩檢測準確率得到提高,對小目標和側面戴口罩人臉漏檢的不足得到改善,并且獲得一個性能優良的口罩佩戴檢測器。
一般情況下網絡越深,檢測效果越好,但計算量大,網絡很難訓練成功。因此,對于深度神經網絡難以訓練的問題,微軟實驗室提出了殘差網絡模塊(Residual)并丟棄了dropout機制。引入殘差網絡解決了超深網絡參數優化困難,提高了超深網絡的分類準確率,其內部的殘差塊使用了跳躍連接(shortcut),一定程度上解決了在深度神經網絡中的梯度消失問題。ResNet-34網絡擁有多個殘差模塊,對單獨一個殘差模塊來說,網絡輸入假設為x,希望學習到的函數為H(x),在實驗中F(x)相比于H(x)更容易優化,其中H(x)=F(x)+x。圖1為殘差網絡模塊示意圖。
由圖1可知,跳躍連接并沒有增加額外的網絡參量,所以不會增強原網絡的復雜度。但加入了跳躍連接后,訓練過程中底層的誤差可以通過跳躍連接向上一層傳播,減弱了層數過多造成的梯度消失現象,保證了網絡訓練精度。

圖1 殘差網絡模塊
BN就是對每一批訓練數據進行標準歸一化操作,使得這批數據都滿足標準正態分布。在BN出現之前,歸一化操作只在數據輸入層,現在BN可對網絡中任意一層數據進行歸一化操作,這樣每層的訓練數據都是被優化的,網絡模型自然就更好。實驗結果表明,BN在一定程度上減少了梯度消失和梯度爆炸,加速了模型的收斂速度,獲取了更好的網絡模型[4-6]。
機器學習中,數據集的質量對模型的泛化能力至關重要[7]。由于沒有公開的口罩數據集,本文制作了一個口罩數據集,制作過程考慮:(1)佩戴的口罩外觀形式盡量多樣化;(2)選取多種視角口罩圖片;(3)拉寬口罩在整個圖片所占的比例;(4)負樣本中選取遮擋口鼻部位的圖片;(5)負樣本選取有類似口罩的遮擋物;(6)加大圖像長寬比范圍;(7)大量選取自然場景下拍攝的圖片。部分樣本如圖2所示。所使用的圖片數據集大部分是在遵循網絡爬蟲協議前提下獲取的,小部分是從新聞視頻中截取的,還有一些為個人所拍攝的,共6 000張,戴口罩和未佩戴口罩比例約為1∶1。

圖2 部分樣本圖片
為了防止網絡過擬合,獲取更優的網絡模型,訓練數據集應盡量大,對已有的6 000 個樣本數據進一步擴充。根據數據集的特點,選取三分之一的數據作水平方向鏡像;三分之一的數據作隨機45度順時針或逆時針旋轉;三分之一的數據作尺度縮放,縮放比例控制在0.8~1.2范圍內,最終獲取的數據量為12 000 張圖片。將數據集的60%作為訓練集,20%作為驗證集,20%作為測試集。未對圖像做色彩偏移,主要因為口罩與背景存在較明顯的灰度級差距,色彩偏移會使得口罩的特征不能被很好地提取,從而影響檢測結果的準確率。
實驗用的卷積網絡輸入圖片大小要求為224×224,而圖片在采集過程中的尺寸不固定,必須進行預處理。常規的處理方式為中心裁剪或直接按目標尺寸縮放,但是效果不是很好。中心裁剪在處理長寬比較大的圖片時,會裁掉戴口罩的部位;直接縮放會導致口罩部位變形,口罩特征會被扭曲。本文處理訓練集和測試集稍微有些不同,訓練集采用隨機縮放裁剪為224×224的尺寸,隨機裁剪的目的是增強背景數據噪聲,防止過擬合以達到增強模型穩定性的能力;測試集圖片邊界首先填充到長寬一樣的尺寸,再等比例縮放到256×256的尺寸,最后再用中心裁剪的方式獲得224×224尺寸的圖片。
獲得規定尺寸圖片之后,對所有數據進行歸一化,使數據服從標準正態分布,其作用是使輸入數據具有相同的尺度,減少因數據相差過大而引起誤差。本文數據集在R、G、B 上的期望分別為0.485、0.456、0.406,標準方差分別為0.229、0.224、0.225,3個維度均進行標準化。
未對輸入圖片預處理時,網絡準確率最高為98.01%,但是對錯誤分類的圖片分析之后發現,有些戴口罩沒有被檢測出來,如圖3中1、2、4圖片,這不是希望的結果。于是,采用上述預處理方法,將圖片邊界填充到等長寬等比例,再進行縮放、中心裁剪,處理之后圖3中1~5號圖片的問題得以解決,對于7號和10號用手遮擋嘴巴部位也能夠正確分類為未佩戴口罩,網絡準確率提升到98.41%。對于6號尺度較小的側面口罩,9號和12號遮擋嘴巴部位圖片分類仍然錯誤。

圖3 沒有進行預處理被錯誤識別的圖片
批數據量是訓練過程中每次喂給神經網絡的圖片數量,其大小對網絡的精度有很大的影響,一般批數據量常見的取值有32、64、128、256,甚至更大。對于深度卷積神經網絡而言,批數據量越大,這批數據分布越接近于整體數據集,訓練效果會越好。不過更大的批數據量要求更大的GPU顯存,受實驗設備限制。本文實驗所用顯卡不足以處理256大小的數據量,故將該數值丟棄,另外選取了100和150進行測試,結果如表1所示。
由表1可以看出,當批數據量為較小的32時,準確率只有97.97%,迭代次數也比較多;當增大批數據量,準確率隨之提升,迭代次數也隨之下降。準確率最好的是批數據量為128時,準確率高達98.41%,當批數據量繼續增加到150的時候,準確率卻有所下降。因此,對本數據集的批數據量取128較為合適。

表1 批數據量對模型的影響
網絡的訓練其實就是尋找最優解的過程,而學習率反映了優化過程的快慢。學習率設置過大,優化速度快,但是網絡會容易跳過全局最優解,在最優解之外來回震蕩;學習率設置過小,則會影響網絡訓練的速度,而且模型容易陷入局部最優解。基于此,進一步研究學習率對上述網絡精度的影響。由于采用的是遷移學習方法,網絡已經有較好的權重,學習率相對要取較小值,學習率設置和實驗結果如表2所示。

表2 不同學習率模型的準確率與迭代次數
在驗證集上,隨著學習率下降,準確率會上升,當學習率減小到8×10-5時,準確率達到最高,為98.41%,繼續減小學習率,準確率反而會下降,網絡模型只能達到局部最優解。
為驗證口罩檢測器模型的效果,與文獻[1]的檢測準確率和檢測效率做了比較。在驗證集上,表現最好的模型準確率為98.41%,將此模型在測試集上測試,本文檢測準確率為97.25%,文獻[1]檢測準確率為88.5%。在文獻[1]漏檢結果中隨機抽取了10張圖片,如圖4所示,這些圖片本文能很好地檢測出口罩的特征。分析發現,文獻[1]算法是基于RetinaFace人臉特征檢測,需要檢測到眼、口和鼻等特征,在戴口罩的情況下,遮住了人臉部分特征,人臉檢測準確率有所下降,從而口罩檢測準確率也隨之下降。

圖4 漏檢口罩圖片
圖4中參數c為本文檢出戴口罩的置信度,置信度越高表明相關特征越容易被正確檢測出來。圖4中較難檢測出的是(c)和(d),置信度為0.87和0.86,但也維持在較高的水平。其他圖片的置信度都接近于1.00(四舍五入后的結果),說明口罩特征較容易檢測出來。本文模型不但具有更高的檢測精度,而且具有更高的抗干擾能力,對側面口罩、遮擋口罩、異形口罩和花紋口罩具有很好的適用性。
隨機選取尺寸大小各異的10張圖片來進行速度測試,結果如表3所示。

表3 檢測口罩用時統計
檢測用時都在(0.10~0.11)s之間,平均用時0.103 s,幀率為9.71 fps,相比于文獻[1]中18.3 fps的幀率,檢測效率有待提高,但9.71 fps的幀率可以達到實時檢測的要求,這對在公共場所的安防監控、企事業單位樓宇的門禁處檢測是否佩戴口罩具有重要的意義。
本文用深度神經網絡實現有無佩戴口罩的檢測,收集大量戴口罩圖片數據,并對數據集進行有效地擴充,制作一套優良的口罩檢測數據集。通過不斷試驗,研究了有效的預處理方法、最佳學習率和訓練批數據量,獲得了一個性能優良的口罩佩戴檢測器,對側面口罩、遮擋口罩、異形口罩和花紋口罩具有較高的抗干擾能力,同時擁有較高的檢測準確率和檢測速度,這對新冠疫情防控有較強的實踐意義。