蔣益鳴 范希喆 張美嘉 邱少君 付貴忠
(蘇州科技大學機械工程學院,江蘇 蘇州 215009)
新冠疫情爆發以來,為保障社會的平穩運行,疫情防控中已經消耗了大量的人力和物力。目前在大部分公共場所,出于疫情防控安全的考慮,通過保安人員檢查口罩佩戴的情況,該方式會消耗大量人力資源,增加防疫人員的感染風險,并且無法實現全天候的監測。與傳統人工檢測相比,機器視覺技術的口罩識別系統具有識別準確、成本低廉、人力消耗小和全天候監測等特點。
基于卷積神經網絡的口罩檢測方法屬于機器視覺技術,是一種通過機器模仿人類視覺功能來進行測量與判斷的方式[1]。一套典型的視覺檢測系統主要包括圖像采集、圖像處理分析及輸出和顯示。機器視覺領域的圖像處理和分析技術已從機器學習發展到最新的卷積神經網絡方法。隨著工業技術的不斷發展,自動化和智能化水平也在不斷發展,用于疫情防控的口罩檢測就是其中一個重要的應用。雖然有部分學者研究了口罩檢測方法[2-3],但是對于一些特殊的場景關注不夠,因此該文針對口罩檢測任務進行了研究,解決了現實場景中可能出現的口罩顏色不常見、佩戴不規范以及光線弱等問題,并在可移動設備上進行了應用。
在進行試驗前需要提前篩選試驗數據集,數據集的豐富程度往往決定了模型訓練的效果,場景和特征豐富的圖像數據能提高模型的泛化能力,在實際檢測時能提高對不同情形的應變能力。目前公開的人臉識別的數據集有MAFA、WIDER FACE數據集圖片,其中MAFA數據集主要包括各種面部被遮擋的檢測的數據集,且遮擋種類多樣;WIDER FACE數據集是人臉識別常用數據集,且多為不佩戴口罩的情況。鑒于口罩種類、刻意遮擋物種類不同等會對訓練檢測有巨大的影響,而該文的實時口罩佩戴檢測需要較高準確度,所以選擇的數據集也需要更全面。該文選取了檢票口、室內取景以及機場等公共場合的,近、遠距離相結合的,并考慮了背景虛化、逆光環境和側臉拍攝等的樣本。數據集標注常用工具為LabelImg軟件,能對人臉是否佩戴口罩進行判斷,分為“Mask”(已佩戴)和“No Mask”(未佩戴)。
因為需要能夠做到實時自動檢測并準確識別圖片信息是否為正確佩戴口罩,所以要求該系統具有比較完備的組成,其主要組成部分如圖1所示,即圖像采集、圖像處理、圖像分析和結果輸出[4]。
該試驗訓練時不需要圖像采集,在測試時通過筆記本電腦的攝像頭來采集圖像。圖像處理是將輸入的圖像提前進行預處理,讀取所有照片以后對圖像進行裁剪灰度化和平滑處理,采用二值化圖像將圖像降維,轉為黑白圖像,方便進行圖像特征區域識別和分類檢測。圖像分析是對已經通過圖像處理步驟的圖像進行特征裁取,并對所需要的口罩部分進行定位和分析,最后進行圖像檢測結果的輸出,并顯示在顯示屏上。
該文模型測試環境是基于TensorFlow深度學習框架開發的。其特征提取應用了DarkNet-53多尺度特征學習與融合網絡結構,如圖2所示。
該模型的設計思路如下。
首先,DarkNet-53有53層卷積層,通過卷積層1進行特征的學習,利用殘差模塊1~殘差模塊5進行尺寸壓縮和特征學習,殘差模塊的具體結構如圖3所示。其中殘差模塊包括梯度回傳回路即跳躍連接,可以有效防止訓練深層網絡出現梯度消失的現象。此外,用卷積層步長為2的方式代替傳統的池化層,有利于保留紋理細節特征。
殘差結構所用的跳躍連接是將輸入特征圖與經過處理的輸出特征圖經過級聯層進行維度拼接后輸出,如公式(1)所示。
式中:x為模塊輸入;f(x)為經過本模塊卷積層特征學習后的輸出;y為最終的模塊輸出。
其次,該模型采用類金字塔結構進行預測,經過包括步長為2的殘差模塊時,每次壓縮圖像尺寸都會縮小一半。如果設定圖像輸入時尺寸為256×256像素(有時也會選擇416×416像素作為輸入圖像的尺寸);經過卷積層1時,圖像尺寸變為256×256像素;經過殘差模塊1時,圖像尺寸變為128×128像素。依此類推,經過殘差模塊5時,圖像尺寸變為8×8像素。
DarkNet-53主干網絡的詳細參數見表1,隨著網絡深度的加深,卷積層通道數也在增加。隨著特征的不斷學習,卷積層學習到的語義特征越來越豐富,因此需要更多的卷積層通道數來表征。卷積核選用的是1×1和3×3的組合,這兩種卷積核可以減少模型的參數量,同時能進行特征學習和特征融合。

