蔡雨晨,馬雨生,凌晨,劉巧紅
(上海健康醫(yī)學院 醫(yī)療器械學院,上海 201318)
2019 年末,新型冠狀病毒[1]首次爆發(fā)。研究表明,新冠病毒具有極強的傳染性以及較長的潛伏期[2],其傳播途徑主要通過飛沫傳播、接觸傳播、血液體液、糞口傳播的方式[3]。現(xiàn)如今,多個國家發(fā)現(xiàn)了新冠肺炎變異病株,并且已有確診病歷,新型冠狀病毒的防疫越發(fā)嚴峻。
當前,國內采取了強有力的防控措施,有效控制了疫情的發(fā)展,抗擊新冠已取得巨大成功[4]。隨著國內疫情防控形勢的好轉,疫情防控工作開始常態(tài)化,人們也開始外出、復工復學。此時,疫情防控再一次面臨考驗,佩戴口罩是有效抑制疫情反彈的重要措施之一。隨著人工智能技術的快速發(fā)展,通過智能化的方式實現(xiàn)人臉是否佩戴口罩的檢測和預警顯得尤為重要。尤其是在如地鐵、公交、高鐵、學校、醫(yī)院等人流密集的進入場所,增加智能化的口罩識別系統(tǒng)能大大提供檢測效率,減少人工檢測帶來的漏查錯查等現(xiàn)象。因此,本文針對疫情防控的需要,利用深度學習技術設計與開發(fā)了一個人臉口罩佩戴識別系統(tǒng)。
近年來,學者們針對口罩識別也開展了一些研究。萬子倫等人[5]提出了一種基于改進Faster RCNN 的口罩佩戴檢測算法,將傳統(tǒng)的單一RPN 網(wǎng)絡模型改進使用多任務增強RPN 模型以提高檢測識別精度,其最終平均識別精準率可達90.18%。但在目標過多的情況下會出現(xiàn)卡幀現(xiàn)象。劉國明等人[6]利用ResNet-34 深度神經(jīng)網(wǎng)絡,經(jīng)適當預處理,調整學習率大小和批數(shù)據(jù)量大小,網(wǎng)絡在驗證集上準確率為98.41%,在測試集上準確率為97.25%。李國進等人[7]提出了一種基于DCN -SERes -YOLOv3 的人臉佩戴口罩檢測算法,算法的平均精度值高達95.36%,比傳統(tǒng)的YOLOv3 算法提高了約4.1個百分點,且檢測速度提高了11.7 fps。Cao 等人[8]基于YOLOv4 系列,使用一種改進的Mosaic 數(shù)據(jù)增強的方法,增強在夜間對于人臉口罩檢測的辨別能力。Sen 等人[9]提出一種使用PyTorch 框架的深度學習算法,從視頻流中檢測出任意類型的口罩和不同形狀的口罩。
總體來說,目前直接應用于人臉口罩佩戴的算法較少,且存在識別精準度有待提高、識別速度有待提升等問題。同時由于真實環(huán)境下人臉口罩佩戴的復雜性以及環(huán)境的不可控性,真實場景下的檢測難度也大大增加。此外,由于數(shù)據(jù)量有限,現(xiàn)有的口罩數(shù)據(jù)集未能覆蓋所有的真實場景,造成模型擬合不足,帶來漏檢問題。
為了進一步提高人臉口罩佩戴的識別準確度,應用在實時的視頻監(jiān)控檢測中,本文基于卷積神經(jīng)網(wǎng)絡和遷移學習技術設計了一個人臉口罩自動檢測系統(tǒng),用于自動檢測視頻和圖像中人臉佩戴口罩情況。本文研究的主要創(chuàng)新在于:
(1)以VGG16 網(wǎng)絡為原型,結合自定義的全連接網(wǎng)絡,提出了一個用于口罩檢測的深度神經(jīng)網(wǎng)絡模型,命名為MaskNet。
(2)為解決樣本量不足的問題,采用了模型遷移學習技術。首先利用ImageNet 對VGG16 網(wǎng)絡進行預訓練,隨后利用口罩數(shù)據(jù)集進行模型的參數(shù)微調優(yōu)化。
(3)為了實現(xiàn)視頻下的人臉口罩佩戴的實時檢測,利用OpenCV 和Dlib 庫打開攝像頭并動態(tài)采集人臉,進一步捕獲人臉所在區(qū)域后送入訓練好的MaskNet,實現(xiàn)口罩檢測。提出模型的檢測準確率可以達到99.2%,可以應用在對實時要求較高的場合。
(4)實驗表明,本文提出的MaskNet,不僅可以檢測單張圖像或實時視頻中人臉口罩佩戴情況,還可以同時檢測多人存在的口罩佩戴情況。
VGG 是牛津大學的Visual Geometry團隊提出,可以說VGG是加深版的AlexNet[10]。其中,VGG16[11]將AlexNet 中的大尺寸卷積核全部更改成小尺寸的3×3 卷積核,利用多個連續(xù)小卷積核的堆疊增大感受野。VGG 在保證感受野大小不受影響的同時,通過多個非線性層[12]可以增加網(wǎng)絡深度來保證學習更復雜的模式,并且產生的參數(shù)更少。VGG16 是常被用于遷移學習的網(wǎng)絡,由于標準的VGG16 網(wǎng)絡在整個ImageNet 上已經(jīng)進行了預訓練,因此在完成新任務的時候,只需要通過微調網(wǎng)絡就可以應用在新任務上。本文采用了VGG16 網(wǎng)絡的遷移學習,達到快速模型訓練和提取特征的目的。VGG16 網(wǎng)絡模型的結構[11]如圖1 所示。
圖1 VGG16 模型結構示意圖Fig.1 Schematic diagram of VGG16 model structure
遷移學習[13]是一種機器學習的方法,即把為任務A開發(fā)的模型作為初始點,重新使用在為任務B開發(fā)模型的過程中。遷移學習一詞首次來源于教育心理學,Pratt 最早在機器學習領域引用遷移,在1993 年研發(fā)了基于可區(qū)分性轉移算法。后經(jīng)過一系列發(fā)展,使得遷移學習在深度學習中越來越重要。遷移學習[14]是可以利用從其他任務中獲取的知識來幫助進行當前任務試驗的一系列方法,利用此方法,可以有效解決過擬合等問題,關鍵點就是找出新問題和原問題兩者之間有哪些相似性[15]。在小樣本數(shù)據(jù)的條件下,由于數(shù)據(jù)量不足,會導致訓練CNN 模型時發(fā)生過擬合,無法獲得理想識別結果。遷移學習的應用范圍非常廣泛,比如用來解決標注數(shù)據(jù)稀缺問題、誤差分享、進行機器人訓練等等。目前,作為一個新興的研究領域,遷移學習的研究主要還是集中在算法開發(fā)方面,基礎理論研究還并不成熟,因此值得進一步的研究。
原始的VGG16 網(wǎng)絡模型包含了16 個隱藏層,分別為13 個卷積層和3 個全連接層,接著將最后一個輸出張量輸入到一個分類器網(wǎng)絡中,由分類器處理向量得到分類結果。在處理二分類問題時,最后一層采用的激活函數(shù)為Softmax。本文提出的MaskNet 模型將利用去除全連接層后的VGG16 網(wǎng)絡結構完成對口罩圖像數(shù)據(jù)集的特征提取工作。初始權重直接采用VGG16 在ImageNet 數(shù)據(jù)集上預訓練好的權重,預訓練的VGG16 的結構和參數(shù)見表1。
表1 去除全連接層的VGG16 模型結構Tab.1 VGG16 model structure removing full connection layer
本文提出的MaskNet 網(wǎng)絡以Sequential 順序模型為基礎,調用了去除全連接層的VGG16 網(wǎng)絡的權重參數(shù)進行遷移學習,只訓練自定義的全連接層。預訓練的VGG16 的輸出經(jīng)過一個拉平層后,再通過2 個全連接層來處理后續(xù)的分類識別。MaskNet 的結構和參數(shù)見表2,模型示意圖如圖2 所示。
表2 MaskNet 模型結構Tab.2 MaskNet model structure
圖2 MaskNet 口罩檢測模型示意圖Fig.2 Schematic diagram of MaskNet mask detection model
本文設計和開發(fā)的人臉口罩佩戴檢測系統(tǒng)流程如圖3 所示。首先,將獲得的數(shù)據(jù)集劃分為正負樣本,通過本文提出的MaskNet 網(wǎng)絡進行特征提取,訓練分類器。然后,可以調用已訓練完成的分類器對圖像以及視頻中的人臉口罩佩戴情況進行檢測分類,最后輸出分類結果。系統(tǒng)經(jīng)過模型判斷后,給出是否佩戴口罩的結果,分為2 種情況。如果檢測出沒有佩戴口罩的,將會用紅色的矩形框標記人臉區(qū)域并顯示提示字樣;如果是檢測出佩戴口罩,將會用綠色的矩形框標記人臉區(qū)域并顯示提示字樣。
圖3 系統(tǒng)流程圖Fig.3 Flow chart of the system
3.1.1 數(shù)據(jù)集
數(shù)據(jù)集來自GitHub 官方網(wǎng)站上的公開數(shù)據(jù)集,這是2020 年3 月初武漢大學發(fā)布的一類開源的口罩人臉識別數(shù)據(jù)集。收集到的圖像數(shù)據(jù)總共為2 055張,本次數(shù)據(jù)均采用的是50?50?3 大小的彩色圖片。部分圖像數(shù)據(jù)如圖4 所示。
圖4 部分圖像數(shù)據(jù)Fig.4 Partial images data
3.1.2 數(shù)據(jù)預處理
將下載的數(shù)據(jù)集劃分為訓練集、驗證集和測試集三部分,劃分后會在目錄中生成train、test、validation 三個文件夾,同時這3 個文件夾下面都會創(chuàng)建名為have_mask 與no_mask 文件夾。這里的have_mask 與no_mask 作為佩戴口罩和未佩戴口罩的標簽。每個文件夾下包含相應佩戴口罩和未佩戴口罩的圖像數(shù)據(jù),相應的數(shù)據(jù)量見表3。
表3 數(shù)據(jù)集的劃分Tab.3 Division of data sets
為了獲取更多的訓練數(shù)據(jù),本文對原始數(shù)據(jù)進行增強操作,主要利用了 Keras 框架下的ImageDataGenerator 類來實現(xiàn)數(shù)據(jù)增強的功能。具體過程分為2 個部分。首先,是圖片生成器,主要是生成各個批次的圖片,以供生成器的形式給模型訓練;其次,就是要訓練每一批次的圖像,并適當進行數(shù)據(jù)增強。本文主要采用的數(shù)據(jù)增強操作見表4。
表4 數(shù)據(jù)增強方法Tab.4 Data enhancement methods
本系統(tǒng)的開發(fā)環(huán)境基于Pycharm 集成平臺,采用了Tensorflow 框架的Keras 模塊來搭建網(wǎng)絡結構,Python3.6 為開發(fā)語言。在進行視頻流處理和實時人臉區(qū)域標記時,采用了計算機視覺庫、即OpenCV和Dlib 庫。利用OpenCV 庫開啟攝像頭,并捕捉每一幀實時畫面,再用Dlib 庫中的正向人臉檢測器進行人臉檢測,提取人臉外部矩形框。接著利用OpencCV 庫進行圖像灰度處理,獲取檢測到的人臉坐標,并調用訓練后的MaskNet 網(wǎng)絡對人臉口罩的情況進行預測。
3.3.1 照片中的口罩檢測
本文提出的MaskNet 可以檢測單張圖像中的口罩佩戴情況,驗證結果將使用數(shù)值與中文表示,其數(shù)值以0.5 作分界線。如果數(shù)值結果大于0.5、則為未佩戴口罩,反之數(shù)值小于0.5、則為戴口罩。圖5 給出了2 張佩戴口罩和未佩戴口罩的圖像的預測結果。
圖5 照片預測驗證結果Fig.5 Verification results of photos prediction
3.3.2 視頻實時口罩檢測
本文開發(fā)的人臉口罩佩戴檢測系統(tǒng)主界面如圖6 所示。點擊主界面中的口罩識別按鈕,進入視頻口罩檢測界面,同時調用電腦攝像頭進行視頻的實時采集。將攝像頭捕捉到的畫面中的人臉用候選框標記出來,并調用MaskNet 網(wǎng)絡進行口罩檢測。被檢測的人臉是否佩戴口罩的結果將直接呈現(xiàn)在視頻監(jiān)控畫面中,使用不同顏色的候選框和提示文字來加以表示。未佩戴口罩將用紅色候選框和NoMask提示,佩戴口罩將用綠色候選框和Mask 提示,并顯示準確率的數(shù)值。單人檢測示例如圖7 所示。多人檢測示例如圖8 所示。
圖6 系統(tǒng)界面Fig.6 System interface
圖7 單人驗證結果Fig.7 Single-person verification results
圖8 多人驗證結果Fig.8 Multi-person verification results
3.3.3 模型精度
圖9 是本文提出模型在訓練時的精確度曲線和損失曲線。由圖9 中曲線的趨勢可以看出,本文提出的模型總體上精確度呈現(xiàn)上升趨勢,并在約500 次訓練后趨近收斂,由此證明本文提出模型的有效性。
圖9 精確度曲線與損失曲線Fig.9 Accuracy curve and loss curve
阻斷新冠疫情主要是阻斷病毒的傳播,而阻斷病毒傳播最有效的方法就是佩戴口罩。因此本文基于遷移學習和卷積神經(jīng)網(wǎng)絡,展開對目標人臉圖片或視頻口罩佩戴的有效檢測研究。研究中采用VGG16 模型,利用ImageNet 進行預訓練,結合OpenCV 和Dlib 庫實現(xiàn)單個或多個人臉口罩佩戴檢測。相較于其他的模型算法,MaskNet 的準確率達到了99.2%,同時可以檢測多個目標。在全球預防新冠疫情的背景下,將其應用于公共場所,能準確做到人臉口罩自動檢測并可及時發(fā)出預警提示,對疫情防控做出積極貢獻,具有重大實用意義。