叢玉華,何 嘯,邢長達(dá),成旭明,唐 鑫,王志勝,歐陽權(quán)
(1 南京航空航天大學(xué)自動化學(xué)院,南京 210006; 2 南京理工大學(xué)紫金學(xué)院,南京 210023; 3 南京航空航天大學(xué)深圳研究院,廣東 深圳 518063)
無人機(jī)通過計(jì)算機(jī)視覺技術(shù)進(jìn)行目標(biāo)檢測時,因搭載的嵌入式設(shè)備性能受限,加上航拍圖像目標(biāo)一般相對較小、背景復(fù)雜、圖像分辨率低,因此,在機(jī)載嵌入式設(shè)備上如何保證檢測速度和檢測精度是無人機(jī)端進(jìn)行目標(biāo)檢測的研究重點(diǎn)。一階目標(biāo)檢測算法在無人機(jī)上應(yīng)用能達(dá)到實(shí)時性要求,其中YOLO是經(jīng)典的一階算法,Redmon在2018年提出了YOLOv3算法,選用更深的網(wǎng)絡(luò),使得算法具有了更高的檢測效率和準(zhǔn)確率[1]。后續(xù)的YOLO版本都是在YOLOv3基礎(chǔ)上對不同側(cè)面的改進(jìn),因此基于YOLO網(wǎng)絡(luò)框架針對實(shí)時性和高精度的要求進(jìn)行改進(jìn)。
卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural networks,CNN)由多個神經(jīng)元連接而成,神經(jīng)元承擔(dān)著信息傳遞的任務(wù),能夠有效接收其感受野發(fā)送的信號,CNN主要由卷積層、歸一層、激活層、池化層及全連接層組成[2-3]。
1)卷積層
卷積層用于提取圖像的特征,其中的卷積核通過在輸入數(shù)據(jù)上不斷進(jìn)行運(yùn)算得到更深的特征圖。特征層矩陣各個點(diǎn)的計(jì)算公式為:
(1)
式中:U=(1,2,…,k);y表示特征層矩陣中單個點(diǎn)的值;t表示當(dāng)前層級;i和j表示在卷積核及對應(yīng)感受野中對應(yīng)的位置坐標(biāo);x表示感受野對應(yīng)的原圖區(qū)域;K表示卷積核;b表示偏置。
2)歸一層
使用歸一化對每一層的數(shù)據(jù)進(jìn)行處理,將輸入從激活函數(shù)的飽和區(qū)變到非飽和區(qū),能夠解決梯度消失的問題;在反向傳播的過程中,因?yàn)閿?shù)據(jù)均值都在0附近,解決了梯度爆炸的問題。歸一層放在卷積層之后、激活層之前,將每一層的數(shù)據(jù)分布全部轉(zhuǎn)換在均值為0、方差為1的狀態(tài)下,其過程如式(2)~式(4)所示,使得網(wǎng)絡(luò)更加容易收斂,加快網(wǎng)絡(luò)的收斂速度。
(2)
(3)
(4)
式中:m表示數(shù)據(jù)數(shù)量;xi表示第i個數(shù)據(jù);μ表示數(shù)據(jù)均值;σ2表示方差;ε是一個用于保證數(shù)值穩(wěn)定的量;zi表示歸一化后的結(jié)果。
3)激活層
在卷積后一般有一個激活函數(shù)來幫助其表達(dá)復(fù)雜的特征,主要作用是增加CNN的非線性表達(dá)能力。
4)池化層
池化層主要是用來降低輸入特征圖的寬、高,能夠加快推理速度并保留主要特征。最大池化輸出特定區(qū)域內(nèi)的最大值,平均池化輸出特定區(qū)域內(nèi)的平均值。
5)全連接層
全連接層在CNN中能夠通過卷積層提取到的不同細(xì)節(jié)特征的組合來分類,并且在很大程度上能降低特征位置的偏移對分類所造成的影響。
YOLO系列網(wǎng)絡(luò)可以一次性預(yù)測多個目標(biāo)的位置和類別,能夠?qū)崿F(xiàn)端到端的目標(biāo)檢測,YOLO網(wǎng)絡(luò)框架由主干特征提取網(wǎng)絡(luò)、特征加強(qiáng)網(wǎng)絡(luò)和特征輸出三個部分組成,下面對YOLO網(wǎng)絡(luò)框架進(jìn)行兩方面改進(jìn):一是對網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行輕量化改進(jìn),以提升網(wǎng)絡(luò)的推理速度;二是在網(wǎng)絡(luò)結(jié)構(gòu)中引入注意力機(jī)制,以提升目標(biāo)檢測的精度,具體改進(jìn)如下。
2.1.1 主干特征提取網(wǎng)絡(luò)CSPDark53-tiny
跨階段局部網(wǎng)絡(luò)(cross stage partial network,CSPNet)主要有3項(xiàng)功能:增強(qiáng)CNN的學(xué)習(xí)能力;消除計(jì)算的瓶頸;減少內(nèi)存帶來的成本[4-5]。CSPDark53-tiny對CSPDarknet53在通道上進(jìn)行了縮減,以提升推理速度。CSPDarknet53-tiny結(jié)構(gòu)組件包括CBS模塊、Res Unit殘差模塊及CSP1_X模塊,如圖1所示。
圖1 CSPDarknet53-tiny結(jié)構(gòu)圖
1)CBS模塊
CBS模塊結(jié)構(gòu)由卷積(Conv)、批標(biāo)準(zhǔn)化(BN)及激活函數(shù)(SiLU)3個部分組成,激活函數(shù)SiLU可表示為:
O(x)=x·S(x)
(5)
式中:x為輸入;O(x)為輸出;S(x)為Sigmoid函數(shù)。
2)CSP1_X模塊
CSP1_X模塊結(jié)構(gòu)借鑒了CSPNet結(jié)構(gòu),其主干部分進(jìn)行一次卷積核大小為1的CBS模塊處理,完成特征整合后,再進(jìn)行X次的Res Unit模塊的處理;其分支部分僅進(jìn)行一次卷積核大小為1的CBS模塊處理完成特征整合;在得到兩個部分的處理結(jié)果后,將兩個部分的結(jié)果進(jìn)行通道上的堆疊,并進(jìn)行一次卷積核大小為1的CBS模塊處理完成特征整合。CSP1_X模塊結(jié)構(gòu)如圖2所示。
圖2 CSP1_X模塊結(jié)構(gòu)圖
3)Res Unit模塊
Res Unit模塊即殘差網(wǎng)絡(luò)(residual network,ResNet)中的殘差塊,是使用跳躍式連接的,這種結(jié)構(gòu)能夠幫助CNN解決因使用過多卷積層所帶來的梯度消失等問題[6]。殘差網(wǎng)絡(luò)比較容易優(yōu)化,可以通過增加網(wǎng)絡(luò)深度來提高其檢測精度。該結(jié)構(gòu)主干部分進(jìn)行一次卷積核大小為1的CBS模塊進(jìn)行特征整合,再對其進(jìn)行一次卷積核大小為3的CBS模塊處理完成特征提??;殘差邊不做任何處理,直接將輸入與主干部分的輸出進(jìn)行結(jié)合。Res Unit模塊結(jié)構(gòu)如圖3所示。
圖3 Res Unit模塊結(jié)構(gòu)
2.1.2 融合SPP的CSPDark53-tiny
1)SPP模塊
SPP(spatial pyramid pooling)模塊借鑒了空間金字塔池化的思想,對輸入特征尺寸大小沒有限制,并且可以輸出一個固定大小的特征圖,使其能夠有效幫助網(wǎng)絡(luò)得到更寬的感受野[7]。SPP模塊首先對輸入進(jìn)行一次卷積核大小為1的CBS模塊處理完成,特征整合;再通過3種尺度的卷積核對特征整合后的結(jié)果進(jìn)行最大池化處理,將3次處理結(jié)果與特征整合結(jié)果相堆疊,對堆疊結(jié)果再進(jìn)行一次卷積核大小為1的CBS模塊處理實(shí)現(xiàn)特征整合。以此融合多尺度特征提升特征提取能力。SPP模塊結(jié)構(gòu)如圖4所示。
圖4 SPP模塊結(jié)構(gòu)圖
2)CSP2_X模塊
CSP2_X模塊與CSP1_X模塊略有不同,其將主干部分進(jìn)行的X次Res Unit模塊的處理替換為2*X次CBS模塊(一次卷積核大小為1的CBS模塊處理進(jìn)行特征整合及一次卷積核大小為3的CBS模塊處理完成特征提取),有效減少網(wǎng)絡(luò)的計(jì)算量,提升檢測速度。CSP2_X模塊結(jié)構(gòu)如圖5所示。
圖5 CSP2_X模塊結(jié)構(gòu)圖
3)融合SPP后的主干網(wǎng)絡(luò)
SPP模塊結(jié)合CSP2_X模塊后引入主干特征提取網(wǎng)絡(luò),具體結(jié)構(gòu)如圖6所示。
圖6 融合SPP后的主干網(wǎng)絡(luò)圖
2.2.1 加權(quán)雙向特征金字塔網(wǎng)絡(luò)
加權(quán)雙向特征金字塔網(wǎng)絡(luò)(bidirectional feature pyramid network,BiFPN)是基于路徑聚合網(wǎng)絡(luò)(path aggregation network,PANet)的思想并做了一定的改進(jìn)[8-9]。相較于PANet結(jié)構(gòu)BiFPN刪除了只有單個輸入的節(jié)點(diǎn),剔除了網(wǎng)絡(luò)中的一些冗余計(jì)算;在同一尺寸的特征圖上增加了跳躍連接,使特征融合時能夠獲得更多的特征;對于特征融合部分,BiFPN選擇引用權(quán)重對特征進(jìn)行加權(quán)融合;BiFPN對于權(quán)值歸一化的方式采用了精度與softmax相近但速度比其快30%的歸一化方法,其公式為
(6)
式中:O表示輸出特征;Ii表示輸入特征;ωi表示一個可學(xué)習(xí)的權(quán)值,需通過RELU來確保ωi≥0;ε是一個用于保證數(shù)值穩(wěn)定的量,通常設(shè)置為1×10-4。
BiFPN結(jié)構(gòu)如圖7所示。
圖7 BiFPN結(jié)構(gòu)圖
(7)
(8)
2.2.2 引入注意力機(jī)制
在目標(biāo)檢測任務(wù)中,模型對于各個目標(biāo)物體特征的關(guān)注點(diǎn)和關(guān)注程度是不同的。如果模型對所有特征圖的關(guān)注程度都一致,則會影響到模型的收斂速率,因此對模型來說怎么快速且有效的提取重要特征是非常重要的。基于卷積塊的注意力機(jī)制(convolutional block attention module,CBAM)[10-11]是個輕量的注意力模塊,其計(jì)算量很小,能夠有效地讓網(wǎng)絡(luò)從通道及空間兩個角度學(xué)習(xí)到一個權(quán)重,選擇性地增強(qiáng)網(wǎng)絡(luò)通道及空間中的部分特征。結(jié)構(gòu)如圖8所示,其包含兩部分:CAM(channel attention module)及SAM(spatial attention module)。
圖8 CBAM結(jié)構(gòu)圖
CBAM模塊引入到特征加強(qiáng)網(wǎng)絡(luò)的兩類位置:一是主干特征提取網(wǎng)絡(luò)與特征加強(qiáng)網(wǎng)絡(luò)的銜接部分,作為特征加強(qiáng)網(wǎng)絡(luò)的輸入;二是特征加強(qiáng)網(wǎng)絡(luò)中上采樣和下采樣之后均引入CBAM模塊。
解耦頭結(jié)構(gòu)將分類及回歸看作兩個任務(wù),通過softmax得到分類結(jié)果,通過對邊框進(jìn)行預(yù)測回歸得到邊框位置。解耦頭結(jié)構(gòu)考慮到分類和定位對于特征的關(guān)注點(diǎn)不同,分類任務(wù)主要考慮的是每一個樣本的差異,而回歸任務(wù)考慮更多的是圖像邊界信息,因此解耦頭結(jié)構(gòu)可以提升檢測的精度。但是解耦頭通過兩個分支分別處理兩個任務(wù),其中的計(jì)算量也會隨之提升,因此須在送入解耦頭之前首先通過一個卷積核大小為1的卷積來進(jìn)行通道縮減,以此來實(shí)現(xiàn)一個輕量的解耦頭,其結(jié)構(gòu)如圖9所示。
圖9 解耦頭結(jié)構(gòu)圖
將2.1~2.3節(jié)的改進(jìn)融合后,最終目標(biāo)檢測網(wǎng)絡(luò)稱為CSPBiA-YOLO,結(jié)構(gòu)如圖10所示。圖10中主干特征提取網(wǎng)絡(luò)部分增加了SPP結(jié)構(gòu);主干特征提取網(wǎng)絡(luò)和特征加強(qiáng)網(wǎng)絡(luò)銜接部分以及特征加強(qiáng)網(wǎng)絡(luò)的上采樣和下采樣后皆增加了CBAM注意力模塊,特征加強(qiáng)網(wǎng)絡(luò)部分還增加了CSP2_X模塊;特征輸出部分采用改進(jìn)后的解耦頭結(jié)構(gòu)。
圖10 CSPBiA-YOLO結(jié)構(gòu)圖
采用VisDrone航拍數(shù)據(jù)集[12]及部分自建數(shù)據(jù)集進(jìn)行模型訓(xùn)練。VisDrone數(shù)據(jù)集中有8 629張靜態(tài)圖像,自建數(shù)據(jù)集有3 000張靜態(tài)圖像,數(shù)據(jù)集中的訓(xùn)練類別包含行人、自行車、汽車等共10個類別。數(shù)據(jù)集劃分為7 629張訓(xùn)練圖像、1 000張驗(yàn)證圖像及3 000張測試圖像。圖像采集自不同類型的相機(jī)、不同城市、不同的日照條件及不同的高度,單張圖像中往往包含多種目標(biāo)信息、檢測目標(biāo)較小且目標(biāo)易受到遮擋。
1)IOU
在目標(biāo)檢測任務(wù)中通常使用IOU(intersection over union)對選框的精度進(jìn)行評估,IOU計(jì)算公式為:
(9)
式中:GT表示真實(shí)框的面積;PR為預(yù)測框的面積。
2)AP和mAP
AP(average precision)用來評估模型性能,是計(jì)算某類目標(biāo)在不同召回率的情況下準(zhǔn)確率的平均值,計(jì)算公式為:
(10)
式中:R為召回率;P(R)為召回率取R時的準(zhǔn)確率。進(jìn)一步,可以得到所有類別的平均AP,即mAP(mean average precision),其表達(dá)式為:
(11)
式中:AP(i)為類別序號取i時對應(yīng)的精度均值;n為類別數(shù)。mAP0.5指的就是IOU閾值為0.5時的mAP值,文中實(shí)驗(yàn)所有的mAP都為IOU閾值取0.5時的值。
網(wǎng)絡(luò)訓(xùn)練階段的參數(shù)設(shè)置如表1。
表1 訓(xùn)練參數(shù)
1)CSPBiA-YOLO目標(biāo)檢測實(shí)驗(yàn)
CSPBiA-YOLO模型與部分現(xiàn)有模型對比數(shù)據(jù)如表2。
表2 CSPBiA-YOLO對比數(shù)據(jù)
由表2可知,改進(jìn)后的CSPBiA-YOLO網(wǎng)絡(luò)比YOLOv3在僅增加3 ms推理速度的情況下mAP提升了3%;相較于YOLOv5-s網(wǎng)絡(luò),CSPBiA-YOLO網(wǎng)絡(luò)在增加了2 ms推理速度的情況下mAP提升了2%;相較于YOLOX-tiny網(wǎng)絡(luò),CSPBiA-YOLO網(wǎng)絡(luò)在增加了僅1.5 ms推理速度的基礎(chǔ)上mAP提升了2%;相較于推理速度最快的YOLOv4-tiny網(wǎng)絡(luò),CSPBiA-YOLO網(wǎng)絡(luò)在增加了8 ms推理速度的情況下mAP提升了7%。YOLOv3,YOLOv4-tiny,YOLOv5-s,YOLOX-tiny,CSPBiA-YOLO各個類的AP值如圖11~圖15所示。
圖11 YOLOv3各個類的AP值(mAP=29.35%)
圖12 YOLOv4-tiny各個類的AP值(mAP=25.78%)
圖13 YOLOv5-s各個類的AP值(mAP=30.17%)
圖14 YOLOX-tiny各個類的AP值(mAP=30.28%)
圖15 CSPBiA-YOLO各個類的AP值(mAP=32.35%)
2)實(shí)驗(yàn)可視化結(jié)果
圖16為目標(biāo)相對較大且分散的場景,YOLOv3對相對較小的目標(biāo)檢測效果較差,CSPBiA-YOLO則能夠準(zhǔn)確地檢測出圖像中的多個目標(biāo)并正確分類。
圖16 簡單場景下檢測效果對比
圖17為復(fù)雜場景下目標(biāo)相對較小且密集的場景,YOLOv3對于圖像中間密集且部分受到遮擋的目標(biāo)無法完成檢測,而CSPBiA-YOLO對應(yīng)的檢測率則較高,且對于多個受遮擋的目標(biāo)也能夠正確地完成檢測。
圖17 復(fù)雜場景下檢測效果對比
圖18為夜景下目標(biāo)相對較小且密集的場景,YOLOv3對于圖像上方及右下角的目標(biāo)無法進(jìn)行檢測,而CSPBiA-YOLO的檢出率明顯較高。
圖18 夜間檢測效果對比
針對無人機(jī)航拍圖像檢測任務(wù)中嵌入式設(shè)備性能偏低、檢測目標(biāo)小且密集的特點(diǎn),提出一種輕量級的小目標(biāo)檢測網(wǎng)絡(luò)CSPBiA-YOLO。通過在無人機(jī)航拍數(shù)據(jù)集VisDrone上進(jìn)行訓(xùn)練及測試驗(yàn)證了該算法的實(shí)時性和高精度。后續(xù)將增加數(shù)據(jù)集,提高網(wǎng)絡(luò)的泛化能力;使用C++開發(fā)部署,通過TensorRT加速提升網(wǎng)絡(luò)推理速度。