焦雙健,謝似霞
(中國海洋大學 工程學院,山東 青島 266100)
2019年,新型冠狀病毒肺炎(以下簡稱新冠肺炎)疫情突然爆發,它是一種全球傳播的流行病,傳染性極強,自爆發以來,嚴重威脅著全球所有人的生命。雖然中國疫情防控的能力逐漸提高,但新型冠狀病毒的突變也使這場疫情的情況不容樂觀。如何應對新冠肺炎疫情,已成為全球科學界的一個焦點問題。科學界已做出許多努力,例如開發有效的疫苗、制定及時有效的治療方案等。相關研究顯示,新型冠狀病毒主要通過飛沫和氣溶膠傳播。這種傳播很有可能在與感染者的社會互動如交談、接觸中發生。因此,正確佩戴防護口罩成為一種科學有效的降低病毒傳播率的方法。佩戴口罩可以有效過濾和阻斷空氣中的病毒,為人們的工作和出行安全提供保障。如今,在地鐵、機場、火車站和工業廠房等人群眾多的公共場所,都有專人來檢查路過的人是否佩戴口罩。為了節省人力,避免漏檢,有必要開發一種自動檢測方法,檢測公共場所的個人是否正確佩戴口罩,這也有利于疫情的智能防控。
隨著深度學習和計算機視覺的快速發展,目標檢測技術已經可以被很好地運用在口罩佩戴的自動檢測中。經典的目標檢測算法包括單階段算法、兩階段算法和其他無錨算法,如Faster RCNN[1]、RetinaNet[2]、SSD[3]、YOLOv1[4]、CornerNet[5]等。現有的人臉和口罩檢測算法可以分為兩類。一類是追求快速推理速度的實時檢測方法,另一種是高性能的檢測方法,它優先考慮檢測的準確性。李澤琛等[6]提出了一種多尺度注意力學習的Faster R-CNN口罩人臉檢測模型,平均精度均值(mean Average Precision,mAP)達到90%以上,平均精度比較高,屬于第一類,但是檢測速度較慢,無法做到很好的實時性檢測。曾成等[7]提出一種基于YOLOv3改進的算法M_YOLOv3來進行口罩佩戴檢測,實驗結果表明,YOLOv3的檢測速度較快,但平均精度只有不到80%,屬于第二類,但經過改進,改善了小目標的問題,mAP可以達到88%以上。潘衛國等[8]提出通過基于YOLO的目標檢測算法實現對交通標志牌的實時檢測識別,通過改進,使得算法在檢測精度得到提升的同時,也充分滿足了實時檢測的要求,并得到了相關驗證。綜上,單階段的目標檢測算法經過改進,更適合應用于各種場景下的口罩佩戴實時檢測,精度不低,速度也快。
本文提出一種基于YOLOv5s的口罩佩戴實時檢測系統,先訓練好用于口罩檢測的達到預定標準精度的模型,再將該模型放入相關設備。該模型權重較小,推理速度快,可以很好地放入嵌入式設備中。該系統能夠實時地判斷人臉是否佩戴口罩,速度和準確性都比較高。可以通過在機場、超市和施工現場入口等人口流量高的地方部署相關設備,來實現對口罩佩戴的智能監測,從而有效提高疫情防控的效率。
YOLO系列等單階段的目標檢測算法普遍具有檢測速度快的優點,雖然比雙階段的目標檢測算法精度低,但經過改進,精度也完全滿足實時檢測的要求。YOLO系列自身也在不斷地完善和發展,在精度和檢測速度上的效果越來越好。YOLOv5作為YOLO系列比較先進的算法模型,與YOLOv4相比,模型輕量,有巨大的靈活性,可以很好地滿足口罩視頻圖像檢測實時性的要求。YOLOv5的網絡結構如圖1所示。YOLOv5算法根據網絡架構的深度和寬度分為4個大小不同的版本,具體包括YOLOv5s,YOLOv5m,YOLOv5l及YOLOv5x。YOLOv5s在COCO測試集與驗證集上面的AP指標為36.8,AP50指標為55.6。YOLOv5s算法在V100 GPU上的推理只需要2.2 ms,幀率為455 f·s-1。該網絡的模型大小僅為7.3 MB。相對地,YOLOv5x算法在V100 GPU上的推理速度是6.0 ms,幀率為167 f·s-1,模型的大小達到87.7 MB。可以看出,YOLOv5s網絡小,推理速度也很快,因此比較適合嵌入式設備使用,適合部署在單片機上,能夠在一定程度上解決目前大且復雜的模型難以被實際應用的問題。而且,其他三種模型都是在YOLOv5s基礎上修改yaml文件,進行加深加寬網絡操作,不需要修改大量的代碼。本文使用YOLOv5s,其他三種模型可以在此基礎上進行修改和精進。雖然YOLOv5s在實時性目標檢測方面有諸多優點,但是在檢測口罩時還存在錯檢漏檢率高、無法很好地識別小目標等問題。因此,需要針對這些問題進行改進。

