李發(fā)伯,劉 猛,景曉琦
(沈陽理工大學(xué)信息科學(xué)與工程學(xué)院,沈陽 110159)
建筑工地施工人員佩戴安全帽能有效減輕高處墜落物造成的頭部傷害以及一些機(jī)械性的損傷,對建筑工地的工作人員佩戴安全帽情況進(jìn)行檢測具有保障安全施工的作用。 現(xiàn)階段,該檢測主要還是使用人工巡檢的方式,但由于施工場地范圍大、人員分散,靠人工隨時監(jiān)察安全帽的佩戴情況不僅耗費(fèi)大量的時間和人工成本,還容易出現(xiàn)漏檢情況,效率非常低。
近些年來,一些學(xué)者對目標(biāo)檢測算法不斷進(jìn)行改進(jìn),并應(yīng)用到安全帽檢測中。 基于視頻智能監(jiān)控的安全帽佩戴檢測的研究也取得了一定的進(jìn)展。 文獻(xiàn)[1 -3]通過改進(jìn)YOLO[4]、SSD 等算法對安全帽進(jìn)行檢測與識別,提高了目標(biāo)檢測的速度;文獻(xiàn)[5 -6]改進(jìn)了Faster R-CNN[7]算法,實現(xiàn)了安全帽的檢測與識別,提高了目標(biāo)檢測的識別精度。
目前,主流目標(biāo)檢測算法大都基于帶有圖形處理器實驗平臺開發(fā),未考慮采用嵌入式平臺。少量基于嵌入式平臺的檢測算法雖然可以實現(xiàn)實時檢測,但精度不夠,特別是針對小區(qū)域目標(biāo)的檢測。 在嵌入式平臺上進(jìn)行安全帽佩戴檢測具有低成本、低延時、可擴(kuò)展性強(qiáng)等優(yōu)勢,可滿足施工人員安全帽佩戴實時檢測的任務(wù)需求。 鑒于此,本文在嵌入式平臺上將模型小、檢測速度較快的深度學(xué)習(xí)模型YOLOv4-Tiny 引入安全帽檢測領(lǐng)域,并對其進(jìn)行改進(jìn),融合多尺度特征信息,引入空間金字塔池化結(jié)構(gòu)[8],改進(jìn)初始化錨框并引入有效邊界框損失(EIOU)方法。 改進(jìn)后的算法不僅保證了對安全帽進(jìn)行實時檢測時的速度,同時提高了檢測的準(zhǔn)確率。
YOLOv4-Tiny 模型包括主干特征提取網(wǎng)絡(luò)(CSPDarknet53_tiny)、加強(qiáng)特征提取網(wǎng)絡(luò)創(chuàng)建的特征金字塔結(jié)構(gòu)(FPN)[9]以及YOLO 目標(biāo)檢測層三部分。 主干特征提取網(wǎng)絡(luò)主要由三個跨階段部分網(wǎng)絡(luò)(CSPNet)[10]、兩個CBL(Conv BN Leaky ReLU)下采樣模塊以及三次最大池化組成。
CSPNet 將原來的殘差塊堆棧分為左右兩部分,主體部分不斷疊加原來的殘差塊,另一部分像一個大的殘差邊,在最后直接與主體部分相連。使用CSPNet 可以提高卷積神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)能力,并能在輕量化的同時保持準(zhǔn)確性,減少計算瓶頸和內(nèi)存成本。
CBL 下采樣模塊由一個卷積層、批標(biāo)準(zhǔn)化(Batch Normalization,BN)層以及激活函數(shù)Leaky ReLU 構(gòu)成,BN 層減少了不同樣本之間取值范圍的差異,避免了梯度消失和梯度爆炸問題,降低了參數(shù)或其初始值的尺度依賴性,提高了網(wǎng)絡(luò)歸一化能力[11]。
Leaky ReLU 為所有負(fù)值分配了一個非零梯度以避免神經(jīng)元失活,該模塊相當(dāng)于網(wǎng)絡(luò)的基本組成元件。 池化使用的是最大池化(Maxpool),改變輸入特征圖的尺寸。 利用主干網(wǎng)絡(luò)可以獲得CSPdarknet53_tiny 最后兩個尺度的有效特征層,隨后將兩個有效特征層傳入加強(qiáng)特征提取網(wǎng)絡(luò)當(dāng)中進(jìn)行FPN 的構(gòu)建。
FPN 解決物體檢測時多個尺度融合的問題,通過在簡單的網(wǎng)絡(luò)上構(gòu)建特征金字塔,在基本不增加YOLOv4-Tiny 模型復(fù)雜度的情況下顯著提升小目標(biāo)檢測的性能。
YOLOv4-Tiny 的網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示。
由圖1可見,采用FPN 完成第一步獲得的兩個有效特征層的特征融合。 FPN 會將最后一個尺度的有效特征層卷積后進(jìn)行上采樣,然后與上一個尺度的有效特征層進(jìn)行堆疊并卷積,從而使下一個尺度的有效特征層獲得更多的特征信息,提高檢測效果。 在目標(biāo)檢測部分,YOLOv4-Tiny 提取了兩個尺度為(38,38,128)、(19,19,512)的特征層,最后輸出尺度為38 ×38、19 ×19 的特征圖用于邊界框回歸和目標(biāo)分類。

