王莉茹
(西藏大學(xué)信息科學(xué)技術(shù)學(xué)院,西藏 拉薩 850000)
截止到2022 年2 月底,全球累計確診新冠的人數(shù)已經(jīng)超過了4.3 億,累計死亡人數(shù)超過了590 萬。[1]新冠病毒主要存在于病人的呼吸道,并且它的傳染性很強(qiáng),所以人們在公共場所或人員聚集的地方容易感染,口罩可以在病原體通過口鼻時通過過濾材料形成一個物理阻隔,這樣可以一定程度的減少疾病的傳播,確診人員佩戴好口罩可以很好的不讓包含病原體的飛沫飛出,健康人員佩戴好口罩可以有效地隔斷包含病原體的飛沫進(jìn)入自己的呼吸道。[2]根據(jù)國家衛(wèi)生健康委在2020 年1 月30 日發(fā)布的《關(guān)于印發(fā)新型冠狀病毒感染不同風(fēng)險人群防護(hù)指南和預(yù)防新型冠狀病毒感染的肺炎口罩使用指南的通知》,佩戴好口罩可以起到更好的防護(hù)作用。[3]在疫情期間,及時佩戴好口罩可以有效地防控疫情,被感染的比例可以下降,但是如果疫情防護(hù)措施不能很好的落實,這樣疫情戰(zhàn)的戰(zhàn)線就會被拉長。[4]在公共場所人流量大的情況下,單純靠人來檢查口罩的佩戴情況不太現(xiàn)實,這時候機(jī)器快速檢測變得很重要。
目標(biāo)檢測大致可以分成兩大部分,第一部分是“傳統(tǒng)的目標(biāo)檢測”,第二部分是“基于深度學(xué)習(xí)的目標(biāo)檢測”。比如我們所熟知的V?J 檢測、HOG 檢測、DPM 算法,這些都是屬于傳統(tǒng)方法的,深度學(xué)習(xí)方法是包括單階段檢測算法與兩階段檢測算法。兩階段檢測算法按分類來對待,首先生成區(qū)域,然后進(jìn)行分類和校準(zhǔn),最后才得到結(jié)果。單階段檢測算法則是直接得到最終的結(jié)果。[5]YOLO 系列的算法是現(xiàn)階段目標(biāo)檢測較流行的算法,對于檢測和跟蹤來說,它是一種先進(jìn)的技術(shù)。它可以實時運(yùn)行,以深度學(xué)習(xí)為基礎(chǔ),可以解決各種檢測以及跟蹤問題。它在經(jīng)歷了幾代的改進(jìn)之后,不僅可以對視頻進(jìn)行實時的檢測,并且對于小目標(biāo)來說精確度也有所提升,所以現(xiàn)階段檢測口罩的佩戴情況,此算法非常適合。因此本文使用了YOLOv5算法來進(jìn)行在人流量大的情況下的實時口罩佩戴檢測。YOLOv5的網(wǎng)絡(luò)結(jié)構(gòu)圖,如圖1所示。
YOLO算法是把目標(biāo)檢測問題看成了一個回歸問題,它是直接通過單個的神經(jīng)網(wǎng)絡(luò)來得到和分類概率,也就是說YOLO 可以同時預(yù)測一個圖像在所有類中的所有邊界框。它的工作流程是縮放圖像、讓圖像可以通過全卷積神經(jīng)網(wǎng)絡(luò),然后利用極大值抑制去進(jìn)行篩選。[6]YOLO 算法也在后續(xù)的系列中逐步進(jìn)行不斷地改進(jìn),對于本次實驗來說,YOLO 算法很適合。
YOLOv3 算法是一種單階段目標(biāo)檢測算法,相對比二階段來說,單階段的檢測速度要快一些。首先是多尺度預(yù)測(類FPN),這種使得其算法在精度上有所提升。其次是在網(wǎng)絡(luò)結(jié)構(gòu)上的改變,Backbone 改成了Darknet?53,Darknet?53 與ResNet?101 或ResNet?152準(zhǔn)確率接近,但速度更快。最后是分類器?類別預(yù)測。
YOLOv4算法的話,相當(dāng)于一個“大雜燴”,它是把許多前人的研究成果加以結(jié)合并且做了適當(dāng)創(chuàng)新的算法,實現(xiàn)了速度和精度的完美平衡。可以說是利用組合技巧來提升了卷積神經(jīng)網(wǎng)絡(luò)(CNN)的準(zhǔn)確性,但是這些技巧具有局限性,只能在某些模型、某些問題或小型數(shù)據(jù)集上運(yùn)行??偟膩碚f,YOLOv4 架構(gòu)包括CSPDarknet53 主干,SPP 添加模塊,path?aggregation neck和YOLOv3(anchor based)頭。
YOLOv5 算法可以分為4 種網(wǎng)絡(luò),分別是YO?LOv5s、YOLOv5m、YOLOv5l 和YOLov5x。YOLOv5 用的是Mosaic 數(shù)據(jù)增強(qiáng),對多個圖像進(jìn)行拼接是用的隨機(jī)縮放、裁剪和排布的方式,這種數(shù)據(jù)增強(qiáng)的方法對檢測小目標(biāo)的效果相對還是不錯的,因為對于自己定義的數(shù)據(jù)集來說,其目標(biāo)識別框架通常都是要縮放原圖的尺寸,所以采用的錨框和圖片的縮放都是自適應(yīng)的。其backbone 部分用的是Focus 結(jié)構(gòu)和CSP 結(jié)構(gòu),從輸入中提取特征信息,CSP 結(jié)構(gòu)可以有效地解決其他大型卷積神經(jīng)網(wǎng)絡(luò)框架Backbone 中網(wǎng)絡(luò)優(yōu)化的梯度信息重復(fù)問題,將梯度的變化從頭到尾地集成到特征圖中,因此減少了模型的參數(shù)量和FLOPS 數(shù)值,既保證了推理速度和準(zhǔn)確率,又減小了模型尺寸。Nect部分用的和YOLOv4的一樣,都是用PANET 來聚合特征的,它是基于Mask R?CNN 和FPN 框架,也加強(qiáng)了信息的傳播。其采用了一種新的增強(qiáng)自下向上路徑的FPN結(jié)構(gòu),很好的改善了特征。Prediction部分用的是GIOU_Loss,其可以帶來了更快的收斂、更好的性能。
其中,YOLOv5s 的網(wǎng)絡(luò)最小,雖然精度與其他3個相比略差,但是其檢測速度是最高的,其他三種都是在YOLOv5s的基礎(chǔ)上不斷的加深和加寬網(wǎng)絡(luò)的,他們的精度也是依次提升的,但檢測的速度相對是慢的。因此用YOLOv5s是符合本文的設(shè)計理念。
本實驗所使用的口罩?jǐn)?shù)據(jù)集是從網(wǎng)絡(luò)上爬取得到的,數(shù)據(jù)集中包括各種沒有佩戴口罩以及佩戴口罩的人臉圖片,此數(shù)據(jù)集里面一共有1600 張圖片,本實驗按照7:1 的比例來隨機(jī)劃分成訓(xùn)練集和測試集,所以訓(xùn)練集里包括1200 張圖片,測試集里包括400 張圖片。訓(xùn)練集和測試集中均包含復(fù)雜情況的樣本,所以是比較符合真實的情況,是可以準(zhǔn)確反映現(xiàn)實環(huán)境的準(zhǔn)確性??紤]到需要速度快的檢測算法,本實驗選擇用YOLOv5 算法中的YOLOv5s 來作為口罩佩戴檢測的算法,并且在實驗訓(xùn)練過程中,對模型進(jìn)行不斷地適當(dāng)微調(diào)來改善訓(xùn)練速度。
本實驗用YOLOv5s進(jìn)行訓(xùn)練時,將圖片尺寸縮放為640×640,設(shè)置初始學(xué)習(xí)率為0.01,設(shè)置batch的大小為16,設(shè)置epoch 為200來進(jìn)行訓(xùn)練,采用“慢?快?慢”來調(diào)整學(xué)習(xí)率。
本實驗使用平均精度均值(Mean Average Preci?sion,mAP)、召回率(Recall)和精確率(Precision)來作為此次任務(wù)的衡量指標(biāo)。下面對這三個指標(biāo)進(jìn)行簡單的解釋,其中平均精度均值表示在不同閾值(閾值在0.5 和0.5~0.95)上的平均mAP 值。召回率是正確判定為戴口罩的圖片占全樣本中總戴口罩的圖片的比例。精確率表示在所有識別的圖片(識別正確佩戴口罩和識別錯誤佩戴口罩的圖片)中,識別正確佩戴口罩占所有識別出來的圖片的比例。
本實驗將YOLOv5s、YOLOv3 和YOLOv4 算法在檢測人臉是否佩戴好口罩這個任務(wù)上的性能進(jìn)行了對比,可以從下表中看到這3 個算法在同一個數(shù)據(jù)集上的檢測性能對比情況。
從表1中可以看出訓(xùn)練和測試都在同一個數(shù)據(jù)集上,本實驗使用的算法(YOLOv5s 算法)的precision、recall、mAP 分別為85.3%、82.8%、83.7%,均高于YO?LOv3和YOLOv4檢測所得出的結(jié)果。
表1 不同算法在同一數(shù)據(jù)集上的測試結(jié)果
訓(xùn)練集在進(jìn)行200個epochs結(jié)束之后會生成兩個weight 文件,一個是best.pt,一個是last.pt,本實驗把best.pt 文件作為測試集的權(quán)重文件來進(jìn)行測試,下圖分別是用YOLOv5s 算法的測試集結(jié)果的其中幾張圖片,在單人有佩戴口罩、多人有佩戴口罩、多人沒有佩戴口罩這三種情況下都有很好的檢測結(jié)果。
本文還可以使用電腦的攝像頭來進(jìn)行實時檢測口罩的佩戴情況,這時候只需要把datasets.py 中if′youtube.com/′ in s or ′youtu.be/′ in s:# if source is YouTube video 改成if ′youtube.com/′ in str(s) or ′youtu.be/′in str(s):#if source is YouTube video,再把detect.py中的source的參數(shù)改成0就可以了。
本文對檢測口罩的佩戴情況進(jìn)行了研究,提出基于YOLOv5s算法的檢測是否佩戴口罩,它可以反映在真實情況下口罩佩戴的情況,其最后得到的精確率、召回率、平均精度均值分別是85.3%、82.8%、83.7%,均高于YOLOv3 和YOLOv4 這兩個算法的檢測結(jié)果,所以達(dá)到了本文此次任務(wù)的目標(biāo)。
本文提出的算法可以用在真實環(huán)境下進(jìn)行口罩佩戴的檢測,可以很好的降低人工成本,還可以提醒大家佩戴好口罩,保護(hù)好大家的出行安全。但需要承認(rèn)的是檢測過程中還會出現(xiàn)一些漏檢的現(xiàn)象,這方面還有待提升,筆者在后續(xù)的研究中將會在這方面繼續(xù)對本文算法進(jìn)行改進(jìn)之后再進(jìn)行檢測,做好進(jìn)一步的改進(jìn)和提升。