蔣潤熙,阿里甫·庫爾班,耿麗婷
新疆大學 軟件學院,烏魯木齊 830046
近些年越來越多在人工智能上的研究被應用到生活中。安全帽是工人在施工現(xiàn)場的重要防護工具,但許多工人因安全帽缺乏舒適感而選擇不佩戴,這將危及工人的生命安全[1]。因此實時監(jiān)控工人是否正確佩戴安全帽十分重要,但工地上作業(yè)環(huán)境危險,不適合用人力進行實時監(jiān)控,所以考慮將機器視覺應用其中,代替人力進行安全帽佩戴檢測。這可以一定程度上預防安全事故的發(fā)生,保證工人的安全。
安全帽檢測由于施工環(huán)境復雜、攝像頭拍攝角度、攝像頭距離目標的距離遠近等問題,國內(nèi)外許多學者對其進行研究。劉曉慧等[2]利用膚色檢測定位人臉區(qū)域,將Hu矩作為圖像的特征向量,利用支持向量機(Support Vector Machine,SVM)作為分類器對安全帽進行識別。馮國臣等[3]選取SIFT角點特征和顏色統(tǒng)計特征的方法進行安全帽檢測。Park等[4]通過HOG特征提取來檢測人體,而后通過顏色直方圖識別安全帽。李琪瑞[5]提出研究如何定位頭部區(qū)域以及安全帽顏色特征的計算來檢測安全帽。雖然以上方法可以有較好的精度需求,但傳統(tǒng)檢測算法存在特征提取困難、泛化能力差等問題,還需進一步的改進。由于神經(jīng)網(wǎng)絡的發(fā)展,深度學習在目標檢測領域已有很好的效果,許多研究者進行研究[6]。
基于深度學習的目標檢測算法一般分為雙階段檢測和單階段檢測算法。雙階段檢測算法包括物體定位和圖像分類兩個步驟。主要的檢測算法包括RCNN[7]、SPP-net[8]、Fast-RCNN[9]、Faster-RCNN[10]、Mask R-CNN[11]。單階段檢測是基于回歸的檢測算法,主要使用YOLO[12]系列和SSD[13]算法。雙階段檢測算法的準確度高,但所需檢測速度慢。與之相反單階段檢測雖然準確率略遜,但在速度方面有較大的提升,符合本文需求。因此本文將使用單階段算法進行檢測。由于SSD網(wǎng)絡層數(shù)不深,對特征提取不充分,所以本文使用YOLO作為檢測網(wǎng)絡[14]。許多學者也將深度學習方法應用在安全帽檢測中。張明媛等[15]使用Faster-RCNN對安全帽進行識別。王兵等[16]改進GIoU計算方法并結(jié)合YOLOv3進行安全帽檢測。施輝等[17]在YOLOv3中添加特征金字塔進行多尺度的特征提取,獲得不同尺度的特征圖,以此實現(xiàn)安全帽的檢測。盡管上述使用的網(wǎng)絡可以實現(xiàn)對安全帽的自動檢測,同時準確率高,但以上網(wǎng)絡都是大型復雜網(wǎng)絡,需要足夠的算力支持??紤]到在實際的檢測場景中,要求將算法部署在移動端或者嵌入式設備上,而移動端的計算能力遠不如計算機等大型設備,不足以支撐大型神經(jīng)網(wǎng)絡所需的計算。
因此為適應其有限的計算能力,本文基于Inverted Resblock結(jié)構(gòu)重構(gòu)新的主干特征提取網(wǎng)絡,跟大型網(wǎng)絡相比該網(wǎng)絡減少了參數(shù)量和浮點數(shù)計算,對算力的需求大大降低。同時,大多數(shù)移動端設備無法使用GPU來處理數(shù)據(jù),所以本文還考慮算法在CPU上的處理速度。這對網(wǎng)絡的輕量化要求更高,因此需進一步壓縮模型。
目前主要使用的模型壓縮方法包括:知識蒸餾、低秩分解、參數(shù)量化、參數(shù)剪枝等。知識蒸餾由Hinton等[18]提出,是將預訓練好的大型網(wǎng)絡作為教師模型,并用其輸出作為網(wǎng)絡結(jié)構(gòu)較小的學生模型的輸入,可以使得學生模型具有和教師模型相當?shù)奶幚砟芰?,以此進行模型壓縮,但該方法訓練起來復雜,并且用教師模型SoftMax層的輸出來指導,只限于分類任務,不適合本文的需求[19]。Denton等[20]提出低秩分解,通過奇異值分解技術(shù)來壓縮模型。雖然該方法將模型壓縮成原先的3倍,但只壓縮全連接層,沒有對卷積層進行處理。參數(shù)量化[21]是將神經(jīng)網(wǎng)絡中使用的32位浮點數(shù)經(jīng)過線性變化轉(zhuǎn)化為8位整型數(shù)。雖然參數(shù)量化可以減少存儲空間,并加快網(wǎng)絡運算速度。但需設計專門的系統(tǒng)框架,靈活度不高。相反參數(shù)剪枝[22]方法,不僅靈活度高,而且無需訓練復雜網(wǎng)絡,直接對訓練好的網(wǎng)絡進行剪枝。因此本文將采用參數(shù)剪枝方法對網(wǎng)絡進行壓縮。
在實際工程需求中,不僅需要網(wǎng)絡有較好的精度,更重要的是網(wǎng)絡的推理速度與實時性還應滿足需求。為提高推理速度,本文將卷積層和BatchNormalization(BN)層融合,更好地滿足實時檢測的需求。
YOLOv5是Ultralytics公司提出的目標檢測網(wǎng)絡,并有v5s、v5m、v5l、v5x四種不同大小的模型,v5s是其中網(wǎng)絡深度和寬度最小的模型,權(quán)重大小僅27 MB。對比YOLO系列中具有代表的YOLOv3[23]模型,其權(quán)重文件大小達到246 MB,是YOLOv5s的9.1倍,且在檢測640×640大小的圖像時參數(shù)量達到61.9×106、浮點運算超過156×109,而越小的權(quán)重對移動端的性能要求也越低,部署起來越方便[24],所以YOLOv5s比YOLOv3有更大的優(yōu)勢。YOLOv5s網(wǎng)絡主要使用BottleneckCSP結(jié)構(gòu),結(jié)構(gòu)如圖1所示。
圖1 BottleneckCSP結(jié)構(gòu)Fig.1 BottleneckCSP structure
BottleneckCSP結(jié)構(gòu)分為兩部分,第一部分進行Bottleneck操作,其是一種經(jīng)典的殘差結(jié)構(gòu)[25],它經(jīng)過一次1×1和3×3的卷積操作后,將卷積結(jié)果與輸入相加。另一部分通過1×1卷積進行降維,減少一半通道數(shù)。最后兩者合并輸出。YOLOv5系列中,將通過深度和寬度兩個參數(shù)來控制網(wǎng)絡結(jié)構(gòu)大小。在v5s中Bottleneck操作只做一次,而v5l的深度是v5s的三倍,所以將進行三次Bottleneck操作。BottleneckCSP同理,也會受深度參數(shù)的影響。
MobileNetv2[26]是兼并輕量化、速度和準確率的一種專門針對移動設備而提出的神經(jīng)網(wǎng)絡。主干由Inverted Resblock結(jié)構(gòu)塊構(gòu)成,結(jié)構(gòu)主干如圖2所示。
圖2 Inverted Resblock結(jié)構(gòu)Fig.2 Inverted Resblock structure
Inverted Resblock的提出是文獻[26]中發(fā)現(xiàn)Residual block使用的激活函數(shù)ReLU在低維時可用信息較少,容易造成信息丟失,而在高維度運算時,丟失的信息相對變少,因此構(gòu)造出該結(jié)構(gòu)。Inverted Resblock中先利用1×1卷積升維,再通過3×3的深度可分離卷積DWConv降低計算參數(shù)量,之后通過1×1卷積降維,最后將結(jié)果和輸入相接。
通道剪枝是在已訓練好的模型基礎上對網(wǎng)絡進行稀疏訓練;而后根據(jù)權(quán)值的絕對值進行排序;最后設定適合的閾值或剪枝率,如果權(quán)值小于設定的范圍就會被剪枝。由于剪枝后模型會損失一定精度,還需要對剪枝后的網(wǎng)絡進行微調(diào)來恢復網(wǎng)絡性能。模型壓縮步驟如圖3所示。
圖3 模型壓縮步驟Fig.3 Model compression step
1.3.1 稀疏訓練
稀疏訓練通過對BN層進行L1正則化訓練,使BN層的權(quán)值盡可能趨向于0,被稀疏的權(quán)值將重新分配到網(wǎng)絡的其他有效層中。稀疏訓練將直接影響剪枝后的模型是否滿足所需性能。稀疏訓練的損失函數(shù)公式如下:
其中,(x,y)是訓練數(shù)據(jù)的輸入和輸出。第一項為卷積層訓練的損失函數(shù)。后一項中,γ為BN層的縮放因子,通過改變γ的初始值和訓練γ進行網(wǎng)絡稀疏。g(γ)是縮放因子的損失函數(shù),來評估縮放是否合理。由于本文使用L1正則化進行稀疏,因此g(γ)=|γ|。λ用于平衡前后兩項的損失。經(jīng)過稀疏訓練后,網(wǎng)絡將變得更加密集,而后通過剪枝,得到更小的網(wǎng)絡,與此同時網(wǎng)絡性能卻沒降低,甚至變得更好。Dettmers等[27]對該現(xiàn)象進行了說明,表示稀疏網(wǎng)絡學習的是更一般、更大范圍的特征,有更好的泛化能力。
1.3.2 剪枝與微調(diào)
通過稀疏訓練后,網(wǎng)絡的BN層中大部分通道數(shù)的權(quán)值都將趨近于0,此時這些層對網(wǎng)絡的貢獻隨之降低,剪枝后不會造成較大的性能損失。文獻[28]通過L1正則化對網(wǎng)絡進行稀疏;然后對參數(shù)進行排序;最后設定一定大小的剪枝率,將小于設定值的通道剪除。但如果網(wǎng)絡的一層中所有通道權(quán)重的絕對值都小于設定閾值,此時該層的所有通道都會被剪枝,這樣網(wǎng)絡結(jié)構(gòu)就被破壞。對于上述的情況本文選擇保留權(quán)重的絕對值最大的一層通道,以此來保證網(wǎng)絡結(jié)構(gòu)的完整。
網(wǎng)絡在剪枝后,可以有效減少過擬合,但精度將存在一定程度的丟失,本文通過微調(diào)來恢復精度。微調(diào)的方式一般分兩種,一種是逐層剪枝,剪枝完后重新訓練,重復多次進行微調(diào),但此方法需要迭代多次,尤其在網(wǎng)絡結(jié)構(gòu)更深時需消耗大量的計算資源。因此本文選擇另一種方式,一次性對所有BN層進行剪枝,然后重新訓練來進行微調(diào)恢復精度。
BN層的存在可以使訓練更穩(wěn)定,同時有效防止過擬合。因此本文的每層卷積層后面都添加了一層BN層。為加快網(wǎng)絡在CPU上的推理速度,本文考慮將卷積層和BN層融合[29]。對于Batch中的第i個樣本,令輸入樣本為x i,其經(jīng)過BN層后輸出為yi。BN層公式如下:
其中,μ為Batch中輸入樣本的均值,σ2為Batch內(nèi)輸入樣本的標準差,ε為一個極小常數(shù),用來消除除零錯誤。γ、β為訓練參數(shù),通過損失函數(shù)來改變。在神經(jīng)網(wǎng)絡的訓練過程時μ、σ2、γ、β都是變量,但在訓練完成后這四個參數(shù)都被確定。因此在進行推理時,BN層的公式可以變?yōu)椋?/p>
其中令:
則:
因此在網(wǎng)絡進行推理時,可以把BN層當作線性操作。而對于卷積層的輸入輸出公式如下:
其中,w和c分別表示卷積層的權(quán)重和偏置。由于式(6)、(7)都是線性表達,因此本文得出可以將卷積層和BN層融合起來,公式如下:
將卷積層與BN層相互融合,在降低參數(shù)量的同時減少推理時網(wǎng)絡的深度、加快模型推理速度。
為解決在移動端和嵌入式設備算力不足無法部署大型網(wǎng)絡的問題,本文從權(quán)重大小、計算量、檢測速度和精確度等方面考慮,提出HourGlass結(jié)構(gòu),并用該結(jié)構(gòu)替換YOLOv5s的主干網(wǎng)絡得到HourGlass-YOLO(HGYOLO)。同時為適應移動端有限的算力,對網(wǎng)絡使用通道剪枝進一步進行減少網(wǎng)絡參數(shù)量。融合卷積層和BN層提高檢測的速度,以便更好地滿足實時性的需求。
Inverted Resblock結(jié)構(gòu)在輕量化網(wǎng)絡方面有較好的性能表現(xiàn),但Daquan等[30]解釋Inverted Resblock結(jié)構(gòu)存在梯度混淆的情況,同時1×1卷積會減少空間信息。因此根據(jù)Inverted Resblock結(jié)構(gòu)中存在的問題,本文重建新的主干網(wǎng)絡HourGlass結(jié)構(gòu),如圖4所示。
圖4 HourGlass結(jié)構(gòu)Fig.4 HourGlass structure
HourGlass結(jié)構(gòu)中先進行3×3的DWconv,再利用1×1卷積降維,降維后進行3×3的DWconv,然后用1×1卷積重新升維,最后將結(jié)果和輸入相接。因為Inverted Resblock存在梯度混淆,所以本文重新使用Residual block。又使用1×1卷積會減少空間信息,因此在輸入后加入一個3×3的DWconv來獲取更多的空間信息。而針對Residual block存在的激活函數(shù)在低維時信息丟失的問題,本文將其設置在第一個DWconv和最后一個1×1卷積中來解決,以此構(gòu)建新的網(wǎng)絡HourGlass。該結(jié)構(gòu)的公式描述如下:
其中,F(xiàn)表示輸入張量,G表示輸出張量,Φi,p、Φi,d分別表示第i次的1×1卷積和3×3深度可分離卷積。HourGlass這種設計結(jié)構(gòu)讓更多的空間信息傳入神經(jīng)網(wǎng)絡,使深度可分離卷積可以進行更豐富的特征提取。
將YOLOv5s的主干網(wǎng)絡替換為HourGlass結(jié)構(gòu)。改進后的HG-YOLO網(wǎng)絡,如圖5所示。
圖5 改進后的網(wǎng)絡結(jié)構(gòu)Fig.5 Improved network structure
網(wǎng)絡輸入為640×640大小的圖片,主干網(wǎng)絡除第一層為Conv層外,其余由HourGlass結(jié)構(gòu)構(gòu)成。其參數(shù)分別表示輸出通道數(shù)、步長和是否進行升維。除第一個HourGlass,其余HourGlass結(jié)構(gòu)都進行6倍的升維操作。網(wǎng)絡的輸出部分沿用YOLOv5s的輸出,通過特征融合[31]的方式對20×20、40×40、80×80三個不同尺度的圖片進行預測。
本實驗的運行環(huán)境為Windows 10操作系統(tǒng),通過Pytorch深度學習框架實現(xiàn)HG-YOLO模型算法。硬件配置:Nvidia GeForce GTX1650 GPU、AMD Ryzen54600H CPU。本文所用的數(shù)據(jù)集是SafetyHelmetWearing,其中部分的人臉數(shù)據(jù)來自SCUT-HEAD數(shù)據(jù)集,并使用PASCAL VOC的標記方式對數(shù)據(jù)進行標記并訓練。根據(jù)實際場景,本文對未佩戴安全帽、佩戴安全帽和人進行檢測,共7 577張圖片,其中訓練集6 062張,測試集1 212張,驗證集303張。由于施工環(huán)境的復雜,并且SCUT-HEAD數(shù)據(jù)集中的人臉數(shù)據(jù)絕大部分都是小目標物體,導致檢測難度大大增加,樣式如圖6所示。
圖6 SafetyHelmetWearing數(shù)據(jù)集Fig.6 SafetyHelmetWearing dataset
對HG-YOLOv5進行稀疏訓練,盡可能將BN層的權(quán)值稀疏到0。但稀疏訓練是一個追求平衡的過程,因為本文既想將更多BN層稀疏到0,也想在剪枝微調(diào)后恢復足夠的精度。同時稀疏訓練將直接影響最后的結(jié)果,如果網(wǎng)絡稀疏程度不夠,可能很多權(quán)值不為0的通道被剪除,丟失大量信息。但稀疏的太過密集,剪枝時會刪除過多通道,可能導致微調(diào)后無法恢復足夠的精度,所以尋找一個合適的稀疏率(sparse learning,sl)是其關(guān)鍵一步。本文選擇三個不同的稀疏率0.001、0.002、0.003進行對比。稀疏過程中BN層的變化,如圖7所示。其中圖7(a)、(b)、(c)分別展示稀疏率0.001、0.002、0.003的BN層的變化過程,經(jīng)過100輪的迭代訓練后,BN層的權(quán)重都被壓縮,逐漸靠近0。
圖7 不同稀疏率下BN層的變化Fig.7 Changes of BN layer under different sparsity rates
稀疏訓練結(jié)束后,對模型進行剪枝。剪枝前需設置剪枝率,通道權(quán)重的絕對值小于設定剪枝率對應的閾值時則刪除,且與之相連的通道也將刪除。但如果一層中所有通道的權(quán)值都小于閾值,則保留該層權(quán)值最大的通道,以保證網(wǎng)絡結(jié)構(gòu)的完整性。剪枝完成后,再通過微調(diào)恢復精度。本文將評估原網(wǎng)絡HG-YOLOv5和網(wǎng)絡剪枝微調(diào)后的結(jié)果,評估指標包括:精確度(P)、召回率(R)、平均精度(mAP)、稀疏后網(wǎng)絡對應權(quán)值的最小值(Min)與最大值(Max)、閾值(threshold)、網(wǎng)絡參數(shù)量(parameters)和浮點數(shù)(GFLOPS),結(jié)果如表1所示。
表1中,首先將MobileNetv2的主干結(jié)構(gòu)替換YOLOv5s的主干得到MobileNet-YOLOv5與改進的新主干網(wǎng)絡HG-YOLOv5進行對比,雖然兩者在各個指標上沒有太多的差別。
表1 原網(wǎng)絡和剪枝后的指標對比Table 1 Comparison of original network and index after pruning
但本文進一步對比HG-YOLOv5在不同稀疏率、同一剪枝率下的指標。當稀疏率為0.001、剪枝率為10%時,剪枝閾值被設定在0.286,雖然此時網(wǎng)絡的參數(shù)量和浮點數(shù)是三個稀疏率中減少最多的,但在50輪的微調(diào)后,mAP比原網(wǎng)絡HG-YOLOv5降低3.8個百分點,說明網(wǎng)絡稀疏的程度還不夠,剪掉很多權(quán)值不為0的通道數(shù)。而在同一剪枝率下將稀疏率改為0.003,網(wǎng)絡參數(shù)降低了0.26×106,但精度和原網(wǎng)絡一致,說明此時有較好的稀疏效果。但反觀稀疏率為0.002時剪枝后的表現(xiàn),其參數(shù)量下降雖不如稀疏率為0.003時,但微調(diào)后mAP反而比原網(wǎng)絡上升0.9個百分點。因此實驗得出稀疏率為0.002、剪枝率為10%時HG-YOLOv5網(wǎng)絡的稀疏效果最好。
所以又對比該稀疏率和剪枝率下MobileNet-YOLOv5的性能,實驗得出HG-YOLOv5-sl0.002-0.1的mAP、參數(shù)量和浮點數(shù)都優(yōu)于MobileNet-YOLOv5-sl0.002-0.1。
本文還對比不同剪枝率對HG-YOLOv5-sl0.002的性能影響。由于HG-YOLOv5的參數(shù)相比大型網(wǎng)絡已經(jīng)很少,所以剪枝率只設定在20%和30%。實驗得出剪枝率為30%時,參數(shù)量是所有網(wǎng)絡中減少最多的,比原網(wǎng)絡降低了0.94×106,浮點數(shù)也減少0.9 GFLOPS,mAP比HG-YOLOv5-sl0.001-0.1模型要高1.1個百分點。但相比HG-YOLOv5-sl0.002-0.1,mAP還是降低3.6個百分點。
由于本文要求將算法部署在移動端或嵌入式等算力不高的設備上,因此本文還要考慮算法在CPU上的處理速度。而CPU沒有GPU一樣的算力,無法很好地滿足檢測的速度需求,因此本文將融合卷積層與BN層,減小網(wǎng)絡層數(shù)和參數(shù)量,提高檢測速度。網(wǎng)絡融合后的指標對比如表2所示。
由表2可以看出,將卷積層和BN層融合后,雖然參數(shù)量和浮點數(shù)沒有降低很多,但每張圖片在CPU上的推理時間都相應減少。在大型網(wǎng)絡YOLOv5中,平均推理時間減少了23 ms。在輕量化的網(wǎng)絡中,對于沒剪枝的HG-YOLOv5其平均推理時間減少了28.1 ms,在剪枝了10%和30%后的網(wǎng)絡中其平均推理時間分別減少了26.4 ms和19.8 ms。實驗結(jié)果證明,融合卷積層和BN層在大型網(wǎng)絡和輕量化網(wǎng)絡中都可以有效地提高網(wǎng)絡的檢測速度,可以更好地滿足對檢測速度的需求。
表2 網(wǎng)絡融合后的指標對比Table 2 Comparison of indicators after network fuse
實驗將選擇Mobile SSDLite、Mobile YOLOv3、SSD、YOLOv5、Slim-HG-YOLOv5等算法進行對比,其中Mobile SSDLite、Mobile YOLOv3都是輕量級網(wǎng)絡,SSD是單階段檢測算法,YOLOv5是本文的特征提取所替代的原網(wǎng)絡、Slim-HG-YOLOv5為本文算法。對比結(jié)果如表3所示。
表3 不同算法在本數(shù)據(jù)集上的對比Table 3 Comparison of different algorithms on dataset
從表3可以得出,Slim-HG-YOLOv5雖然在GFLOPS上不如Mobile SSDLite,且mAP方面略遜YOLOv5,但相比Mobile SSDLite,本文算法在mAP方面比其提高52.6個百分點,同時在評估網(wǎng)絡輕量級的指標方面,如參數(shù)量、GFLOPS和權(quán)重大小分別是YOLOv5的9.2倍、6.9倍和7.63倍。在推理速度上,本文算法要比SSD快8.6倍,更好地滿足實時檢測的需求,可以應用在安全帽檢測中。具體的檢測對比結(jié)果如圖8所示,圖8(a)為YOLOv5檢測結(jié)果,圖8(b)為本文算法檢測結(jié)果??梢钥闯觯疚乃惴ㄒ驗榻?jīng)過稀疏訓練從而得到更好的泛化能力,YOLOv5上出現(xiàn)的誤檢測,在本文的檢測結(jié)果中并沒出現(xiàn)。而本文算法為了追求更好的輕量化,對模型進行剪枝,雖然在小目標的檢測方面出現(xiàn)一些漏檢情況,但在中大目標的檢測方面仍滿足良好性能。
圖8 檢測對比結(jié)果Fig.8 Comparison results
針對實際安全帽檢測環(huán)境中,所部署的移動端或嵌入式設備無法為大型網(wǎng)絡模型提供足夠算力的問題。本文提出了一種基于HourGlass模塊的輕量目標檢測算法HG-YOLO,用于更好地將算法部署在低端設備。該模型將YOLOv5的特征提取網(wǎng)絡替換為HourGlass,并且在保證精度的情況下對模型進行適當?shù)貕嚎s,通過通道剪枝的方法降低模型的參數(shù)量、浮點數(shù)和權(quán)重文件大小。其次實際中部署可能會在CPU上進行數(shù)據(jù)處理,因此為加快在CPU上的推理時間,本文在推理時將網(wǎng)絡的卷積層和BN層進行融合,大幅減低推理時間。在對比實驗中,本文的算法和其他算法相比具有一定優(yōu)勢,推理速度是所有算法中最快的,并且還有較好的精度。在后續(xù)研究中可以將算法部署在實際的移動端和硬件平臺,進一步提高算法在CPU上的推理速度。