圖1 YOLOv4-Tiny 網(wǎng)絡(luò)結(jié)構(gòu)
YOLOv4-Tiny 網(wǎng)絡(luò)模型小,檢測安全帽速度快,適合應(yīng)用于嵌入式平臺,但其檢測的準(zhǔn)確率不足, 無法滿足安全帽的實時檢測, 因此對YOLOv4-Tiny 網(wǎng)絡(luò)做出如下改進(jìn)。
(1)優(yōu)化網(wǎng)絡(luò)結(jié)構(gòu),增加檢測尺度,進(jìn)行多個尺度融合,豐富特征信息,并加入空間金字塔池化(Spatial Pyramid Pooling,SPP)網(wǎng)絡(luò)結(jié)構(gòu),增強(qiáng)卷積神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)能力,提高檢測精度;
(2)引入EIOU 損失方法構(gòu)建回歸損失函數(shù);
(3)采用聚類算法K-means ++改進(jìn)初始化錨框。
施工場地環(huán)境復(fù)雜,場景中的安全帽尺度小、數(shù)量密集,還可能存在目標(biāo)被遮擋的問題。 在這些條件下使用原網(wǎng)絡(luò)YOLOv4-Tiny 檢測會出現(xiàn)漏檢的情況。 鑒于此,在原網(wǎng)絡(luò)基礎(chǔ)上再增加一個檢測層(76 ×76),通過FPN 網(wǎng)絡(luò)結(jié)構(gòu)融合前兩個尺度的特征信息,提高對小目標(biāo)的檢測能力。
由于原算法主干特征提取網(wǎng)絡(luò)的卷積層CBL(19,19,512)計算量消耗了25.55 億次浮點運(yùn)算,消耗的資源較其他卷積層多出近2 倍,為提高嵌入式設(shè)備的檢測速度,將其從網(wǎng)絡(luò)中移除。
為進(jìn)一步精簡網(wǎng)絡(luò),將第一個上采樣前面卷積層的核數(shù)由128 降為64;尺度為19 ×19 的檢測層最后兩個CBL 模塊中的卷積層核數(shù)由256 和512 降為128 和256;尺度為38 ×38 的檢測層最后一個CBL 模塊的卷積層核數(shù)由256 降為128。
在施工現(xiàn)場,由于施工人員比較分散,獲取的安全帽圖像因距離的不同而導(dǎo)致輸入圖像的尺度不同,不能滿足輸入所需的尺寸。 通常的解決方案是對圖像進(jìn)行裁剪和拉伸,但這會改變圖像的縱橫比從而導(dǎo)致原始圖像發(fā)生扭曲。 為了解決這一問題,引入SPP。 對于不同尺寸的圖像輸入,SPP 可以產(chǎn)生固定大小的輸出,并且通過最大池化操作將輸入的圖像特征映射到維度不同的空間上進(jìn)行融合,進(jìn)一步豐富了特征圖的多尺度信息。SPP 結(jié)構(gòu)如圖2所示。

