徐小茹
(江蘇財(cái)經(jīng)職業(yè)技術(shù)學(xué)院 人文藝術(shù)與法律學(xué)院,江蘇 淮安 223003)
我國(guó)是一個(gè)水域眾多的國(guó)家,水上交通一直具有比較重要的戰(zhàn)略意義。隨著技術(shù)的發(fā)展,陸上交通在車(chē)牌識(shí)別、檢測(cè)車(chē)輛方面有了很大的發(fā)展,但是由于水上環(huán)境比較復(fù)雜,水上場(chǎng)景的圖像質(zhì)量不是很好,并且沒(méi)有像車(chē)牌一樣的檢索系統(tǒng),所以水上交通的發(fā)展速度一直不是很快。本文針對(duì)水上場(chǎng)景的復(fù)雜性,提出了一種可以快速準(zhǔn)確檢索水上船舶的方法,利用深度學(xué)習(xí)You Only Look Once(YOLO)框架可以準(zhǔn)確找出水面船舶,提高圖像質(zhì)量,同時(shí)利用提取Scale-invariant feature transform(SIFT)特征,可以使船舶特征具有穩(wěn)定不變性,最后對(duì)所有圖像特征進(jìn)行Density-Based Spatial Clustering of Applications with Noise(DBSCAN)融合K-means聚類(lèi)方法進(jìn)行特征降維,消除維度災(zāi)難,達(dá)到實(shí)時(shí)準(zhǔn)確的目標(biāo)。
在傳統(tǒng)的船舶分割過(guò)程中,通常使用閾值分割法、基于邊緣檢測(cè)法、基于區(qū)域的分割三種方法。雖然傳統(tǒng)的圖像分割算法已經(jīng)取得了一定的成果,但是無(wú)論是在算法準(zhǔn)確度還是在運(yùn)行時(shí)間上,傳統(tǒng)的船舶分割算法很難滿足實(shí)時(shí)性和準(zhǔn)確性的要求,所以我們這里決定采用最新的神經(jīng)網(wǎng)絡(luò)來(lái)對(duì)船舶圖像進(jìn)行分割。近年來(lái)卷積神經(jīng)網(wǎng)絡(luò)發(fā)展迅速,以以往的圖像分類(lèi)為基礎(chǔ),在目標(biāo)檢測(cè)領(lǐng)域進(jìn)行研究,并取得了突破性進(jìn)展,而Redmon提出的YOLOV2,進(jìn)一步提升了MAP和檢測(cè)速率。因此本文在YOLOV2的基礎(chǔ)上,結(jié)合自身船舶數(shù)據(jù)及資料,來(lái)達(dá)到快速高效分割提取船舶的目的。
為了更加快速準(zhǔn)確匹配地檢索到船舶目標(biāo),減少背景信息的干擾以及提升檢索的速度,首先得把船舶目標(biāo)從背景中分離出來(lái),本文使用深度學(xué)習(xí)中的YOLO框架,并且重新調(diào)整訓(xùn)練了整個(gè)網(wǎng)絡(luò)結(jié)構(gòu)。船舶分割識(shí)別流程如下頁(yè)圖1所示,網(wǎng)絡(luò)結(jié)構(gòu)如下頁(yè)圖2所示。
圖1 船舶分割識(shí)別流程 圖2 YOLO網(wǎng)絡(luò)框架結(jié)構(gòu)
因?yàn)榇皥D像是二維的離散信號(hào),需要對(duì)船舶圖像進(jìn)行卷積操作,通過(guò)卷積核在船舶圖像上滑動(dòng),把船舶圖像點(diǎn)上的像素灰度值和卷積核上的數(shù)值相乘,之后將所有相乘后的數(shù)值相加,把相加的結(jié)果作為卷積核中間像素對(duì)應(yīng)的船舶圖像上像素的灰度值,最后滑動(dòng)完所有船舶圖像。
(1)
其中x[m,n]為輸入矩陣,h[m,n]為卷積核,y[m,n]為輸出矩陣。卷積獲得特征之后,下一步要用這些特征進(jìn)行分類(lèi),理論上可以將所有的特征做成一個(gè)分類(lèi)器,但計(jì)算量會(huì)特別大,并且很容易出現(xiàn)過(guò)擬合。因此描述大的船舶圖像的一個(gè)方法就是聚合不同位置的特征進(jìn)行統(tǒng)計(jì),就是池化。
在得到卷積特征后,我們要先確定池化區(qū)域的大小(假定為m*n),來(lái)對(duì)船舶圖像的卷積特征進(jìn)行池化。我們將得到的卷積特征劃分到多個(gè)大小為m*n的不相交區(qū)域上,之后用這些區(qū)域的最大特征來(lái)獲取池化之后的卷積特征。
激活函數(shù)對(duì)于網(wǎng)絡(luò)模型去學(xué)習(xí)、理解非常復(fù)雜和非線性的函數(shù)來(lái)說(shuō)具有十分重要的作用。它們將非線性特性引入到我們的網(wǎng)絡(luò)中。其主要目的是將模型中一個(gè)節(jié)點(diǎn)的輸入信號(hào)轉(zhuǎn)換成一個(gè)輸出信號(hào)。該輸出信號(hào)現(xiàn)在被用作堆疊中下一個(gè)層的輸入。YOLOV2使用的是logistic激活函數(shù)。logistic函數(shù)公式形式如下:
(2)
其中x0表示函數(shù)曲線的中心,K是曲線的坡度,L是曲線的最大值。
YOLOv2首先對(duì)darknet網(wǎng)絡(luò)進(jìn)行fine tune,將圖像分辨率改成448*448,并且在ImageNet數(shù)據(jù)集上進(jìn)行10輪訓(xùn)練,然后,對(duì)檢測(cè)網(wǎng)絡(luò)部分也進(jìn)行fine tune。移除全連接層使用anchor boxes取預(yù)測(cè)bounding boxes,將最后的池化層去掉,使輸出的卷積特征圖分辨率更高。將網(wǎng)絡(luò)結(jié)構(gòu)縮減,使輸入圖片的分辨率為416*416,并確保后面產(chǎn)生的卷積特征圖寬和高都是奇數(shù),這樣就產(chǎn)生出一個(gè)center cell。使用卷積層降采樣,使得輸入卷積網(wǎng)絡(luò)的416*416圖片最終得到13*13的卷積特征圖,最后由anchor box同時(shí)預(yù)測(cè)類(lèi)別和坐標(biāo)。
因?yàn)閅OLO是由每個(gè)cell來(lái)負(fù)責(zé)預(yù)測(cè)類(lèi)別,每個(gè)cell對(duì)應(yīng)的2個(gè)bounding box負(fù)責(zé)預(yù)測(cè)坐標(biāo),在YOLOv2中,不再綁定類(lèi)別的預(yù)測(cè)和每個(gè)cell,而將其全部都放到anchor box中。
最后根據(jù)網(wǎng)絡(luò)檢測(cè)預(yù)測(cè)的坐標(biāo)將所需要的船舶圖片從原圖片中分割提出來(lái),作為下一步特征匹配的數(shù)據(jù)。
首先根據(jù)得到的船舶圖像建立船舶的尺度空間[1],搜索船舶尺度的每一層空間,尋找每層的局部極值點(diǎn)當(dāng)作候選特征點(diǎn),去除邊緣不穩(wěn)定的候選特征點(diǎn)以及對(duì)比度低的局部極值,之后通過(guò)統(tǒng)計(jì)梯度確定候選特征點(diǎn)的主方向,生成關(guān)鍵點(diǎn)特征描述子。
船舶提取SIFT特征的主要步驟為:
1.2.1 尺度空間極值點(diǎn)檢測(cè)
船舶圖像的尺度空間可以定義為原圖像和高斯函數(shù)的卷積結(jié)果:
L(x,y,σ)=G(x,y,σ)*I(x,y)
(3)
(4)
其中G(x,y,σ)是高斯函數(shù),I(x,y)是船舶圖像,m,n表示高斯模板的維度,σ是尺度空間因子,通過(guò)減小σ值可以使圖像相應(yīng)的尺度減小,可以更好展示圖像細(xì)節(jié)。在DOG尺度空間下,進(jìn)行極值檢測(cè),就是計(jì)算兩個(gè)相鄰圖像尺度的差。
D(x,y,σ)=(G(x,y,kσ)-G(x,y,σ))*I(x,y)
=L(x,y,kσ)-L(x,y,σ)
(5)
式中k為閾值。高斯金字塔通過(guò)高斯平滑和降采樣得到,尺度空間則由相鄰尺度圖像相減后形成。在尺度空間內(nèi),每一個(gè)采樣點(diǎn)同周?chē)?個(gè)點(diǎn)以及上下層的18個(gè)鄰域共26個(gè)點(diǎn)進(jìn)行比較,確保局部極值點(diǎn)在圖像空間和所形成的尺度空間中都能被檢測(cè)到。
1.2.2 關(guān)鍵點(diǎn)的精確定位
離散空間的極值點(diǎn)并不是真正的極值點(diǎn),通過(guò)對(duì)尺度空間的DoG函數(shù)進(jìn)行曲線擬合,可以提高關(guān)鍵點(diǎn)的穩(wěn)定性。DoG函數(shù)在尺度空間的泰勒展開(kāi)式(擬合函數(shù))為:
(6)
通過(guò)不斷插值到關(guān)鍵點(diǎn)位置收斂,最后特征點(diǎn)的精確位置就是之前位置加上擬合的偏移量。
因?yàn)镈OG算子會(huì)造成強(qiáng)烈的邊緣響應(yīng),這會(huì)造成匹配效果不穩(wěn)定,所以必須剔除這些不穩(wěn)定的邊緣響應(yīng)點(diǎn)。由于DOG函數(shù)的極值點(diǎn)在邊緣的垂直方向有較小的主曲率,而邊緣切向有較大的主曲率。所以可以使用Hessian矩陣剔除一些邊緣響應(yīng)點(diǎn)[2]。
1.2.3 確定關(guān)鍵點(diǎn)方向
為了提取的特征點(diǎn)在不同角度仍然具有良好的不變性,需要給每一個(gè)關(guān)鍵點(diǎn)分配方向。首先根據(jù)圖像梯的度,找到在局部結(jié)構(gòu)的方向,對(duì)于在尺度空間內(nèi)中檢測(cè)出的特征點(diǎn),需要采集其所在尺度空間內(nèi)3σ鄰域窗口內(nèi)像素的方向和梯度分布。其中梯度的模值和方向由下式可得:
(7)
θ(x,y)=tan-1((L(x,y+1)-L(x,y-1))/L(x+1,y)-L(x-1,y)))
(8)
其中L為特征點(diǎn)所在的尺度空間值。
當(dāng)計(jì)算完關(guān)鍵點(diǎn)的梯度值后,則需要使用直方圖來(lái)統(tǒng)計(jì)鄰域內(nèi)像素的方向和梯度情況。將直方圖中最大值作為該關(guān)鍵點(diǎn)的主方向,而方向直方圖的峰值代表了該特征點(diǎn)處鄰域梯度的方向,所以還需要選取直方圖中峰值大于主方向峰值80%的其他一些方向作為該關(guān)鍵點(diǎn)的輔方向,最后通過(guò)主方向和輔方向一起確定關(guān)鍵點(diǎn)的方向。
1.2.4 生成特征描述子
SIFT特征點(diǎn)是高斯圖像梯度統(tǒng)計(jì)后得到的矢量結(jié)果。通過(guò)對(duì)關(guān)鍵點(diǎn)周?chē)徲蛳袼剡M(jìn)行分塊統(tǒng)計(jì),得到能夠代表圖像信息的向量,所以可以準(zhǔn)確并且唯一描述船舶圖像信息。
生成特征向量方法是:以之前得到的關(guān)鍵點(diǎn)為中心點(diǎn)提取(16*16)像素,在提取到的像素中取(4*4)像素的區(qū)域當(dāng)作種子點(diǎn),這樣一共得到16個(gè),并在每個(gè)種子點(diǎn)區(qū)域內(nèi)分別計(jì)算八鄰域梯度的累加值,隨后直方圖統(tǒng)計(jì)梯度方向。最后可以得到128維的向量,就是特征描述向量。
在上一步生成的SIFT特征點(diǎn)之后,一般是采用特征描述符向量之間的歐式距離度量?jī)蓚€(gè)特征點(diǎn)之間的匹配程度。但由于船舶數(shù)據(jù)庫(kù)較大而且特征點(diǎn)較多,所以產(chǎn)生了維度災(zāi)難,僅僅依靠距離度量不能滿足實(shí)時(shí)性要求,所以這里就要進(jìn)行特征降維。
因?yàn)榇皵?shù)量在不斷改變,依靠人工很難確定具體的聚類(lèi)數(shù)目,所以決定采用DBSCAN和K-means的方法進(jìn)行聚類(lèi),首先由DBSCAN確定聚類(lèi)中心的數(shù)目,之后通過(guò)K-means進(jìn)行聚類(lèi),生成聚類(lèi)中心。根據(jù)得到的聚類(lèi)中心消除維度災(zāi)難。
DBSCAN聚類(lèi)是基于密度的一種方法,參數(shù)MinPts描述了某一樣本的距離為ε的鄰域中樣本個(gè)數(shù)的閾值。
算法具體原理為:
(1)DBSCAN對(duì)需要檢查點(diǎn)的固定鄰域進(jìn)行搜索,如果發(fā)現(xiàn)q點(diǎn)鄰域內(nèi)點(diǎn)的個(gè)數(shù)大于閾值MinPts,則以q為核心對(duì)象,創(chuàng)建一個(gè)新的簇;
(2)之后,DBSCAN不斷迭代密度可達(dá)的對(duì)象,講起聚集到核心對(duì)象內(nèi),對(duì)于密度可達(dá)的核心對(duì)象則將其簇進(jìn)行合并;
(3)當(dāng)形成的簇達(dá)到穩(wěn)定時(shí),算法則結(jié)束。
聚類(lèi)中心的數(shù)目通過(guò)DBSCAN確定好之后,就可以用K-means對(duì)提取的特征點(diǎn)進(jìn)行聚類(lèi)。
K-Means算法是無(wú)監(jiān)督的聚類(lèi)算法,對(duì)于給定的船舶特征點(diǎn),按照特征向量的距離大小進(jìn)行劃分,將特征向量集劃分為K個(gè)簇。讓簇內(nèi)的點(diǎn)盡量緊密地連在一起,而讓簇間的距離盡量的大。
假設(shè)特征向量集T包含m個(gè)特征向量,將T中的特征向量分配到K個(gè)簇中,分別為C1,C2,…,Ck,使得任意兩個(gè)簇之間交集為空。為了評(píng)價(jià)聚類(lèi)劃分的質(zhì)量,所以就可以定義一個(gè)函數(shù):
(9)
E就是數(shù)據(jù)集中所有對(duì)象的誤差平方和,p為空間中的點(diǎn),dist(p,Ci)為p到其劃分的聚類(lèi)中心之間的歐氏距離。所以通過(guò)對(duì)每個(gè)簇中的每個(gè)對(duì)象,求其對(duì)象到其簇中心距離的平方,然后求和,得出的誤差平方和E反映出結(jié)果簇的緊密情況,通過(guò)約束E的大小來(lái)劃分更好結(jié)果的簇。
得到所有船舶圖片特征形成的聚類(lèi)中心之后,就可以對(duì)數(shù)據(jù)庫(kù)每一張圖片生成BOF特征,將生成的BOF特征形成碼本[3]。同時(shí)為了使生成的BOF特征更有代表性,可以明確代表船舶圖片,這里使用了TF-IDF加權(quán)技術(shù)[4]。
TF-IDF是一種加權(quán)統(tǒng)計(jì)方法,常用在文本檢索、網(wǎng)頁(yè)排序等。應(yīng)用在船舶檢索中就是如果一個(gè)船舶特征在一張船舶圖片中出現(xiàn)次數(shù)越多,同時(shí)在所有船舶圖片中出現(xiàn)次數(shù)越少,越能夠代表該船舶。
TF指的是一個(gè)船舶特征在該船舶圖片中出現(xiàn)的次數(shù),通常將其歸一化表示。
(10)
H為一張船舶圖片包含該特征次數(shù),I為該船舶圖片的總特征數(shù)
IDF的主要思想是:對(duì)于單個(gè)特征e,包含特征e的船舶越少,則船舶特征e的IDF值越大,并且說(shuō)明特征e能夠更好表示該船舶。所以IDF表示如下
(11)
X為數(shù)據(jù)庫(kù)中所有的船舶數(shù)目,Y為包含某特征的船舶數(shù)目
最后就可以生成船舶特征的TF-IDF值
TF-IDF=TF×IDF
(12)
將之前的BOF特征與船舶特征的TF-IDF值加權(quán)就得到船舶數(shù)據(jù)庫(kù)的最終碼本。
所以船舶檢測(cè)的步驟為:
1.生成每張船舶的BOF,具體方法為:判斷船舶的每個(gè)特征點(diǎn)與哪個(gè)類(lèi)心最近,最近則放入該類(lèi)心,最后將生成一列頻數(shù)表,即初步的無(wú)權(quán)BOF;
2.通過(guò)TF-IDF對(duì)頻數(shù)表加上權(quán)重,生成最終的BOF;
3.將要查詢(xún)的船舶圖片提取SIFT特征,再通過(guò)步驟一和步驟二,生成該船舶的BOF特征值;
4.將要查詢(xún)船舶的BOF向量與圖像庫(kù)中每幅圖的BOF向量求夾角,夾角最小的即為匹配對(duì)象。
本實(shí)驗(yàn)實(shí)驗(yàn)環(huán)境為Windows操作系統(tǒng),編程語(yǔ)言為Python,具體實(shí)驗(yàn)環(huán)境如表1、表2、表3所示。
表1 實(shí)驗(yàn)軟件環(huán)境
終端類(lèi)型操作系統(tǒng)相關(guān)軟件服務(wù)器端Windows server2012 R2Python 3.6,客戶(hù)端windows 10 旗艦64位Python3.6
表2 實(shí)驗(yàn)硬件環(huán)境
終端類(lèi)別機(jī)器名配置說(shuō)明服務(wù)器端Dell R720CPU:Xeon 24 核內(nèi)存:96G硬盤(pán):500G客戶(hù)端普通PCCPU:Intel(R) Core(TM),i7,3.4G內(nèi)存:16G硬盤(pán):2T
使用改進(jìn)過(guò)后的YOLO網(wǎng)絡(luò)對(duì)自身的船舶數(shù)據(jù)集進(jìn)行訓(xùn)練,得到網(wǎng)絡(luò)模型,具體網(wǎng)絡(luò)訓(xùn)練參數(shù)如表3所示。
表3 YOLO訓(xùn)練參數(shù)
Input sizeChannelsDecayMomentumLearning_rateMax_batchesPolicy416×41630.0050.90.000145000steps
使用改進(jìn)訓(xùn)練后的YOLO網(wǎng)絡(luò)模型提取船舶圖片,將圖片中的船舶用線框框出,框出的區(qū)域即為所需要的船舶區(qū)域,見(jiàn)圖3。對(duì)船舶提取SIFT特征,SIFT特征在旋轉(zhuǎn)、縮放的情況下具有良好的不變性,在視角變化、具有噪聲的情況下也具有一定的穩(wěn)定性,具有較好的魯棒性,是一種局部特征描述子,可以很好地描述物體,找到特征點(diǎn)[5],見(jiàn)圖4。
圖3 YOLO提取船舶圖 圖4 船舶提取特征圖
將YOLO網(wǎng)絡(luò)提取出的船舶提取SIFT特征進(jìn)行匹配,可以看出對(duì)于不同尺度,不同拍攝角度的船舶圖像都有較好的匹配效果。將匹配到的特征點(diǎn)用連線標(biāo)出,具體匹配結(jié)果見(jiàn)圖5。
圖5 船舶特征匹配圖
最后實(shí)現(xiàn)了一個(gè)船舶實(shí)時(shí)檢索系統(tǒng),輸入新來(lái)到的船舶圖片,從數(shù)據(jù)庫(kù)中檢索該船舶,找出數(shù)據(jù)庫(kù)中和該船舶最相似的4張船舶圖片,具體查詢(xún)結(jié)果如圖6所示[6]。同時(shí)可以看出當(dāng)船舶圖片結(jié)構(gòu)相似時(shí)也會(huì)出現(xiàn)一定的誤差,如第2張圖片檢索出的第4張圖片即為錯(cuò)誤檢索結(jié)果[7]。
圖6 最終船舶檢索結(jié)果圖
本次實(shí)驗(yàn)數(shù)據(jù)集命名為YOLO-VOC,該數(shù)據(jù)集共包含了8000張船舶圖片,圖片像素為1920×1080,圖片為RGB三通道圖片。同時(shí)為了對(duì)該數(shù)據(jù)集進(jìn)行檢索結(jié)果評(píng)測(cè),規(guī)定以下檢索標(biāo)準(zhǔn)[8]:
在一次檢索過(guò)程中,用N表示檢索結(jié)果返回的圖像總數(shù),用Q表示檢索結(jié)果中符合要求的圖像總數(shù),用M表示圖像數(shù)據(jù)庫(kù)中所用符合要求的圖像總數(shù)。
查準(zhǔn)率可用如下公式計(jì)算:
(13)
那么查全率可以用下面公式計(jì)算:
(14)
檢索時(shí)間的長(zhǎng)短直觀地反映出算法的效率,決定檢索算法是否可以應(yīng)用于實(shí)際生活的重要判斷依據(jù)[9],檢索時(shí)間用T表示。
在YOLO-VOC數(shù)據(jù)集下按照以上評(píng)測(cè)標(biāo)準(zhǔn)進(jìn)行船舶檢索匹配實(shí)驗(yàn),具體實(shí)驗(yàn)結(jié)果如表4所示。
表4 實(shí)驗(yàn)結(jié)果評(píng)測(cè)
船舶總數(shù)聚類(lèi)中心數(shù)目查全率查準(zhǔn)率檢索時(shí)間800050091.12%92.15%1.53s800070095.37%96.21%2.06s800090093.21%92.3%2.68s
本文主要有三個(gè)貢獻(xiàn):第一,通過(guò)對(duì)YOLOV2網(wǎng)絡(luò)進(jìn)行調(diào)整,結(jié)合自己的船舶數(shù)據(jù)集,得到了一個(gè)可以準(zhǔn)確分割提取船舶的網(wǎng)絡(luò)模型。第二,在第一步的基礎(chǔ)上,通過(guò)對(duì)船舶提取特征,利用DBSCAN結(jié)合K-means自動(dòng)生成聚類(lèi)中心,對(duì)高維的船舶特征進(jìn)行降維,消除維度災(zāi)難,生成低維而準(zhǔn)確的船舶特征。第三,最后實(shí)現(xiàn)了一個(gè)水上船舶快速檢測(cè)系統(tǒng),建立了船舶數(shù)據(jù)庫(kù),構(gòu)建了船舶特征碼本。通過(guò)利用自身數(shù)據(jù)集對(duì)YOLOV2網(wǎng)絡(luò)進(jìn)行設(shè)計(jì)修改,得到一個(gè)可以準(zhǔn)確切割船舶的網(wǎng)絡(luò),同時(shí)對(duì)于分割后船舶提取SIFT特征,利用DNSCAN+K-meams聚類(lèi)自動(dòng)生成聚類(lèi)中心算法,可以準(zhǔn)確地將船舶特征簡(jiǎn)化,消除維度災(zāi)難,生成特征碼本,然后將外來(lái)船舶同數(shù)據(jù)庫(kù)中的船舶特征進(jìn)行查詢(xún)匹配,可以快速準(zhǔn)確的找到相應(yīng)船舶,實(shí)現(xiàn)了一個(gè)可以快速準(zhǔn)確查詢(xún)船舶的系統(tǒng)。最后系統(tǒng)查全率和查準(zhǔn)率可以達(dá)到92%以上,查詢(xún)速度也滿足實(shí)時(shí)性要求。本文不足之處在于前期船舶分割聚類(lèi)生成特征碼本的過(guò)程較為耗時(shí),同時(shí)對(duì)于圖像YOLO分割出的船舶數(shù)據(jù)較為依賴(lài)。目前YOLOV3網(wǎng)絡(luò)已經(jīng)提出,在小目標(biāo)檢測(cè)上更加有優(yōu)勢(shì),將其應(yīng)用在船舶分割中可能會(huì)提高船舶樣本分割準(zhǔn)確度,從而提高船舶檢測(cè)準(zhǔn)確度。