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