張立國 李佳慶 趙嘉士 耿星碩 章玉鵬
(燕山大學(xué)電氣工程學(xué)院 秦皇島 066004)
(河北省測試計量技術(shù)及儀器重點實驗室 秦皇島 066004)
近些年來,全球自然災(zāi)害與意外事故頻頻發(fā)生,人民的生命安全受到重大威脅。普遍地,部分被困人員因為障礙的遮擋而得不到及時救援,最終失去生命[1-3],因此,能否在最佳救援時間內(nèi)找到被困人員尤為重要。
隨著傳統(tǒng)目標(biāo)檢測算法性能達到瓶頸,目標(biāo)檢測技術(shù)達到了一個穩(wěn)定的水平。隨著AlexNet 網(wǎng)絡(luò)使用卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural network,CNN)大幅提升目標(biāo)分類的準(zhǔn)確度之后,卷積神經(jīng)網(wǎng)絡(luò)再次回到人們的視線中,基于卷積神經(jīng)網(wǎng)絡(luò)的目標(biāo)檢測技術(shù)開始飛速發(fā)展。如今,目標(biāo)檢測算法可以分為兩類,一類是以YOLO(you only look once)系列和SSD(single shot multibox detector)算法為代表的一階段檢測算法,另一類是以R-CNN(region-CNN)系列為代表的二階段檢測算法[4-7]。最初的YOLO算法檢測效果并不好,但隨后更新的YOLOv2[8]、YOLOv3[9]、YOLOv4[10]等一系列算法,在速度和精度上都得到了巨大的提升[11-12],使得其在不同背景下行人檢測中得到大規(guī)模應(yīng)用。如文獻[13]使用Dense-YOLO 網(wǎng)絡(luò)模型進行井下行人檢測。文獻[14]使用改進YOLO 輕量化網(wǎng)絡(luò)的算法檢測行人。文獻[15]使用改進YOLO 網(wǎng)絡(luò)對遮擋行人進行檢測仿真。但是在地震等災(zāi)后救援場景中,算法需要部署在有限的嵌入式設(shè)備計算資源上,這對YOLO 網(wǎng)絡(luò)的實時性和準(zhǔn)確性提出了巨大挑戰(zhàn)。
本文選擇目前在速度和精度上有明顯優(yōu)勢的YOLOv4 網(wǎng)絡(luò)為基礎(chǔ),將MobileNetv1 輕量級網(wǎng)絡(luò)引入YOLOv4 中,同時為了解決減少參數(shù)量而導(dǎo)致的準(zhǔn)確率降低問題,使用K-means++算法優(yōu)化預(yù)選框以提升模型識別精度,最終得到改進的YOLOv4 模型。新的網(wǎng)絡(luò)模型可以大幅減少網(wǎng)絡(luò)的參數(shù)量,提升檢測速度,使其滿足移動端設(shè)備存儲容量小、算力低等條件。
YOLOv4[10]是基于回歸的一階段目標(biāo)檢測算法。其網(wǎng)絡(luò)結(jié)構(gòu)由主干特征提取網(wǎng)絡(luò)、特征融合網(wǎng)絡(luò)和進行分類、回歸的檢測頭(Head)組成。主干特征提取網(wǎng)絡(luò)利用殘差塊對輸入圖片進行5 次卷積,獲得數(shù)據(jù)的特征信息。YOLOv4 在DarkNet53 的基礎(chǔ)上結(jié)合跨階段局域網(wǎng)絡(luò)(cross stage partial network,CSPNet)[16]的優(yōu)點,提出了CSPDarkNet53 結(jié)構(gòu),利用大殘差塊的不完全截流特性,降低了主干網(wǎng)絡(luò)的計算瓶頸和內(nèi)存成本。空間金字塔池化(spatial pyramid pooling,SPP)結(jié)構(gòu)主要功能是增加網(wǎng)絡(luò)的感受野,提高特征金字塔結(jié)構(gòu)的特征提取能力。同時特征融合網(wǎng)絡(luò)采用SPP 和路徑聚合網(wǎng)絡(luò)(path aggregation network,PANet)的網(wǎng)絡(luò)結(jié)構(gòu),在原有上采樣的特征淺層融合基礎(chǔ)上[17-19],增加了下采樣的方式進行深層信息融合,這樣可以使不同特征層有效融合,避免直接對圖片進行剪裁縮放造成數(shù)據(jù)信息丟失。
YOLOv4-MobileNetv1 具體實現(xiàn)是將YOLOv4 的主干特征提取網(wǎng)絡(luò)CSPDarkNet53[17]替換成網(wǎng)絡(luò)參數(shù)輕量化的MobileNetv1 神經(jīng)網(wǎng)絡(luò),降低YOLO 網(wǎng)絡(luò)整體的計算量和參數(shù)量。改進后的YOLOv4 網(wǎng)絡(luò)的整體結(jié)構(gòu)如圖1 所示。其中將原YOLOv4 網(wǎng)絡(luò)的輸入圖片尺寸大小608×608 改成416×416,在MobileNetv1 主干特征網(wǎng)絡(luò)采用Mish 激活函數(shù),后面的網(wǎng)絡(luò)仍采用ReLU 激活函數(shù)。Mish 激活函數(shù)保證了正數(shù)可以達到任意高度,避免了由于封頂而導(dǎo)致的梯度飽和,對負(fù)值的輕微變化允許更好的梯度流,而不是像ReLU 激活函數(shù)一樣具有零硬邊界。采用Mish 激活函數(shù)可以允許更好的信息深入神經(jīng)網(wǎng)絡(luò),從而得到更好的準(zhǔn)確性和泛化能力。Mish 激活函數(shù)的計算公式如式(1)、(2)所示。
圖1 YOLOv4-MoblieNetv1 整體結(jié)構(gòu)圖
式中x為輸入數(shù)據(jù)。
SPP 結(jié)構(gòu)[18]分別使用4 個不同大小的卷積核對特征提取網(wǎng)絡(luò)提取到的特征進行最大池化處理,卷積核大小分別為1×1、5×5、9×9、13×13,將4個池化處理后的不同尺度特征圖進行拼接組成新的特征層。在PANet 結(jié)構(gòu)[19]對MobileNetv1 主干特征提取網(wǎng)絡(luò)特征提取的結(jié)果和SPP 網(wǎng)絡(luò)特征提取結(jié)果做進一步的信息提取。進行特征提取的特征圖分別為52×52、26×26、13×13。PANet 網(wǎng)絡(luò)加強了對低層特征信息的利用率,通過不同層的自適應(yīng)池化,將特征網(wǎng)格與全部特征層直接融合在一起,在下采樣的過程中將融合的結(jié)果傳入檢測頭部分進行最終的回歸和分類[20]。最后,YOLOv4-Head 采用PANet結(jié)構(gòu)的3 個特征層進行預(yù)測,分別進行卷積核大小為3×3 與1×1 的卷積操作,判別特征層的3 個先驗框,判斷網(wǎng)格區(qū)域內(nèi)目標(biāo)及種類,最終獲得預(yù)測框[21]。
通常搭建更深更復(fù)雜的神經(jīng)網(wǎng)絡(luò)可以提升準(zhǔn)確率,但其在推理速度和模型大小上卻不一定是高效的。MobileNetv1 是基于深度可分離卷積構(gòu)建的輕量級網(wǎng)絡(luò)模型[22],并定義2 個超量化參數(shù)α和β來降低模型的寬度和輸入圖像的分辨率。α為寬度數(shù)乘用來控制卷積層卷積核數(shù)量從而顯性地將卷積的輸出通道數(shù)下降α倍,β為分辨率數(shù)乘用來隱性地控制輸入圖像大小,通過這2 個參數(shù)來控制模型的大小。
為了使網(wǎng)絡(luò)更好地進行融合,本文對MoblieNetv1 模型進行了修改。首先將輸入圖片尺寸從224×224 替換成416×416,這樣可以通過優(yōu)化后續(xù)的K-means++算法提高檢測精度;其次裁剪部分了卷積層和全連接層,這樣可以使得網(wǎng)絡(luò)更加輕量化,提高運行速度。裁剪后的MobileNetv1 網(wǎng)絡(luò)結(jié)構(gòu)如表1 所示,其中t是拓展因子,c是輸出特征矩陣深度channel,n是block_body 的重復(fù)次數(shù),s是步距。
表1 裁剪后MobilNetv1 網(wǎng)絡(luò)結(jié)構(gòu)
本文中MobileNetv1 的平均池化采用的步長為1,卷積核尺寸為7×7。由于采取的步長為1,所以輸出的特征圖不變,仍然為13×13×1024。
MobileNetv1 網(wǎng)絡(luò)采用了深度可分離卷積作為基礎(chǔ)的特征提取單元[23]。深度可分離卷積[24]將卷積過程拆分為逐通道卷積與逐點1×1 卷積2 步,這種分解過程能大量減少冗余計算量。相比傳統(tǒng)卷積,逐通道卷積的卷積核通道為1,輸入特征矩陣的維度同卷積核個數(shù)以及輸出特征矩陣的維度相同。逐點卷積同普通卷積基本一致,唯一區(qū)別在于逐點卷積的卷積核大小為1×1。逐通道卷積和逐點卷積共同組成了深度可分離卷積,理論上使用深度可分離卷積的參數(shù)計算量為傳統(tǒng)卷積的1/9。深度可分離模塊的具體結(jié)構(gòu)如圖2 所示。
MobileNetv1 網(wǎng)絡(luò)使用ReLU6 激活函數(shù)是為了滿足移動端設(shè)備的需求。移動端通常使用Float16或者Int8 等較低精度的模型,這種模型的精度范圍無法覆蓋到正無窮,若使用ReLU 激活函數(shù)會帶來精度損失,而ReLU6 激活函數(shù)將上限設(shè)為6,這樣可以很好地滿足移動設(shè)備的需求。
為了增強模型對跨尺度目標(biāo)的預(yù)測能力,本文采用K-means++算法對圖像特征層上的錨框進行重新聚類,得到9 個新的錨框。相較于K-means 算法需要人為地給定初始聚類中心、初始聚類中心對最終聚類結(jié)果影響較大的缺點,本文使用的Kmeans++算法只需要給出第1 個初始聚類中心,并且提高了后續(xù)聚類中心選取的效率。K-means ++算法首先從數(shù)據(jù)集中任意選取一個樣本點作為初始聚類中心,然后計算所有樣本點到已有聚類中心的距離并使用加權(quán)概率分布選擇一個新的樣本點作為新的聚類中心,不斷重復(fù)選取,直到選擇好9 個錨框為止。K-means++算法解決了傳統(tǒng)K-means 算法對初始聚類中心敏感的問題,主要改進在于第1 步選取初始聚類中心時不再是一次性隨機選取完,而是遵循初始聚類中心之間的距離盡可能遠的原則去逐次選取聚類中心。K-means ++算法計算樣本點到聚類中心的距離為歐氏距離,其計算公式如式(3)所示。
式中xi、xj代表2 個樣本點,其中每個樣本點都有p個屬性。
表2 不同算法準(zhǔn)度和精度對比
K-means++算法最終聚類結(jié)果的評估標(biāo)準(zhǔn)為誤差平方和,其公式如式(4)、(5)所示。
式中,SSE表示誤差平方和,在相同迭代次數(shù)的條件下,SSE的值越小則說明算法損失越小;ei為k個聚類中心的第i個聚類中心點;dist表示每個點到它所屬簇的中心點的距離。
最終以重疊度(intersection over union,IOU)為標(biāo)準(zhǔn)[25],在一定的閾值下,IOU 的值越大,生成的錨點到聚類中心的距離就越小[26],預(yù)測結(jié)果越精確。最終得出適合災(zāi)后人員數(shù)據(jù)集的錨框,其寬和高分別是(142,110)、(192,243)、(459,401)、(36,75)、(76,55)、(72,146)、(12,16)、(19,36)、(40,28)。
由于目前的災(zāi)后人員圖像數(shù)據(jù)集較少,數(shù)據(jù)集圖像質(zhì)量也不高,因此本文制作了一個災(zāi)后人員檢測數(shù)據(jù)集。數(shù)據(jù)集包含2000 張不同場景下的災(zāi)后人員的圖片和高度遮擋的圖片。在VOC2007 +VOC2012 數(shù)據(jù)集中,訓(xùn)練集有16 551 張圖片,測試集有4952 張圖片。其圖片具有豐富的前景和背景,同時具有大量高度遮擋的人群場景。實驗時使用VOC2007+VOC2012 公開數(shù)據(jù)集和自制災(zāi)后人員數(shù)據(jù)集進行訓(xùn)練和驗證,對VOC2007 +VOC2012 公開數(shù)據(jù)集進行數(shù)據(jù)預(yù)處理,使用Mosaic 和Label smooth 2 種數(shù)據(jù)增強方法。Mosaic 數(shù)據(jù)增強可以有效提高數(shù)據(jù)集的豐富度和檢測的魯棒性,Label smooth 數(shù)據(jù)增強可以提升精度。
本文使用精準(zhǔn)率P(precision)、召回率R(recall)和平均精度均值mAP(mean average precision)3個指標(biāo)檢測網(wǎng)絡(luò)模型的識別效果,同時使用畫面每秒傳輸幀數(shù)fps(frames per second)作為模型檢測速度評估的指標(biāo)[27]。精準(zhǔn)率和召回率的計算公式如式(6)、(7)所示。
式(6)~(7)中,TP(true positives)表示將正樣本的目標(biāo)預(yù)測為正值,FN(true negatives)表示將負(fù)樣本的目標(biāo)預(yù)測為負(fù)值,FP(false positives)表示將正樣本的目標(biāo)預(yù)測為負(fù)值。
平均準(zhǔn)確率(AP)和平均準(zhǔn)確率均值(mAP)的計算公式如式(8)、(9)所示,式中,N為類別數(shù)。
為驗證模型的可靠性,在同一設(shè)備的情況下,使用不同的改進算法進行對比實驗,不同算法結(jié)果如 圖3~6 所示。
圖3 MobileNetv1 P-R 曲線
圖4 MobileNetv2 P-R 曲線
圖5 MobileNetv3 P-R 曲線
圖6 DenseNet121 P-R 曲線
為了檢測改進后算法的可行性,本文將所有嘗試改進的網(wǎng)絡(luò)模型和原YOLOv4 網(wǎng)絡(luò)模型從檢測精度和運行速度兩方面進行對比,同時還和國內(nèi)外一些目標(biāo)檢測的先進模型進行對比,采用平均準(zhǔn)確率均值(mAP)檢驗8 個網(wǎng)絡(luò)模型的精度,采用畫面每秒傳輸幀數(shù)(FPS)比較8 個模型的檢測速度,對比結(jié)果見表2。
從表2 可知,YOLOv4 的平均檢測精確度達到89.99%,檢測速度達到37.8 fps。而對于其余先進算法,精度雖然都有所下降,但MobileNet 系列在檢測速度上得到了較大提升。其中YOLOv4-Mobile-Netv1 網(wǎng)絡(luò)模型效果最好,檢測速度達到了72.61 fps,較原網(wǎng)絡(luò)提升了91.98%。由于引入了深度可分離卷積操作所以其精度略低于YOLOv4 模型,但仍高于其余模型。
自然災(zāi)害發(fā)生后,會出現(xiàn)建筑物損毀、人員掩埋、城市內(nèi)澇等現(xiàn)象,導(dǎo)致被困人員特征不明顯、難以被識別等問題。而基于深度學(xué)習(xí)的目標(biāo)檢測算法需要大量帶標(biāo)簽的數(shù)據(jù)進行訓(xùn)練,否則會出現(xiàn)過擬合、泛化能力較差等問題。目前的公開數(shù)據(jù)集還沒有針對災(zāi)后人員檢測的,因此為了精細化實時檢測,本文搜集了大量災(zāi)后圖片并制作成數(shù)據(jù)集,內(nèi)容包括城市廢墟、洪水內(nèi)澇、野外山林等。
從測試集中挑選部分圖片進行結(jié)果展示,如圖7所示,本文提出的改進YOLOv4-MobileNetv1 網(wǎng)絡(luò)模型在有不同程度遮擋的復(fù)雜環(huán)境下均檢測到了目標(biāo),取得了較好表現(xiàn)。
圖7 部分測試集結(jié)果
從測試集結(jié)果圖7(a)和(b)中可以看到,當(dāng)?shù)卣鸬茸匀粸?zāi)害發(fā)生在城市中,會造成人員被廢墟掩埋的情況。這時由于遮擋過多或者目標(biāo)距離太近可能出現(xiàn)漏檢現(xiàn)象,但大部分救援對象是可以被準(zhǔn)確檢測出來的。從測試集結(jié)果圖7(c)和(d)可以看出,當(dāng)救援背景發(fā)生在野外時,會出現(xiàn)被救人員在圖片中占比過小、顏色同背景較為接近的情況,本文提出的改進網(wǎng)絡(luò)可以對不同尺度、顏色相近的目標(biāo)進行識別。從測試結(jié)果來看,本文提出的改進YOLOv4算法對尺度變換、背景顏色干擾、部分遮擋等問題均有良好的檢測效果,但對于遮擋情況過于嚴(yán)重、人員距離過近的情況其檢測精度仍待提高。
本文提出了一種改進的YOLOv4 的輕量化災(zāi)后人員檢測算法,將MobileNetv1 輕量級網(wǎng)絡(luò)替換原YOLOv4 主干特征提取網(wǎng)絡(luò),進而得到MobileNetv1-YOLOv4 模型;采用K-means++聚類對災(zāi)后人員目標(biāo)樣本進行錨定框大小的優(yōu)化,提升模型最終識別度。實驗表明該方法平均每秒檢測約92 張圖像,在VOC2007 公開數(shù)據(jù)集上的平均準(zhǔn)確率均值達到了82.17%,單獨檢測受災(zāi)人員的成功率達到71.81%,同時對不同環(huán)境有良好的抵抗能力和魯棒性。但是本文方法受限于人員太密集、障礙物物遮擋等問題,導(dǎo)致實際檢測中仍存在少量的漏檢與錯檢,下一階段工作將針對此問題進行更深入的研究。