何 義,李捍東
(貴州大學電氣工程學院,貴陽 550025)
新冠肺炎病毒讓我們的生活處于混亂之中,它可以通過唾液、飛沫傳播,而且感染力極強。佩戴口罩是我們能夠有效防止病毒傳播和擴散最有效的策略。盡管目前我國疫情控制情況較好,科學家也給出了明確的提示:病毒短期不會消失。今后一段時間的生活中,口罩都將是我們每日的必備品,而公共場所目前對檢查口罩是否佩戴采用的依然是人工管理。除疫情外,在工業(yè)制造和生產(chǎn)過程中,對于不可避免產(chǎn)生的揚塵、沙土,佩戴具有顆粒物防護功能的口罩也一項極關(guān)鍵的保護措施。
目前基于深度神經(jīng)網(wǎng)絡的目標檢測算法有RCNN、SSD以及YOLO系列等[1],這些模型都可以通過學習完成目標檢測。在檢測效果上,YOLO的速度要優(yōu)于其他算法,這是由于YOLO模型在結(jié)構(gòu)有其獨特的優(yōu)勢。隨著深度學習在科研界蓬勃發(fā)展,它也漸漸得到了工業(yè)界的青睞,但仍需要解決實時性難點問題。若目標檢測達不到實時性的檢測速度,在工業(yè)中就很難得到大范圍的應用。因此輕量化的深度神經(jīng)網(wǎng)絡新技術(shù)不斷出現(xiàn)。Redomon在2016年初首次提出了YOLO模型,將YOLO算法運用到目標物體的識別和檢測上,在對圖像的特征提取中實現(xiàn)了較高的準確率[2]。至今YOLO算法一直還在發(fā)展中,目前最新為第5版。與R-CNN相比較,采用這種模型實現(xiàn)了端到端的檢測,在速率和準確率方面都有所改善。
本設(shè)計實現(xiàn)的口罩檢測與識別系統(tǒng),主要是通過對攝像頭捕獲的視頻流進行處理,對捕獲到的每一幀圖像檢測人臉區(qū)域后進行口罩檢測和人臉識別操作,口罩檢測部分主要檢測對象佩戴口罩的狀況。主要步驟包括:數(shù)據(jù)預處理、數(shù)據(jù)集構(gòu)建、模型構(gòu)建、訓練模型、數(shù)據(jù)識別。
在數(shù)據(jù)預處理階段,對于攝像頭采集到的數(shù)據(jù),做進一步的預處理,主要包括二值化、圖片背景降噪、歸一化、銳化等等。在此主要采用開源OpenCV庫的接口函數(shù)對圖片進行預處理[3]。
對于訓練模型,需要輸入一定數(shù)量的圖片,包括戴口罩和不戴口罩的,讓機器能夠?qū)W習,因此需要構(gòu)建數(shù)據(jù)集。對在網(wǎng)上爬取的數(shù)據(jù)集還需要做進一步的處理,包括數(shù)據(jù)標注和數(shù)據(jù)增強等,最后得到可訓練處較為準確的模型。
研究采用YOLOv5分類檢測模型,根據(jù)數(shù)據(jù)集對原始YOLOv5模型中的anchor參數(shù)等進行相應的調(diào)整,讓訓練出的結(jié)果準確性和速率更高。
為實現(xiàn)數(shù)據(jù)識別,設(shè)計采用Qt封裝一些列接口,制作出操作方便的UI界面,可以實時獲取攝像頭的人臉數(shù)據(jù)以及圖片數(shù)據(jù)。按上述思路得到主要操作流程圖如圖1所示。
圖1 整體架構(gòu)流程圖
所謂數(shù)據(jù)增強技術(shù)就是擴大該實驗的數(shù)據(jù)集合。對于原始的數(shù)據(jù)集,不可能將對于目標場景中所有的圖片采集完全,所以需要對原始的數(shù)據(jù)集進行擴充,讓訓練的模型可以適應各種復雜環(huán)境的圖像。在YOLOv4中就采用了數(shù)據(jù)增強的方法。
本設(shè)計將數(shù)據(jù)增強的方法大體分為兩類:一類是針對一張圖片的處理方法,主要包括圖像遮擋的方法;另外一類是對于多個圖片的組合的方法,其主要包括cutmix和MOsaci[4]等。各方法具體實現(xiàn)的操作實質(zhì)如表1概述。
表1 各圖像增強方法技術(shù)實質(zhì)
YOLOv5繼承了v4的數(shù)據(jù)增強方法,并通過引入數(shù)據(jù)加載器,增強訓練數(shù)據(jù)。數(shù)據(jù)加載器主要包含三種數(shù)據(jù)增強方法:圖片比例縮放、色彩空間調(diào)整和馬賽克增強。
YOLOv5采用自適應錨定框,由于數(shù)據(jù)集中的圖片大小尺寸不一,對于目標檢測算法的模型大部分都需要手動調(diào)整輸入圖片的目標框大小。在訓練模型中使用的數(shù)據(jù)集目標框的大小可能也會與實驗實際測試輸入的目標框大小存在較大差異。因此,YOLOv5會對錨定框的尺寸自動學習[5]。
YOLOv5和v4對于v3的Darknet53進行了改進,將骨干網(wǎng)絡改為CSPDarknet[6]。在傳統(tǒng)的目標檢測網(wǎng)絡框架中卷積神經(jīng)網(wǎng)絡都存在梯度信息多余重復的問題,而CSP結(jié)構(gòu)從一開始到結(jié)束都將梯度信息結(jié)合到特征圖中,不但能夠提取大量的圖像特征,而且大大減少了網(wǎng)絡模型中需要引入的參數(shù)數(shù)量,將網(wǎng)絡結(jié)構(gòu)的復雜度控制到最低,對于模型訓練的準確度和訓練速度都有相應的提升[7]。
此部分主要用于生成金字塔結(jié)構(gòu)。對于不同比例不同尺寸的同一個圖片輸入,使用特征金字塔結(jié)構(gòu)會增加識別的準確率。FPN在特征聚合領(lǐng)域被廣泛使用,但路徑聚合網(wǎng)絡出現(xiàn)之后,改變了以往的局面,YOLOv5和v4都使用PANET來聚合圖像特征。PANET是在原始的FPN框架上改進而來,網(wǎng)絡的特征提取器采用了新的結(jié)構(gòu),該結(jié)構(gòu)增強了自下而上的路徑,加強了網(wǎng)絡特征融合的能力,改善了微小特征提取的能力。
在YOLOv5模型中,有兩種激活函數(shù)的使用,隱含層在批量歸一化處理后加入了Leaky ReLU激活函數(shù),并在檢測階段使用了Sigmoid式的激活函數(shù)。
對于優(yōu)化函數(shù),在YOLOv4僅僅使用了SGD函數(shù),而YOLOv5則在YOLOv4基礎(chǔ)上增加了一種函數(shù)對模型優(yōu)化,即Adam,它提前預設(shè)了模型訓練所需要的超參數(shù)。當需要訓練的模型的數(shù)據(jù)集較小時,選擇Adam會更優(yōu),但若要訓練大型數(shù)據(jù)集,SGD學習效果會比Adam合適。
早期的YOLO模型的損失度是通過客觀評分、類別概率評分和邊界框回歸評分來評價的[8],使用GIOU指標作為邊界框的損失。YOLOv5整體網(wǎng)絡結(jié)構(gòu)如圖2所示。
圖2 YOLOv5網(wǎng)絡結(jié)構(gòu)圖
配置好實驗環(huán)境之后,需要制作合適的數(shù)據(jù)集。在本次實驗中,從網(wǎng)絡上收集1600張口罩佩戴相關(guān)的圖片,使用其制作訓練所需要的數(shù)據(jù)集,數(shù)據(jù)集主要劃分為兩類:mask和nomask,分別表示已經(jīng)佩戴口罩和沒有佩戴口罩。實驗步驟如下:
1)制作圖像的.xml文件。使用LabelImg軟件對圖片進行手動標注,使用矩形框?qū)δ繕藚^(qū)域標注lable,各圖片和生成的xml文件是一一對應的。
2)將.xml文件轉(zhuǎn)換成.txt文件。經(jīng)過圖片標注后,還需要進一步對所有圖片進行分類。先將所有的圖片數(shù)據(jù)集分為驗證集、測試集和訓練集。實驗中總共使用1600張圖片,其中訓練集包含1200張,測試集包含400張。運行g(shù)en_mask_nomask后生成TXT文件。
3)保存訓練,驗證測試集TXT文件。經(jīng)過上一步操作,完成了訓練集的劃分,三個數(shù)據(jù)集的TXT文件中每一行都保存著對應的圖片的信息,第一列為0或者1,其中0代表沒有戴口罩,而1代表已經(jīng)佩戴口罩,其后的參數(shù)還包括代表目標框中心點的坐標以及圖片的坐標。
在網(wǎng)絡模型訓練階段,迭代批量設(shè)置大小為16;衰減系數(shù)為0.0005;總迭代次數(shù)為50次;初始學習率設(shè)置為0.01;當?shù)螖?shù)分別達到40次和45次時,將學習率分別降低至0.0001和0.00001。大約在45次迭代后,模型收斂。平均精度均值(mAP)、召回率(recall)、損失函數(shù)(giou_loss)和查準率(precision)各參數(shù)的實驗情況如圖3所示。從圖中各自曲線可以看出,平均精度均值(即所有類別的平均精度總和與數(shù)據(jù)集中所有類的平均精度的平均值的比值)在模型迭代到35次時,將接近于0.9。
圖3 各參數(shù)實驗曲線圖
召回率是樣本中的正確類別被預測正確的概率,如下式:
其中TP表示將正確類預測為正的類別數(shù);FN表示將正確類別預測為負的類別數(shù)。在模型迭代到35次時,數(shù)值接近于0.9。
采用giou_loss作為損失函數(shù),如下式所示:
AC表示預測框最小區(qū)域面積,U表示真實框面積。在模型迭代到50次時,損失函數(shù)保持穩(wěn)定,數(shù)值在0.01左右。
查準率,即預測數(shù)據(jù)集中預測正確正樣本總數(shù)與實際正樣本總數(shù)之比,式為:
FP表示將負類別預測為正確類別數(shù)。在模型迭代到30次時,數(shù)值大約為0.9。
經(jīng)過上述模型的訓練,將待檢測數(shù)據(jù)集中的圖片輸入到模型中。通過在PyCharm編譯環(huán)境下配置PyQt,利用Qt制作設(shè)計所需要的UI圖像界面。對于圖片檢測和視頻檢測,以及攝像頭實時人臉口罩佩戴檢測都能夠較好的完成。在輸出的結(jié)果中以mask字樣標識出佩戴口罩,nomask表示未佩戴口罩。簡單場景的單人物口罩佩戴檢測效果如圖4所示。
圖4 單人物口罩佩戴檢測效果
佩戴口罩是指從鼻子到嘴巴下面的范圍,包括鼻子。數(shù)據(jù)集采用的是完整的佩戴口罩的情況,只有完整的佩戴識別后才被判斷為已佩戴。
對于背景中含有多個人物的情況,同樣也能夠很好完成檢測,即在多目標檢測中沒有出現(xiàn)漏檢的情況。多人物口罩佩戴檢測效果如圖5所示。
圖5 多人物口罩佩戴檢測效果
在測試環(huán)境中采用準確率Accuracy來判斷模型的優(yōu)劣,它等于正確檢測樣本的數(shù)目與總測試樣本的數(shù)目之比,式為:
NT表示準確率等于正確檢測樣本的數(shù)目,F(xiàn)N表示準確率不等于正確檢測樣本的數(shù)目。
設(shè)計出的YOLOv5算法實時檢測方法,在實驗用中速度達到130 f/s,準確率90%左右,相比于參考文獻中的其他算法的實現(xiàn),在召回率和檢測速度以及檢測精度上,都能獲得較好的檢測結(jié)果,同時對于機器的性能要求較低,計算量較小,能夠滿足實時檢測的需求。實時檢測效果如圖6所示。多人場景中口罩識別系統(tǒng)最多可以識別20個人的佩戴情況,這能表明YOLOv5算法在口罩佩戴檢測方面的優(yōu)越性。
圖6 實時檢測效果
為進一步證明這一優(yōu)越性,總結(jié)其他常見目標檢測算法與本改進算法進行相關(guān)比較。采用控制變量方法,僅僅使用不同的算法來驗證本算法的科學性和有效性,比較結(jié)果如表2所示。
表2 各算法對比
實驗結(jié)果證明,所提出的復雜環(huán)境下的實時口罩佩戴檢測算法在準確率和幀速方面都明顯優(yōu)于其他幾種常見算法,進一步驗證了本方法的優(yōu)越性。
本口罩佩戴檢測與識別系統(tǒng)能夠滿足離線脫機狀況下的日常工作?,F(xiàn)實環(huán)境復雜多變,依舊存在一部分問題有待解決,比如復雜背景下由于障礙物的影響,會對人臉檢測識別不太理想,諸如此類。同時,本系統(tǒng)最初設(shè)想中還包括額外配備語音插件及外設(shè)實現(xiàn)語音報警的功能,以及實現(xiàn)基于熱成像的非接觸體溫測量方式,由于條件所限暫時未實現(xiàn),留待后續(xù)研究在多種場景下的不斷實踐來加以改進。