陳科峻, 張 葉
( 1. 中國(guó)科學(xué)院 長(zhǎng)春光學(xué)精密機(jī)械與物理研究所 應(yīng)用光學(xué)國(guó)家重點(diǎn)實(shí)驗(yàn)室,吉林 長(zhǎng)春 130033;2. 中國(guó)科學(xué)院大學(xué), 北京 100049)
隨著海上運(yùn)輸業(yè)的快速發(fā)展,海上遇難船只搜救、船舶避撞、非法捕魚(yú)、非法貨運(yùn)船只的管控等任務(wù),對(duì)海上船只精確定位與識(shí)別技術(shù)有著廣泛的需求和重要的現(xiàn)實(shí)意義[1]。因此,從環(huán)境保護(hù)機(jī)構(gòu)到國(guó)家政府當(dāng)局,許多組織對(duì)海上船只進(jìn)行更密切的監(jiān)視。隨著衛(wèi)星技術(shù)的日益成熟和衛(wèi)星航空成像精度的日益提高,衛(wèi)星圖像中包含的信息多樣,利用衛(wèi)星圖像進(jìn)行海上船只的檢測(cè)受到了廣泛的關(guān)注。然而,視點(diǎn)、旋轉(zhuǎn)、背景等多種因素變化的影響使得衛(wèi)星圖像船只檢測(cè)任務(wù)依然存在嚴(yán)峻的挑戰(zhàn)。
目前,國(guó)內(nèi)外研究人員對(duì)圖像船艦?zāi)繕?biāo)檢測(cè)做了大量的相關(guān)研究。文獻(xiàn)[2]通過(guò)分析遙感圖像中的明暗像素的關(guān)聯(lián)參數(shù)對(duì)船只進(jìn)行目標(biāo)檢測(cè),實(shí)現(xiàn)圖像中明暗場(chǎng)景的快速識(shí)別與分離。然而基于傳統(tǒng)特征提取的方法進(jìn)行目標(biāo)檢測(cè)往往精度不高。由于海洋表面微波散射情況復(fù)雜,傳統(tǒng)船艦檢測(cè)算法能力有限。文獻(xiàn)[3]針對(duì)以上問(wèn)題,通過(guò)分辨率歸一化制作混合的訓(xùn)練樣本數(shù)據(jù)集,基于Faster-RCNN[4]的框架下,構(gòu)建了一個(gè)3層卷積神經(jīng)網(wǎng)絡(luò)的船艦檢測(cè)算法,取得了較好的檢測(cè)效果。但基于Faster-RCNN的船艦檢測(cè)算法模型復(fù)雜度較高,檢測(cè)速度難以達(dá)到實(shí)時(shí)性檢測(cè)的要求。近年來(lái),隨著基于深度學(xué)習(xí)的目標(biāo)檢測(cè)技術(shù)的發(fā)展,YOLO(you only look once)[5]作為一個(gè)兼顧了檢測(cè)速度和檢測(cè)精度的算法被廣泛應(yīng)用于日常的目標(biāo)檢測(cè)任務(wù)中。文獻(xiàn)[6]提出基于YOLO 的車流量檢測(cè)方法,可以較好地對(duì)混合車流中的車輛進(jìn)行跟蹤和統(tǒng)計(jì)。但基于原始YOLO算法的目標(biāo)檢測(cè)模型參數(shù)量較大,對(duì)嵌入式設(shè)備計(jì)算性能要求較高。文獻(xiàn)[7]提出了一種基于改進(jìn) YOLO模型的艦船目標(biāo)識(shí)別方法。通過(guò)精簡(jiǎn)原始模型的卷積層,減少模型的參數(shù)量。同時(shí)在訓(xùn)練過(guò)程中引入遷移學(xué)習(xí)的概念,防止模型過(guò)擬合,達(dá)到減少計(jì)算資源開(kāi)銷的目的。但該方法主要針對(duì)大型船艦的目標(biāo)檢測(cè),對(duì)于衛(wèi)星圖像中的小目標(biāo)船艦檢測(cè)效果不理想?;诙说蕉嘶貧w的YOLO-v3[8]網(wǎng)絡(luò)在YOLO算法的基礎(chǔ)上進(jìn)行改進(jìn),在保證快速檢測(cè)的同時(shí),也達(dá)到了較高的檢測(cè)精度,使得基于深度學(xué)習(xí)的目標(biāo)檢測(cè)算法的落地應(yīng)用成為可能。
本文將YOLO-v3目標(biāo)檢測(cè)網(wǎng)絡(luò)應(yīng)用于衛(wèi)星圖像船艦?zāi)繕?biāo)檢測(cè)任務(wù)中。針對(duì)輸入圖像中船艦的外形特點(diǎn),構(gòu)建圖像金字塔對(duì)訓(xùn)練輸入圖像進(jìn)行多尺度變換,豐富原始圖像的特征。由于YOLO-v3的初始錨點(diǎn)框[9](anchor)的尺寸是針對(duì)VOC[10]等數(shù)據(jù)集計(jì)算設(shè)計(jì)得到的,并不適用于文本的衛(wèi)星船艦圖像數(shù)據(jù)集。本文采用K-means(K均值)聚類算法的改進(jìn)版K-means++算法進(jìn)行初始錨點(diǎn)框數(shù)量和尺寸大小的聚類,構(gòu)建出適合船艦數(shù)據(jù)集的船艦?zāi)繕?biāo)檢測(cè)網(wǎng)絡(luò)結(jié)構(gòu)。最后,為了能夠?qū)⒛P蛻?yīng)用于嵌入式設(shè)備中,對(duì)訓(xùn)練好的模型進(jìn)行模型剪枝,將模型中冗余的通道進(jìn)行裁剪,減少模型的參數(shù)量,提高了模型的檢測(cè)速度。
針對(duì)船艦的圖像特征,本文采用多尺度金字塔圖像作為模型訓(xùn)練的輸入。本文受到文獻(xiàn)[11]的啟發(fā),采用高斯金字塔與拉普拉斯金字塔相結(jié)合的方式,先采用高斯金字塔對(duì)圖像進(jìn)行下采樣以獲得新的圖像,用拉普拉斯金字塔對(duì)圖像進(jìn)行上采樣重建獲得新樣本。
2.1.1 高斯金字塔
對(duì)于大小為w×h的圖像I,高斯金字塔Gi由I的幾個(gè)分辨率減小的高斯圖像Ii組成。Ii的尺度計(jì)算公式如下:
(1)
式中,i= (0,1,...,j)代表金字塔的級(jí)數(shù)。
圖像Gi通過(guò)高斯函數(shù)生成的卷積核進(jìn)行卷積。公式如下:
(2)
式中,m,n代表原圖像的尺度,L代表金字塔的層級(jí),w代表窗口函數(shù)。
2.1.2 拉普拉斯金字塔
拉普拉斯金字塔由高斯金字塔計(jì)算得來(lái),公式如下:
Li=Gi-up(Gi)?g5×5,
(3)
式中,Gi表示第i層的圖像,而up操作表示上采樣。 ?表示卷積運(yùn)算,g5×5表示5×5的高斯卷積核。最終得到的圖像金字塔效果圖如圖1所示。
圖1 多尺度圖像金字塔Fig.1 Multi-scale image pyramid
YOLO-v3算法將目標(biāo)區(qū)域檢測(cè)與物體類別預(yù)測(cè)看作回歸問(wèn)題。YOLO-v3算法的特征提取網(wǎng)絡(luò)為Darknet53。Darknet53包含52個(gè)卷積層,用于對(duì)圖像進(jìn)行特征提取,為了防止深層網(wǎng)絡(luò)訓(xùn)練過(guò)程中發(fā)生模型退化,YOLO-v3借鑒了ResNet[12]的做法,在層與層之間進(jìn)行了鏈路的連接。最后一層為1個(gè)全連接層。YOLO-v3通過(guò)單個(gè)神經(jīng)網(wǎng)絡(luò),即可實(shí)現(xiàn)對(duì)圖像中目標(biāo)的定位和分類。Darknet-53網(wǎng)絡(luò)結(jié)構(gòu)如圖2所示。
圖2 Darknet53網(wǎng)絡(luò)結(jié)構(gòu)
Darknet-53網(wǎng)絡(luò)對(duì)圖像進(jìn)行了5次下采樣,每次采樣的步長(zhǎng)為2。其中卷積模塊的結(jié)構(gòu)如圖3。
圖3 Darknet53網(wǎng)絡(luò)結(jié)構(gòu)Fig.3 Module of Darknet53 convolution set
YOLO-v3算法假設(shè)目標(biāo)散落在圖像中各個(gè)區(qū)域,因此將圖像劃分為多個(gè)子區(qū)域。接著對(duì)各個(gè)區(qū)域預(yù)測(cè)多個(gè)錨點(diǎn)框( Bounding Box ),并求出每個(gè)邊框的置信度(Confidence)。置信度分?jǐn)?shù)的大小,反映了錨點(diǎn)框內(nèi)存在目標(biāo)物體的準(zhǔn)確程度。置信度定義如下式:
(4)
式中,Pr ( Object )表示錨點(diǎn)框中存在目標(biāo)圖像的概率大小。IoU表示預(yù)測(cè)的目標(biāo)框與真實(shí)的標(biāo)注框之間的交并比,IoU的計(jì)算公式如下:
(5)
式中,C代表預(yù)測(cè)出物體的邊界框,G代表實(shí)際標(biāo)注的物體邊界框(Ground Truth)。
常見(jiàn)的目標(biāo)檢測(cè)算法中,需要預(yù)先對(duì)初始的錨點(diǎn)框(Anchor)進(jìn)行設(shè)定。錨點(diǎn)框與檢測(cè)目標(biāo)的契合度對(duì)目標(biāo)檢測(cè)算法的精度產(chǎn)生極大影響。針對(duì)衛(wèi)星圖像船艦的形狀特征,本文采用聚類算法對(duì)YOLO-v3的錨點(diǎn)框進(jìn)行初始化設(shè)定。
理想的聚類距離度量標(biāo)準(zhǔn)應(yīng)該是計(jì)算誤差與錨點(diǎn)框尺寸大小沒(méi)有太大的關(guān)系,因此定義IoU距離作為聚類算法距離的度量。IoU距離如式(6)所示:
dIoU(box,centroid)=1-IoU(box,centroid),
(6)
式中, IoU( box, centroid )表示某一錨點(diǎn)框box與聚類中心錨點(diǎn)框的IoU,dIoU即代表計(jì)算得到的IoU距離。
本文采用K-means++聚類方法對(duì)YOLO-v3的初始錨點(diǎn)框進(jìn)行聚類。傳統(tǒng)的K-means 算法通過(guò)隨機(jī)初始化的方式選定初始聚類中心,往往容易陷入局部最優(yōu),得到的聚類結(jié)果無(wú)法反映真實(shí)的數(shù)據(jù)分布情況。K-means++聚類算法在K-means算法基礎(chǔ)上進(jìn)行了改進(jìn)。具體計(jì)算步驟如下:
(1)在數(shù)據(jù)集中隨機(jī)初始化選擇1個(gè)點(diǎn)作為第一個(gè)簇的中心點(diǎn);
(2)計(jì)算數(shù)據(jù)集中各個(gè)樣本點(diǎn)到每個(gè)已知的簇中心的距離D(x);
(3)定義概率Px表示每個(gè)樣本被選為下一個(gè)簇的中心的概率:
(7)
(4)重復(fù)(2),(3)步驟,直至確定出K個(gè)聚類中心;
(5)將第(4)步得到的K個(gè)聚類中心作為初始聚類中心點(diǎn),代入傳統(tǒng)的K-means算法中,得到最終的聚類中心點(diǎn)。
從K-means++算法的計(jì)算過(guò)程可以看出,聚類中心的初始化以距離作為依據(jù),和當(dāng)前聚類中心距離較大的點(diǎn),屬于當(dāng)前類的概率則比較小,因此有更大的可能性被選為新的聚類中心,聚類中心的初始化更為合理。
圖像船艦檢測(cè)任務(wù)的模型往往被部署在計(jì)算能力有限的設(shè)備上,對(duì)模型的檢測(cè)時(shí)間和模型的參數(shù)量大小有著嚴(yán)格的要求。因而本文對(duì)原始的模型進(jìn)行模型剪枝壓縮。
模型剪枝是模型壓縮的常用方法,對(duì)深度神經(jīng)網(wǎng)絡(luò)的稠密連接引入稀疏性,通過(guò)將“不重要”的權(quán)值直接置零來(lái)減少非零權(quán)值數(shù)量。典型的模型剪枝方法包含4個(gè)步驟[13]:(1)分析預(yù)訓(xùn)練模型中每一個(gè)神經(jīng)元的重要程度;(2)剔除模型中對(duì)模型推理激活程度較低的神經(jīng)元;(3)微調(diào)模型,提高修剪后模型的精度;(4)對(duì)微調(diào)后的模型進(jìn)行測(cè)試,確定修剪后的模型是否滿足要求。模型剪枝的流程如圖4所示。
圖4 模型剪枝流程圖Fig.4 Flow chart of model pruning
對(duì)YOLO-v3模型進(jìn)行壓縮,需要對(duì)訓(xùn)練好的模型進(jìn)行稀疏化訓(xùn)練。稀疏訓(xùn)練的目的即在模型訓(xùn)練過(guò)程鑒別重要性較低的通道,以便于對(duì)重要性較低的通道進(jìn)行裁剪。由于YOLO-v3網(wǎng)絡(luò)的每個(gè)卷積層后面都有一個(gè)批歸一化層來(lái)加速網(wǎng)絡(luò)收斂和改進(jìn)泛化性能。本文將批歸一化層(Batch Normalization)[14]中的尺度因子作為通道重要性的指標(biāo),并對(duì)這些尺度因子計(jì)算L1范數(shù)并融入損失函數(shù)中訓(xùn)練,得到每個(gè)通道的重要性分?jǐn)?shù)[15]。應(yīng)用于精簡(jiǎn)基于卷積神經(jīng)網(wǎng)絡(luò)(CNN)的圖像分類器,可以顯著地減小模型參數(shù)量。
批歸一化層的更新過(guò)程如下。求解上一層輸出數(shù)據(jù)的均值和標(biāo)準(zhǔn)差:
(8)
(9)
(10)
式中,ε是為了避免分母為0而加入的一個(gè)趨近于0的值。經(jīng)過(guò)對(duì)上面歸一化處理得到的數(shù)據(jù)進(jìn)行重構(gòu)即可得到:
(11)
式中,γ和β是可以學(xué)習(xí)的參數(shù),用于將歸一化后的數(shù)據(jù)分布進(jìn)行還原。
本文將γ值作為通道重要性的衡量標(biāo)準(zhǔn),對(duì)每一個(gè)通道的γ值計(jì)算L1范數(shù),具體計(jì)算公式如下:
(12)
最終模型訓(xùn)練的損失函數(shù)在YOLO-v3的損失函數(shù)基礎(chǔ)上增加了對(duì)γ的正則化項(xiàng):
(13)
式中,lossyolo表示YOLO-v3的損失函數(shù),α表示懲罰項(xiàng)。
基于深度學(xué)習(xí)的目標(biāo)檢測(cè)往往需要大量的數(shù)據(jù)用于模型的訓(xùn)練。為了檢驗(yàn)本文方法的有效性,本文采集到網(wǎng)絡(luò)上的船艦圖像數(shù)據(jù)集[16],該數(shù)據(jù)集通過(guò)衛(wèi)星進(jìn)行圖像采集。衛(wèi)星船艦數(shù)據(jù)集分辨率大小為768×768像素,對(duì)圖像進(jìn)行了標(biāo)注。最終得到精確標(biāo)注的5 000張衛(wèi)星船艦圖像用于模型的訓(xùn)練。部分圖像樣例如圖5所示。
圖5 衛(wèi)星船艦圖像樣例Fig.5 Example of satellite ship images
本文對(duì)標(biāo)注好的數(shù)據(jù)樣本進(jìn)行聚類,預(yù)先選好的錨點(diǎn)框聚類個(gè)數(shù)為k∈(1,…,10)。為了對(duì)比不同的聚類算法對(duì)模型的影響,在保證各訓(xùn)練參數(shù)固定的情況下,分別采用K-means和K-means++對(duì)錨點(diǎn)框進(jìn)行聚類。表1為不同聚類算法下的部分錨點(diǎn)框聚類尺寸。
表1 初始錨點(diǎn)框聚類結(jié)果Tab.1 Results of initial candidate box clustering
為了評(píng)價(jià)不同聚類算法的性能,采用平均準(zhǔn)確率(mAP)作為評(píng)價(jià)指標(biāo),從整體上反映了目標(biāo)定位算法的精度。平均準(zhǔn)確率綜合了檢測(cè)模型的精確率(Precious)和召回率(Recall):
(14)
(15)
(16)
式中:TP表示真正例,F(xiàn)P表示假正例,F(xiàn)N表示假負(fù)例,Pre表示精確率,Rec表示召回率。不同個(gè)數(shù)的錨點(diǎn)框下驗(yàn)證集的平均準(zhǔn)確率如圖6所示。
圖6 不同聚類算法結(jié)果比較Fig.6 Results of different clustering algorithms
從圖6可以看出,采用K-means++進(jìn)行錨點(diǎn)框度量可以提高目標(biāo)檢測(cè)算法的定位精度。所得到的最高平均準(zhǔn)確率高于采用K-means進(jìn)行聚類所得到的最高平均準(zhǔn)確率。當(dāng)錨點(diǎn)框個(gè)數(shù)為6時(shí),所得到的驗(yàn)證集的平均定位精度最高,為78.54%。相比于原始的YOLO-v3采用的9個(gè)錨點(diǎn)框,更少的錨點(diǎn)框可以提高模型的訓(xùn)練速度,減少模型的推斷時(shí)間。
對(duì)模型進(jìn)行訓(xùn)練的實(shí)驗(yàn)系統(tǒng)環(huán)境為ubuntu16.04,基于Pytorch深度學(xué)習(xí)框架,顯卡為NVIDIA 1660 Ti。本文對(duì)模型進(jìn)行了2 000次迭代訓(xùn)練,初始學(xué)習(xí)率為0.001,采用動(dòng)量梯度下降法,設(shè)置momentun為0.9。將原始YOLO-v3的初始錨點(diǎn)框替換成經(jīng)過(guò)本文聚類之后得到的錨點(diǎn)框。模型訓(xùn)練過(guò)程損失曲線如圖7所示。
圖7 基礎(chǔ)訓(xùn)練損失變化曲線Fig.7 Loss curve of basic training
從圖7可以看出,經(jīng)過(guò)2 000步的迭代訓(xùn)練,模型已經(jīng)趨近于收斂,最終的損失穩(wěn)定在0.665。
模型剪枝之前需要對(duì)模型進(jìn)行稀疏訓(xùn)練,將批歸一化層中的尺度因子作為衡量通道重要性的指標(biāo)。實(shí)驗(yàn)中將稀疏訓(xùn)練的懲罰因子α分別設(shè)置為0.01,0.001,0.000 1。稀疏訓(xùn)練后的尺度因子分布直方圖如圖8所示。
原始模型的批歸一化層因子γ近似于均值為1的正態(tài)分布。從尺度因子分布直方圖可以看出,對(duì)模型稀疏訓(xùn)練的結(jié)果可以使得通道重要性較低的通道γ值壓縮至接近于0,因此可以將γ值接近于0的通道進(jìn)行裁剪。本文采用不同的懲罰因子對(duì)模型進(jìn)行300個(gè)Epoch的稀疏訓(xùn)練,稀疏訓(xùn)練的損失曲線如圖9所示。
(a)α=0.01
(b)α=0.001
圖9 不同懲罰因子稀疏訓(xùn)練損失曲線Fig.9 Loss curve of sparsity training with different penalty factor
表2 剪枝前后模型參數(shù)對(duì)比
通過(guò)對(duì)批歸一化層中尺度因子大小接近于0的通道進(jìn)行裁剪,剪枝后的模型參數(shù)量下降為原始模型的0.15倍,模型檢測(cè)的平均準(zhǔn)確率下降了4.13%。為了提高剪枝后模型的精度,采用微調(diào)的方式,對(duì)剪枝后的模型進(jìn)行100個(gè)Epochs的微調(diào)訓(xùn)練,最終模型的平均檢測(cè)精度穩(wěn)定在77.31%,接近原始模型的精度。
為了驗(yàn)證本文衛(wèi)星圖像船艦檢測(cè)方法的有效性,本文設(shè)置了對(duì)比實(shí)驗(yàn),分別采用YOLO-v3,F(xiàn)aster R-CNN,SSD,R-FCN等常見(jiàn)目標(biāo)檢測(cè)算法對(duì)衛(wèi)星圖像船艦數(shù)據(jù)集進(jìn)行檢測(cè)。在同一臺(tái)服務(wù)器上對(duì)以上各算法進(jìn)行測(cè)試,測(cè)試輸入圖片大小為768×768像素。表3為各個(gè)算法的檢測(cè)耗時(shí)與平均檢測(cè)精度對(duì)比。
表3 各算法檢測(cè)結(jié)果對(duì)比
從實(shí)驗(yàn)結(jié)果可以看出,本文模型的mAP達(dá)到了77.31%,在與其他檢測(cè)模型檢測(cè)精度相當(dāng)?shù)那闆r下,檢測(cè)速度縮短到12 ms/張,模型參數(shù)量大小僅為原始YOLO-v3模型參數(shù)量的8.5%,對(duì)計(jì)算資源消耗更少,達(dá)到了實(shí)時(shí)性的目標(biāo)檢測(cè)要求。
本文針對(duì)衛(wèi)星圖像船艦檢測(cè)問(wèn)題,通過(guò)對(duì)訓(xùn)練圖像進(jìn)行多尺度金字塔變換,達(dá)到對(duì)模型進(jìn)行多尺度訓(xùn)練的目的,提高了模型的特征提取能力。同時(shí),采用K-means++聚類算法選定初始錨點(diǎn)框的個(gè)數(shù)和尺寸,提高了YOLO-v3模型的定位精度。接著對(duì)YOLO-v3目標(biāo)檢測(cè)模型進(jìn)行模型剪枝。實(shí)驗(yàn)結(jié)果表明,本文的方法在保證檢測(cè)精度的同時(shí),減小了模型的參數(shù)量,檢測(cè)時(shí)間由原來(lái)的30 ms/張縮短至12 ms/張,模型大小由原來(lái)的238.9 M縮小至21.5 M。滿足了衛(wèi)星、無(wú)人機(jī)等移動(dòng)小算力設(shè)備的實(shí)時(shí)目標(biāo)檢測(cè)需求,為嵌入式目標(biāo)檢測(cè)算法的應(yīng)用提供了參考依據(jù)。