圖2 空間金字塔池化結(jié)構(gòu)
由圖2可見,將尺寸為19 ×19、通道數(shù)為512的安全帽特征圖輸入到空間金字塔池化層后,在5×5、9 ×9、13 ×13三個大中小不同尺寸、通道數(shù)均為1 的池化層上進(jìn)行最大池化操作,生成三個尺寸均為19 ×19、通道數(shù)均為512 的局部特征圖,最后將生成的三個局部特征圖與原始輸入的特征圖利用通道融合在一起,得到尺寸為19 ×19、通道數(shù)為2048 的特征圖,豐富了安全帽特征圖的多尺度信息。 引入SPP 結(jié)構(gòu)可對圖片中不同尺度的安全帽進(jìn)行特征融合,解決輸入圖像尺度不一致問題,提高檢測準(zhǔn)確率。
將改進(jìn)后的模型命名為TS-YOLO,其結(jié)構(gòu)如圖3所示。

圖3 TS-YOLO 算法的網(wǎng)絡(luò)結(jié)構(gòu)
邊界框損失函數(shù)IOU 是目標(biāo)檢測中的一個重要指標(biāo),通過計算預(yù)測框和真實框之間的交集與并集的比值衡量邊界框的優(yōu)劣,計算公式為

式中:A表示目標(biāo)的真實框;B表示目標(biāo)的預(yù)測框。
YOLOv4-Tiny 采用邊界框完全損失函數(shù)CIOU,計算公式為


式中:bgt、b分別為真實框和預(yù)測框的中心點;ρ為真實框和預(yù)測框兩個中心點之間的歐式距離;c為能夠同時包含真實框和預(yù)測框的最小外接矩形的對角線距離;wgt、w分別為真實框和預(yù)測框的寬度;hgt、h分別為真實框和預(yù)測框的高度;ν為衡量真實框和檢測框的長寬比相似性的參數(shù);α為權(quán)重參數(shù)。
CIOU 損失函數(shù)雖然考慮了邊界框回歸的重疊面積、中心點距離、縱橫比,但其反映的是縱橫比的差異,而不是寬高分別與其置信度的真實差異,有時會阻礙模型有效的優(yōu)化相似性。
為彌補(bǔ)CIOU 損失函數(shù)存在的不足,本文采用有效邊界框損失函數(shù)EIOU,計算公式為

式中:I為真實框與預(yù)測框?qū)挾然蛘吒叨鹊牟钪担籧2w、c2h為能夠同時包含真實框和預(yù)測框的最小外接矩形的寬度與高度。
該損失函數(shù)是在CIOU 基礎(chǔ)上將縱橫比的影響因子拆開,分別計算真實框和預(yù)測框的長和寬。 EIOU 損失函數(shù)包含重疊損失、中心距離損失和寬高損失三個部分,前兩部分延續(xù)CIOU 中的方法,但寬高損失直接使真實框與預(yù)測框的寬度和高度之差最小,使得模型的收斂速度更快。
YOLOv4-Tiny 算法中的每個輸出尺度使用三個不同的先驗框進(jìn)行預(yù)測,先驗框的大小因數(shù)據(jù)集而異,需要通過聚類獲得。 原始YOLOv4-Tiny算法中的先驗框大小是基于公共數(shù)據(jù)集進(jìn)行聚類獲得。 由于公共數(shù)據(jù)集的類別太多,大小不同,聚類得到的先驗框形狀不同。 YOLOv4-Tiny 算法僅有兩個檢測層,聚類得到的先驗框只有6 個;本文改進(jìn)后的算法(簡稱TS-YOLO),因為優(yōu)化了網(wǎng)絡(luò)結(jié)構(gòu),變成三個尺度的檢測層,先驗框有9 個。 因此,需要對安全帽數(shù)據(jù)集重新聚類,并選擇具有代表性的先驗框。
原始的YOLOv4-Tiny 算法采用K-means 算法選取錨框,但由于K-means 算法隨機(jī)初始化質(zhì)心,導(dǎo)致算法收斂速度慢。 本文采用K-means ++算法,對初始化質(zhì)心進(jìn)行了優(yōu)化,并據(jù)聚類中心選取9 個先驗框,使用回歸函數(shù)對不同尺度上的每個先驗框進(jìn)行置信度回歸,得到預(yù)測框,然后根據(jù)置信度選出最合適的類別。 本文使用聚類算法K-means ++對所使用的數(shù)據(jù)集進(jìn)行聚類分析。設(shè)定簇的值為9,經(jīng)聚類算法迭代后選取的對應(yīng)先驗框的寬高分別為(8,18)、(12,25)、(19,35)、(29,49)、(42,72)、(64,106)、(91,164)、(144,237)、(272,376),將其面積按從小到大排列均分到76 ×76、38 ×38、19 ×19 三個不同尺度的特征圖上。
本文所使用的數(shù)據(jù)集是開源安全帽數(shù)據(jù)集SHWD。 該數(shù)據(jù)集共有7581 張圖像,包含9044個佩戴安全帽的正類,以及111514 個未佩戴安全帽的負(fù)類。 根據(jù)實際場景,本文對未佩戴安全帽和佩戴安全帽進(jìn)行檢測,在7581 張圖片中,取其中6139 張作為訓(xùn)練集、683 張作為驗證集、759 張作為測試集。 配戴安全帽標(biāo)簽為hat,未佩戴安全帽標(biāo)簽為person。
目標(biāo)檢測算法的數(shù)據(jù)訓(xùn)練對硬件環(huán)境要求較高,需要帶有GPU 的服務(wù)器進(jìn)行訓(xùn)練,表1為本實驗訓(xùn)練數(shù)據(jù)的服務(wù)器硬件環(huán)境配置。 將通過服務(wù)器訓(xùn)練得到的模型移植到GPU 型號為128-coreNVIDIA MaxwellTM 并采用CUDA10. 2、CUDNN8.0 加速的嵌入式平臺NVIDIA Jetson Nano進(jìn)行部署。

