徐思源, 儲開斌, 張 繼, 馮成濤
(常州大學,江蘇 常州 213000)
近年來,無人機以其靈活機動、操作簡單等優(yōu)點在軍事和民用領(lǐng)域迅速發(fā)展,伴隨著無人機技術(shù)的日益成熟,無人機的應用場景也不斷增加,同時也促進了許多現(xiàn)代技術(shù)與無人機技術(shù)的融合,無人機加目標檢測也是當前的熱點方向。
傳統(tǒng)的目標檢測算法,如VIOLA等[1-2]提出的基于滑動窗口的VJ檢測器等,算法冗余,且設計窗口時還需要考慮物體長寬比,手工設計的特征魯棒性較差,效率低下,不適用于對實時性要求較高的檢測任務。而基于深度學習的目標檢測算法主要分為Two-stage和One-stage兩種。Two-stage代表性算法有R-CNN[3],F(xiàn)ast R-CNN[4],F(xiàn)aster R-CNN[5]等,其特點是生成的錨框會映射到特征圖的區(qū)域,然后將該區(qū)域重新輸入到全連接層再進行分類和回歸,每個錨框映射的區(qū)域都要進行這樣的分類和回歸,會耗費大量的時間;One-stage代表性算法有YOLO[6],SSD[7],YOLOv2[8],YOLOv3[9]等,與Two-stage的不同在于錨框是一個邏輯結(jié)構(gòu),只需對這個數(shù)據(jù)塊進行分類和回歸即可,因此擁有更高的檢測幀率。但是YOLOv3對小目標的識別能力有限,目前已有許多學者對此展開了研究:由ZENG等[10]提出的改進型YOLOv3模型充分利用淺層網(wǎng)絡,在第2次下采樣后額外引出這一層的特征圖,并與上一個尺度中特征圖進行拼接,增加一個小目標檢測能力更強的尺度,提高對小目標的檢測能力;戴偉聰?shù)萚11]利用YOLOv3進行單目標物體檢測時,對特征提取網(wǎng)絡進行裁剪,另根據(jù)數(shù)據(jù)集特性對網(wǎng)絡結(jié)構(gòu)進行調(diào)整,使改進后的YOLOv3 模型檢測精度與速度都有所提升;文獻[11]還指出,簡單的卷積神經(jīng)網(wǎng)絡模型具有更好的泛化性,尤其是在數(shù)據(jù)集較小、數(shù)據(jù)復雜多變的情況下,且YOLOv3參數(shù)量大,在較小數(shù)據(jù)集的檢測任務中容易過擬合。
針對YOLOv3對高空視角下的小目標檢出率低、檢測精度差的問題,本文提出了一種在高空視角下基于YOLOv3的小目標檢測改進算法。改進算法在提升小目標檢測精度的同時,幀率無明顯下降,保證了網(wǎng)絡檢測的實時性。
YOLO算法最初是由REDMON等于2015年提出的一種基于回歸的目標識別方法[6]。YOLO算法只需要做一遍前向運算即可對多種物體進行檢測,將目標識別轉(zhuǎn)化為回歸任務來解決,以端到端的方式極大地提高了計算效率,繞開了候選區(qū)域的生成與評估,使得YOLO系列算法的檢測速度很快。
YOLOv3主體部分是由特征提取網(wǎng)絡與多尺度檢測器兩部分組成,其特征提取網(wǎng)絡結(jié)構(gòu)如圖1所示。
特征提取網(wǎng)絡主要用于提取圖像特征,而多尺度檢測器在特征提取網(wǎng)絡的基礎(chǔ)上進一步抽象和融合后得到3個尺度的預測特征,在3個尺度上進行檢測,最終輸出圖像中的物體類別與檢測框坐標。
在YOLOv3算法中,將一幅圖像劃分成S×S個網(wǎng)格,如果待檢測目標存在于某網(wǎng)格中,那么此網(wǎng)格就負責檢測該目標。每個網(wǎng)格負責檢測B個預測框信息,具體包括5個信息,即x,y,w,h,Cdeg,其中,(x,y),w,h分別代表預測框的中心坐標與寬高值相對于所在網(wǎng)格的相對值,Cdeg為置信度,算式為
Cdeg=Pr(Obj)*IoU
(1)
式中:Pr(Obj)表示該網(wǎng)格中是否存在待檢測物體,存在為1,不存在為0;IoU為預測框與真實框的交并比。
YOLOv3的目標損失函數(shù)由坐標預測損失、置信度預測損失、類別預測損失3部分組成。其中,置信度預測損失和類別預測損失均由YOLOv1,YOLOv2的誤差平方和改為對于類別以及置信度預測效果更好的交叉熵。損失函數(shù)為
(2)
式中:I為網(wǎng)格中的第I個錨框;C為物體的真實值;classes為不同物體的分類。
相較于其他算法,YOLOv3的網(wǎng)絡參數(shù)更少、檢測速度更快,更適合在計算資源有限、實時性要求更高的無人機平臺上應用。但YOLOv3對淺層網(wǎng)絡利用不充分,對于高空視角下出現(xiàn)的小目標存在檢測精度低、檢出率低的問題。本文從兩個方面著手,在提升小目標檢測精度的同時減小網(wǎng)絡計算量,達到與原始YOLOv3相近的幀率。
K-means是機器學習中的非監(jiān)督學習,是一種典型的基于距離的聚類算法,該算法將相似的數(shù)據(jù)劃分為一個集合或稱為“一簇”。YOLOv3模型是基于錨框尺寸微調(diào)實現(xiàn)對邊界框預測的,其在COCO數(shù)據(jù)集上得到了9個初始的錨框,并平均地分給3個尺度,用于加強模型對不同大小目標的檢測能力。其中,小尺度的特征圖對應大的錨框,大尺度的特征圖對應小的錨框。
但是,由于所有的錨框尺寸都是在COCO數(shù)據(jù)集上聚類計算得到的,并不一定適用于其他數(shù)據(jù)集(如本文的飛機遙感數(shù)據(jù)集)的尺寸,因此需要對錨框尺寸進行重新聚類。本文測試了4~16個聚類中心對應的平均IoU,結(jié)果如圖2所示??梢园l(fā)現(xiàn),平均IoU隨著聚類中心個數(shù)的增加而提升,這表明增加聚類中心的個數(shù)能提高錨框與數(shù)據(jù)集標注的一致性。但是過多的聚類中心也會讓網(wǎng)絡的計算量增大,從而影響檢測的實時性。本文選擇在曲線變平緩的區(qū)間內(nèi)選擇網(wǎng)絡的聚類中心個數(shù),因為在這一區(qū)間錨框數(shù)量的增加對于平均IoU的提升幅度開始減小,繼續(xù)增加錨框數(shù)量反而會影響檢測速度,另外,考慮到本文將原有YOLOv3的3個輸出尺度改進為4個,所以聚類中心個數(shù)最好是4的倍數(shù),使得錨框平均地分配在4個尺度上。綜合考慮以上因素,本文選擇12個錨框,并對本文的訓練集進行重新聚類,得到的12個錨框尺寸分別為(14×29), (20×34),(21×47),(28×43),(26×54),(27×66),(34×56),(33×72),(41×70),(36×87),(47×89)和(57×113)。
圖2 不同的聚類中心數(shù)量對應的IoU變化Fig.2 IoU changes with the number of cluster centers
卷積神經(jīng)網(wǎng)絡在結(jié)構(gòu)上的特點是,最開始淺層網(wǎng)絡卷積得到的特征圖較大,維度較小,隨著網(wǎng)絡越來越深,特征圖會越來越小,維度較大。因此,在卷積神經(jīng)網(wǎng)絡中,淺層網(wǎng)絡主要用于提取待檢測目標物體的細節(jié)特征,每個像素點對應的感受野重疊區(qū)域較小,能保留更多的小目標信息,而深層特征圖反映的是抽象的語義信息,主要用來檢測大目標物體。
為了提升對小目標的檢測能力,本文進一步充分利用YOLOv3淺層網(wǎng)絡,設計的網(wǎng)絡結(jié)構(gòu)如圖3所示。初始YOLOv3的特征提取網(wǎng)絡由5次下采樣組成,每次下采樣后的殘差塊分別為1,2,8,8,4,本文繼續(xù)沿用這一經(jīng)典的特征提取結(jié)構(gòu),但是對殘差塊的數(shù)量進行重新配置,在小目標信息更豐富的第1,2次下采樣各增加1個殘差塊,從而使淺層卷積層的特征提取更加充分。第3,4次下采樣因為不涉及到小目標尺度,為了使模型能更好地適應小數(shù)據(jù)集,擁有更好的泛化性,殘差塊數(shù)量減少為4,6。第5次下采樣保持不變,依然設置為4個殘差塊。
除了改進特征提取網(wǎng)絡的小目標提取能力,本文還利用到了更多小目標信息。從第2次下采樣引出一個特征圖輸出,并與上一個尺度融合。相比于拼接前,特征拼接后待檢測目標的細節(jié)信息更加豐富。
卷積網(wǎng)絡參數(shù)Ppara算式為
Ppara=(Kh*Kw*Cin)*Cout+Cout
(3)
式中:Kh與Kw分別為卷積核的高和寬;Cin與Cout分別是輸入通道數(shù)與輸出通道數(shù)。改動淺層網(wǎng)絡對網(wǎng)絡總參數(shù)的影響較小,所以本文在特征提取網(wǎng)絡上修改對幀率的影響也較小。
圖3 改進后的框架可視化結(jié)構(gòu)圖Fig.3 Visualization structure of the improved framework
本文實驗所采用的操作系統(tǒng)為Ubuntu18.04,GPU為NVIDIA GeForce RTX3090,以及Python3.8.5,Open CV3.4等工具包,采用的深度學習框架為Darknet。
本文采用平均檢測精度PmAP、精確率P、召回率R、交并比IoU、幀率以及F1作為檢測模型的評價指標。其中
(4)
P=PT/(PT+PF)
(5)
R=PT/(PT+NF)
(6)
式中:PT為真正例,PF為假正例,NT為真反例,NF為假反例;Nclasses為類別個數(shù);PclassAve為不同類別的平均精度。
(7)
式中:X表示預測框;Y表示真實框。
(8)
本文使用遙感飛機數(shù)據(jù)集UCAS-AOD[12],共900幅遙感飛機圖像,其中,700幅用于制作訓練集,200幅為測試集。訓練過程中損失函數(shù)可視化圖如圖4所示。
圖4 模型訓練中的損失函數(shù)可視化圖Fig.4 Loss visualization in model training
表1對比了本文算法和YOLOv3以及一個未對特征提取網(wǎng)絡做改進,但使用了與本文相同的4個尺度輸出思想的文獻[13]算法。
表1 3種檢測算法對比
可以看出,本文算法因為對特征提取網(wǎng)絡中淺層網(wǎng)絡使用了更多的殘差塊,保留了更多的小目標信息和邊緣信息,除幀率指標外對比其他兩種算法都有提升。其中,mAP的提升最大,對比YOLOv3提高5.84%。除幀率稍低于YOLOv3外,各項模型評估指標都有提高,幀率有略微的降低是因為模型加強了小目標檢測能力的同時,增加了一個完整的輸出尺度,不可避免地加深了網(wǎng)絡,使得總參數(shù)量增加,降低了模型的檢測速度。但是因為本文算法簡化了特征提取網(wǎng)絡,使其實時性下降得并不明顯,對比YOLOv3幀率僅下降1.3幀/s。
為驗證本文算法對小目標檢測能力的提升,將其與原YOLOv3算法、文獻[13]算法對測試集部分圖像做可視化檢測,如圖5所示。
圖5 3種算法檢測結(jié)果對比
在圖5所示3組圖像中,共含有待檢測目標16個。圖5(a)為YOLOv3的檢測結(jié)果,漏檢數(shù)為6,可以看出YOLOv3對于部分小目標會出現(xiàn)比較嚴重的漏檢;圖5(b)為文獻[13]算法的檢測結(jié)果,漏檢數(shù)為4,相較于YOLOv3有提升但不明顯,對于靠近登機橋的目標仍然會出現(xiàn)漏檢,原因是其仍然沿用原YOLOv3的特征提取網(wǎng)絡,即使從淺層網(wǎng)絡引出輸出尺度,檢測效果提高的程度也很有限;圖5(c)為本文算法的檢測結(jié)果,沒有出現(xiàn)漏檢的情況,驗證了改進特征提取網(wǎng)絡并從淺層網(wǎng)絡引出輸出尺度,可以有效提升YOLOv3對于小目標的檢測效果。
為驗證本文算法的泛化性,選用了4類低質(zhì)量圖像做測試,共含有待檢測目標20個,檢測結(jié)果如圖6所示。圖6(a)為YOLOv3的檢測結(jié)果,漏檢數(shù)為2且模糊環(huán)境圖左側(cè)出現(xiàn)了誤檢;圖6(b)為文獻[13]算法的檢測結(jié)果,漏檢數(shù)為1;圖6(c)為本文算法的檢測結(jié)果,漏檢數(shù)為0。實驗證明本文算法有更好的泛化性,在惡劣環(huán)境下、圖像欠曝光和過度曝光等情況下的檢測任務中也有更好的表現(xiàn)。
圖6 3種算法在低質(zhì)量圖像上的檢測結(jié)果Fig.6 Detection results of three algorithms on low-quality images
本文針對原有YOLOv3特征提取網(wǎng)絡進行改進,重新配置每次下采樣殘差塊數(shù)量,并且在輸出端融合一個淺層的尺度特征以獲得更多小目標信息,用于遙感圖像中飛機小目標的檢測。在數(shù)據(jù)集UCAS-AOD上的實驗表明:本文算法相比YOLOv3在檢測速度幾乎不變的情況下,大幅提升了檢測精度,同時對于特殊場景下的圖像(霧天、模糊、欠曝光、過度曝光)也有很好的檢測效果。