王 靜,黃日辰,陳曉龍
(金華職業(yè)技術(shù)學(xué)院,浙江金華 321007)
2020 年暴發(fā)的新型冠狀病毒的主要傳播途徑是呼吸道飛沫傳播,佩戴口罩是防止病毒傳播最重要的一個(gè)手段,也能保障人們最基本的健康。疫情防控常態(tài)化要求在公共場(chǎng)合布置口罩檢測(cè)系統(tǒng),通過系統(tǒng)檢測(cè)人們是否正確配套口罩,而且還要求檢測(cè)系統(tǒng)有較高的工作效率,因?yàn)楦邫z測(cè)效率在一定程度上能降低病毒傳播速度。疫情期間,學(xué)校、超市、車站等人群密集場(chǎng)所都需要工作人員檢測(cè)過往人們是否正確佩戴口罩,這樣不僅增加了工作人員的工作量,而且工作效率較低。因此研制一個(gè)高效并準(zhǔn)確檢測(cè)口罩佩戴的算法是非常有必要的。
傳統(tǒng)的口罩識(shí)別技術(shù)一般基于深度學(xué)習(xí)的有兩種通用檢測(cè)算法框架。第一種是二階段的檢測(cè)算法,第一步利用候選區(qū)域生成網(wǎng)絡(luò)(RPN)獲取多個(gè)候選區(qū)域,第二步通過卷積神經(jīng)網(wǎng)絡(luò)對(duì)候選區(qū)域中的目標(biāo)進(jìn)行分類以及對(duì)目標(biāo)位置進(jìn)行微調(diào)。常見的二階段的檢測(cè)算法有以RCNN[2]、Fast RCNN[3]、Faster RCNN[1]為代表的RCNN 系列算法。第二種是一階段的檢測(cè)算法,該類算法可以直接回歸得到目標(biāo)的位置預(yù)測(cè)框。常見的一階段檢測(cè)算法有YOLO[4]、SSD[5]等算法。一階段算法比二階段檢測(cè)算法檢測(cè)速度更快。本文擬以一階段的檢測(cè)算法YOLOv3[6]為基礎(chǔ),針對(duì)檢測(cè)速度、精度以及適應(yīng)不同場(chǎng)合下的情況,進(jìn)行如下改進(jìn):第一,針對(duì)檢測(cè)速度重新設(shè)計(jì)了YOLOv3的主網(wǎng)絡(luò),引入快速降采樣模塊,YOLOv3原主干網(wǎng)絡(luò)Darknet53需要53層達(dá)到32倍降采樣,而該模塊只需要4 層;第二,針對(duì)檢測(cè)精度本文在YOLOv3后面加入一個(gè)分類網(wǎng)絡(luò)。
YOLOv3在視頻、實(shí)時(shí)目標(biāo)檢測(cè)、圖像等的應(yīng)用中經(jīng)常使用。YOLOv3 是YOLOv2[7]的改進(jìn)版,檢測(cè)精度和檢測(cè)速度要比v2 高和快。YOLOv3 算法以Darknet53 網(wǎng)絡(luò)結(jié)構(gòu)為基礎(chǔ),使用Darknet53 網(wǎng)絡(luò)作為特征提取,如圖1所示。
圖1 DarkNet53網(wǎng)絡(luò)結(jié)構(gòu)
Darknet53網(wǎng)絡(luò)是包含了53個(gè)卷積層的全卷積結(jié)構(gòu),在每個(gè)卷積層后跟有一個(gè)歸一化層和一個(gè)激活層;同時(shí)為了防止信息丟失過多,采用了步長(zhǎng)為2的卷積操作實(shí)現(xiàn)采樣。Darknet53 還引入了殘差塊結(jié)構(gòu),不僅能使深層網(wǎng)絡(luò)的難度訓(xùn)練有效降低,還能更好地收斂網(wǎng)絡(luò)。
YOLOv3 引入了特征金字塔網(wǎng)絡(luò)思想(FPN)[8],通過提取不同尺度的特征圖,提高對(duì)小目標(biāo)檢測(cè)的精度。為了提高檢測(cè)精度,YOLOv3 將經(jīng)過采樣的深層特征與淺層特征進(jìn)行融合,生成特征圖有三種不同尺度,分別用于檢測(cè)小、中、大三種尺寸的目標(biāo)。三種尺度的特征圖用來檢測(cè)不同比例的目標(biāo),每種尺度的特征圖上生成不同比例的3 個(gè)錨點(diǎn)框。在預(yù)測(cè)和訓(xùn)練過程中,錨點(diǎn)框的比例通過對(duì)數(shù)據(jù)集中的目標(biāo)進(jìn)行聚類得到。如圖2 所示,YOLOv3 在檢測(cè)的過程中,將輸入圖片劃分為S×S個(gè)網(wǎng)絡(luò),每個(gè)網(wǎng)格的寬、高為Cx、Cy網(wǎng)絡(luò)輸出相對(duì)于錨點(diǎn)框的偏移量分別是tx、ty、tw、th,預(yù)測(cè)框目標(biāo)計(jì)算公式為:
圖2 預(yù)測(cè)框示意圖
其中預(yù)測(cè)框的中心坐標(biāo)為(bx,by),寬高分別為bw、bh,錨點(diǎn)框的寬高分別為pw、ph。Sigma 為激活函數(shù),將預(yù)測(cè)值tx、ty映射到[0,1]區(qū)間內(nèi),計(jì)算每個(gè)預(yù)測(cè)框的置信度。設(shè)置置信度的閾值,對(duì)小于閾值的預(yù)測(cè)框進(jìn)行過濾,最后利用非極大值抑制算法刪除多余的預(yù)測(cè)框。
在實(shí)際應(yīng)用中,一個(gè)目標(biāo)分屬于多個(gè)類,為了解決該問題,YOLOv3 采用了多個(gè)Logistics 分類器代替原有的Softmax 分類器,對(duì)每個(gè)類別進(jìn)行二分類。輸入值用Sigmoid函數(shù)歸一化到[0,1]之間,Sigmoid函數(shù)為
其中,z為分類邊界函數(shù),假設(shè)邊界函數(shù)為線性的,該函數(shù)公式為
將其代入到Sigmoid函數(shù)中,得到預(yù)測(cè)函數(shù)公式
當(dāng)Sigmoid 值超過0.5 時(shí),判定目標(biāo)屬于該類,否則則不是。
Darknet53網(wǎng)絡(luò)是一個(gè)非常耗時(shí)的網(wǎng)絡(luò),對(duì)硬件的要求較高,在資源較少的設(shè)備上無法保證實(shí)時(shí)性。為了確??谡峙宕鳈z測(cè)算法可以部署在CPU或者邊緣設(shè)備上,本文參考了FaceBoxes[9]中的主干網(wǎng)絡(luò)設(shè)計(jì)原則,設(shè)計(jì)了一種輕量化的主干網(wǎng)絡(luò)來替換YOLOv3中的Darknet53網(wǎng)絡(luò),設(shè)計(jì)規(guī)則為主干網(wǎng)絡(luò)分為快速降采樣網(wǎng)絡(luò)模塊和Inception[10]網(wǎng)絡(luò)模塊。在快速降采樣網(wǎng)絡(luò)模塊中采用一系列大步長(zhǎng)的卷積層來快速降低輸入,如圖3 所示。其中Conv1 步長(zhǎng)為4,Conv2、Conv3、Conv4 步長(zhǎng)均為2。相比于DarkNet53 需要通過53 層卷積層才達(dá)到32倍降采樣,本文設(shè)計(jì)的輕量化網(wǎng)絡(luò)只需要通過前4層網(wǎng)絡(luò)就能完成32 倍降采樣,該輕量化網(wǎng)絡(luò)適合CPU 下實(shí)時(shí)運(yùn)行。另外為了避免快速下降所導(dǎo)致的精度下降,Conv1 和Conv2 采用7×7 的卷積核,Conv3 和Conv4 采用5×5 的卷積核。為了進(jìn)一步降低計(jì)算量,本文采用CReLU[11]。有文獻(xiàn)指出CReLU淺層網(wǎng)絡(luò)的濾波器具有對(duì)稱性,因此可以在網(wǎng)絡(luò)輸出經(jīng)過CReLU 函數(shù)之前通過拼接的方式對(duì)網(wǎng)絡(luò)的輸出通道數(shù)進(jìn)行加倍,以達(dá)到更好的效果。Conv1、Conv2 的通道數(shù)為24,Conv3、Conv4 通道數(shù)為64。
圖3 快速降采樣網(wǎng)絡(luò)模塊
口罩佩戴檢測(cè)場(chǎng)景下,人臉的尺度范圍大,單一尺度下卷積網(wǎng)絡(luò)特征提取導(dǎo)致檢測(cè)效果較差。因此,為了更好地提取到不同尺度下的人臉特征,提高檢測(cè)精度,在快速降采樣網(wǎng)絡(luò)模塊后加入Inception網(wǎng)絡(luò)模塊,如圖4所示,同時(shí)對(duì)Inception模塊進(jìn)行重新設(shè)計(jì),如圖5所示。
圖4 Inception網(wǎng)絡(luò)模塊
圖5 Inception網(wǎng)絡(luò)模塊
在傳統(tǒng)的深度學(xué)習(xí)檢測(cè)算法中分類任務(wù)和編輯框回歸共享一個(gè)檢測(cè)頭,有學(xué)者[12]提出fc-head更加適用于分類任務(wù),conv-head 更加適合于邊界框回歸任務(wù)?;谠摪l(fā)現(xiàn),本文在YOLOv3 的檢測(cè)頭后面添加一個(gè)用于判別是否佩戴口罩的分類網(wǎng)絡(luò),如圖6所示。
圖6 分類網(wǎng)絡(luò)
考慮到人臉目標(biāo)都是1∶1 的比例,本文將YOLOv3 中不同比例的錨點(diǎn)框比例設(shè)置為1∶1。為了盡快提高小目標(biāo)的召回率,引入了Faceboxes中的錨點(diǎn)定義策略。
本文的檢測(cè)模型和分類模型都使用了WIDER FACE[13]、RMFD[14]和CMFD[15]數(shù)據(jù)集。其中在分類模型訓(xùn)練過程中會(huì)根據(jù)檢測(cè)模型的結(jié)果對(duì)WIDER FACE和RMFD中的數(shù)據(jù)進(jìn)行人臉裁剪。
檢測(cè)模型訓(xùn)練數(shù)據(jù)集:檢測(cè)模型采用了WIDER FACE 和RMFD 數(shù)據(jù)集。隨機(jī)抽取WIDER FACE數(shù)據(jù)集中,按人臉從大到小排序,取前70%的人臉數(shù)據(jù)進(jìn)行口罩覆蓋數(shù)據(jù)增強(qiáng)。
分類模型訓(xùn)練數(shù)據(jù)集:分類模型數(shù)據(jù)集采用了經(jīng)過檢測(cè)模型檢測(cè)后并裁剪后的WIDER FACE 數(shù)據(jù)集和RMFD 數(shù)據(jù)集,分類數(shù)據(jù)集的圖片大小統(tǒng)一縮放到416×416。
口罩覆蓋數(shù)據(jù)增強(qiáng)方式:為了更加有效地檢測(cè)人們口罩佩戴情況,數(shù)據(jù)集CMFD 將不正確佩戴口罩分為未覆蓋下巴、未覆蓋鼻子和未覆蓋鼻子及嘴巴三類,利用關(guān)鍵點(diǎn)檢測(cè)算法生成了相關(guān)樣本,但是CMFD只考慮了外科口罩的情況并沒有考慮其他類型的口罩。本文為了提高模型的泛化性,在WIDER FACE 和CMFD 數(shù)據(jù)集進(jìn)行口罩覆蓋數(shù)據(jù)增強(qiáng)時(shí)添加了多種防護(hù)口罩類型。
除口罩覆蓋數(shù)據(jù)增強(qiáng)外,訓(xùn)練檢測(cè)模型和分類模型都遵循色彩失真、隨機(jī)裁剪、尺度縮放、水平翻轉(zhuǎn)等數(shù)據(jù)增強(qiáng)策略。
檢測(cè)模型和分類模型的參數(shù)都采用“Xavier”方法[16]進(jìn)行初始化,采用動(dòng)量為0.9的隨機(jī)梯度下降法(SGD),權(quán)重衰減系數(shù)設(shè)置為0.0001 和BatchSize 設(shè)置為32。檢測(cè)模型總共進(jìn)行15 萬次訓(xùn)練迭代,前10萬次學(xué)習(xí)率設(shè)置為0.001,后5萬次學(xué)習(xí)率分別對(duì)半設(shè)置為0.0001和0.00001。分類模型進(jìn)行10萬次迭代訓(xùn)練,前8 萬次學(xué)習(xí)率設(shè)置為0.001,后2 萬次學(xué)習(xí)率設(shè)置為0.0001,BatchSize設(shè)置為64。
本文中口罩識(shí)別采用的損失函數(shù)有兩類,一類是檢測(cè)模型的損失函數(shù),另一類是分類模型的損失函數(shù)。其中檢測(cè)模型采用YOLOv3 中的損失函數(shù),分類模型采用Softmax 損失函數(shù)。口罩識(shí)別分類有兩大類:正確佩戴口罩和不正確佩戴口罩,其中不正確佩戴口罩又分為未覆蓋鼻子、未覆蓋鼻子和嘴巴、未覆蓋下巴三小類。針對(duì)不同類別,文中分類損失函數(shù)采用了不同的類別權(quán)重系數(shù),其中正確佩戴口罩類別系數(shù)為0.1,未覆蓋鼻子的不正確佩戴口罩類別系數(shù)為0.5,未覆蓋鼻子和嘴巴與未覆蓋下巴的不正確佩戴口罩類別系數(shù)設(shè)置為0.2。
卷積神經(jīng)網(wǎng)絡(luò)算法的最大缺點(diǎn)就是運(yùn)行效率不夠高、實(shí)用性不夠強(qiáng)。盡管現(xiàn)在的卷積神經(jīng)網(wǎng)絡(luò)算法可以通過GPU進(jìn)行加速達(dá)到實(shí)時(shí)性,但這也限制了算法的應(yīng)用場(chǎng)景,尤其是在CPU 設(shè)備上的使用。本文提出的算法就是為了更好滿足CPU 設(shè)備場(chǎng)景下的應(yīng)用。表1 展示了CPU(i7-4770k@3.50)下的本文的算法和YOLOv3在速度上的對(duì)比。
表1 與YOLOv3算法運(yùn)行速度上的對(duì)比
為了證明在檢測(cè)模型后面增加一個(gè)分類模型的有效性,本文進(jìn)行了對(duì)比試驗(yàn)。基于相同的參數(shù)分別訓(xùn)練了一個(gè)帶分類模型和不帶分類模型的檢測(cè)算法,結(jié)果如表2所示。
表2 帶分類模型和不帶分類模型的檢測(cè)算法對(duì)比
通過可視化分析發(fā)現(xiàn),在CMFD 數(shù)據(jù)集中的不正確佩戴口罩的數(shù)據(jù)集,在加入分類模型后的效果優(yōu)于不帶分類模型的算法。
池化層在一定程度上會(huì)損失信息往下傳遞,本文對(duì)FaceBoxes 中的快速降采樣模塊進(jìn)行了改進(jìn),對(duì)比試驗(yàn)結(jié)果如表3所示。
表3 與FaceBoxes中的快速降采樣模塊對(duì)比
本文算法對(duì)FaceBoxes 中的Inception 模塊進(jìn)行進(jìn)一步簡(jiǎn)化,提高模型的運(yùn)行效率。對(duì)比試驗(yàn)結(jié)果,簡(jiǎn)化后的模塊雖然在精度上下降了0.2%,但是運(yùn)行速度卻提高了21%,如表4所示。
表4 與FaceBoxes中的Inception模塊對(duì)比
圖7展示了測(cè)試結(jié)果,圖7中第1排和第2排圖片表示檢測(cè)出未佩戴口罩,第3 排圖片表示正確佩戴口罩,第4排圖片表示未正確佩戴口罩。
圖7 檢測(cè)結(jié)果
當(dāng)前的疫情環(huán)境下,口罩佩戴識(shí)別系統(tǒng)是一個(gè)應(yīng)用非常廣泛的系統(tǒng),為了盡可能減少對(duì)硬件資源的依賴,本文提出了基于YOLOv3 的不受限于硬件資源的口罩佩戴檢測(cè)算法。該算法與YOLOv3算法相比,精度只損失了0.8%,但是在CPU 上的運(yùn)行速度是YOLOv3的6倍。