唐心雨,陳霜霜*,路 鵬,王永林,蔡長安,秦 雄
(1.江蘇省心理與認知科學大數(shù)據重點建設實驗室,江蘇 鹽城 224002;2.鹽城師范學院 信息工程學院,江蘇 鹽城 224002)
自新冠肺炎疫情暴發(fā)以來,新冠病毒在人群中迅速傳播,給社會上的各行各業(yè)造成了極大的風險隱患,因此,佩戴口罩成為了人們日常生活的重要措施。為確保在人流密集區(qū)域等特殊場景下每個人都佩戴口罩,本研究基于PaddleHub[1]設計了人臉口罩識別系統(tǒng),該系統(tǒng)同時具有視頻監(jiān)控識別、嵌入式測溫的功能。同時,本系統(tǒng)增加了分類人數(shù)統(tǒng)計、實時語音報警及截圖的特色功能,助力疫情防控工作。
本系統(tǒng)分為核心功能模塊、特色功能模塊和未來工作模塊三大部分。其中,核心模塊包括人臉口罩識別、視頻監(jiān)控識別和人體測溫三個組成部分;特色功能模塊分為分類人數(shù)統(tǒng)計、實時語音報警及截圖;未來工作是對該系統(tǒng)的一個發(fā)展規(guī)劃和一些計劃實現(xiàn)的方案。整體架構圖如圖1所示:
圖1 系統(tǒng)整體架構Figure 1 Overall system architecture
本系統(tǒng)基于百度開源的PaddleHub作為模型管理和遷移學習工具。PaddleHub采用了飛槳領先的核心框架,精選效果優(yōu)秀的算法快速地實現(xiàn)模型的預測、升級等功能。到目前為止,PaddleHub的預訓練模型覆蓋了用于圖像分類、圖像生成、關鍵點檢測等主流模型。此外,PaddleHub 還提供了Fine-tune API[2],可以完成深度學習模型在自然語言處理和計算機視覺場景下的快速遷移學習,在更短的時間內完成模型的訓練。
PaddleHub支持飛槳Master模式,該模式可以運用于多種場景。Master模式包含算力與數(shù)據結合、知識與算法結合的預訓練模型。其中,預訓練模型與遷移學習工具構成Master模式的核心。PaddleHub作為模型管理和遷移學習工具,它的框架由開發(fā)、訓練和端到端的部署三個部分組成,如圖2所示。
圖2 PaddleHub的框架Figure 2 The framework of PaddleHub
其中,“開發(fā)”用于提高框架的易用性,“訓練”用于提高模型的預算速度,而“端到端的部署”用于模型適配網頁端或者移動端的部署。基于三者的結合,PaddleHub不僅能夠在線提供負載均衡能力,而且可以快速實現(xiàn)端到端一鍵部署。
本系統(tǒng)包括人臉檢測和口罩識別兩個核心算法模塊,其中,人臉檢測模塊基于PaddleHub的PyramidBox模型來訓練[3],口罩識別模塊利用FaceBoxes的主干網絡來判斷人臉是否佩戴口罩[4],這兩個核心算法模塊組合成一個有機整體。
1.2.1 人臉檢測
人臉檢測使用環(huán)境輔助的單階段人臉檢測器PyramidBox 實現(xiàn)。PyramidBox 作為一種高效的人臉檢測器,可以設計出新的檢測環(huán)境-anchor來監(jiān)督高層級的環(huán)境特征,同時預測所有尺度的臉部以及困難人臉的檢測。
PyramidBox 的網絡結構使用了與S3FD相同的層次結構[5],該結構包含了VGG16 的擴展主干結構和an?chor尺度設計[6],可以生成不同層級的特征圖和等比例間距的anchor。PyramidBox的網絡結構如圖3所示。
圖3 pyramidbox的網絡結構[3]Figure 3 Pyramidbox network structure[3]
在圖3的網絡結構中,尺度合理的主干網絡層使用了S3FD 中的基礎層和額外卷積層作為主干卷積層,其中基礎卷積層保留了VGG16 中的conv1_1 層到pool5 層,額外卷積層將fc_6 層和fc_7 層轉換為conv_fc層,可添加更多的卷積層使其變得更深。
低層級特征金字塔(Lower Feature Pyramid Network,簡稱LFPN)被添加到主干架構網絡中,并且使用從中間層開始的自上而下的結構來接收較小的、模糊的和被遮擋的人臉,采用這種結構可以解決困難人臉的檢測。
環(huán)境敏感的預測網絡層(Prediction Network Layer,簡稱PNL)受Inception-ResNet啟發(fā)設計出一個環(huán)境敏感的預測模塊(Context-sensitive Predict Module,簡稱CPM)來提高預測網絡的表達能力[7]。CPM使用反卷積DSSD(Deconvolutional Single Shot Detector)的殘差預測模塊作為卷積層[8]。第l個CPM 的輸出尺寸是wl×hl×cl,其中wl=hl= 640/22+l是特征的尺寸,cl是通道數(shù)。因此,在保持DSSD模塊方法的所有優(yōu)勢的同時,還可以保留來自SSH上下文模塊的豐富上下文信息。
PyramidBox 損失層有一系列的pyramid anchors(金字塔錨)來監(jiān)督分類和回歸任務,其中分類損失函數(shù)使用softmax函數(shù),回歸使用平滑L1損失函數(shù)。對于一個原始圖像中在目標區(qū)域regiontarget的目標人臉,考慮anchori,j,即第i個特征層的第j個anchor,步長為si,定義第k個金字塔錨的公式為
1.2.2 口罩識別
通過人臉檢測獲得目標人臉后,利用FaceBoxes 的主干網絡判斷人臉是否佩戴口罩。為了進一步強化口罩區(qū)域,加入了注意力機制來進行特征學習,并針對損失函數(shù)進行了優(yōu)化。
FaceBoxes的網絡結構分為快速消融卷積層(Rapidly Digested Convolutional Layers,簡稱RDCL)和多尺度卷積層(Multiple Scale Convolutional Layers,簡稱MSCL)。RDCL 模塊用來加速檢測目標信息,MSCL 用來檢測多尺度目標,兩者的結合實現(xiàn)了FaceBoxes的“快”和“準”。
RDCL 采用合適的卷積和池化尺寸conv1_7×7,conv2_5×5,pool1_3×3,pool2_3×3,結合較大的步長加速目標的降維,同時,利用C.ReLU 激活函數(shù)進行C.ReLU(x)=Concat[ReLU(x),ReLU( - x)]的維度加倍運算,在保證精準的前提下,又大大地提高了計算速度,圖4是C.ReLU的實現(xiàn)原理圖。
圖4 C.ReLU的實現(xiàn)原理圖Figure 4 Implementation schematic diagram of C.ReLU
在進行一次卷積、標準化批量操作之后,C.ReLU模塊把特征圖像的值取反,然后連接到一起再進行Re?LU(修正線性單元函數(shù))操作,這樣就減少了卷積操作,提高了訓練與測試的速度。
MSCL遵循兩個角度:深度和寬度,深度由Inception網絡和Conv層組成,寬度則使用了Inception網絡豐富了感受野。Inception網絡輸出的特征圖尺寸保持不變,但是會豐富錨框和感受野。Inception豐富的錨框擁有3種尺寸和7個感受野,如表1所示。
表1 錨的尺寸及感受野Table 1 Dimensions and receptive fields of anchors
Inception網絡是將某一層特征圖的像素點映射到原圖的區(qū)域大小。Inception網絡會根據不同尺寸的特征圖輸出不同的錨框去處理不同尺度的人臉。高分辨率的特征圖感受野小,適合于檢測小目標;低分辨率的特征圖感受野大,適合于檢測大目標。
普通感受野的計算:F(i,j- 1)=((F(i,j)- 1))*stride+kernal-size,其中F(i,j)表示第i層對第j層的局部感受野。Inception網絡是用多個卷積核卷積同一個輸入來代替單一層卷積,所以上式中的kernal-size會有多個數(shù)值。
通過對感受野的計算強化了目標人臉口罩的識別,加上Inception網絡對不同大小目標的分類檢測提高了識別的準確性,同時減少了輸出通道數(shù),從而減少了算法的執(zhí)行時間。
視頻監(jiān)控識別功能可以實時錄制視頻并對視頻中未佩戴口罩的人員進行人臉口罩識別。本模塊包括視頻識別、語音報警和實時截圖3個部分,如圖5所示。
圖5 視頻監(jiān)控流程圖Figure 5 Flowchart of video monitoring
視頻監(jiān)控識別的步驟可總結為首先通過視頻端或監(jiān)控端將視頻幀輸入至識別模塊,然后識別模塊對視頻中的人臉進行檢測與口罩識別,如若檢測到未佩戴口罩的人員立即進行語音報警和截圖,最后對視頻識別數(shù)據進行存儲。
視頻識別利用OpenCV技術實現(xiàn)動態(tài)視頻的監(jiān)控[9]。首先對存在噪聲的視頻進行預處理,然后將處理后的每一幀圖像組合成視頻輸入至識別模塊,最后得出識別結果。語音報警是本系統(tǒng)的一項特色功能,可以對視頻中未戴口罩的人員進行語音報警,提示工作人員進行防控,報警效果會持續(xù)到該人員戴上口罩為止,部分源代碼如下所示。
初始化音樂:pygame.mixer.init(frequency=44 100)
載入音樂:pygame.mixer.music.load(file)
播放音樂:pygame.mixer.music.play()
實時截圖指的是對視頻的檢測結果進行實時截圖并在后臺保存,通過視頻截圖存儲未戴口罩人員的信息,以便日后疫情防控的排查。
嵌入式人體測溫是基于Arduino[10]設計的非接觸式人體測溫技術,采用Arduino Nano作為CPU。Arduino Nano 是一款適用于面包板的ATmega328P產品,提供與UNO 板一樣的外部連接特性,并且具有外部的插腳接口,可以使用Arduino的編程軟件(IDE)來為Arduino Nano編程,也可以進行離線編程。
2.2.1 設備組成
測溫設備由杜邦線、面包板、Arduino Nano開發(fā)板、OLED屏和MLX90614傳感器模塊5個部分組成。杜邦線用來連接各個模塊,面包板用來放置各個硬件設備,Arduino Nano開發(fā)板和MLX90614傳感器模塊用于接收數(shù)據,OLED屏用來顯示測溫數(shù)據。
2.2.2 設備安裝
離線編輯Arduino Nano 程序需要安裝Arduino Desktop IDE,此外,還需要通過Mini-B USB 電纜來連接Arduino Nano到計算機,電纜同時也可以給面包板提供電源,使得Arduino Nano 2.x上的藍色LED和Arduino Nano 3.0的上部LED發(fā)亮。
display.print(mlx.readAmbientTempC());//顯示環(huán)境溫度
display.print(mlx.readObjectTempC());//顯示目標溫度
嵌入式測溫設備能夠適應多場景下的非接觸式人體測溫,用于對體溫異常者進行初篩,一旦發(fā)現(xiàn)體溫異常者便會出現(xiàn)紅色標注警告,達到預防交叉感染的作用。與一般的測溫設備相比,該測溫設備精確度能夠達到± 0.2,且會根據環(huán)境溫度進行測溫的自行調整(調整范圍±0.2),減少了人工使用測溫槍等測溫設備的需求,實現(xiàn)快速篩查。
為展示本系統(tǒng)的整體效果,本系統(tǒng)采用了web網頁形式進行展示。
2.3.1 web端交互設計
web 端部署方案主要采取HTML/CSS、JavaScript 等技術進行前端界面設計,利用Django 框架直接調用PaddleHub識別模塊[11],從而實現(xiàn)前后端的交互,該部分設計流程如圖6所示。用戶只需上傳待識別的圖像,系統(tǒng)就可識別圖像中的人員是否佩戴口罩,并對戴口罩和未戴口罩的人數(shù)進行統(tǒng)計。
圖6 前后端交互流程圖Figure 6 Interaction flowchart of front and rear end
2.3.2 web模塊設計
本部分可分為頁面渲染模塊、圖像口罩識別和分類人數(shù)統(tǒng)計模塊。
頁面渲染模塊用于渲染html文件,web頁面與用戶的交互界面建立在此模塊基礎。此外,該模塊需要獲取前端表單上傳圖像的數(shù)據信息并進行保存。在web系統(tǒng)的開發(fā)過程中采用了分模塊的開發(fā)方式,主要有渲染模塊、程序處理模塊以及一些靜態(tài)資源。各個模塊結構如圖7所示:
圖7 模塊結構示意圖Figure 7 Schematic diagram of module structure
每個模塊可以看成是Django 的一個應用程序,包含了view、model、urls 和template 文件。各個模塊從開發(fā)和資源文件上劃分是獨立開來的,但是在應用邏輯層是相互關聯(lián)和依賴的。這種開發(fā)模式可以使開發(fā)人員分工明確,降低溝通成本,系統(tǒng)功能能夠更快地實現(xiàn),此外,還有利于項目的后期維護和升級。
圖像口罩識別功能模塊是web端識別程序的核心模塊。本模塊能夠準確識別圖像中的人員是否佩戴口罩并返回準確的統(tǒng)計結果。分類人數(shù)統(tǒng)計模塊能夠對戴口罩與未戴口罩的人群進行有效的分類,即對未佩戴口罩的人員進行臉部紅色矩形框標注,佩戴口罩的進行綠色矩形框標注,并且都會有佩戴口罩正確率的顯示,識別效果如圖8所示。
圖8 識別效果圖Figure 8 Identify renderings
在自然環(huán)境下進行人臉口罩的檢測會面臨許多的問題,包括光照強度、拍攝角度、口罩佩戴的方式以及口罩的不同尺度,因此,需要不同類型的數(shù)據進行模型的調整與優(yōu)化。訓練的數(shù)據來源主要包括:①從網上下載的數(shù)據集(包括600張戴口罩的人臉和1800 張不戴口罩的人臉),②自己拍攝的圖像,③網上搜集的圖像。為了達到圖像數(shù)據的多樣化,做到較高的識別準確率和分類能力,訓練時對數(shù)據集進行了數(shù)據的增強操作,包括隨機旋轉、裁剪和隨即縮放等。同時,根據圖像邊緣框的檢測率,定義了簡單、中等和困難三個難度等級。
由于口罩識別模型屬于二分類問題,只需判斷出是否佩戴口罩,所以評價指標選擇“混淆矩陣”進行評價?!盎煜仃嚒卑蚀_率(Precison)、召回率(Recall)和精確率(Accuracy),其中準確率指所有樣本被正確分類的占比;召回率指戴口罩的樣本中正確分類的占比;精確率指正確分類的樣本中戴口罩的占比。
表2 評價指標Table 2 The evaluation index
具體評估公式如下所示:
為了加快實驗測試速度,本研究使用了win10系統(tǒng)下GTX Tian X型號的GPU來操作,在PaddleHub平臺上進行測試,實驗結果如表3所示。
表3列出的三種測試集選取了不同難度的樣例進行了實驗,其中包括人臉的偏轉角度大、模糊圖片、部分遮擋、佩戴口罩不規(guī)范和不同口罩樣式等。測試集①是網上下載的、較為標準的人臉口罩數(shù)據,測試集②是自行拍攝的不同光線、遮擋和模糊的人臉口罩數(shù)據,測試集③網上搜集的多種角度的人臉口罩圖像。對比三者的實驗結果,可以看出在明亮場景下,臉部有較少遮擋且人臉偏轉角度較小的圖像測出的準確率相對較高,能夠滿足正常的實際應用需求。
表3 基于PaddleHub的人臉口罩識別結果Table 3 The face mask recognition results based on PaddleHub
通過PaddleHub設計出的人臉口罩識別系統(tǒng)包括人臉檢測和口罩識別兩部分。人臉檢測利用Pyramid?Box實現(xiàn)目標人臉的檢測,口罩識別利用FaceBoxes 網絡結構進行目標人臉口罩的識別。同時,利用物聯(lián)網和人工智能相結合的理念設計了系統(tǒng)功能模塊,該模塊分為視頻監(jiān)控識別設計、嵌入式人體測溫設計以及web端的設計,具有動態(tài)視頻識別、實時截圖、語音報警和非接觸式人體測溫的特色功能。綜上,該系統(tǒng)可以高效地、多場景地識別圖像和視頻中人臉佩戴口罩的情況,并可以實現(xiàn)精準測溫,可部署于多種公共場合,具有廣泛的應用場景。