表1 DarkNet-53主干網絡詳細參數
因此,殘差模塊3~殘差模塊5的特征輸出尺寸分別為原圖的1/8、1/16和1/32,在隨后的網絡中分別對3個尺度的特征進行特征學習和檢測結果預測,這種技術稱之為多尺度特征學習,可以讓網絡的特征適應圖像中可能出現的各種尺寸的物體。
再次,檢測框的尺寸往往也會影響最終的檢測效果,因為檢測框的尺寸需要定位所檢測的目標。一般來說是通過K-means聚類的方法對數據集中的標注框進行統計分析,找到適用于特定數據集的標注框尺寸。對人臉佩戴口罩的數據集的訓練能獲得相對合適的先驗框,在此使用的K-Means聚類具體過程如下。。
根據數據的標注框尺寸的設定劃分為k個簇,將簇上的緊密連接連接起來,然后計算均方誤差SSE,如公式(2)所示。
式中:k為k個簇;j為正在計算的簇的序號;Cj為簇j內數據樣本的集合;x為Cj內樣本的數值;mj為Cj簇的質心。
在不同的迭代中去優化,減小均分誤差,當誤差達到設定的數值或者誤差幾乎穩定不變時停止迭代。K-Means算法可以更高效地對檢測特征和結果進行聚類強化,提高整個系統的檢測精度。
最后,利用檢測框進行檢測,需要采用非極大值的抑制方式去除置信度不高的候選框,具體過程如下。對圖像進行檢測時,如果輸入尺寸為416像素,檢測模型會有3個輸出,即即13×13像素、26×26像素和52×52像素,輸出像素尺寸總和為13×13+26×26+52×52=10647像素,數量為分類類別n(n在該試驗中取2+5,2為戴口罩和不戴口罩2種情況,5為檢測框的位置、數量信息及置信度);通過置信度篩選大于閾值的預測作為新的預測;計算置信度得分;將置信度得分進行排序,得到最大值,找到和這個得分最大的預測類別相同的計算IOU值,通過加權計算得到最終的預測框。
最后,輸出預測模塊部分采用的損失函數是CIOU損失函數[5],計算預測框和真實標記框之間的差異,其計算方法如公式(3)~公式(5)所示。
式中:d為真實框的中心點與預測框中心點的距離;c為預測框與真實框交集的最小矩形的對角線距離;α為平衡比例的一個系數;v為測量長寬比的一致性;wgt和hgt分別為真實框的寬和高;w和h分別為預測框的寬和高。
該試驗是在處理器為i5-6500,GPU為英偉達1050顯卡的筆記本上進行的,在TensorFlow深度學習平臺上進行運算,并采用基于Cuda編程的GPU進行加速訓練。
當訓練時,先確保系統通過數據加載器載入標注好的數據集,沒有對數據集進行特別的圖像預處理。再加載卷積神經網絡模型,通過圖像讀取文件讀取訓練集,進行人臉識別并獲取人臉的位置,獲取后裁取圖片并保存。在得到灰化后的圖像以后,通過測試文件對截取得到的畫面進行反復訓練,當損失函數趨于穩定就可以即停止訓練。通過K-Means聚類處理選擇預選框,選擇尺寸為10×13、16×30、33×33、45×45、45×62、90×90、116×90、156×195以及373×326像素的候選框。
該測試過程采用的模型是在上一步中訓練得到的,測試的數據可以通過2種方式獲得,第一種是利用攝像頭實時采集圖像,第二種是載入本地圖像。通過以上2種方式獲得的圖像將在模型中載入,模型將針對圖像輸出檢測結果,并同步標注好“Mask”或“No Mask”以及對應的預測置信度。
如果某張圖像的檢測結果“Mask”數值標注為1.0,那么檢測模型認為已佩戴口罩的概率是100%,“Mask”標注框的顏色是綠色。反之,“No Mask”標注框的顏色是紅色,如果標注數值為0.8,就認為沒有佩戴口罩的概率是0.8。在測試時,通過時間函數記錄運行程序所需要的時間。
為了驗證該模型在正確佩戴口罩、未完全佩戴口罩、刻意遮擋臉部以及多種顏色口罩下的檢測結果,采用多種場景下的照片,結果如圖4所示。
可以看出,該模型在光照相對清晰、側面拍照或非常見顏色口罩的情況下都能夠將口罩檢測出來。第二張圖片屬于光照較弱的情況,模型也能夠完成對口罩的檢測。最后一組圖片為口罩從完全未戴到戴好,可以看出模型對于佩戴口罩和未佩戴口罩的識別結果都很理想。當口罩只戴了一部分,模型會將其識別為未佩戴口罩,如果將口罩戴到鼻子部位,將識別為已佩戴。通過分析可以看出,檢測模型在檢測口罩佩戴規范性方面有比較良好的效果,但是仍有提升的空間。
此外,該文還對該模型進行了量化指標的評估,見表2。根據表2的數據,檢測的平均精度值為96.5%,計算速度為67 F/s,即每秒可以處理67張圖片,考慮實際使用時鏡頭前面的待檢測人群是慢慢出現的,該檢測速度完全可以滿足需求。

表2 模型的運行結果
綜上所述,口罩佩戴檢測系統目前雖然已經發展成熟,但面對光線極端差異、人群復雜的情況下仍然可能或多或少有誤判、漏判的問題,可以在圖像預處理過程中進行分析,通過圖像增強的方式提供更多的數據,提高檢測的準確性。
該文主要對人臉口罩佩戴檢測進行了深入研究,在標注了自建的數據集后,采用基于DarkNet -53的YOLOv3模型進行數據集訓練,對弱光照、側拍和不規范佩戴口罩的情況都得到了不錯的效果,試驗的檢測精度達到96.5%,檢測速度達到67 F/s。