沈希忠,戚 成
(上海應(yīng)用技術(shù)大學(xué) 電氣與電子工程學(xué)院,上海 201418)
在建筑工地的安全生產(chǎn)規(guī)范中,不允許未佩戴安全帽的情況下進入施工現(xiàn)場。佩戴安全帽可以有效地降低安全事故發(fā)生后因墜落、物體墜擊對頭部造成的損傷,可以最大限度地保護施工人員的生命安全[1]。在大多數(shù)施工場地,往往采用人工監(jiān)督的方法判斷是否佩戴安全帽[2],然而依賴人力監(jiān)管的方式存在耗時長、效率低等諸多不利因素,遠達不到現(xiàn)代施工安全管理的要求,而采用計算機視覺的方法可以對現(xiàn)場安全監(jiān)管進行有效部署。當前的目標檢測的方法主要分為兩類:基于傳統(tǒng)圖像處理的目標檢測方法和基于深度學(xué)習(xí)的目標檢測算法。傳統(tǒng)的圖像檢測算法通過搜索目標圖像的特征從而得到檢測結(jié)果,如Rubaiyat等[3]首先利用梯度方向直方圖(Histogram of oriented gradient,HOG)搜索圖像中工人的位置,然后使用顏色和圓環(huán)霍夫變換(Circle hough transform,CHT)來檢測安全帽的佩戴情況;劉曉慧等[4]采用膚色檢測的方法定位到人臉區(qū)域,以此獲得臉部以上的區(qū)域圖像,利用圖像矩(Hu mome nts,Hu矩)檢測安全帽的佩戴情況。傳統(tǒng)的目標檢測算法雖然取得了一定的效果,但是在高復(fù)雜度、強干擾的施工環(huán)境下,基于傳統(tǒng)特征提取算法的安全帽檢測表現(xiàn)效果較差,無法在實際的檢測中保證檢測的精度和實時性。隨著深度學(xué)習(xí)的快速發(fā)展,卷積神經(jīng)網(wǎng)絡(luò)成為目標檢測新的研究方向?,F(xiàn)階段的目標檢測算法有兩類:雙階段檢測算法和單階段檢測算法。雙階段檢測算法主要是以RCNN[5],FastR-CNN[6],FasterR-CNN[7]為代表的基于候選區(qū)域的目標檢測算法;單階段檢測算法是以YOLO[8]系列、SSD[9]為代表的基于回歸分析的目標檢測算法。蔣潤熙等[10]以YOLOV5為基礎(chǔ),基于Inverted resblock結(jié)構(gòu)對主干網(wǎng)絡(luò)進行了重構(gòu),并對BN層進行稀疏訓(xùn)練實現(xiàn)了安全帽的快速檢測。趙紅成等[11]針對數(shù)據(jù)集類別不平衡以及模型推理時間長這兩個問題,設(shè)計了混合場景數(shù)據(jù)增強方法,采用MobileNetV2替換YOLOv5s主干網(wǎng)絡(luò),并對BN層進行剪枝,實現(xiàn)了安全帽的快速檢測。徐先峰等[12]使用MobileNet對SSD算法進行改進,并采用遷移學(xué)習(xí)策略克服模型訓(xùn)練困難問題,相較于原算法檢測速率有所提升。
在實際的工程作業(yè)環(huán)境中,不但要求網(wǎng)絡(luò)有較好的檢測精度,而且對于模型的運行速度、檢測的實時性都有著較高的要求?,F(xiàn)有的卷積神經(jīng)網(wǎng)絡(luò)存在著參數(shù)量過多、模型運行速度慢以及對不同場景的泛化能力差等問題,不利于實際的應(yīng)用部署。針對上述問題,筆者提出一種基于改進的YOLOX的安全帽佩戴檢測算法,通過實驗證明筆者算法可以準確、高效地檢測各種場景下的安全帽佩戴情況,具有較好的實時性和魯棒性。
許凱等[1]提出的改進YOLOV3的安全帽佩戴識別算法,主要針對檢測精度對網(wǎng)絡(luò)進行改進,通過增加一個尺度的有效特征層、重新聚類先驗錨框以及改進損失函數(shù)對網(wǎng)絡(luò)加以優(yōu)化,以實現(xiàn)對安全帽目標更好的檢測,然而這樣的改動導(dǎo)致模型的結(jié)構(gòu)變得復(fù)雜,檢測速率降低。筆者所提出的改進的YOLOX安全帽佩戴檢測算法,對YOLOX的主干網(wǎng)絡(luò)進行輕量化處理以及對特征融合網(wǎng)絡(luò)進行加強,不僅提高了網(wǎng)絡(luò)對小目標的檢測能力,而且減少了模型參數(shù)。
YOLOV3算法由主干網(wǎng)絡(luò)Darknet53、特征提取網(wǎng)絡(luò)FPN以及Coupled head所組成。YOLOX算法由主干網(wǎng)絡(luò)CSPDarknet、特征提取網(wǎng)絡(luò)PANet以及Decoupled head構(gòu)成。兩者的區(qū)別在于:1)YOLOV3的主干網(wǎng)絡(luò)Darknet53由ResNe(X)t結(jié)構(gòu)所組成,而YOLOX的主干網(wǎng)絡(luò)使用了CSPResNe(X)t結(jié)構(gòu),兩者結(jié)構(gòu)如圖1所示。CSPResNe(X)t相較于ResNe(X)t增加了一個大的殘差邊,這一做法可以分割梯度流,使梯度流通過不同的網(wǎng)絡(luò)路徑傳播,通過切換串聯(lián)和過渡步驟,傳播的梯度信息可以具有較大的相關(guān)性差異,從而增強網(wǎng)絡(luò)的學(xué)習(xí)能力、實現(xiàn)更豐富的梯度組合以及減少計算量。2)YOLOV3的特征提取網(wǎng)絡(luò)FPN和YOLOX的PANet結(jié)構(gòu)如圖2所示,圖2(a)中的FPN是自頂向下的路線,通過側(cè)向連接,將高層的強語言特征傳遞下來,只增強了特征金字塔的語義信息。例如,當?shù)讓犹卣鞯絇5時,中間經(jīng)過非常多層的網(wǎng)絡(luò),此時底層的目標信息已經(jīng)非常模糊,因此PANet對FPN進行了擴展,如圖2(b)所示,加入了自底向上的路線,彌補并加強了定位信息。3)Coupled head和Decoupled head結(jié)構(gòu)如圖3所示,Coupled head雖然將分類和回歸通過一個卷積操作來實現(xiàn),但是分類和回歸的特征不太相同,分類更加關(guān)注所提取的特征與已有類別哪一類最為接近,而回歸則更多是一些輪廓邊界特征。如果將兩者放在一起反向傳播可能會導(dǎo)致網(wǎng)絡(luò)收斂速度變慢,精度降低。Decoupled head將分類和回歸分開進行,可以避免Coupled head所造成的問題。綜上,YOLOX算法的性能優(yōu)于YOLOV3,因此選擇YOLOX進行改進。
圖1 ResNe(X)t和CSPResNe(X)t結(jié)構(gòu)圖
圖2 FPN和PANet結(jié)構(gòu)圖
圖3 Coupledhead和Decouplehead結(jié)構(gòu)圖
采用改進的YOLOX目標檢測算法對建筑工人安全帽的佩戴情況進行檢測,將YOLOX的主干特征提取網(wǎng)絡(luò)(Backbone)替換為輕量級的GhostNet[13],達到減少網(wǎng)絡(luò)模型參數(shù)以降低計算量加快檢測速度的效果。對PANet[14]特征融合網(wǎng)絡(luò)(Neck)進行尺度以及融合方式兩方面的加強,將特征融合網(wǎng)絡(luò)的有效特征輸入擴展為160×160,80×80,40×40,20×20這4個尺度,增強對特征圖淺層信息的利用,并在原2倍上采樣的基礎(chǔ)上增加4倍上采樣的間隔融合結(jié)構(gòu),進一步實現(xiàn)淺層信息和深層信息的融合,減少卷積過程中安全帽信息的特征丟失。改進后的YOLOX網(wǎng)絡(luò)如圖4所示。
圖4 改進的YOLOX網(wǎng)絡(luò)結(jié)構(gòu)圖
為了實現(xiàn)網(wǎng)絡(luò)的輕量化部署,需要減少網(wǎng)絡(luò)的計算量和參數(shù)量,選擇性能較好的輕量化網(wǎng)絡(luò)GhostNet替換原YOLOX的CSPDarknet主干特征提取網(wǎng)絡(luò)。
YOLOX的CSPDarknet主干特征提取網(wǎng)絡(luò)主要是由跨階段局部網(wǎng)絡(luò)結(jié)構(gòu)(Cross stage partial,CSP)[15]組成,并在CSP1結(jié)構(gòu)中包含了殘差單元,CSP1以及殘差單元結(jié)構(gòu)如圖5所示。這些殘差單元由兩部分組成:主干部分是一次1×1的常規(guī)卷積和一次3×3的常規(guī)卷積;殘差邊部分不做任何處理,直接與主干部分的輸出相結(jié)合得到最后的輸出。殘差網(wǎng)絡(luò)的特點是容易優(yōu)化,并且能夠通過增加相當?shù)纳疃葋硖岣邷蚀_率,其內(nèi)部的殘差單元使用了跳躍連接,緩解了在深度神經(jīng)網(wǎng)絡(luò)中增加深度帶來的梯度消失問題。整個CSPDarknet包含了幾十個這樣的殘差單元,而太多的卷積操作會導(dǎo)致網(wǎng)絡(luò)參數(shù)量龐大、計算度復(fù)雜。鑒于此問題,首先將殘差單元中的常規(guī)卷積替換為計算量少的Ghost模塊,組合成Ghost bottleneck殘差結(jié)構(gòu),然后再進行下一步的堆疊得到GhostNet網(wǎng)絡(luò),利用較少的參數(shù)生成與普通卷積相同數(shù)量的特征圖。這樣既減少了參數(shù)量加快模型運行速度,又保留了殘差模塊容易優(yōu)化、可以緩解梯度消失的優(yōu)點,可以很好地對主干特征提取網(wǎng)絡(luò)進行性能的優(yōu)化。
圖5 CSP1以及殘差單元結(jié)構(gòu)圖
通過殘差網(wǎng)絡(luò)生成的特征圖一般都有豐富甚至冗余的特征圖信息來保證對輸入的理解,Ghost模塊的功能就是代替其中的普通卷積,將相似的特征圖看作彼此的ghost,并提出可以使用一些計算量更低的操作去生成這些冗余的特征圖,這樣可以保證在良好檢測效果的情況下,減少模型的參數(shù)量且提高模型的執(zhí)行速度。圖6(b)所示Ghost模塊將普通卷積分為3部分,首先使用一個1×1的少量常規(guī)卷積操作對特征圖進行特征整合,生成輸入特征層的特征濃縮;然后使用深度可分離卷積(Depthwise seperable conv)或者其他的一些線性操作進行逐層卷積,利用上一步獲得的特征濃縮生成Ghost特征圖;最后將特征濃縮層和Ghost特征層拼接得到完整的輸出特征層,這樣就可以在保證良好檢測效果的情況下,減少模型的參數(shù)量與提高模型的執(zhí)行速度。
圖6 常規(guī)卷積和Ghost模塊結(jié)構(gòu)對比圖
當輸入特征圖的尺寸為c×h×w,常規(guī)卷積的輸出尺寸為h′×w′×n,卷積核大小為c×k×k×n;Ghost模塊的原始卷積輸出特征圖尺寸為h′×w′×m,使用的卷積核為c×k×k×m,線性操作后產(chǎn)生的Ghost特征維數(shù)為s。假設(shè)Ghost模塊包含1個identity mapping和個線性操作,每個線性操作的核大小為d×d。則
常規(guī)卷積的計算量為
F1=n×h′×w′×c×k2
(1)
常規(guī)卷積的參數(shù)量為
P1=n×c×k2
(2)
Ghost模塊的計算量為
(3)
Ghost模塊的參數(shù)量為
(4)
將兩者的計算量和參數(shù)量分別進行比值計算,則
(5)
(6)
通過式(5,6)可以明顯地看出:當輸入特征圖的尺寸相同時,Ghost模塊的參數(shù)量和計算量都比普通殘差結(jié)構(gòu)中的常規(guī)卷積更低,理論上可以達到更快的模型推理速度。
Ghost bottlenecks是由Ghost模塊組成的殘差結(jié)構(gòu),其本質(zhì)上就是用Ghost模塊代替殘差結(jié)構(gòu)里面的常規(guī)卷積。Ghost bottlenecks可以分為兩個部分,分別是主干部分和殘差邊部分。Ghost bottlenecks有兩類,如圖7所示,當需要對特征層的寬高進行壓縮時,設(shè)置Ghost bottlenecks的Stride=2,即步長為2。此時會在Bottlenecks里面多添加一些卷積層,在主干部分里,在兩個Ghost模塊中添加一個步長為2×2的深度可分離卷積進行特征層的寬高壓縮。在殘差邊部分,也會添加上一個步長為2×2的深度可分離卷積和1×1的普通卷積。
圖7 Ghost bottlenecks結(jié)構(gòu)圖
GhostNet由Ghostbottlenecks堆疊而成,其構(gòu)建方式如表1所示。當輸入特征圖尺寸為640×640×3時,首先進行一個16通道的普通1×1卷積塊(卷積+標準化+激活函數(shù)),開始Ghostbottlenecks的堆疊,利用Ghostbottlenecks,得到一個20×20×160的特征層;其次利用1×1的卷積塊進行通道數(shù)的調(diào)整,獲得20×20×960的特征層,將這些特征層平均全局池化;再次利用一個1×1的卷積塊進行通道數(shù)的調(diào)整,得到一個1×1×1 280的特征層;最后平鋪進行全連接進行分類。
表1 GhostNet網(wǎng)絡(luò)結(jié)構(gòu)
原YOLOX采用3個不同尺度的特征圖進行特征融合,在輸入圖片尺寸為640×640的情況下將主干網(wǎng)絡(luò)獲得的20×20、40×40以及80×80這3種尺寸的特征圖作為特征融合網(wǎng)絡(luò)的有效特征層,將20×20的特征層2倍上采樣和40×40的特征層融合,再將融合后的40×40的特征層經(jīng)過2倍上采樣與80×80的特征層進行特征融合,隨后將80×80特征層經(jīng)過兩次下采樣、兩次特征融合獲得3個尺度的輸出層。
所檢測的安全帽目標體積較小,且在實際的工程環(huán)境中,施工人員可能距離檢測設(shè)備較遠以及存在遮擋等情況。在通過網(wǎng)絡(luò)的多次卷積操作之后安全帽的特征信息會存在局部丟失,導(dǎo)致檢測效果不佳。
為解決上述問題,在原PANet的基礎(chǔ)上增加160×160的低維有效特征層,提高網(wǎng)絡(luò)對特征圖淺層信息的泛化能力。原特征融合網(wǎng)絡(luò)采用2倍上采樣的遞進融合結(jié)構(gòu),不能很好地將深層信息和淺層信息融合,在2倍上采樣的基礎(chǔ)上增加了4倍上采樣的間隔融合結(jié)構(gòu),能夠有效地融合不同維度的特征信息,同時可以緩解卷積操作所帶來的安全帽區(qū)域的特征丟失。用深度可分離卷積(Depthwise seperable conv)替代常規(guī)卷積,減少模型參數(shù),保證網(wǎng)絡(luò)的輕量化。
改進后的多尺度特征融合網(wǎng)絡(luò)結(jié)構(gòu)如圖8所示,將原網(wǎng)絡(luò)的3個有效特征輸入擴展為4個尺度。當輸入圖片為640×640時,P2,P3,P4,P5所對應(yīng)的有效特征層尺寸為160×160,80×80,40×40和20×20。在原PANet的基礎(chǔ)上增加4倍上采樣的間隔融合結(jié)構(gòu),主要改進為將最底層的20×20有效特征層經(jīng)過4倍上采樣與兩次2倍上采樣后的80×80特征層進行間隔融合;將40×40有效特征層經(jīng)過4倍上采樣與兩次2倍上采樣后的160×160特征層進行間隔融合,后續(xù)的下采樣融合結(jié)構(gòu)與原網(wǎng)絡(luò)保持一致。
圖8 多尺度特征融合網(wǎng)絡(luò)結(jié)構(gòu)
原YOLOX算法主要在COCO數(shù)據(jù)集上進行驗證,而這些數(shù)據(jù)大部分需要檢測的目標都比較大,改進后的算法充分利用了目標不同尺度的特征信息,提高網(wǎng)絡(luò)對淺層信息的感知能力。安全帽佩戴在施工人員的頭部位置,檢測目標較小,針對特征融合網(wǎng)絡(luò)的改進可以加強算法對小目標的檢測能力。
實驗環(huán)境為:win10操作系統(tǒng),Intel Corei5-11400 CPU,32 G運行內(nèi)存,NVIDIA GeForce RTX 3060 GPU,CUDA11.0,CUDNN8.0,所用的深度學(xué)習(xí)框架為Pytorch。
實驗所用數(shù)據(jù)集圖片主要來源于開源數(shù)據(jù)集、施工現(xiàn)場監(jiān)控視頻采集圖像以及網(wǎng)絡(luò)爬蟲獲取。數(shù)據(jù)集包含了不同施工場景下的不同作業(yè)環(huán)境、不同清晰度、有無遮擋等條件下的施工人員佩戴安全帽和未佩戴兩類圖片,且在數(shù)據(jù)集中加入佩戴棒球帽、佩戴警帽、手持安全帽等的干擾圖片,防止圖片類別單一,增加模型的泛化能力。數(shù)據(jù)集樣本如圖9所示。
圖9 安全帽樣本示例
最終整理得到的數(shù)據(jù)集共9 000張,將圖片統(tǒng)一編號后,采用Labelimg標注工具對數(shù)據(jù)集進行標注,將數(shù)據(jù)集標注為VOC格式,生成xml標注文件。數(shù)據(jù)統(tǒng)一清洗為hat和person兩類,按照9∶1的比例將數(shù)據(jù)集劃分為訓(xùn)練集和測試集。
為檢測改進后的YOLOX算法的性能,采用平均準確率(Average precision,AP)、平均準確率均值(Mean average precision,MAP)、每秒檢測幀數(shù)(Frames per second,FPS)以及模型大小等指標對算法性能進行評估。
準確率(Precision):被正確檢測的正樣本占所有檢出(預(yù)測為正樣本)樣本的百分比,即
(7)
召回率(Recall):被正確檢測的正樣本占所有正樣本(Ground truth)的比例,即
(8)
AP為預(yù)測樣本的準確率均值,精確率—召回率曲線(Precision-recall curve)下的面積,即
(9)
MAP為對每個類別的AP求平均,即
(10)
式中:TP(True positive)表示將正樣本預(yù)測為正,即正確檢測佩戴安全帽人員;FP(False positive)表示將負樣本預(yù)測為正,即未佩戴安全帽人員被檢測未佩戴;FN(False negative)表示將正樣本預(yù)測未負,即佩戴安全帽人員被檢測為未佩戴。
實驗所傳入的圖片大小設(shè)置為640×640,格式為JPG,batch_size和學(xué)習(xí)率分別設(shè)置為8和0.001。采用Mosaic數(shù)據(jù)增強對圖片進行拼接處理,增加背景復(fù)雜度以獲得多尺度的檢測目標,實驗設(shè)置為在前80%個epoch使用Mosaic,避免因其大量crop操作帶來的不準確的標注框而對實驗結(jié)果產(chǎn)生負面的影響。使用余弦退火學(xué)習(xí)率在網(wǎng)絡(luò)訓(xùn)練時對學(xué)習(xí)率進行微調(diào)。
為得到每個改進點所帶來的不同的效果,設(shè)置消融實驗來進行對比觀察,實驗結(jié)果如表2所示。表2中:改進1為主干特征提取網(wǎng)絡(luò)改進;改進2為特征融合網(wǎng)絡(luò)改進;FPS(Frames per second)為每秒傳輸幀數(shù)。由表2中可以看出:采用GhostNet替換原CSPDarknet主干特征提取網(wǎng)絡(luò)雖然可以有效提升模型檢測的速度,但是平均精度降低了5.9%;特征融合網(wǎng)絡(luò)的改進雖然使得檢測的平均精度提高了3.5%,但是檢測速率降低。結(jié)合上述改進得到筆者提出的算法,相較于原YOLOX網(wǎng)絡(luò),在平均精度基本不變的情況下,提升了網(wǎng)絡(luò)的檢測速度,可進行實時高效的安全帽佩戴檢測。
表2 消融實驗結(jié)果
將筆者提出的算法與YOLOX,YOLOX-tiny,YOLOv4,YOLOv4-Mobilenet等YOLO系列算法在相同實驗環(huán)境下使用相同數(shù)據(jù)集進行對比實驗,其中YOLOX-tiny,YOLOv4-Mobilenet都是輕量級網(wǎng)絡(luò),YOLOX是筆者所改進的原始算法。統(tǒng)計各算法的平均準確率AP、平均準確率均值MAP、FPS和模型大小等指標,對各類算法的檢測效果進行對比分析,各算法檢測結(jié)果如表3所示。由表3可以看出:相較于YOLOX,筆者算法和YOLOX都表現(xiàn)較高的檢測精度。筆者算法在AP和MAP上基本保持不變,MAP僅僅下降了0.4個百分點,而在模型的輕量級評價指標方面,參數(shù)量、模型大小僅為YOLOX的1/5。在檢測速度方面,筆者算法比YOLOX快23.9 ms。與YOLOv4相比,筆者算法在檢測精度和檢測速度上都有一定提升。與YOLOX-tiny,YOLOv4-Mobilenet這兩個輕量級網(wǎng)絡(luò)相比,筆者算法的MAP分別提升了10.9%和7.9%,檢測速度上筆者算法比YOLOv4-Mobilenet快2.8 ms。筆者算法在不犧牲檢測精度的情況下,對網(wǎng)絡(luò)進行輕量化處理,相較于所對比的輕量化網(wǎng)絡(luò),可以達到準確且快速的檢測效果。
表3 不同檢測算法結(jié)果對比
為了更加直觀地體現(xiàn)出不同算法之間的性能區(qū)別,選取YOLOX、YOLOX-tiny以及筆者算法在測試集上的部分檢測結(jié)果進行對比說明,檢測結(jié)果如圖10所示,其中佩戴安全帽的人員識別為“hat”,未佩戴安全帽的人員識別為“person”,從左向右第1列到第3列分別為YOLOX、YOLOX-tiny和筆者算法的檢測結(jié)果。圖10(a)為施工環(huán)境鋼筋遮擋情況下的目標檢測,觀察可以看出YOLOX-tiny在遮擋部分存在兩處漏檢,而YOLOX和筆者算法全部檢出;圖10(b)為遠距離小目標情況下的檢測,可看出YOLOX-tiny只檢出一處人員,YOLOX有兩處漏檢,而筆者算法針對特征融合網(wǎng)絡(luò)進行改進,加強了算法對小目標的檢測能力,使得在這一情況下表現(xiàn)良好,全部檢出;圖10(c)為昏暗模糊場景下的檢測,對比可知,YOLOX和筆者算法沒有漏檢、誤檢的情況,而YOLOX-tiny存在兩處誤檢;圖10(d)為人員密集情況下的安全帽佩戴檢測,可以明顯看出YOLOX-tiny存在多處漏檢,而筆者算法和YOLOX全部檢出,筆者算法僅存在一處誤檢。由上述對比實驗以及結(jié)果分析可知:筆者算法在輕量化的同時,能夠保持在各種復(fù)雜場景下的良好檢測效果。
為解決實際工作環(huán)境下安全帽佩戴檢測速率低、實時性差以及精確度不高等問題,提出了一種基于改進YOLOX的輕量級安全帽佩戴檢測方法。在YOLOX網(wǎng)絡(luò)的基礎(chǔ)上,采用GhostNet替代原網(wǎng)絡(luò)的CSPDarknet主干特征提取網(wǎng)絡(luò),對網(wǎng)絡(luò)進行輕量化處理,大幅提升模型的檢測速度,改進特征融合網(wǎng)絡(luò)網(wǎng)絡(luò),采用4個尺度的有效特征層進行特征融合,對特征圖的淺層信息進行充分利用,提高對小目標的檢測能力。經(jīng)對比實驗分析,筆者算法在不同場景下檢測效果良好,在保證檢測精度的情況下,檢測速率相較于原網(wǎng)絡(luò)提升了52.4%;相較于YOLOX-tiny等輕量級網(wǎng)絡(luò),檢測速率基本持平,檢測精度獲得大幅提升。后續(xù)將進一步研究如何減小網(wǎng)絡(luò)參數(shù),提升在移動端的推理速度。