表1 服務(wù)器硬件環(huán)境配置
實驗基于深度學(xué)習(xí)框架Darknet 進(jìn)行,鑒于服務(wù)器顯存足夠大,訓(xùn)練時批量處理大小設(shè)置為64,分組設(shè)置為1,沖量設(shè)置為0.9,初始學(xué)習(xí)率為0.00261。 通過這些參數(shù)的設(shè)置加快模型的收斂速度;設(shè)置權(quán)重衰減為0.0005,防止出現(xiàn)過擬合的現(xiàn)象。 使用改進(jìn)后的算法對數(shù)據(jù)集進(jìn)行訓(xùn)練的損失值變化如圖4所示。
由圖4可見,網(wǎng)絡(luò)訓(xùn)練過程中,前5000 次迭代的損失值較大,但損失值減小較快,并隨著迭代次數(shù)的增加,損失值不斷減小。 當(dāng)訓(xùn)練的迭代次數(shù)達(dá)到30000 次后損失值基本穩(wěn)定在1.8 左右,表示模型收斂。

圖4 訓(xùn)練過程損失曲線
本實驗采用召回率(Recall)、F1 值以及均值平均精度(mAP)作為衡量模型精度的指標(biāo)定量評價實驗結(jié)果。
采用模型體積、浮點運(yùn)算量(BFLOPs)和每秒傳輸幀數(shù)(FPS)分別衡量模型運(yùn)行時所占內(nèi)存大小、計算量及運(yùn)行速度。
實驗選擇YOLOv3、YOLOv3-Tiny、YOLOv4、YOLOv4-Tiny、TS-YOLO 等算法進(jìn)行對比,其中YOLOv3-Tiny、YOLOv4-Tiny 以及TS-YOLO 都是輕量級網(wǎng)絡(luò),YOLOv3、YOLOv4 是單階段檢測算法。 其中YOLOv4-Tiny 是本文算法未改進(jìn)前的原網(wǎng)絡(luò),TS-YOLO 為本文算法。 輸入圖片大小均為608 ×608,對比結(jié)果如表2所示。

