陳志琳,齊華,王相超
(西安工業(yè)大學電子信息工程學院,陜西西安 710021)
新冠疫情在全球范圍內(nèi)蔓延,對人們的生命安全造成了極大的威脅。新型冠狀病毒主要利用空氣中的飛沫、氣溶膠等載體進行傳播,所以在公共場合等人群密集的場所佩戴口罩可以起到很好的預(yù)防作用。由于人們對于佩戴口罩有著不同的理解,所以在公共場合佩戴口罩不僅需要人們自覺遵守,還需要采取相應(yīng)手段進行監(jiān)督管理。目前針對口罩佩戴情況的檢查主要采用人工方式,這樣的方式耗費人力,且容易產(chǎn)生漏檢情況。
近年來,隨著深度學習的快速發(fā)展,以RCNN[1-2]、Fast-RCNN[3-5]、SSD[6-8]、YOLO[9-12]等為主的深度學習算法在目標檢測等多個領(lǐng)域都大放異彩[13]。該文通過研究相關(guān)目標檢測算法,發(fā)現(xiàn)很多深度學習模型可以勝任口罩佩戴檢測工作。文獻[14]通過改進RetinaFace 算法來實現(xiàn)口罩佩戴檢測,將改進的注意力機制引入特征提取網(wǎng)絡(luò)中,取得了不錯的效果,平均精度均值達到87.7%,幀率為18.3 幀/s;文獻[15]通過優(yōu)化FC 層來改進VGG-19網(wǎng)絡(luò)模型,克服了多目標場景下重檢、漏檢、錯檢等不足;文獻[16]以YOLOv3 算法為基礎(chǔ),引入了空間金字塔池化結(jié)構(gòu),利用特征融合策略實現(xiàn)了特征增強,進而提高了檢測精度。
該文以深度學習算法YOLOv5為基礎(chǔ),對YOLOv5s模型增加了檢測層,提高了對小目標的檢測率,并將模型部署至Jetson nano 人工智能開發(fā)板,在口罩佩戴檢測方面取得了較好的效果。
YOLOv5 是一種單階段目標檢測算法,相較于YOLOv4 提出了一些改進思路[17-20]。YOLOv5 系列擁有s、m、l、x 四種網(wǎng)絡(luò)模型,它們除層深與寬度控制有所區(qū)別外,擁有著相同的配置文件,而YOLOv5s 是其中最為簡潔的網(wǎng)絡(luò),其結(jié)構(gòu)與YOLOv4 具有很多相似之處,總體上可分為Input、Backbone、Neck 和Head四部分。其網(wǎng)絡(luò)結(jié)構(gòu)如圖1 所示。
首先,在輸入輸出部分,輸入端采用了Mosaic 數(shù)據(jù)增強方式,同時還加入了自適應(yīng)錨框計算功能,其不再需要每次單獨計算初始錨框值,而是在每次訓(xùn)練時會自適應(yīng)地計算最佳錨框值。輸出端部分選取了GIOU_Loss 作為Bounding box 的損失函數(shù),在后續(xù)對目標框篩選時采用了加權(quán)nms 方式,以此來獲得最優(yōu)目標框。
骨干網(wǎng)絡(luò)部分加入了Focus 結(jié)構(gòu),F(xiàn)ocus 結(jié)構(gòu)的關(guān)鍵是進行切片操作,從高分辨率圖像中周期性地抽出像素點重構(gòu)到低分辨率圖像中,將圖像相鄰的四個位置進行堆疊,聚焦圖像的寬、高維度信息到通道空間,即將輸入通道擴充了4 倍,拼接起來的圖片相對于原先的RGB 三通道模式變成了12 個通道,最后,將新得到的圖片再經(jīng)過卷積操作,最終得到新的采樣特征圖。這樣的設(shè)計在減少計算量的同時加快了處理速度。此外,還構(gòu)建了兩種CSP 結(jié)構(gòu),CSP1_X結(jié)構(gòu)主要應(yīng)用于Backbone 網(wǎng)絡(luò)中,CSP2_X 結(jié)構(gòu)主要應(yīng)用于Neck 結(jié)構(gòu)中。Neck 中采用了FPN+PAN 的結(jié)構(gòu),加強了網(wǎng)絡(luò)特征的融合能力。
對YOLO 算法而言,初始錨框的長寬設(shè)置會根據(jù)不同類型的數(shù)據(jù)集而做出相應(yīng)的改變。在網(wǎng)絡(luò)訓(xùn)練中,初始錨框的設(shè)置是其中非常重要的一環(huán),預(yù)測框的輸出主要依據(jù)于初始錨框,輸出的結(jié)果會與真實框groundtruth 進行比對,從而計算得出二者之間的差距,再反向進行更新,最終替換網(wǎng)絡(luò)中的參數(shù)。對于YOLOv5s 原始模型而言,其網(wǎng)絡(luò)結(jié)構(gòu)中只有三個檢測層,分別對應(yīng)三組初始化Anchor 值。為了改善對較小目標的檢測,減少漏檢情況,在此基礎(chǔ)上又增加了一組Anchor 值,如表1 所示。
表1 改進錨框尺寸
在網(wǎng)絡(luò)結(jié)構(gòu)的Head 部分,增加幾個操作層,繼續(xù)對特征圖進行上采樣等處理,使得特征圖繼續(xù)擴大,同時將獲取到的特征圖與骨干網(wǎng)絡(luò)中第二層特征圖進行Concat 融合,以此獲取更大的特征圖來進行小目標檢測。在檢測層部分增加一個小檢測層,一共使用四層進行檢測。
在目標檢測的后處理過程中,對于許多目標框的篩選通常需要非極大值抑制(Non-Maximum Suppression,NMS)操作。在相同參數(shù)的條件下,將NMS 中的交并比(Intersection-over-Union,IoU)修改成DIOU_nms,對一些被遮擋的重疊目標進行檢測,將會具有一定的優(yōu)化和改善效果。
在數(shù)據(jù)集的制作方面,實驗通過從網(wǎng)上搜取了部分公開圖片,并在公開人臉數(shù)據(jù)集WIDER FACE中抽取一部分從而組成了共12 659 張圖片的數(shù)據(jù)集。數(shù)據(jù)集共分為兩個標簽:其中,no mask 表示未佩戴口罩,mask 表示人員已佩戴口罩。該實驗采用可視化標注工具labelImg 來對圖片進行標注,數(shù)據(jù)集遵循Pascal_VOC 格式,標注完成將自動生成相應(yīng)的xml格式的標注文件,具體圖片標注如圖2 所示。
該實驗使用Ubuntu18.04 操作系統(tǒng),采用Tensor Flow 深度學習框架,GPU 加速工具為CUDA 11.0。訓(xùn)練環(huán)境具體配置如表2 所示。
在對YOLOv5 網(wǎng)絡(luò)進行訓(xùn)練時,將訓(xùn)練集與測試集自動按9∶1 進行劃分,該訓(xùn)練使用隨機梯度下降算法來實現(xiàn)網(wǎng)絡(luò)模型訓(xùn)練的優(yōu)化。訓(xùn)練參數(shù)設(shè)置如表3 所示。
作為評估一個模型性能的重要指標,其查準率(Precision)、損失函數(shù)(GIOU_Loss)、召回率(Recall)以及平均精度值(mAP)如圖3 所示。
查準率是指所預(yù)測的正樣本中,預(yù)測正確的正樣本占總預(yù)測為正樣本的比例;而召回率則是所預(yù)測的正樣本中預(yù)測正確的正樣本占實際總正樣本的比例,分別如式(1)、(2)所示,其中TP、FP 和FN 分別代表正樣本預(yù)測為正樣本的數(shù)量、負樣本被預(yù)測為正樣本的數(shù)量以及正樣本被預(yù)測為負樣本的數(shù)量。實驗中查準率與召回率均趨近于0.9。
損失函數(shù)采用GIOU_Loss 作為Bounding Box 的損失,GIOU_Loss 函數(shù)增加了方法來應(yīng)對相交尺度的衡量問題,有利于解決邊界框有時出現(xiàn)不重合的問題。從圖3 中可以看出,迭代到400 次時,損失函數(shù)達到了0.01 左右,并逐漸趨于穩(wěn)定。mAP 及所有類別平均精度的平均值計算方法如式(3)所示:
式中,K表示類別數(shù)。從圖中的性能評估曲線可以看出,整體的訓(xùn)練效果比較理想。
P-R 曲線即是表示查準率與召回率關(guān)系的曲線,是評估模型性能的重要指標之一,可以更直觀地看出模型的性能。圖4 分別為改進前后的P-R 曲線,橫、縱軸分別代表了召回率Recall與查準率Precision。
P-R 曲線與其橫、縱軸之間所圍成的面積大小常被用來作為比較模型性能強弱的重要依據(jù)之一,如果其中一條P-R 曲線被另一條曲線完全分割并被包住,則可以準確地斷言后者的模型性能遠優(yōu)于前者;如果二者之間存在交叉的情況,還可以利用平衡點(BEF)進行判斷。平衡點是P=R 這條直線與曲線的交點,正如圖中虛線與曲線的交點,如果這個值較大,則說明性能較好。顯而易見,無論是從面積還是平衡點的取值來看,改進后的YOLOv5 模型的性能都強于改進前的模型。
改進前后模型的實際測試效果對比如圖5 所示。測試共分為三組,自上而下分別從大、中、小三種目標的檢測進行對比測試,其中左側(cè)為改進前的模型測試效果,右側(cè)為改進后的模型測試效果。
如圖5 所示,將改進前后的檢測效果進行了對比。在對第一組的大目標進行測試時,改進前后的模型并沒有較為明顯的差異,二者均取得了較好的檢測效果;而在第二、三組圖片中,在對中小目標進行檢測時,改進后的模型測試結(jié)果相較于改進前的準確率均有較為明顯的提升,并檢測到了改進前模型所漏檢的目標。由此可以看出,對于包含較小尺度目標的檢查,改進算法的效果已經(jīng)有了比較明顯的改善。
實驗最終通過準確率來衡量測試效果,模型準確率的計算如式(4)所示,即檢測正確的樣本數(shù)在樣本總數(shù)中所占的比例。
經(jīng)過在測試集上面的測試,改進后的模型準確率達到了93.5%,相較于改進前提高了2.9%。改進前后的數(shù)據(jù)對比如表4 所示。
表4 實驗數(shù)據(jù)對比
YOLOv5s 作為一個輕量化模型,非常適合在移動端部署,該文在NIVDIA 的Jetson Nano 開發(fā)板上部署測試。Jetson Nano 是一款由英偉達公司推出的小型人工智能計算機,雖然有著酷似樹莓派的精致小巧的外觀,但卻擁有更為強大的性能。它的計算性能可達472 GFLOPS,并且其功耗僅有5~10 W。
作為一個小型但功能強大的AI 系統(tǒng),NVIDIA Jetson Nano 可以同時并行運行多個神經(jīng)網(wǎng)絡(luò),包含許多原生的機器學習框架,如PyTorch、Keras、TensorFlow、Caffe/Caffe2、MXNet等。這些神經(jīng)網(wǎng)絡(luò)可廣泛應(yīng)用于設(shè)計及實現(xiàn)強大的圖形分析功能,如圖像分類、對象檢測和定位、姿態(tài)估計、視頻增強,語義分割和智能分析等,還可用于構(gòu)建自主機器人和復(fù)雜的人工智能系統(tǒng)。Jetson Nano 硬件設(shè)備的具體配置如表5 所示。
表5 Jetson Nano配置
文中部署使用TensorRT 來加速推理過程,部署成功后對其進行測試,圖6 為截取的其中一幀圖像,圖7 為測試過程中的實時幀率,可以看到幀率基本穩(wěn)定在14FPS 左右。因為人眼舒適放松時可視幀數(shù)是24 幀/s,所以這個幀率還難以達到實時流暢的狀態(tài)。為了解決這個問題,在訓(xùn)練時對圖片進行了相應(yīng)的裁剪,裁剪后的實時幀率如圖8 所示,可以穩(wěn)定在27 FPS 左右,完全能夠滿足實時性要求。
該文提出了一種基于YOLOv5s 的口罩佩戴檢測方法,并通過增加檢測層對原有模型進行了改進,改善了對較小目標的檢測效果,減少了漏檢率,準確率提高了2.9%。文中將模型成功部署至NVIDIA Jetson Nano 開發(fā)板,經(jīng)實驗測試,模型的準確率高且能夠滿足實時性要求,說明該文方法具有一定的優(yōu)勢。YOLOv5 本身作為輕量化模型,還能否對其進行模型剪枝和量化,進而提高推理速度,是今后的一個研究方向。