苑穎 劉旭峰










摘? 要:面對當前疫情防控的實際需求,自動化檢測可以減少管理人員與他人接觸感染的風險且能使疫情防控管理更加高效。針對人臉佩戴口罩識別問題,利用深度學習的神經網絡自動提取目標特征的優點,將獲取的數據集通過LabelImg標注軟件進行標注,使用YOLOv5目標檢測算法訓練網絡模型,實現對佩戴口罩和未佩戴口罩的檢測;通過PyQt5設計并實現了疫情防控口罩佩戴檢測系統,提高了疫情防控效率。
關鍵詞:深度學習;YOLOv5;口罩佩戴檢測
中圖分類號:TP183? 文獻標識碼:A? 文章編號:2096-4706(2023)07-0065-05
Abstract: Faced with the actual needs of current epidemic prevention and control, automated testing can reduce the risk of infection between management personnel and others and make epidemic prevention and control management more efficient. Aiming at the recognition problem of a face mask wearing, the advantage of deep learning neural network to automatically extract target features is utilized. The obtained dataset is labeled using LabelImg labeling software, and the YOLOv5 target detection algorithm is used to train the network model to achieve the detection whether the mask is worn or not; The epidemic prevention and control mask wearing detection system is designed and implemented through PyQt5, improving the efficiency of epidemic prevention and control.
Keywords: deep learning; YOLOv5; mask wearing detection
0? 引? 言
2019年年底,新冠疫情開始在全球范圍蔓延,至此文寫成之時仍在全球流行。我國疫情防控仍處于“外防輸入,內防反彈”的關鍵階段,疫情防控工作面臨著巨大的挑戰。因病毒主要通過近距離飛沫和密切接觸傳播,人群普遍易感。規范佩戴口罩能有效避免人們呼吸時吸入空氣中的新冠病毒,從而降低被病毒感染的風險[1]。因此佩戴口罩是防止病毒傳播的重要手段。國家衛生健康委員會發布的預防新冠感染的指南明確指出,個人在公共場所必須佩戴醫用外科口罩。但隨著全國疫情防控進入常態化階段,人們也間歇性出現對自己放松疫情防控管理要求的現象,經常會在公共場所不佩戴口罩及不保持安全距離,這一行為增加了人們感染病毒的風險。
目前在火車站、醫院、商場等公共服務的大部分場合對人員是否佩戴口罩都是人工進行檢測。但是人工檢測存在工作強度大、效率低、覆蓋面窄、時效性差等問題[2]。針對此問題,本文利用目標檢測算法和計算機視覺設計口罩佩戴檢測系統,此系統可以降低一線監管人員的勞動強度,有效規避上述弊端,具有重要的研究意義。
1? 目標檢測算法YOLO概述
近年來,目標檢測任務成為大眾焦點,它實現了在不同的場景中標記出需要檢測的目標并且確定它們的位置和類別。21世紀初,目標檢測在卷積神經網絡的大量應用中得到了快速發展。在本系統中口罩佩戴檢測本質是在人臉的基礎上對是否佩戴口罩進行識別,因此需要使用目標檢測類的神經網絡。現階段基于深度學習目標檢測算法主要分為兩大類:一類是以R-CNN為代表的兩階段檢測算法,另一類是以YOLO為代表的一階段檢測算法[3]。兩階段檢測算法在特征提取的基礎上,先由獨立的網絡分支生成大量的候選區,再對其進行分類與回歸,該算法的優勢主要體現在可擴展性和高準確率性方面。一階段檢測算法在生成候選區的同時進行分類和回歸,該算法的主要優勢是識別速度快,更適合用于需要實時檢測的場景[4]。
YOLO算法是2015年Redmon等人提出的一種使用神經網絡提供實時對象檢測的算法。它將單個卷積神經網絡(CNN)應用于整個圖像,將圖像分成網格,并預測每個網格的類概率和邊界框。該算法因其速度快和準確性高[5]而廣受歡迎,已廣泛應用于檢測交通信號、人員、停車計時器和動物中。YOLO算法在發展的過程中推出了很多版本。YOLOv2在YOLO算法的基礎上使用卷積層代替了全連接層。YOLOv3為了實現多尺度檢測增加了FPN架構,輸出3個不同尺度的卷積層進行判斷,使網絡能夠檢測不同比例大小的物體[6]。YOLOv4在YOLOv3的基礎上加入了Mish激活、加權殘差連接等實用技巧,在檢測精度和速度上進行了一定取舍,使綜合性能進一步提高[7]。并且YOLO算法還在不斷的改進和更新,時至今日YOLO算法已經更新到了第5個版本。綜合實際應用考慮,在保證實時性和準確率的情況下本系統選用YOLOv5模型進行訓練。
2? 口罩佩戴檢測算法設計
2.1? 口罩佩戴檢測數據集
本次數據集從CSDN、Roboflow等各大平臺以及現場采集共獲取了9 848張圖片,包括人員佩戴口罩和未佩戴口罩兩種情況。將采集的數據按照訓練數據與測試數據之比為8:2進行分組,其中訓練數據圖片有7 803張,測試數據圖片有2 045張,圖1為數據集中部分圖片。
2.2? 數據集標注
獲取到圖像數據之后需要對圖像數據進行標注。標注的主要目的是對圖片中人臉是否佩戴口罩進行標識。數據集的標注使用的是LabelImg圖像標注工具。LabelImg是基于Python語言開發的圖形界面的圖像標注軟件,可以采用多種不同的格式來標注圖像,有VOC、YOLO以及createML格式,這里我們選擇YOLO格式。
在標注開始之前首先創建一個名為predefined_calsses.txt的文本文件來存放所要標注的類別名稱。訓練模型的標注分為兩個類別:佩戴口罩的人臉標注為Mask,沒有佩戴口罩的人臉標注為No_Mask。圖2為使用LabelImg圖像標注工具對圖像進行佩戴口罩標注的示意圖,佩戴口罩的標注信息為Mask。
每一張圖片經過LabelImg工具標注之后,會生成與圖片名字相對應的文本文件。文本文件中的信息為<object-class><x><y><width><height>。<object-class>是標注類別,<x>、<y>是目標的中心坐標,<width>、<height>是目標的寬和高。這些坐標是通過歸一化處理過的,其中x、width是使用原圖的width進行歸一化,而y、height是使用原圖的height進行歸一化。
2.3? 訓練模型的選取
在目標檢測算法中,YOLOv5算法是YOLO系列的最新算法。YOLOv5官方發布的檢測網絡共有四個版本,依次為YOLOv5x、YOLOv5l、YOLOv5m、YOLOv5s。其中最核心的是YOLOv5s模型。YOLOv5s是YOLOv5系列中深度和特征圖寬度均最小的網絡模型,其他的三個版本都是在YOLO5s模型的基礎上進行加深、加寬處理。
從圖3可以看出,YOLOv5s模型在COCO測試數據集上AP值最低,但相對而言識別速度最快。YOLOv5x模型在COCO數據集上AP值最高,識別速度最慢。準確性最高的YOLOv5x模型的網絡空間最大,但是推理所需要的時間長,不符合實時檢測的要求。YOLOv5s模型網絡空間小,推理所需要消耗的時間短。雖然YOLOv5s模型在COCO測試數據集上AP值最低,但因為COCO數據集中有80個類別,而對于口罩佩戴檢測的這種兩分類目標任務而言,YOLOv5s能完全夠滿足需求,故模型最終選擇YOLOv5s。圖4為YOLOv5s模型結構圖。
Focus模塊將一張640×640×3的彩色圖片通過切片操作轉化為320×320×12的特征圖,然后經過32個卷積核進行卷積操作,最終生成320×320×32的特征圖;Conv模塊對輸入的特征圖進行卷積操作進一步地提取特征;BCSPn模塊分成了兩部分,一部分將輸入的特征圖分成兩半,一半進行兩次卷積,將卷積之后的結果與另一半進行相加,實現減少計算量。另一部分將輸入的特征圖全部進行卷積操作,然后再將卷積之后得到的特征圖與之前的特征圖進行拼接進行更好的特征融合;SPP模塊將上一個模塊得到的特征圖通過1×1的卷積減少特征圖的個數,然后使用13×13、9×9和5×5的池化核進行MaxPool最大值池化減少參數量,并將池化結果進行拼接再通過1×1的卷積減少特征圖的個數。
2.4? 模型訓練流程及參數配置
PyTorch是Facebook人工智能研究院(FAIR)團隊開發的一個開源的深度學習框架,是目前主流的深度學習框架之一。在當前開源的框架中,沒有哪一個框架在靈活性、易用性、速度這三方面有兩個能同時超過PyTorch[8]。因此,本系統所用目標檢測模型以PyTorch為訓練框架,模型訓練基本流程如圖5所示。具體如下:
1)將輸入模型的圖片調整為640×640大小,并將圖片進行旋轉、平移等數據增強操作。
2)將圖像數據輸入到YOLOv5s網絡模型中(每個神經網絡對輸入數據進行加權累加再輸入到激活函數作為該神經元的輸出值)通過前向傳播,得到得分值。
3)將得分值輸入到損失函數中,與真實值相差較大再計算損失值,通過損失值判斷識別程度的好壞。
4)通過反向傳播(反向求導,損失函數和網絡模型中的每個激活函數都要求,最終目的是使誤差最小)來確定梯度向量。
5)最后通過梯度向量來調整每一個權值,使得誤差趨于0或者模型趨于最優解。
6)重復上述過程直到設定的次數。
模型選用YOLOv5中網絡結構最小的YOLOv5s模型,圖片尺度統一縮放為640×640的圖片,批處理通道數batch-size設置為8,訓練代數(epoch)為300。具體網絡參數修改如表1所示。
2.5? 模型評估
模型評估是對訓練好的模型通過預測結果的精確率、召回率、mAP指標對模型進行評估,并且對模型從現實角度開展實驗分析,驗證YOLOv5s模型在人臉口罩佩戴檢測中的效果。
圖6是模型隨著訓練輪次epoch的數量增加精確率的變化情況。精確率指實際是正樣本而模型預測也為正樣本占被預測為正樣本的比例。計算公式為:
圖7為模型隨著訓練輪次epoch的數量增加召回率的變化情況。召回率指正樣本被預測為正樣本占總的正樣本的比例。值越大,性能越好。召回率直觀地反映了模型找到所有正樣本的能力。計算公式為:
式中,TP是預測為正且實際為正的樣本數量,FP是預測為正但實際為負的樣本數量,FN是預測為負但實際為正的樣本數量,TN是預測為負且實際為負的樣本數量。此外,TP+FP表示預測為正樣本的總數,TP+FN表示實際為正樣本的總數。
圖8為模型隨著訓練輪次epoch的數量增加mAP的增長變化。mAP(mean Average precision)是多分類平均精確率,它代表了所有類別的AP平均值。AP(Average precision)是衡量單個類別檢測好壞的評價指標。AP計算公式為:
式中:Recall為橫坐標,AP為縱坐標,表示P-R曲線下方的面積,AP值越高說明模型的平均準確率越高。
mAP在目標檢測中是評估所有類別優劣的一項重要的指標。mAP計算公式為:
3? 系統實現
3.1? 系統搭建
為了應用基于YOLOv5算法的人臉口罩佩戴檢測模型,本系統采用Python中的PyQt5框架進行系統搭建,將系統分為圖像檢測模塊和視頻檢測模塊。運用Python語言和OpenCV計算機視覺庫對上傳的圖像數據、視頻數據以及攝像頭實時捕獲的數據進行處理,將處理好的數據送入模型進行推理,識別出數據中的人臉是否佩戴口罩。最后通過屏幕顯示和語音提示提高系統的交互性。系統操作流程如圖9所示。
3.2? 實現結果
當運行本系統時,可選擇圖像和視頻兩種方式進行檢測。視頻檢測模塊中若沒有上傳視頻則可以打開攝像頭,對攝像頭捕獲的數據進行檢測。在圖片檢測模塊中有GPU和CPU切換的功能,上傳視頻檢測和打開攝像頭實時檢測默認使用GPU進行檢測。檢測完成后的結果將顯示在屏幕中并進行語音播報。圖10(a)中通行人員佩戴口罩,標注為Mask,置信度為0.85,圖10(b)中通行人員未佩戴口罩,標注為No_Mask,置信度為0.84。
4? 結? 論
針對疫情防控的實際需求,通過數據集獲取、數據集標注、模型選擇與訓練、模型評估和系統搭建等一系列工作,設計并實現了基于YOLOv5的疫情防控口罩佩戴檢測系統。該系統能有效快捷檢測是否佩戴口罩,較好地滿足了實際的應用需求。
參考文獻:
[1] 何進椅,陳雋,張孝莉,等.預防新型冠狀病毒肺炎的醫用防護口罩選擇及佩戴建議 [J].中華災害救援醫學,2021,9(2):825-828.
[2] 丁培,阿里甫·庫爾班,耿麗婷,等.自然環境下實時人臉口罩檢測與規范佩戴識別 [J].計算機工程與應用,2021,57(24):268-275.
[3] 陳科圻,朱志亮,鄧小明,等.多尺度目標檢測的深度學習研究綜述 [J].軟件學報,2021,32(4):1201-1227.
[4] 肖博健,萬爛軍,陳俊權.采用YOLOv5模型的口罩佩戴識別研究 [J].福建電腦,2021,37(3):35-37.
[5] 夷德.基于YOLO的目標檢測優化算法研究 [D].南京:南京郵電大學,2021.
[6] 宋威,謝豆,石景文,等.一種口罩佩戴和體溫檢測系統的設計與實現 [J].物聯網技術,2022,12(5):30-33.
[7] 孫永豪.基于改進YOLOx的口罩佩戴檢測系統設計與實現 [D].合肥:安徽建筑大學,2022.
[8] 陳云.深度學習框架PyTorch入門與實踐 [M].北京:電子工業出版社,2018.
作者簡介:苑穎(1979—),女,漢族,山西大同人,副教授,碩士研究生,研究方向:數據分析與挖掘、軟件工程。