王 林,南改改
(西安理工大學(xué) 自動(dòng)化與信息工程學(xué)院,陜西 西安 710048)
近年來(lái),人們所生活的環(huán)境空氣污染程度日益嚴(yán)重,由此引發(fā)了一系列的疾病,尤其嚴(yán)重的是塵肺職業(yè)病,發(fā)病率在持續(xù)增長(zhǎng)。再加上,2019 年12 月,新型冠狀病毒肺炎疫情(COVID-19)[1]的爆發(fā),使得人們不得不對(duì)此采取一定的措施。大量證據(jù)表明,佩戴口罩能有效緩解類(lèi)似疾病的發(fā)生和傳播,所以在醫(yī)院、后廚和化工廠等特殊場(chǎng)所佩戴口罩已是必然。然而,佩戴口罩不僅需要個(gè)人自覺(jué)遵守,更需要采取一定的措施進(jìn)行監(jiān)督管理。
目標(biāo)檢測(cè)和目標(biāo)跟蹤[2]是計(jì)算機(jī)視覺(jué)中的一個(gè)基礎(chǔ)內(nèi)容?;谏疃葘W(xué)習(xí)的目標(biāo)檢測(cè)方法大致可以分為兩大類(lèi):一類(lèi)是兩階段檢測(cè)器,最典型的是R-CNN 系列,包括R-CNN[3]、Fast R-CNN[4]和Faster R-CNN[5];另一類(lèi)是單階段檢測(cè)器,包括YOLO[6]、SSD[7]和RetinaNet[8]等。其中,YOLOv3[9]是YOLO 系列中最為廣泛使用的目標(biāo)檢測(cè)算法,具有較好的識(shí)別速度和檢測(cè)精度。目標(biāo)跟蹤主要分為生成式方法和判別式方法。前者主要是對(duì)目標(biāo)進(jìn)行建模,具有代表性的算法有CSK[10]和IVT[11]等;判別式方法相比生成式方法最大的區(qū)別在于其不僅學(xué)習(xí)目標(biāo)本身,更關(guān)注如何將前景和背景分開(kāi),具有代表性的算法有KCF[12]和TLD[13]等。作為多目標(biāo)跟蹤的Deep SORT[14]算法是在SORT 目標(biāo)跟蹤算法基礎(chǔ)上的改進(jìn),使用了逐幀數(shù)據(jù)關(guān)聯(lián)和遞歸卡爾曼濾波的傳統(tǒng)單假設(shè)跟蹤方法,在實(shí)時(shí)的目標(biāo)跟蹤過(guò)程中具有較好的性能。
在實(shí)際的口罩佩戴檢測(cè)過(guò)程中,通過(guò)人工方式檢查口罩佩戴情況會(huì)消耗大量人力資源,而且在人群密集的區(qū)域,一般會(huì)存在遮擋和小目標(biāo)檢測(cè)困難的問(wèn)題,從而導(dǎo)致漏檢。對(duì)于視頻數(shù)據(jù),若對(duì)每一幀圖像都進(jìn)行人臉口罩佩戴檢測(cè),不僅浪費(fèi)時(shí)間,而且會(huì)耗費(fèi)大量的計(jì)算資源,難以滿(mǎn)足實(shí)時(shí)性的要求。目前所提出的專(zhuān)門(mén)用于口罩佩戴檢測(cè)的算法較少,而且這些算法只是檢測(cè),并沒(méi)有涉及跟蹤。
基于此本文提出一種基于深度學(xué)習(xí)的方法,對(duì)特定場(chǎng)所內(nèi)的人員口罩佩戴情況進(jìn)行實(shí)時(shí)檢測(cè)和跟蹤,該方法分為檢測(cè)和跟蹤兩個(gè)模塊。由于YOLOv3 算法對(duì)小目標(biāo)和遮擋物體的檢測(cè)效果并不理想,因此檢測(cè)模塊本文嘗試在YOLOv3 的基礎(chǔ)上引入空間金字塔池化結(jié)構(gòu),然后將損失函數(shù)由IoU 改為CIoU,來(lái)改善遮擋和小目標(biāo)的問(wèn)題,并在此基礎(chǔ)上提升檢測(cè)精度。跟蹤模塊采用多目標(biāo)跟蹤算法Deep SORT,與改進(jìn)的YOLOv3 算法結(jié)合,先對(duì)視頻第一幀中的人臉目標(biāo)進(jìn)行檢測(cè)定位,然后再進(jìn)行跟蹤,確定后續(xù)幀中的運(yùn)動(dòng)信息,從而有效防止重復(fù)檢測(cè),改善被遮擋目標(biāo)的跟蹤效果,提升檢測(cè)速度。
目標(biāo)檢測(cè)的工作是在提供的輸入圖像上,通過(guò)計(jì)算機(jī)找出是否有規(guī)定類(lèi)別的目標(biāo),如果計(jì)算機(jī)認(rèn)為有則進(jìn)一步給出該目標(biāo)的位置和大小,這個(gè)位置和大小通常用矩形邊框左上角的坐標(biāo)及長(zhǎng)和寬來(lái)表示。
YOLOv3 是以YOLOv1 和YOLOv2 為基礎(chǔ)來(lái)進(jìn)行改進(jìn)的,不僅保證了速度的優(yōu)勢(shì),而且提升了檢測(cè)精度,同時(shí)增強(qiáng)了對(duì)小目標(biāo)的檢測(cè)能力。YOLOv3 采用含有53 個(gè)卷積層的Darknet-53,所達(dá)到的效果比ResNet-152 網(wǎng)絡(luò)更好。YOLOv3 的網(wǎng)絡(luò)結(jié)構(gòu)如圖1 所示。
從圖1 中可以看出,與ResNet 不同的是Darknet-53網(wǎng)絡(luò)沒(méi)有最大池化層,該網(wǎng)絡(luò)中所有的下采樣基本上都是通過(guò)卷積層來(lái)實(shí)現(xiàn)的,從而提升YOLOv3 的檢測(cè)效果。由于Darknet-53 網(wǎng)絡(luò)所采用的卷積核個(gè)數(shù)少一些,因此參數(shù)就少一些,使得運(yùn)算量也減少,以此提高了檢測(cè)速度。其中的Convolutional 不單是一個(gè)卷積層,而是一個(gè)普通的卷積加上歸一化層(BN Layer),再加上激活函數(shù)層(Leaky ReLU Layer)組成的,Convolutional Set 是由5 個(gè)卷積核不同的Convolutional 組成的。殘差塊(Residual)是在2 個(gè)Convolutional 的基礎(chǔ)上加了一個(gè)拼接(Add)操作。
圖1 YOLOv3 網(wǎng)絡(luò)結(jié)構(gòu)
針對(duì)口罩佩戴檢測(cè)存在的問(wèn)題,本文以YOLOv3 算法為基礎(chǔ)引入空間金字塔池化(Spatial Pyramid Pooling,SPP)網(wǎng)絡(luò),并對(duì)損失函數(shù)進(jìn)行改進(jìn),從而提升后續(xù)跟蹤算法的性能。
1.2.1 引入空間金字塔池化
SPP-net[15]提出了一種叫做空間金字塔池化的方式,可以允許任意大小的圖像輸入網(wǎng)絡(luò),從而對(duì)精度有一個(gè)更好的保證,保留了更多的輸入信息,同時(shí)對(duì)計(jì)算速度起到一個(gè)極大的加快作用。本文在DarkNet-53 網(wǎng)絡(luò)第一個(gè)預(yù)測(cè)特征層的Conventional 中引入SPP 結(jié)構(gòu),從而獲取更豐富的局部特征,引入的空間金字塔池化網(wǎng)絡(luò)結(jié)構(gòu)如圖2 所示。
圖2 改進(jìn)的空間金字塔池化網(wǎng)絡(luò)結(jié)構(gòu)
由圖2 可以看出其具體步驟為:先對(duì)13×13×1 024 的輸入特征圖進(jìn)行3 次Conventional 操作;然后分別利用13×13、9×9 和5×5 的池化核對(duì)池化層(Pooling)進(jìn)行最大池化下采樣,步距(stride)都為1,意味著在池化之前要對(duì)特征矩陣進(jìn)行填充(padding),使最大下采樣之后得到的特征圖的高度和寬度不變;最后將輸入的特征圖和池化處理后得到的特征圖進(jìn)行拼接(Concat),然后再經(jīng)過(guò)3 次Conventional 操作,從而得到輸出特征圖。通過(guò)SPP 實(shí)現(xiàn)了不同尺度的特征融合。
1.2.2 改進(jìn)損失函數(shù)
YOLOv3 的損失函數(shù)由三部分組成,分別是置信度損失Lconf(o,c)、分類(lèi)損失Lcla(O,C)以及定位損失Lloc(l,g),其計(jì)算公式如式(1)所示:
式 中,λ1、λ2、λ3為平衡系數(shù);o表示的是預(yù)測(cè)目標(biāo)邊界框與真實(shí)目標(biāo)邊界框的交并比;O 表示預(yù)測(cè)目標(biāo)邊界框中是否存在目標(biāo),只有0 和1 兩個(gè)值;c 和C 為預(yù)測(cè)值;l 表示預(yù)測(cè)矩形框的坐標(biāo)偏移量,g 表示與之匹配的真實(shí)框與默認(rèn)框之間的坐標(biāo)偏移量。
其中置信度損失和類(lèi)別損失使用的是二值交叉熵?fù)p失(Binary Cross Entropy),定位損失使用差值平方和的計(jì)算方法。由于定位損失不能很好地反映兩個(gè)目標(biāo)邊界框的重合程度,因此引入交并比損失(IoU loss),其計(jì)算公式如式(2)所示:
式中,A 和B 分別表示預(yù)測(cè)框和真實(shí)框。IoU loss 能夠很好地反映出兩個(gè)矩形框的重合程度,而且重合程度與矩形框的尺度無(wú)關(guān),但是當(dāng)兩個(gè)目標(biāo)邊界框不相交時(shí)IoU為0,就無(wú)法傳播損失。而CIoU 同時(shí)考慮到目標(biāo)邊界框的重疊部分的面積、中心點(diǎn)距離以及長(zhǎng)寬比的影響,其計(jì)算公式如下:
其中,b 是預(yù)測(cè)目標(biāo)邊界框的中心坐標(biāo),bgt是真實(shí)目標(biāo)邊界框中心點(diǎn)的坐標(biāo),ρ2(b,bgt)表示b 和bgt之間歐氏距離的平方,C 是兩個(gè)目標(biāo)邊界框最小外接矩形的對(duì)角線長(zhǎng)度,αυ 表示的目標(biāo)邊界框的長(zhǎng)寬比信息。相應(yīng)的CIoU Loss 的計(jì)算公式如下:
使用CIoU Loss 可以很好地提升目標(biāo)檢測(cè)的準(zhǔn)確性。
跟蹤的主要思路就是檢測(cè)加跟蹤,將檢測(cè)的結(jié)果(bounding box、confidence 和feature)作為輸入,其中confidence 主要是用來(lái)篩選檢測(cè)框,將bounding box 和feature與跟蹤器進(jìn)行匹配計(jì)算。本文采用多目標(biāo)跟蹤算法Deep SORT 來(lái)對(duì)檢測(cè)到的目標(biāo)進(jìn)行跟蹤,有效防止重復(fù)檢測(cè),改善被遮擋目標(biāo)的追蹤效果,從而提高檢測(cè)精度和速度。
Deep SORT 對(duì)視頻流中的每一幀進(jìn)行檢測(cè),通過(guò)檢測(cè)出的外形和運(yùn)動(dòng)特征來(lái)跟蹤目標(biāo)。Deep SORT 在描述運(yùn)動(dòng)狀態(tài)時(shí)使用一個(gè)8維的向量(μ,υ,γ,h,x˙,y˙,γ˙,h˙)來(lái)進(jìn)行軌跡的刻畫(huà),其中(μ,υ)表示邊界框的中心位置的坐標(biāo),h為高度,γ為橫縱比,剩余變量(x˙,y˙,γ˙,h˙)則為圖像坐標(biāo)系中的速度信息。軌跡的預(yù)測(cè)更新使用的是采用線性預(yù)測(cè)模型和勻速模型的卡爾曼(Kalman)濾波器,預(yù)測(cè)結(jié)果為(μ,υ,γ,h)。DeepSORT采用匈牙利算法將預(yù)測(cè)后的軌跡和當(dāng)前幀中的目標(biāo)進(jìn)行匹配,采用的匹配方法是級(jí)聯(lián)匹配和IoU 匹配,從而保證跟蹤的持續(xù)性。
運(yùn)動(dòng)信息的匹配程度采用檢測(cè)框和跟蹤在卡爾曼濾波器的預(yù)測(cè)框之間的馬氏距離來(lái)刻畫(huà),其表達(dá)式如下:
其中,d(1)(i,j)表示第j 個(gè)檢測(cè)框和第i 條軌跡之間的運(yùn)動(dòng)關(guān)聯(lián)程度,其中dj和yi分別表示第j 個(gè)檢測(cè)框位置和第i 個(gè)追蹤器預(yù)測(cè)目標(biāo)的位置,Si表示他們之間的協(xié)方差矩陣。
Deep SORT 添加了一個(gè)深度學(xué)習(xí)的特征提取網(wǎng)絡(luò)來(lái)匹配更新存放特征圖的列表,計(jì)算每一幀追蹤器成功匹配的特征集與目標(biāo)檢測(cè)框的特征向量之間的最小余弦距離,其計(jì)算公式如下:
其中,d(2)(i,j)表示第i 個(gè)追蹤器匹配的特征集與第j 個(gè)檢測(cè)框之間的最小余弦距離,rj和Ri分別表示其所對(duì)應(yīng)的特征向量和特征向量集。最后將以上兩種匹配方式的線性加權(quán)和作為最終的匹配度,其表達(dá)式如下:
其中,λ 表示權(quán)重系數(shù)。
實(shí)驗(yàn)硬件環(huán)境:采用4 塊NVIDIA 1080 Ti 的顯卡,128 GB 內(nèi)存,處理器采用兩顆Intel Xeon E5-2640v4 的處理器。軟件環(huán)境是在CentOS7.0 的操作系統(tǒng)下,采用Python 計(jì)算機(jī)語(yǔ)言,深度學(xué)習(xí)框架為Pytorch。
本文按照1:9 的比例劃分測(cè)試集和訓(xùn)練集的數(shù)目,采用Adam 優(yōu)化器對(duì)網(wǎng)絡(luò)進(jìn)行優(yōu)化,動(dòng)量參數(shù)為0.92。訓(xùn)練網(wǎng)絡(luò)模型過(guò)程采用遷移學(xué)習(xí)的思想,分為凍結(jié)訓(xùn)練和解凍訓(xùn)練。先凍結(jié)一部分進(jìn)行訓(xùn)練,學(xué)習(xí)率設(shè)為0.001,batch_size 為8,訓(xùn)練110 個(gè)輪次(Epoch);然后再進(jìn)行解凍訓(xùn)練,學(xué)習(xí)率設(shè)為0.000 1,batch_size 為4,共訓(xùn)練220個(gè)輪次(Epoch)。其中損失值收斂曲線如圖3 所示。
圖3 損失曲線
從圖3 可以看出,訓(xùn)練初期總損失(Total_Loss)和驗(yàn)證損失(Val_Loss)都下降較快,隨著訓(xùn)練次數(shù)的增加逐漸趨于穩(wěn)定,最后的損失值為5.6 左右。另外,在同等的實(shí)驗(yàn)條件下訓(xùn)練YOLOv3 和SSD 的網(wǎng)絡(luò)模型,保證訓(xùn)練方式不變,從而進(jìn)行更好的分析比較。
本文使用部分開(kāi)源的人臉圖片數(shù)據(jù)集MAFA(Mask Faces)[16]和Wilder Face,并通過(guò)網(wǎng)絡(luò)爬蟲(chóng)和視頻拍攝等自制了佩戴口罩的人臉數(shù)據(jù)集,然后刪除部分質(zhì)量較差的數(shù)據(jù),最后通過(guò)數(shù)據(jù)增強(qiáng)的方式將數(shù)據(jù)集擴(kuò)展到9 240張,其中包括5 000 多張佩戴口罩的數(shù)據(jù)。數(shù)據(jù)集包括在不同場(chǎng)景下人臉佩戴口罩和未佩戴口罩兩種情況,將數(shù)據(jù)集格式轉(zhuǎn)換成VOC2007 數(shù)據(jù)集所要求的格式,并用標(biāo)注工具LableImg 進(jìn)行數(shù)據(jù)標(biāo)注,分為mask 和unmask 兩種標(biāo)注類(lèi)別,數(shù)據(jù)集標(biāo)注情況如圖4 所示。
圖4 數(shù)據(jù)集標(biāo)注示例
本文引入空間金字塔池化結(jié)構(gòu),獲得豐富的局部特征信息,并采用CIoU 作為目標(biāo)邊界框損失函數(shù),提高了收斂速度和回歸精度,且降低了預(yù)測(cè)誤差。最后根據(jù)召回率和精確度的值繪制P-R 曲線,如圖5 所示。橫縱坐標(biāo)分別表示召回率(Recall)和精確度(Precision),平均精確度AP 表示為曲線下的面積大小。mAP 是平均精度均值,即對(duì)所有類(lèi)別的AP 取平均值,反映的是網(wǎng)絡(luò)模型的整體性能,是模型性能評(píng)估的重要指標(biāo)。
圖5 各類(lèi)目標(biāo)P-R 曲線
由圖5 可以看出,多目標(biāo)檢測(cè)的平均精度達(dá)到85.23%,佩戴口罩的類(lèi)別達(dá)到87.44%,與原始YOLOv3 模型相比均有提高,說(shuō)明檢測(cè)效果有所提升。
為了驗(yàn)證口罩佩戴檢測(cè)模型的性能,在相同的實(shí)驗(yàn)環(huán)境下用同樣的數(shù)據(jù)集對(duì)SSD 和YOLOv3 原網(wǎng)絡(luò)進(jìn)行了訓(xùn)練。在得到對(duì)應(yīng)的檢測(cè)模型上再用相同的數(shù)據(jù)進(jìn)行測(cè)試,結(jié)果如表1 所示。
表1 各模型檢測(cè)性能指標(biāo)對(duì)比
本文以平均檢測(cè)精度(mAP)和幀率(FPS)作為評(píng)價(jià)指標(biāo)。由表1 可以看出,本文所提出的算法要比SSD 和YOLOv3 算法的檢測(cè)精度高,且檢測(cè)速度也表現(xiàn)較好。
針對(duì)側(cè)臉、遮擋和密集人群3 種情況選取部分?jǐn)?shù)據(jù),分別利用SSD、YOLOv3 和本文所提出的檢測(cè)模型對(duì)其進(jìn)行測(cè)試,對(duì)比結(jié)果如圖6 所示。
由圖6 可以看出,SSD 算法對(duì)小目標(biāo)的檢測(cè)效果并不好;YOLOv3 算法相比SSD 有所提升,但是容易漏檢,有些很明顯的目標(biāo)反而沒(méi)有被檢測(cè)到;本文提出的算法對(duì)小目標(biāo)和遮擋都表現(xiàn)出良好的效果,更加適合用來(lái)進(jìn)行口罩佩戴檢測(cè),為后續(xù)的跟蹤模塊提供了不錯(cuò)的條件。
圖6 不同算法檢測(cè)結(jié)果對(duì)比
口罩佩戴檢測(cè)與跟蹤算法的主要流程為:首先將視頻流輸入,運(yùn)行檢測(cè)模型得到檢測(cè)框;然后通過(guò)跟蹤模型計(jì)算最小余弦向量及馬氏距離并融合為關(guān)聯(lián)矩陣;最后進(jìn)行匹配跟蹤。圖7 是對(duì)視頻數(shù)據(jù)進(jìn)行測(cè)試結(jié)果的截圖展示。
圖7 視頻人臉口罩佩戴檢測(cè)與跟蹤結(jié)果
圖7 中白色框是標(biāo)有置信度的檢測(cè)框,灰色框是標(biāo)有不同ID 號(hào)的跟蹤框,并且對(duì)佩戴口罩的人員繪制跟蹤軌跡??梢钥闯?,本文提出的算法無(wú)論在檢測(cè)還是跟蹤模型上都取得了不錯(cuò)的效果。
本文提出了一種基于深度學(xué)習(xí)的口罩佩戴檢測(cè)與跟蹤方法。檢測(cè)模塊是在YOLOv3 網(wǎng)絡(luò)的基礎(chǔ)上,引入空間金字塔池化結(jié)構(gòu),實(shí)現(xiàn)了不同尺度的特征融合,提高了小目標(biāo)的檢測(cè)準(zhǔn)確率;然后將損失函數(shù)由IoU 改為CIoU,減少回歸誤差,進(jìn)一步提升了檢測(cè)性能,同時(shí)也有助于提升后續(xù)跟蹤的效果。跟蹤模塊采用多目標(biāo)跟蹤算法Deep SORT 與檢測(cè)模塊相結(jié)合,來(lái)對(duì)檢測(cè)到的目標(biāo)進(jìn)行跟蹤,有效避免了重復(fù)檢測(cè),同時(shí)也能解決部分遮擋問(wèn)題。測(cè)試結(jié)果表明,本文提出的算法可以有效提高檢測(cè)的精度和速度,平均精度值達(dá)到85.23%,檢測(cè)速度達(dá)到38 f/s。針對(duì)該算法對(duì)視頻流進(jìn)行測(cè)試,發(fā)現(xiàn)其在檢測(cè)與跟蹤方面都取得了不錯(cuò)的效果,對(duì)傳播性疾病的防控工作具有很好的應(yīng)用前景。在實(shí)用性方面可以考慮加入報(bào)警模塊,對(duì)未佩戴口罩的行為及時(shí)發(fā)出警報(bào),以供后臺(tái)人員進(jìn)行處理。