圖1 YOLOv5的網絡結構
1.2.1 加入SE通道注意力機制
為了提高準確率,能識別到小目標或者較遠處的目標,檢測模型通常會加入注意力機制,讓網絡更加關注重要特征。
SENet作為較早的通道注意力機制,其目的是通過一個權重矩陣,從通道域的角度賦予圖像不同位置不同的權重,得到更重要的特征信息。SE模塊如圖2所示。SE模塊的操作主要為擠壓(Squeeze)和激勵(Excitation)。被加入的SE模塊就通過這些操作讓網絡更關注待檢測目標,提升網絡模型的整體效果。

圖2 SE模塊的示意圖
SE模塊是一個即插即用的模塊,它在YOLOv5s模型中的加入位置也是一個值得研究的話題。本文將SE模塊添加進主干部分的C3模塊之后,參數量引入較小。實驗結果顯示出了不錯的提升效果。
1.2.2 改進損失函數
對于目標檢測網絡來說,目標框回歸損失函數的選擇非常重要。損失函數經歷了一段時間的發展,也呈現出了幾種不錯的結果。對于YOLOv5s來說,它普遍采用的是GIOU_Loss作為Bounding box的損失函數。GIOU函數是最早出現的IOU函數改進版。GIOU損失函數的表達式為

式中:IOU為真實邊界與預測框的交并比,A為預測矩形框,B為真實矩形框,C為A和B的外接矩形。GIOU損失函數能很好地反映真實框與預測框的重合程度和遠近距離,一定程度上解決了IOU不能體現A和B兩者之間距離的關鍵問題。但是,它也存在著缺點,當目標框完全包裹預測框時,如圖3所示,GIOU會失去它的優勢,變得和IOU一樣,無法體現出A和B兩者的位置關系。

圖3 GIOU公式中A和B區域的位置關系
鑒于GIOU損失函數的局限性,本文用CIOU損失函數代替GIOU損失函數。因為CIOU的計算方法充分考慮了預測框和真實框之間的重疊面積、中心點距離和長寬比。使用CIOU損失函數,可以使YOLOv5s網絡在訓練時保證預測框更快地收斂[9]。本文訓練結果的對比,顯示出CIOU損失函數的優越性。所以本文將CIOU損失函數作為口罩檢測的損失函數,代替了GIOU損失函數。
本文口罩檢測系統的結構設計如圖4所示。系統以口罩檢測設備為核心,檢測設備可以為各類單片機或者嵌入式設備,本文選用的是NVIDIA Jetson TX2嵌入式平臺[10]。除此之外,系統還包含攝像頭、報警器、顯示屏幕、服務器以及存儲數據的數據庫。該系統通過攝像頭采集視頻流圖像,通過檢測設備實時識別出圖像中的人臉是否佩戴口罩,并通過報警器和顯示屏給出相應的結果,對未佩戴口罩的人做出警示。

圖4 系統結構設計圖
口罩檢測的流程如圖5所示。檢測設備通過YOLOv5目標檢測算法訓練好的口罩檢測模型對獲取到的圖像進行識別,當檢測到有人未佩戴口罩,報警器就會立馬發出警報,同時顯示屏幕會顯示出警告信息。當檢測到口罩已經佩戴,系統僅會在顯示屏幕上顯示。這些結果都會通過服務器上傳至存儲數據的數據庫,以方便相關人員查看。

圖5 檢測設備系統流程圖
本文數據集大部分來源于互聯網公開的數據集,還有少量自己拍攝和在公開視頻中截取的圖像。每張口罩數據集的圖片都有對應的標簽文件。標簽分為戴口罩的人臉和不戴口罩的人臉兩類,用mask和face表示。圖片總計2 000張,經篩選和隨意排序后,將圖片按3∶1∶1的比值劃分為訓練集、測試集和驗證集。訓練集為1 200張,測試集和驗證集均為400張。相關數據集圖片如圖6所示。

