韓澤佳,肖秦琨,張立旗
(西安工業(yè)大學(xué) 兵器科學(xué)與技術(shù)學(xué)院,西安710016)
眾所周知,監(jiān)控系統(tǒng)對工地的安全至關(guān)重要,在過去的十幾年里,一部分人工智能技術(shù),如計算機(jī)視覺和機(jī)器學(xué)習(xí),已經(jīng)迅速應(yīng)用到工地的智能監(jiān)控當(dāng)中[1]。實(shí)現(xiàn)對工人安全頭盔反光衣實(shí)時檢測是關(guān)系到工人安全的一項(xiàng)重要任務(wù),同時有利于實(shí)現(xiàn)無人值守降低人工成本。因此,能夠?qū)崿F(xiàn)自動檢測工人是否穿戴安全頭盔反光衣具有重要意義。
自2014年Grishick 等提出的R-CNN 算法后,深度學(xué)習(xí)算法開始在目標(biāo)檢測領(lǐng)域占據(jù)了主導(dǎo)地位[2]。目前基于深度學(xué)習(xí)模型的目標(biāo)檢測算法主要分為兩類:一類是兩階段算法。這類算法的典型代表是Fast-R-CNN[3],F(xiàn)aster-R-CNN[4]等基于區(qū)域提議系列。與傳統(tǒng)的檢測算法相比,這種算法大大提高了檢測精度,但使用分段檢測算法導(dǎo)致檢測速度變慢,不能滿足實(shí)時性要求,是這種算法的最大缺陷;另一類是一階段檢測算法,通常以YOLO[5]和SSD[6]算法為代表。這種算法不需要生成候選區(qū)域,而是直接生成物體的類別概率和位置坐標(biāo),這種算法能滿足實(shí)時檢測的要求但是精度不如兩階段算法。
文獻(xiàn)[7]通過在YOLOv3 中引入通道注意力機(jī)制和改進(jìn)損失函數(shù)的方法對YOLOv3 進(jìn)行改進(jìn),使檢測更加精準(zhǔn)有效;文獻(xiàn)[8]在SSD 算法的基礎(chǔ)上通過使用表征能力更強(qiáng)的殘差網(wǎng)絡(luò)作為特征提取網(wǎng)絡(luò),然后再通過特征融合的方式提高目標(biāo)檢測精度;文獻(xiàn)[9]通過調(diào)整原SSD 檢測框架的參數(shù)并添加自注意力模塊來提高對安全帽佩戴的檢測。而上述方法沒有針對檢測安全帽和反光衣提出合理的改進(jìn)方案,因此,本文主要研究了在SSD 算法的基礎(chǔ)上提出改進(jìn),實(shí)現(xiàn)對安全帽反光衣的實(shí)時高效檢測。
本文針對原SSD 算法檢測精度不高問題做出以下改進(jìn):①改進(jìn)SSD 模型的特征提取網(wǎng)絡(luò),原始的VGG16 模型被部分ResNet50[10]取代,克服了VGG 網(wǎng)絡(luò)深化導(dǎo)致的網(wǎng)絡(luò)退化問題,提高網(wǎng)絡(luò)檢測精度。②同時針對網(wǎng)絡(luò)模型高層卷積核幾何變換能力低的問題,在最高層卷積層Conv_11 中添加可形變卷積模塊,使高層卷積核的采樣點(diǎn)位置根據(jù)圖像內(nèi)容自適應(yīng)變化,以適應(yīng)形狀、大小等不同目標(biāo)的幾何變形用來提高檢測精度。
SSD 于2016年問世,是單階段檢測算法中比較經(jīng)典的算法,因其不錯的檢測結(jié)果和能達(dá)到實(shí)時檢測的速度廣泛應(yīng)用于工程實(shí)踐中,SSD 整體結(jié)構(gòu)如圖1所示。
圖1 SSD 算法原理圖Fig.1 SSD algorithm schematic diagram
從圖1可知,SSD 網(wǎng)絡(luò)結(jié)構(gòu)和算法流程大致可以分為兩個部分:基礎(chǔ)網(wǎng)絡(luò)VGG-16 和額外功能層,其中對原始VGG-16 做出修改,保留前5 層卷積層,同時將全連接層FC6 替換為3×3×1024 的卷積,即Conv6,全連接層FC7 替換為1×1×1024 的卷積,即Conv7,并在Conv7 后面添加了4 個卷積層Conv8~Conv11 部分均為兩個尺寸,分別為3×3 和1×1 的卷積層構(gòu)成的卷積模塊。
通過實(shí)驗(yàn)發(fā)現(xiàn),深層網(wǎng)絡(luò)存在退化問題,隨著VGG16 網(wǎng)絡(luò)深度的增加,網(wǎng)絡(luò)精度出現(xiàn)飽和度下降的問題,之所以選擇ResNet50 是因?yàn)楫?dāng)feature map 的大小減半時,其數(shù)量會在同一時間能翻倍,從而保持了網(wǎng)絡(luò)的復(fù)雜性。這樣就可以解決網(wǎng)絡(luò)深度增加時的精度下降問題。為了提高特征學(xué)習(xí)效果和檢測精度,采用ResNet50 作為特征提取網(wǎng)絡(luò),但并不是完整的使用了ResNet50 層結(jié)構(gòu),在這里使用的是Conv1~Conv4 所對應(yīng)的一系列殘差結(jié)構(gòu),將后面的殘差結(jié)構(gòu)舍棄掉,同時使用殘差結(jié)構(gòu)的Conv4_1作為第一個feature map 進(jìn)行輸出。殘差塊結(jié)構(gòu)如圖2所示。
圖2 殘差結(jié)構(gòu)Fig.2 Residual structure
下面表達(dá)式中,其中σ 代表非線性函數(shù)ReLu[11]:
然后通過一個恒等式和第2 個ReLu 函數(shù),得到輸出y 為
對于一個或者幾個堆成的結(jié)構(gòu),當(dāng)輸入為x 時,它的學(xué)習(xí)的特征是H(x),wi為權(quán)值系數(shù),為實(shí)現(xiàn)殘差結(jié)構(gòu)的恒等映射,可以通過H(x)-x 趨近于0,使H(x)逼近于x。在這里對殘差結(jié)構(gòu)進(jìn)行修改,修改后的殘差結(jié)構(gòu)如圖3所示,將Conv_4 的Block1 中的3×3 的卷積核和捷徑上的1×1 的卷積核Stride=2 修改為Stride=1。
圖3 修改后的殘差結(jié)構(gòu)Fig.3 Modified residual structure
修改后帶來的變化是,當(dāng)特征矩陣經(jīng)過Conv_3所對應(yīng)的一系列殘差結(jié)構(gòu)之后輸出的特征矩陣是38×38×512,通過修改后的步距特征矩陣輸出是38×38×1024,修改后的殘差層所對應(yīng)的卷積核大小個數(shù)和輸出特征矩陣的大小如表1所示,調(diào)整后的步距只對高和寬產(chǎn)生影響,不會對深度產(chǎn)生影響。
表1 修改后的殘差卷積層輸出結(jié)果Tab.1 Output results of modified residual convolution layer
圖像的高層特征語義信息比較豐富,然而對目標(biāo)位置的預(yù)測比較粗略,為了提升SSD 算法對目標(biāo)位置的預(yù)測來提高檢測精度,引入可形變卷積[12],可形變卷積網(wǎng)絡(luò)本質(zhì)上是對傳統(tǒng)平方卷積的一種改進(jìn),傳統(tǒng)的平方卷積使用規(guī)則的格點(diǎn)采樣,使得網(wǎng)絡(luò)難以適應(yīng)幾何形變。卷積的采樣方式如圖4所示,其中圖4(a)為正常卷積采樣的方式,圖4(b),圖4(c)和圖4(d)為可形變卷積在正常的采樣坐標(biāo)上加了一個位置偏移量,其中圖4(c)和圖4(d)展示了可形變卷積可以做尺度變換和旋轉(zhuǎn)變換。
圖4 卷積采樣方式Fig.4 Convolution sampling method
這個模塊很輕,它為偏移學(xué)習(xí)增加了少量的參數(shù)和計算同時很容易利用神經(jīng)網(wǎng)絡(luò)中的反向傳播進(jìn)行端到端的訓(xùn)練提高檢測精度,從公式的角度來看,傳統(tǒng)的卷積定義為
式中:Pn代表卷積網(wǎng)格中的任意一個像素;P0代表輸出特征圖y 上的一個位置;w 代表卷積核的權(quán)重;R 代表一個膨脹系數(shù)為1 的標(biāo)準(zhǔn)3×3 卷積核。
可形變卷積定義為
式中:ΔPn代表部分網(wǎng)絡(luò)結(jié)構(gòu)中的一些像素的偏移,由于偏移量ΔPn通常不是整數(shù)而是小數(shù),非整數(shù)的坐標(biāo)是無法在圖像這種離散數(shù)據(jù)上使用,所以使用了雙線性插值法[13]對ΔPn進(jìn)行取整操作,公式為
式中:p 代表任意像素的位置;p 代表公式(5)中的(P0+Pn+ΔPn);q 代表特征圖x 上所有整數(shù)空間的位置;G(.,.)代表雙線性插值內(nèi)核,它可以分成兩個一維的內(nèi)核:
圖5 可形變卷積層的實(shí)現(xiàn)過程Fig.5 Realization process of deformable convolution layer
引入可形變卷積后,原來的卷積神經(jīng)網(wǎng)絡(luò)分為了兩路且共享一個輸出特征圖,其中上面的一路通過一個額外的卷積層來學(xué)習(xí)偏移offset,得到一個H×W×2N 的輸出,其中N 代表像素的個數(shù),2N 代表x 與y 兩個不同方向的偏移。下面的一路的輸入特征圖和上面的偏移共同作為可形變卷積層的輸入,計算過程和常規(guī)卷積一樣。
改進(jìn)后的SSD 模型在最高層卷積模塊Conv11_2中添加可形變卷積模塊,然后通過ReLu 函數(shù)輸出表示為Conv11_2 的特征圖。圖5中可形變卷積模塊層偏移量和可形變卷積層的具體參數(shù)如表2所示。
表2 可形變卷積層參數(shù)Tab.2 Parameters of deformable convolutional layer
改進(jìn)后的整體網(wǎng)絡(luò)結(jié)構(gòu)如圖6所示,使用ResNet50 的Conv4_1 作為第一個特征圖輸出,第2~5 輸出特征層輸出依次由原來SSD 算法進(jìn)行輸出,最后一個輸出特征層經(jīng)過可形變卷積后進(jìn)行輸出,從改進(jìn)后的SSD算法中選取38×38,19×19,10×10,5×5,3×3,1×1 總共6 種尺寸先驗(yàn)框進(jìn)行輸出,總共生成8732 個先驗(yàn)框。
圖6 改進(jìn)后的整體網(wǎng)絡(luò)結(jié)構(gòu)Fig.6 Overall network structure after improvement
對于每個先驗(yàn)框,SSD 網(wǎng)絡(luò)計算兩個關(guān)鍵組成部分,其中包括置信度損失和位置損失,其中置信度損失使用分類交叉熵?fù)p失函數(shù)計算先驗(yàn)框中存在對象的置信度,位置損失用于計算網(wǎng)絡(luò)預(yù)測的邊界框距離真實(shí)框的距離有多遠(yuǎn)。整體的多任務(wù)損失函數(shù)定義如下:
式中:Lconf代表置信度損失;Lloc代表位置損失;N 代表匹配到的正樣本的個數(shù);c 代表類別;l 代表預(yù)測框;g 代表真實(shí)框;α 是一個平衡系數(shù)。
通過現(xiàn)場拍攝獲取以及網(wǎng)絡(luò)爬蟲的方式獲取關(guān)于安全頭盔和反光衣的圖片6232 張,經(jīng)過SSD原本算法中的水平翻轉(zhuǎn)等數(shù)據(jù)增強(qiáng)方法最終生成數(shù)據(jù)集8166 張,其中訓(xùn)練集、驗(yàn)證集和測試集按照7∶2∶1 的比例進(jìn)行分配,其中訓(xùn)練集和驗(yàn)證集參與網(wǎng)絡(luò)的訓(xùn)練,本數(shù)據(jù)集要制作成符合VOC 格式,每張圖片使用LableImage 軟件進(jìn)行標(biāo)注生成對應(yīng)的XML 文件,樣本標(biāo)簽總共分為4 類helmet(佩戴安全頭盔)、without helmet (沒有佩戴安全頭盔)、suit(穿反光衣)、without suit(沒有穿反光衣),標(biāo)注結(jié)果如圖7所示。
圖7 標(biāo)注結(jié)果Fig.7 Labeled results
本文的硬件服務(wù)器配置為一塊Nvidia GeForce RTX 2080Ti 顯卡,處理器為Intel(R)Xeon(R)Silver4110 CPU,實(shí)驗(yàn)操作系統(tǒng)為Ubantu18.04LTS。
本文改進(jìn)的模型首先通過加載原SSD 算法在COCO[14]數(shù)據(jù)集上訓(xùn)練得到的預(yù)訓(xùn)練權(quán)重,然后通過神經(jīng)網(wǎng)絡(luò)的遷移學(xué)習(xí),加載預(yù)訓(xùn)練權(quán)重對收集的訓(xùn)練集和驗(yàn)證集進(jìn)行訓(xùn)練,訓(xùn)練中的超參數(shù)設(shè)置如表3所示,最后得出訓(xùn)練的結(jié)果,進(jìn)行分析。
表3 訓(xùn)練超參數(shù)設(shè)置Tab.3 Training super parameter Settings
本文算法使用8 進(jìn)程數(shù),使用SGD 優(yōu)化器進(jìn)行優(yōu)化,初始學(xué)習(xí)率設(shè)為0.0005,每隔5 步降低一次學(xué)習(xí)率,由圖8可以看出在經(jīng)過200 輪的迭代訓(xùn)練后,訓(xùn)練結(jié)果穩(wěn)定在一個較高的平均精度值,能達(dá)到83.7%。
圖8 訓(xùn)練曲線Fig.8 Training curve
本文算法通過與原SSD 算法進(jìn)行對比,測試圖片對比結(jié)果如圖9所示,通過測試結(jié)果圖對比發(fā)現(xiàn),原SSD 檢測算法在燈光昏暗和不同角度下存在漏檢現(xiàn)象的發(fā)生,本文算法的表現(xiàn)要優(yōu)于原SSD 檢測算法。
圖9 SSD 算法改進(jìn)前后對比圖Fig.9 Comparison of SSD algorithm before and after improvement
為研究改進(jìn)SSD 網(wǎng)絡(luò)結(jié)構(gòu)對檢測準(zhǔn)確度產(chǎn)生的影響,將原SSD 算法和改進(jìn)的SSD 算法針對4 種標(biāo)簽的檢測準(zhǔn)確率進(jìn)行對比,對比結(jié)果如表4所示,本文算法針對每類標(biāo)簽的檢測精度比原SSD 算法都有所提升。
表4 SSD 和本文算法標(biāo)簽檢測準(zhǔn)確率對比Tab.4 Comparison of label detection accuracy between SSD and proposed algorithm
為了驗(yàn)證本文算法的有效性,將與已有的目標(biāo)檢測模型Faster-Rcnn,F(xiàn)aster+ResNet50,SSD+MobileNetv2,YOLOv3 算法進(jìn)行測試對比,整個實(shí)驗(yàn)過程使用相同的硬件配置,統(tǒng)一使用本文所制作的數(shù)據(jù)集進(jìn)行訓(xùn)練和測試,訓(xùn)練和測試結(jié)果如表5所示,可以看出在檢測mAP 上Faster+ResNet50 的表現(xiàn)是最好的,但是它的檢測速度只有11 幀/s,無法實(shí)現(xiàn)現(xiàn)場的實(shí)時檢測,同時SSD 和YOLOv3 檢測速度都很快,但是它們在檢測mAP 上都不如本文算法。
表5 測試結(jié)果對比Tab.5 Comparison of test results
本文提出一種改進(jìn)的SSD 檢測安全頭盔和反光衣算法,通過替換原SSD 算法的特征提取網(wǎng)絡(luò)和使用可形變卷積的方法來提高檢測精度,實(shí)驗(yàn)結(jié)果表明,本文算法能達(dá)到的檢測mAP 有83.7%,比原SSD 算法提高了4.8%,同時檢測速度為30.7 幀/s,在保證高精度檢測的同時還能滿足實(shí)時檢測的要求,對實(shí)現(xiàn)安全頭盔和反光衣檢測具有良好的發(fā)展前景。