毛曉波, 徐向陽, 李 楠, 魏劉倩, 劉玉璽, 董夢(mèng)超, 焦淼鑫
(1.鄭州大學(xué) 電氣工程學(xué)院,河南 鄭州 450001; 2.鄭州大學(xué) 機(jī)械與動(dòng)力工程學(xué)院,河南 鄭州 450001)
佩戴口罩是人們保護(hù)身體健康的簡(jiǎn)單而有效的途徑,而人臉佩戴口罩的智能識(shí)別可以高效監(jiān)督人們是否佩戴口罩,是抑制疾病傳播和降低損失的重要技術(shù)手段[1]。針對(duì)該問題,有以下3類檢測(cè)方法。
第1類是基于深度學(xué)習(xí)的方法。特點(diǎn)是將圖像送入計(jì)算量很大的卷積神經(jīng)網(wǎng)絡(luò),再加上各種后處理,能夠檢測(cè)到復(fù)雜環(huán)境中的人臉是否佩戴口罩,檢測(cè)精度高但速度慢。Tang 等[2]提出了PyramidBox檢測(cè)算法,該算法是一種上下文輔助的單階段檢測(cè)算法,設(shè)計(jì)了一種新的錨點(diǎn)(anchors),將高低維特征融合在一起。Tian 等[3]先檢測(cè)人臉,再使用Attention機(jī)制關(guān)注口罩區(qū)域,以判定是否佩戴。有學(xué)者提出了使用k-means聚類算法生成若干個(gè)Anchors Boxes,再結(jié)合YoLo-V3網(wǎng)絡(luò)檢測(cè)人臉是否佩戴口罩[4-6]。管軍霖等[7]提出了基于CSP-Darknet53的YoLo-V4檢測(cè)框架檢測(cè)人臉是否佩戴口罩。陳國特等[8]提出了先檢測(cè)人頭信息,再用Restnet34和Softmax進(jìn)行分類。但兩級(jí)檢測(cè)網(wǎng)絡(luò)降低了檢測(cè)速度。
第2類是基于傳統(tǒng)的圖像檢測(cè)方法進(jìn)行檢測(cè)。該方法對(duì)輸入圖像要求嚴(yán)格,不能摻雜多余的背景區(qū)域,也不能檢測(cè)1張圖像中的多個(gè)人臉,并且在面對(duì)門禁通道中排隊(duì)的情況時(shí),無法提取隊(duì)伍隊(duì)首人臉圖像(因?yàn)殚T禁系統(tǒng)開門與否由排隊(duì)隊(duì)伍隊(duì)首的人是否佩戴口罩決定),檢測(cè)速度快,但檢測(cè)精度低。金鈺豐等[9]提出了將人臉關(guān)鍵點(diǎn)和口罩紋理等特征相結(jié)合的方法檢測(cè)行人是否佩戴口罩。楊子揚(yáng)等[10]提出了將RGB色彩空間轉(zhuǎn)換到Y(jié)CrCb色彩空間,并結(jié)合二值化等傳統(tǒng)的圖像處理方式,判斷上半部分人臉和下半部分人臉像素平均值的異同,從而判定行人是否佩戴口罩。此檢測(cè)方法遇到的挑戰(zhàn)是人臉和口罩顏色接近時(shí)很難判定。
第3類方法主要是檢測(cè)模式的創(chuàng)新,特點(diǎn)是現(xiàn)場(chǎng)圖像采集工作線下進(jìn)行,圖像處理工作線上進(jìn)行。李超等[11]提出樹莓派和云平臺(tái)聯(lián)合進(jìn)行工作的模式,即利用嵌入式設(shè)備采集圖像,然后將圖像上傳至云服務(wù)器進(jìn)行檢測(cè)并返回檢測(cè)結(jié)果。該類方法需要穩(wěn)定快速的網(wǎng)絡(luò)、高性能的GPU服務(wù)器集群,成本很高,且結(jié)構(gòu)復(fù)雜、延時(shí)大,降低了系統(tǒng)的魯棒性。
本文構(gòu)建了一個(gè)大型數(shù)據(jù)集,并對(duì)其進(jìn)行數(shù)據(jù)增強(qiáng),且將SSD[12](single shot multibox detector)目標(biāo)檢測(cè)框架中的特征提取網(wǎng)絡(luò)VGG[13]替換為輕量化的特征提取網(wǎng)絡(luò)MobileNet-V3[14],使之適用于計(jì)算能力有限的邊緣計(jì)算系統(tǒng)。本文設(shè)計(jì)了平行四邊形連桿折疊結(jié)構(gòu)的擋板,便于安裝和部署,兼具廣告信息播放功能,最終構(gòu)成一個(gè)完整高效的門禁系統(tǒng)。
由于口罩?jǐn)?shù)據(jù)集少且佩戴場(chǎng)景多元化[15],因此本文選擇開源、權(quán)威的MAFA和WIDER FACE這2個(gè)數(shù)據(jù)庫的部分圖片,每1張均包含戴口罩的和未佩戴口罩的人臉,并且規(guī)定未戴口罩的人臉數(shù)據(jù)標(biāo)簽為face,佩戴口罩的人臉數(shù)據(jù)標(biāo)簽為face_mask,大約8 000張圖片數(shù)據(jù),其中訓(xùn)練數(shù)據(jù)6 000余張,測(cè)試數(shù)據(jù)約2 000張。訓(xùn)練數(shù)據(jù)標(biāo)注示例如圖1所示。
圖1 數(shù)據(jù)標(biāo)注示例Figure 1 Example of data annotation
由于SSD是密集采樣算法,所以數(shù)據(jù)增強(qiáng)是SSD目標(biāo)檢測(cè)算法中的重要環(huán)節(jié),使用數(shù)據(jù)增強(qiáng)的訓(xùn)練模型明顯優(yōu)于未使用數(shù)據(jù)增強(qiáng)的模型[12]。數(shù)據(jù)增強(qiáng)包括隨機(jī)擴(kuò)展、隨機(jī)顏色空間模型變換(HSV和RGB模型)等內(nèi)容。其中,隨機(jī)擴(kuò)展可以顯著提高SSD算法對(duì)小目標(biāo)的檢測(cè)能力,如圖2所示。圖2(a)為原始標(biāo)注圖像,圖2(b)和2(c)為隨機(jī)擴(kuò)展的2種隨機(jī)效果示意圖。其他變換可以有效應(yīng)對(duì)尺寸變化、光線變化等問題,具有很好的魯棒性和泛化性能。魏宏彬等[16]用均值聚類算法對(duì)標(biāo)注框進(jìn)行聚類,得到合適的先驗(yàn)框?qū)捀弑壤?/p>
圖2 隨機(jī)擴(kuò)展Figure 2 Random expansion
原始SSD使用的是在ImageNet上預(yù)訓(xùn)練好的VGG[13]模型,并且替換掉了VGG模型中的全連接層,改用全卷積層,最后又添加了一些新的卷積層,繼續(xù)提取圖像特征。以SSD300_VGG(300表示輸入圖像的尺寸為300×300×3)為例,其選用的6個(gè)特征圖的具體信息如表1所示,每一層特征圖上的先驗(yàn)框尺寸為
(1)
式中:sk為第k個(gè)特征圖上先驗(yàn)框的最大尺寸占原始圖像邊長的比例;smin、smax均為超參數(shù),取值分別為0.2、0.9;m表示選取的檢測(cè)特征圖的數(shù)量減去1;k為特征圖的序號(hào)。
從表1可以得出,6個(gè)特征圖上先驗(yàn)框總數(shù)為8 732個(gè)。每個(gè)先驗(yàn)框都具有一個(gè)類別得分和相應(yīng)的坐標(biāo),SSD目標(biāo)檢測(cè)算法的任務(wù)就是找出包含這2種目標(biāo)的先驗(yàn)框,并給出正確的類別。原始SSD目標(biāo)檢測(cè)框架如圖3所示。
表1 SSD300_VGG特征圖具體信息Table 1 Specific information of SSD300_ VGG feature map
圖3 原始SSD目標(biāo)檢測(cè)框架Figure 3 Original SSD object detection framework
由于VGG卷積層多、運(yùn)算速度慢,因此,本文將其替換為適用于移動(dòng)端運(yùn)行的輕量化特征提取網(wǎng)絡(luò)MobileNet-V3[14](輸入圖像的尺寸為320×320×3),相比于原始SSD采用的VGG網(wǎng)絡(luò),模型大小從201 MB減至29.9 MB,約為原始模型大小的1/7。MobileNet-V3(Large)模型有19層,第2~15層為集成模塊(bneck模塊),按順序包含2D卷積層、BN層、H-Swish激活函數(shù)層、SE(squeeze and excite)層[17]、2D卷積層、BN層,如圖4所示。
圖4 MobileNet-V3特征提取網(wǎng)絡(luò)的bneck模塊Figure 4 The bneck module of MobileNet-V3 feature extraction network
但是將其嵌入到SSD目標(biāo)檢測(cè)框架中,就需要移除一些只適用于分類任務(wù)的層。這里移除MobileNet-V3(Large)中的第17層及以后的層,并在其后添加4層bneck,共20層,為SSD提供不同尺度的檢測(cè)特征圖,稱為MobileNet-V3-SSD,如圖5所示。盡管其具有更多的卷積層,但每層都經(jīng)過了精心設(shè)計(jì),加入了深度可分離卷積、倒置的殘差結(jié)構(gòu)、輕量級(jí)的注意力機(jī)制、利用H-Swish代替計(jì)算量巨大的Swish激活函數(shù)等。深度可分離卷積將標(biāo)準(zhǔn)的卷積核進(jìn)行分解,減少了計(jì)算量,提高了訓(xùn)練推理速度。例如,輸入特征圖的通道數(shù)為M,卷積核數(shù)量為N,卷積核尺寸為DF×DF,輸出特征圖尺寸為DO×DO,則使用普通卷積的計(jì)算量G為
圖5 MobileNet-V3-SSD目標(biāo)檢測(cè)框架Figure 5 MobileNet-V3-SSD object detection framework
G=DF×DF×M×N×DO×DO。
(2)
使用深度可分離卷積的計(jì)算量H為
H=M×(DF×DF×1)×DO×DO+
N×(1×1×M)×DO×DO。
(3)
G和H的比值為
(4)
在深度學(xué)習(xí)中,N一般為32、64、128、256、512、1 024等,DF2一般為1、4、9,因此,式(4)的值通常遠(yuǎn)大于1,即:普通卷積的計(jì)算量比深度可分離卷積的計(jì)算量高得多,因而深度可分離卷積的運(yùn)算速度比普通卷積快得多。
此網(wǎng)絡(luò)結(jié)構(gòu)中選擇的特征圖的具體信息如表2所示。其中,先驗(yàn)框的總數(shù)為3 234,遠(yuǎn)少于表1中的總數(shù)8 732,這就為訓(xùn)練和推理速度的提高提供了理論基礎(chǔ)。
表2 SSD320_MobileNet_V3特征圖具體信息Table 2 Specific information of SSD320_MobileNet_V3 feature map
這6個(gè)特征圖上的先驗(yàn)框的最小、最大尺寸按照式(1)計(jì)算。將計(jì)算得到的sk與輸入圖片的尺寸相乘,即可得到該層特征圖上的先驗(yàn)框的最大尺寸。在特征圖bneck12中先驗(yàn)框的最小尺寸選擇32,最大尺寸由式(1)計(jì)算可得64,特征圖bneck15~bneck19中先驗(yàn)框的最小/最大尺寸分別為64/109、109/154、154/198、198/243、243/332。
值得注意的是,SSD算法并不是對(duì)目標(biāo)框的位置進(jìn)行直接輸出,而是對(duì)其進(jìn)行編碼(offset):
(5)
式中:lcx、lcy分別表示編碼后的預(yù)測(cè)邊界框位置信息的中心坐標(biāo)的橫、縱坐標(biāo);bcx、bcy分別表示預(yù)測(cè)邊界框的中心坐標(biāo)的橫、縱坐標(biāo);dcx、dcy分別表示先驗(yàn)框的中心坐標(biāo)的橫、縱坐標(biāo);dw、dh分別表示先驗(yàn)框的寬、高;vw、vh為超參數(shù),其值均為0.2;lw、lh表示編碼后的預(yù)測(cè)邊界框位置信息的寬、高;bw、bh表示預(yù)測(cè)邊界框的寬、高。
為了使網(wǎng)絡(luò)能夠進(jìn)行端到端的訓(xùn)練,也需要將標(biāo)注好的Ground Truth按照式(5)進(jìn)行編碼。
SSD的損失函數(shù)是一種聯(lián)合損失函數(shù),即將分類損失和定位損失求和,同時(shí)進(jìn)行反向傳播,優(yōu)化相關(guān)參數(shù)。由于交叉熵?fù)p失函數(shù)能夠準(zhǔn)確表達(dá)2個(gè)概率分布之間的關(guān)系,因此這里采用交叉熵?fù)p失函數(shù)求得分類損失,交叉熵?fù)p失函數(shù)為
(6)
由于正負(fù)樣本數(shù)量相差很大,若讓所有的負(fù)樣本損失全部參與反向傳播、更新梯度是不合理的,因?yàn)檫@會(huì)淹沒為數(shù)不多的正樣本損失。因此,SSD采用了難負(fù)樣本挖掘技術(shù),即:將負(fù)樣本的損失按照大小降序排列,只取前面一部分損失最大的負(fù)樣本。負(fù)樣本損失的具體數(shù)量則根據(jù)正樣本個(gè)數(shù)來確定,一般選擇正樣本個(gè)數(shù)的3倍為宜。其中,正負(fù)樣本的劃分規(guī)則:若先驗(yàn)框與Ground Truth的交并比IoU≥ 0.5,則將此先驗(yàn)框劃分為正樣本,反之劃分為負(fù)樣本。IoU為
(7)
式中:A為標(biāo)注框;B為先驗(yàn)框。
對(duì)于定位損失,采用SmoothL1函數(shù),將編碼后的矩陣與網(wǎng)絡(luò)輸出矩陣的相應(yīng)位置作差,將差值x作為SmoothL1的自變量,然后輸出結(jié)果作為定位損失。
(8)
不同于分類損失的是,定位損失中不含有負(fù)樣本定位損失,因?yàn)樨?fù)樣本是背景,定位沒有意義。
訓(xùn)練采用的深度學(xué)習(xí)框架為Pytorch(1.6)、torchvision(0.7.0),其他的依賴包為yacs、tqdm、opencv-python、vizer、tensorboardX、six等,在Ubuntu 18.04 LTS、電腦配置為Intel(R) Xeon(R) Gold 5218 CPU @ 2.30 GHz,GeForce RTX 2080ti GPU下,設(shè)置batch_size為32,初始學(xué)習(xí)率為0.01,在第10 000次迭代和第20 000次迭代時(shí)減小學(xué)習(xí)率,每次迭代學(xué)習(xí)率縮小為前一次學(xué)習(xí)率的1/10,采用SGD優(yōu)化器,Gamma值為0.1進(jìn)行網(wǎng)絡(luò)訓(xùn)練,總訓(xùn)練次數(shù)為25 000次。
目標(biāo)檢測(cè)模型性能的主要評(píng)價(jià)指標(biāo)包括:平均精度均值MAP和FPS(每秒處理的圖片數(shù)量)。MAP隨迭代次數(shù)而變化的曲線如圖6所示。MAP值等于每個(gè)類別的Precision-Recall曲線所圍成的面積:
圖6 MAP隨著迭代次數(shù)而變化的曲線Figure 6 Curve of MAP changing with the number of iterations
(9)
式中:TP指預(yù)測(cè)為正樣本實(shí)際為正樣本的數(shù)量;FN指預(yù)測(cè)為負(fù)樣本實(shí)際為正樣本的數(shù)量;FP指預(yù)測(cè)為正樣本實(shí)際為負(fù)樣本的數(shù)量[18]。
模型改進(jìn)前后,不同檢測(cè)網(wǎng)絡(luò)的算法性能結(jié)果如表3所示,推理速度測(cè)試環(huán)境為Jetson Nano開發(fā)板。在表3中,MAP指綜合MAP,即戴口罩人臉和不戴口罩人臉2種類別MAP的平均值;face_MAP、face_mask_MAP分別指不戴口罩的人臉類別的MAP、戴口罩的人臉類別的MAP;訓(xùn)練耗時(shí)指從頭開始訓(xùn)練本數(shù)據(jù)集至MAP收斂時(shí)所用的時(shí)間;FPS指Jetson Nano控制器每秒處理1×320×320×3圖像的數(shù)量。
表3顯示,以VGG16為特征提取網(wǎng)絡(luò)的SSD檢測(cè)框架的綜合MAP為89.40%,略高于以MobileNet-V3為特征提取網(wǎng)絡(luò)的SSD檢測(cè)框架(78.49%),這可能是輕量化的特征提取網(wǎng)絡(luò)在一定程度上丟失了部分信息所造成的。但是本文的主要目的是將其運(yùn)行在邊緣計(jì)算設(shè)備上,實(shí)時(shí)性更重要,因此算法更注重速度的提高。前者訓(xùn)練至MAP收斂時(shí)的耗時(shí)為3.88 h,是后者的2.27倍;前者的FPS為2(Jetson Nano平臺(tái)),是后者的1/6,即實(shí)際效果上,改進(jìn)后的網(wǎng)絡(luò)檢測(cè)速度是前者的6倍。主要原因是①輕量型Mobilenet-V3減少了參數(shù)量和計(jì)算量;②深度可分離卷積優(yōu)化了普通卷積的計(jì)算形式,加速效果為SSD+VGG16的1~9倍,參見式(4)。
表3 不同檢測(cè)網(wǎng)絡(luò)的算法性能Table 3 Algorithm performance of different detection networks
圖6為在不同的特征提取網(wǎng)絡(luò)(VGG16和Mobilnet-V3)下,face和face_mask的MAP以及綜合MAP隨著迭代次數(shù)的變化曲線??梢钥闯觯琈obileNet-V3的MAP(改進(jìn)后的變化曲線)收斂速度更快,過程更加平坦,這可能是因?yàn)閰?shù)量和計(jì)算量較少,從而使網(wǎng)絡(luò)更加容易訓(xùn)練,單步迭代耗時(shí)少。
表4展示了不同特征提取網(wǎng)絡(luò)下,顯存占用量、GPU占用率等指標(biāo)的具體數(shù)值。改進(jìn)后的SSD(以MobileNet-V3為特征提取網(wǎng)絡(luò))指標(biāo)值均為該類最低,有利于減少模型存儲(chǔ)空間、減弱對(duì)硬件資源的依賴以及對(duì)GPU的損耗。以VGG16為特征提取網(wǎng)絡(luò)的SSD檢測(cè)框架和YoLo-V3檢測(cè)框架的計(jì)算量分別是以MobileNet-V3為特征提取網(wǎng)絡(luò)的SSD檢測(cè)框架的63和321倍。因此, YoLo-V3和原始SSD均無法勝任嵌入式平臺(tái)應(yīng)用的需求。
表4 不同檢測(cè)網(wǎng)絡(luò)的性能指標(biāo)Table 4 Performance indicators of different detection networks
MobileNet-V3-SSD網(wǎng)絡(luò)在輸入1×320×320×3時(shí),計(jì)算量以總浮點(diǎn)數(shù)運(yùn)算操作次數(shù)GFLOPs表示,為0.483 7(FP32)。選擇Jetson Nano作為中央處理器,半精度(FP16)浮點(diǎn)數(shù)的計(jì)算速度以每秒鐘浮點(diǎn)數(shù)運(yùn)算操作次數(shù)TFLOPS表示,為0.5。NVIDIA官網(wǎng)的Jetpack 4.4.1系統(tǒng)作為基礎(chǔ)系統(tǒng)環(huán)境。
3.2.1 光電開關(guān)輸入信號(hào)
選擇漫反射三線PNP常開型光電開關(guān),額定電壓為5 V,額定電流為30 mA。僅當(dāng)檢測(cè)到人臉,中央控制器才會(huì)調(diào)用GPU進(jìn)行推理檢測(cè),以減少不必要的GPU和CPU損耗及電量消耗,延長元器件使用壽命。
3.2.2 USB攝像頭圖像信號(hào)
當(dāng)控制器收到光電開關(guān)高電平信號(hào)后,立即調(diào)用USB攝像頭(480 P,60°,焦距為3.6 mm)捕捉圖像信息,進(jìn)行推理檢測(cè)。持續(xù)檢測(cè)大約20幀圖像,如果超過10幀均檢測(cè)到該行人佩戴了口罩,即認(rèn)為“佩戴口罩”,打開擋板;否則,語音提示“您好,您未佩戴口罩,請(qǐng)佩戴口罩后通行”。為了在人流量大的時(shí)候依然保持魯棒性,將檢測(cè)到的人臉框按照面積大小排序,取面積最大的作為排隊(duì)隊(duì)伍的第1個(gè)人的人臉,是否放行依據(jù)此人是否佩戴口罩。
3.2.3 動(dòng)力輸出
擋板的動(dòng)力由伺服電機(jī)提供,轉(zhuǎn)動(dòng)范圍為0°~180°,扭矩為60 kg·cm。依據(jù)攝像頭中的人是否佩戴了口罩,通過python編程提供的脈寬調(diào)制PWM信號(hào),經(jīng)I2C—GPIO口和PCA9685模塊輸出控制伺服電機(jī)旋轉(zhuǎn)。
常見的擋板類型如三錕閘、擺閘和翼閘等,均不能自動(dòng)調(diào)整擋板長度。采用平行四邊形連桿折疊設(shè)計(jì),當(dāng)伺服電機(jī)驅(qū)動(dòng)擋板上升時(shí),由于重力的影響,擋板展開,形成一張網(wǎng)狀的門,如圖7(a)所示;當(dāng)伺服電機(jī)驅(qū)動(dòng)擋板下降時(shí),由于外殼壁的阻力影響,折疊機(jī)構(gòu)收縮在外殼壁內(nèi),如圖7(b)所示。
圖7 擋板的工作狀態(tài)Figure 7 Working states of baffles
本文設(shè)計(jì)了一種新型門禁系統(tǒng),以MobileNet-V3為特征提取網(wǎng)絡(luò)改進(jìn)SSD檢測(cè)算法檢測(cè)公共場(chǎng)所出入口行人是否佩戴口罩,平行四邊形連桿折疊擋板節(jié)約占地空間,留有以太網(wǎng)接口方便修改配置、更新神經(jīng)網(wǎng)絡(luò)模型。將原始VGG特征提取網(wǎng)絡(luò)替換成輕量化MobileNet-V3,MAP雖有所下降,但FPS卻從2提高到了12,檢測(cè)速度是原始SSD算法的6倍,在保證了精度的同時(shí)提高了速度。如何在MAP保持不變的情況下提高檢測(cè)速度依然是一個(gè)值得研究的問題。下一步研究工作會(huì)嘗試將門禁系統(tǒng)接入互聯(lián)網(wǎng),利用云計(jì)算在云端進(jìn)行監(jiān)控,實(shí)現(xiàn)集中統(tǒng)一管理和維護(hù)。