圖6 數據集照片
由于口罩檢測本質上是一項分類和定位任務,因此應使用典型指標進行評估,包括真陽性(TP)、真陰性(TN)、假陽性(FP)和假陰性(FN)。基于這些指標,精度(Precision)和召回率(Recall)的定義如下:

精度和召回率都是簡單地從一個角度來評價模型的好壞。它們的值越靠近1,模型的性能越好;越靠近0,模型的性能越差。為了綜合評價目標檢測的性能,一般采用平均精度均值mAP來進一步評估模型的好壞。
平均識別精度(Average Precision,AP),采用精度(Precision,P)和召回率(Recall,R)兩個值作為橫縱坐標,其所圍成的面積為平均識別精度,即為P-R曲線,如式(4)所示。mAP則為平均精度均值,一般以IOU為0.5來計算mAP,其中IOU如式(5)所示。式(5)中A代表預測的邊框,B代表目標實際的邊框。AP是計算某一類P-R曲線下的面積,mAP則是計算所有類別P-R曲線下面積的平均值,如式(6)所示。

本文的平均精度均值就是對佩戴口罩的人臉的平均識別精度和不戴口罩的人臉的平均識別精度求均值,即公式(7)。

PyTorch是目前難得的簡潔、優雅、高效且快速的框架,已經在深度學習框架中達到了一定的高度。在當前開源的所有框架中,PyTorch在靈活性、易用性、速度等方面占據絕對優勢[11]。因此,本文選擇PyTorch作為訓練框架來進行模型訓練。
首先,將數據集的jpg文件放入images文件夾,將txt文件放入labels文件夾,將標記完成的數據集圖片和標簽文件分別放入對應的訓練集、測試集、驗證集文件夾中。在data文件夾下創建一個新的yaml文件來標記數據集的位置、數據集的類別和目標名稱。數據集處理完成之后就可以進行模型訓練。在Anaconda3搭建的名為yolo5的虛擬環境中運行train.py進行模型訓練,迭代次數為100輪,batchsize設為4。
本文對YOLOv5s模型進行訓練,將口罩圖片數據通過輸入端先進行Mosaic數據增強操作提升模型的訓練速度和網絡的精度,其次進行自適應錨框計算和自適應圖片縮放,再次,通過主干網絡和Neck網絡對圖片進行切片操作,進行圖像特征的聚合等操作。最后在目標檢測結果的輸出階段,運用替換后的CIOU作為損失函數,通過加權nms后處理,進一步提升算法的檢測能力。
本文采用平均精度AP、平均精度均值mAP和P-R曲線這三種評價指標來評價所訓練的口罩檢測模型的性能優劣。AP和mAP越接近于1,模型的訓練效果越好。
本文用收集到的各種場景下的口罩數據集來進行口罩檢測系統的性能分析。將IoU設為0.5,計算每一類的所有圖片的AP,然后所有類別取平均,即mAP,由此得到基于YOLOv5s的口罩佩戴實時檢測模型的性能評價和對比。結果如表1和圖7、圖8所示。加入SE通道注意力機制后,較原始YOLOv5s網絡的總體mAP指標提升了3.9%,然后將CIOU損失函數替代GIOU損失函數后,又使該指標提升了1.1%,達到86.7%。改進后模型性能提升明顯。該模型的精度能滿足實時性口罩佩戴檢測的要求。

表1 口罩檢測模塊的改進結果對比

圖7 不同算法的P-R曲線

圖8 算法改進前后的效果對比圖
為了提高口罩佩戴檢測的效率,本文提出了一種基于YOLOv5s的口罩佩戴實時檢測系統設計方案。首先,對目標檢測模型進行了選擇和改進,選擇了適合于嵌入式設備的推理速度較快的YOLOv5s模型。對YOLOv5s網絡模型進行改進,加入了SE通道注意力機制,改進了目標框回歸損失函數。將改進的YOLOv5s模型進行訓練,精度達到預定標準,訓練完成后,得到最優模型。此系統將該模型部署到相關設備上以實現實際應用,實現了系統設計的目標。在未來的工作中,應該在保證模型輕量和檢測速度的基礎上,繼續提升模型的精度,實現對小目標和較遠處目標的精準識別。