黃奕川,李涼海,馬紀(jì)軍,崔慧敏
(北京遙測技術(shù)研究所 北京 100076)
近年來,隨著計(jì)算平臺和深度學(xué)習(xí)技術(shù)的發(fā)展,目標(biāo)檢測技術(shù)在各個領(lǐng)域都得到了廣泛地應(yīng)用。將目標(biāo)檢測技術(shù)搭載在無人機(jī)上,通過對無人機(jī)拍攝得到圖片進(jìn)行智能圖像處理與分析,從而得到目標(biāo)在圖像中的類別與位置信息,可以極大地擴(kuò)展無人機(jī)的應(yīng)用場景。隨著無人機(jī)在社會生活中的應(yīng)用越來越廣泛,對航拍圖像的分析需求逐年增大,將目標(biāo)檢測技術(shù)與無人機(jī)航拍技術(shù)相互結(jié)合逐漸成為當(dāng)前的研究熱點(diǎn)之一[1]。
不同于技術(shù)相對成熟的地面靜態(tài)目標(biāo)檢測,當(dāng)前無人機(jī)航拍目標(biāo)檢測還存在許多未解決的問題,這些問題主要可以歸結(jié)于四個方面:①檢測目標(biāo)數(shù)量大。與一般的目標(biāo)檢測數(shù)據(jù)集不同,無人機(jī)目標(biāo)檢測往往有可能在一張圖片中包含上百個需要檢測的模型,如果選用占用資源較大的算法,可能會出現(xiàn)資源不夠用的情況[2]。② 目標(biāo)尺寸多樣性。無人機(jī)在拍攝圖像時,由于其飛行高度、拍攝角度、物體遠(yuǎn)近和目標(biāo)類別的不同,拍攝得到的樣本大小也多種多樣,這給深度學(xué)習(xí)算法的訓(xùn)練帶來了一定挑戰(zhàn)[3]。③運(yùn)動模糊。相比于靜止平臺上攝像頭的成像,無人機(jī)飛行過程中攝像頭成像容易出現(xiàn)運(yùn)動模糊,這給目標(biāo)檢測算法帶來了一定難度[4]。④ 算力限制。由于無人機(jī)整機(jī)功耗和尺寸的限制,無人機(jī)在進(jìn)行實(shí)時目標(biāo)檢測時對于算法復(fù)雜度有較高要求[5]。
近年來,深度學(xué)習(xí)技術(shù)在計(jì)算機(jī)視覺方向上有較大的進(jìn)步與發(fā)展,以卷積神經(jīng)網(wǎng)絡(luò)為代表的深度學(xué)習(xí)算法相較于傳統(tǒng)的手工特征目標(biāo)檢測算法,在檢測精度與速度上都有顯著提升,逐漸取代了傳統(tǒng)目標(biāo)檢測算法,成為了當(dāng)前目標(biāo)檢測技術(shù)的主流算法?;谏疃葘W(xué)習(xí)的目標(biāo)檢測算法主要分為單階段和兩階段兩種[6]。單階段目標(biāo)檢測算法采用端對端的方式[7],直接在原圖中提取特征,并以此來預(yù)測目標(biāo)的類別和位置。兩階段目標(biāo)檢測算法將檢測過程分成了兩步進(jìn)行:首先,通過候選區(qū)域生成算法生成候選區(qū)域;然后,將生成得到的候選區(qū)域輸出到后續(xù)網(wǎng)絡(luò),以確定目標(biāo)的所屬類別和位置[8]。單階段目標(biāo)檢測算法的結(jié)構(gòu)相對較為簡單,且檢測速度更快,但是其定位精度往往不如兩階段目標(biāo)檢測算法[9]。
由于無人機(jī)本身算力的限制和對實(shí)時性的要求,本文選用SSD 單階段目標(biāo)檢測算法作為基準(zhǔn)算法。并針對無人機(jī)航拍圖像中目標(biāo)尺寸多樣、算力有限等問題,對SSD 算法做出相應(yīng)改進(jìn),最后對比改進(jìn)前后的算法效果,體現(xiàn)改進(jìn)的有效性。
SSD 算法使用VGG16 作為基礎(chǔ)特征提取網(wǎng)絡(luò)[10],在保證和Faster R-CNN 算法具有同樣檢測精度的同時,檢測速度快于YOLO 算法[11]。算法通過骨干網(wǎng)絡(luò)(Backbone)后得到38×38×512 的特征圖,然后將特征圖進(jìn)行下采樣,依次得到19×19×1 024、10×10×512、5×5×256、3×3×256、1×1×256 的特征圖,然后將這些特征圖作為檢測預(yù)測層的輸入,在不同維度下預(yù)測目標(biāo)框的位置,最后再經(jīng)過極大值抑制算法NMS(Non-Maxmum Suppression),輸出預(yù)測目標(biāo)框的位置和類別[12],其結(jié)構(gòu)如圖1 所示。
圖1 SSD 網(wǎng)絡(luò)框架圖Fig.1 The structure of SSD
SSD 算法通過在基礎(chǔ)特征提取網(wǎng)絡(luò)后添加卷積特征層,這些層的尺寸逐漸縮小,通過在這些不同大小的特征層上進(jìn)行訓(xùn)練和預(yù)測,利用多層特征圖的組合作為預(yù)測目標(biāo)類別和位置的依據(jù),以達(dá)到多尺度融合效果[13],確保了檢測算法對于多尺度目標(biāo)的有效性。但是,由于SSD 算法使用淺層網(wǎng)絡(luò)的特征信息檢測小目標(biāo),而淺層特征卷積層數(shù)少,缺乏深層語義特征,表征能力不夠強(qiáng),導(dǎo)致對小目標(biāo)物體的召回率很低。
在SSD 原始模型中,采用了VGG16 作為檢測算法的主干網(wǎng)絡(luò)。VGG16 由13 個卷積層、3 個全連接層和5 個池化層組成,其突出特點(diǎn)是結(jié)構(gòu)簡單,網(wǎng)絡(luò)通過堆疊若干卷積層和池化層構(gòu)成,網(wǎng)絡(luò)的搭建較為容易實(shí)現(xiàn)。其缺點(diǎn)在于,VGG16 的層數(shù)較淺,特征提取并不充分,特別是在對小目標(biāo)的檢測上,性能并不理想。
本文參考CVPR2017 上提出的Densenet-121 結(jié)構(gòu)作為主干網(wǎng)絡(luò)[14]。稠密網(wǎng)絡(luò)(Densenet)是由稠密塊(Dense block)模塊加上過度(Transition)模塊組合而成,Densenet 由若干Dense block 組成,每個Dense block 由若干卷積層組成,稠密塊中的特征圖大小一致。相比于其他網(wǎng)絡(luò),Densenet 提出了一種稠密連接方法,稠密塊中每個卷積層都會接受其前面所有層的輸出作為其額外的輸入,網(wǎng)絡(luò)通過這種稠密連接的方式加強(qiáng)了不同網(wǎng)絡(luò)層之間的特征復(fù)用,更有效地利用了特征。傳統(tǒng)網(wǎng)絡(luò)結(jié)構(gòu)可以表示為
而Densenet 將同一稠密塊中前面所有層的輸出拼接起來作為輸入,可以表示為
其中,xl表示第l層的特征圖,Hl(·)代表第l層輸入到輸出的映射,Dense block 示意圖如圖2 所示。
圖2 稠密塊示意圖Fig.2 Schematic of a dense block
在Densenet 中不同的Dense block用Transition 層連接在一起,Transition層由1 個1×1 的卷積層和1 個2×2 的平均池化層組成,其作用是改變特征圖的通道數(shù),Densenet 的總體架構(gòu)如圖3 所示。
圖3 稠密特征提取網(wǎng)絡(luò)架構(gòu)圖Fig.3 The structure of Densenet
Densenet 相比于SSD 原始特征提取網(wǎng)絡(luò)VGG,使用了更加稠密的網(wǎng)絡(luò)連接,即互聯(lián)了同一稠密塊中的所有層,其每一層都會接受前面所有層的輸出作為其額外輸入。這既可以增強(qiáng)特征之間的傳播,又在一定程度上增強(qiáng)了不同層次特征的復(fù)用,另外,Densenet 也在一定程度上緩解了網(wǎng)絡(luò)中的梯度消失問題,使得淺層特征層的訓(xùn)練更為有效。通過對特征提取網(wǎng)絡(luò)的改進(jìn),可以使得圖像的特征提取更加充分,提升了網(wǎng)絡(luò)的檢測精度。
本文在原卷積神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)上引入分組卷積[15]。不同于一般卷積操作,分組卷積在卷積操作之前,首先對輸入的特征層進(jìn)行分組,將經(jīng)過分組操作得到的不同特征層分組分別進(jìn)行卷積操作,最后將不同分組的輸出結(jié)果拼接起來,得到分組卷積的輸出,其示意圖如圖4 所示。
圖4 分組卷積示意圖Fig.4 Schematic of a group convolution
圖4 中,H代表輸入圖像的高度,W代表輸入圖像的寬度,C代表輸入圖像的深度,g代表分組卷積所分的組數(shù),H′代表輸出圖像的高度,W′代表輸出圖像的寬度,K代表輸出特征圖的深度。分組卷積相比于一般卷積操作,極大地減少了網(wǎng)絡(luò)參數(shù)量。一般卷積和分組卷積的參數(shù)量分別為
式(3)中,Par代表一般卷積操作的參數(shù)量,g_Par代表分組卷積的參數(shù)量,inc代表輸入特征圖的通道數(shù),outc代表輸出特征圖的通道數(shù),ken代表卷積核的大小,分組卷積的參數(shù)量是一般卷積的g分之一。在網(wǎng)絡(luò)中使用分組卷積,可以降低網(wǎng)絡(luò)的參數(shù)量,提升網(wǎng)絡(luò)的訓(xùn)練和推理的速度。
焦點(diǎn)損失(Focal Loss)主要為了解決單階段目標(biāo)檢測算法中出現(xiàn)的正負(fù)樣本不均衡問題[16]。在單階段目標(biāo)檢測算法中,由于一張圖片中往往大部分位置都屬于背景,這將導(dǎo)致訓(xùn)練集出現(xiàn)正負(fù)樣本不均衡的問題。過多的負(fù)樣本會引起網(wǎng)絡(luò)權(quán)重的偏移,從而影響正樣本的預(yù)測,并且這些負(fù)樣本大多往往是易分類的,這會嚴(yán)重影響網(wǎng)絡(luò)的收斂速度。
為了有效解決類別不均衡的問題,本文在SSD 中引入Focal Loss 損失函數(shù)
式(4)中,F(xiàn)L(pt)為Focal Loss 損失函數(shù),αt為權(quán)重因子,pt為樣本預(yù)測正確的概率,γ為調(diào)制系數(shù)。Focal Loss 通過權(quán)重因子控制正負(fù)樣本對損失函數(shù)的貢獻(xiàn)比例,在損失函數(shù)中減少負(fù)樣本的權(quán)重,可以在一定程度上緩解正負(fù)樣本不均衡帶來的影響。另一方面,F(xiàn)ocal Loss 引入調(diào)制系數(shù),減少了易分類樣本對損失函數(shù)的貢獻(xiàn),使得模型訓(xùn)練時更加專注于難分類的樣本。
實(shí)驗(yàn)選用VisDrone2019 數(shù)據(jù)集作為訓(xùn)練樣本,該數(shù)據(jù)集由主辦方天津大學(xué)負(fù)責(zé)收集,全部數(shù)據(jù)由無人機(jī)采集得到。檢測目標(biāo)分為10 類,包括行人、不在行走的人、腳踏車、汽車、面包車、三輪車、帶遮陽傘的三輪車、公交車、摩托車、其他。訓(xùn)練集圖片尺寸為1 920×1 080,其中最大目標(biāo)占圖像面積的30.29 %,而最小目標(biāo)僅占圖像面積的二十萬分之三,數(shù)據(jù)集中目標(biāo)有密度分布不均、尺度變化多樣、相互遮擋的情況存在。
實(shí)驗(yàn)平臺配置為操作系統(tǒng):Ubuntu20.04,深度學(xué)習(xí)庫:Pytorch,CPU:Intel i7-10700,GPU:RTX3080。本文對SSD 和改進(jìn)SSD 網(wǎng)絡(luò)分別進(jìn)行訓(xùn)練,SSD 將圖像預(yù)處理為300×300 大小作為網(wǎng)絡(luò)輸入,改進(jìn)SSD網(wǎng)絡(luò)將圖像預(yù)處理為512×512 大小作為網(wǎng)絡(luò)輸入,設(shè)置網(wǎng)絡(luò)的學(xué)習(xí)率為0.01,動量為0.9,學(xué)習(xí)率衰減系數(shù)為0.3,batch-size 為16,分別迭代50 次。
SSD 算法和改進(jìn)SSD 算法的損失函數(shù)收斂曲線如圖5 所示。
圖5 網(wǎng)絡(luò)損失函數(shù)曲線Fig.5 Network loss function curve
由圖5 可以看出,SSD 算法在訓(xùn)練損失為5 左右到達(dá)收斂,而改進(jìn)SSD 算法在訓(xùn)練損失達(dá)到4.3 左右收斂,算法經(jīng)過改進(jìn)以后,收斂性能明顯好于原算法。用訓(xùn)練得到的網(wǎng)絡(luò)對航拍圖像目標(biāo)進(jìn)行檢測,其結(jié)果如圖6 所示,可以看出改進(jìn)算法對于行人、摩托車、三輪車等難分類中小目標(biāo)的檢測性能明顯高于原算法。
圖6 算法效果圖Fig.6 Algorithm renderings
實(shí)驗(yàn)比較算法改進(jìn)前后的預(yù)測結(jié)果,設(shè)置交并比閾值為50 %,在Visdrone2019-DET 驗(yàn)證集下,算法對各種目標(biāo)的平均檢測精度見表1。
表1 原算法與改進(jìn)算法各類別平均精度Table 1 The average percision of the original algorithm and the improved algorithm in each category
經(jīng)過對表1 的分析可以看出,數(shù)據(jù)集的總體平均精度均值MAP(Mean Average Precision)從24.0 %提升至29.3 %,這是由于改進(jìn)SSD 算法使用更優(yōu)的主干網(wǎng)絡(luò)和更高分辨率圖像作為輸入,對于大多數(shù)類別目標(biāo)的檢測性能都有一定程度的提升。表1 中行人、人(非行人)、腳踏車、帶遮陽傘的三輪車、公交車、摩托車目標(biāo)檢測性能提升較大,其中帶遮陽傘的三輪車的平均精度從14.1 %提升到37.3 %,提升幅度達(dá)到23.2 %。這說明改進(jìn)后的SSD 算法對于航拍圖像目標(biāo)的檢測性能有了較大提升,而面包車、三輪車的檢測精度小幅度降低,是由于改進(jìn)SSD 算法使用的分組卷積在減小算法運(yùn)算量的同時,也在一定程度上引入了稀疏連接,減弱了卷積的表達(dá)能力,從而在一定程度上影響了部分對分辨率改變不敏感類別目標(biāo)的檢測精度。
為了進(jìn)一步說明改進(jìn)算法對不同尺度目標(biāo)的檢測能力,從數(shù)據(jù)集中分別篩選出面積小于322 像素的目標(biāo)作為小目標(biāo),大于322 像素小于962 像素的目標(biāo)作為中等目標(biāo),大于962 像素的目標(biāo)作為大目標(biāo)。對這三種目標(biāo)的檢測精度進(jìn)行統(tǒng)計(jì),結(jié)果見表2。
分析表2 可以看出,改進(jìn)SSD 算法主要在小目標(biāo)和中等目標(biāo)的檢測上相比于原始SSD 算法有較大提升,小目標(biāo)平均檢測精度均值從4.1 %提升到了10.6 %,中等目標(biāo)平均檢測精度均值從31.2 %提升到了36.7 %。這主要是由于本文對網(wǎng)絡(luò)的改進(jìn),增強(qiáng)了對難分類中小目標(biāo)的識別能力。而大目標(biāo)檢測也有小幅度提升,本文認(rèn)為這是因?yàn)閮?yōu)化了特征提取網(wǎng)絡(luò)結(jié)構(gòu),提升了對不同尺度目標(biāo)的特征提取能力。
表2 原算法與改進(jìn)算法各尺度平均檢測精度Table 2 The average precision of the original algorithm and the improved algorithm at each scale
綜上,改進(jìn)后的模型能顯著提高對航拍目標(biāo)的檢測能力。
本文針對無人機(jī)航拍中的問題和研究現(xiàn)狀,在SSD 算法的基礎(chǔ)上對原算法進(jìn)行改進(jìn),提出了基于改進(jìn)SSD 算法的航拍目標(biāo)檢測算法。訓(xùn)練階段,通過學(xué)習(xí)50 輪訓(xùn)練數(shù)據(jù)集,原算法和改進(jìn)算法分別在訓(xùn)練損失為5 和4.3 處達(dá)到收斂,改進(jìn)算法的收斂效果好于原算法,這表明改進(jìn)算法在訓(xùn)練集上的檢測精度高于原算法。驗(yàn)證階段,原算法和改進(jìn)算法的平均檢測精度均值分別為24.0 %和29.3 %,算法經(jīng)過改進(jìn)后平均精度均值提升5.3 個百分點(diǎn),進(jìn)一步驗(yàn)證了算法改進(jìn)的有效性。