表2 不同算法在SHWD 上的對比
由表2可見,TS-YOLO 較原算法YOLOv4-Tiny 在均值平均精度、召回率以及F1 值上分別提高了12.91%、31.91%和19%,檢測精度接近YOLOv3、YOLOv4 高精度目標(biāo)檢測算法。 此外,提出的TS-YOLO 算法在模型體積上均小于其余四種算法,較原算法YOLOv4-Tiny 模型體積縮小了兩倍多,浮點運(yùn)算量僅比YOLOv3-Tiny 大不到兩個百分點,比其余算法的浮點運(yùn)算量都小,有利于緩解嵌入式設(shè)備的計算壓力,釋放存儲空間。
實驗結(jié)果表明,相較于YOLOv4-Tiny,改進(jìn)后的算法TS-YOLO 在減少計算量和模型體積的同時,有效提高了安全帽檢測精度。 具體檢測結(jié)果對比如圖5所示。

圖5 YOLOv4-Tiny 與TS-YOLO 檢測效果對比圖
圖5是運(yùn)用兩種算法分別在高空小目標(biāo)、部分遮擋目標(biāo)以及目標(biāo)密集的場景下進(jìn)行檢測的效果對比,其中左右兩側(cè)分別為YOLOv4-Tiny、TSYOLO 檢測的效果圖。 從圖5可看出,YOLOv4-Tiny 在檢測小目標(biāo)、部分遮擋目標(biāo)、密集目標(biāo)出現(xiàn)漏檢,而本文算法TS-YOLO 在保持其輕量化的同時,不僅提高了檢測精度,在目標(biāo)小、存在遮擋以及目標(biāo)密集的場景下仍具有較高的識別率,原算法YOLOv4-Tiny 出現(xiàn)的漏檢,在本文算法中并未出現(xiàn)。
為檢驗提出的模型在嵌入式平臺上的檢測速度,先在嵌入式平臺NVIDIA Jetson Nano 上配置加速引擎TensorRT 和Opencv 庫,嵌入式平臺如圖6所示。

圖6 嵌入式平臺
將服務(wù)器上訓(xùn)練得到的模型加載到嵌入式平臺的TensorRT 進(jìn)行加速推理,測試模型檢測速度,并與其他模型的檢測速度相比較,輸入圖片尺寸均為608 ×608。 速度檢測結(jié)果如表3所示。

表3 不同算法在Jetson Nano 的檢測速度
由表3可知,嵌入式平臺計算能力有限,在圖片輸入尺度為608 ×608 的條件下,檢測精度較高的YOLOv3 與YOLOv4 在Jetson Nano 上的檢測速度(FPS)最高分別只有1.63、1.82,無法實現(xiàn)實時檢測。 而TS-YOLO 在相同輸入尺寸下實現(xiàn)了每秒20.16 幀的檢測速度,可滿足在嵌入式平臺上對安全帽進(jìn)行實時檢測的需求。
實驗結(jié)果表明,本文提出的TS-YOLO 在嵌入式平臺滿足實時檢測的情況下,檢測精度較原網(wǎng)絡(luò)YOLOv4-Tiny 有較大幅度的提升,更適合在嵌入式平臺上進(jìn)行安全帽檢測。
提出一種改進(jìn)YOLOv4-tiny 的安全帽檢測方法TS-YOLO,旨在解決現(xiàn)存安全帽檢測方法中檢測精度低以及難以在嵌入式平臺有效運(yùn)行的問題。 TS-YOLO 通過優(yōu)化YOLOv4-tiny 的網(wǎng)絡(luò)架構(gòu),加入SPP 結(jié)構(gòu),并融合多尺度特征信息提高小目標(biāo)的安全帽檢測能力,其次引入EIOU 提高模型收斂速度以及檢測精度,最后通過K-means ++算法重聚類,得到適合的錨框。 通過實驗結(jié)果的驗證與分析可知,TS-YOLOv4 模型所需內(nèi)存大小僅為 YOLOv4-tiny 的41. 7%, mAP 提升了12.91%,檢測速度仍能保持與原算法一個水平,該方法在模型大小、檢測精度的表現(xiàn)均優(yōu)于YOLOv4-tiny,在嵌入式平臺上的檢測速度亦能滿足安全帽實時檢測的需求。
TS-YOLO 算法并未加入注意力機(jī)制,下一步將引入注意力機(jī)制,在保持其檢測速度的同時,進(jìn)一步提高檢測能力。