邵慧翔,曾 丹
(上海大學通信與信息工程學院,上海 200444)
水下目標識別一直是水聲領域的研究熱點.水下目標識別技術應用廣泛,在軍事領域可用于偵察跟蹤、布雷探雷和海上救援等,在民用領域可用于海底管道鋪設、魚群監(jiān)測、海底狀況考察、海底設施的維護與監(jiān)測等.針對聲納圖像識別技術,國外研究方向主要有3 個:一是通過大量的測繪與試驗,收集海洋環(huán)境數(shù)據信息和人類在海上的活動信息;二是通過大量試驗測量海洋中聲納信號的傳播特性;三是研究主動聲納工作的特性,根據目標噪聲或回波的波形音調、節(jié)奏分布特征進行人為識別.基于傳統(tǒng)機器學習方法進行水下目標識別的研究已有很多,例如Sherin 等[1]采用語言信號在不同頻率范圍的分布(梅爾頻率倒譜系數(shù)(Mel frequency cepstrum coefficient,MFCC))特征,對每幀特征向量利用K-means 算法進行聚類,構造聲納圖像紋理特征,作為支持向量機(support vector machine,SVM)的訓練集來訓練二分類模型,泛化誤差為9%.在深度神經網絡出現(xiàn)之前,早期的傳統(tǒng)聲納圖像目標檢測方法耗時且精度不高,隨著基于深度學習的區(qū)域卷積神經網絡(region-convolutional neural network,R-CNN)方法[2]提出后,目標檢測的性能有了質的飛躍.在目標檢測領域,主要有兩類方法:一類是以R-CNN 為代表的二階段(two-stage)檢測算法,使用區(qū)域候選網絡(region proposal network,RPN)產生候選區(qū)域,然后通過神經網絡對候選區(qū)域進行分類及定位,這種方法的準確度較高,但檢測速度稍慢;另一類是以YOLO(you only look once)[3]為代表的單階段(one-stage)檢測算法,直接回歸得出目標區(qū)域,再通過神經網絡進行分類,one-stage 檢測算法不需要RPN 階段,所以檢測速度較快,但檢測精度較低.
已有的檢測算法中以深度學習的目標檢測算法最為“優(yōu)秀”,不過單發(fā)多框檢測器(single shot multibox detection,SSD)[4]、R-CNN 系列的網絡復雜度過高,即便使用運算速度非??斓腉PU,推斷速度仍然很慢.而YOLO 系列的網絡解決了復雜度過高的問題,在主流GPU 上運行速度達到60 幀/s 以上,滿足實時的需求.本工作采用改進的YOLOv3[5]算法進行水下小目標的分類與識別,使用改進的聚類方法對ground truth 進行聚類,即隨機確定k 個聚類中心,再進行聚類計算;同時調整YOLOv3 的網絡連接結構,提高了算法對小目標的檢測能力;最后,使用水雷聲納圖像數(shù)據集進行驗證.實驗結果表明,改進的YOLOv3 算法實現(xiàn)了端到端的水下小目標檢測,具有較高的準確度和較好的實時性.
當聲納圖像中的目標雷很小,所占像素面積約小于30×30 時,稱這種目標雷為小目標.由于神經網絡不斷下采樣,自然會造成小目標的丟失,一般在檢測器關于物體大小的平均精確率報告中,小目標的平均精確率是最低的.
相比原始YOLO 系列算法,YOLOv3 算法在小目標檢測方面的精度有顯著提升.在目標位置的預測上使用預設的錨點框(anchor boxes),采用特征金字塔[6]布局網絡,使用3 個不同尺度的特征圖,通過拼接和卷積運算,融合淺層特征與深層特征.YOLOv3 網絡分別對提取出的3 個不同尺度的特征圖進行檢測,提升了算法對不同大小目標的檢測性能.如圖1 所示,對于一張輸入圖像,YOLOv3 算法將輸入圖像分為S×S 個網格,網格的寬為cx,高為cy,在每一個網格中預測B 個邊界框(bounding boxes),輸出是邊界框中心點相對于當前網格左上角坐標的偏移量(tx,ty,tw,th),然后用如下公式計算出邊界框相對于特征圖的位置和大小(bx,by,bw,bh),對應圖1 中的藍色實線,
圖1 預測框Fig.1 Prediction box
圖像中總共有S ×S 個網格,每個網格預測出B 個邊界框,每個邊界框對應5 個預測參數(shù):4 個坐標和1 個置信度.參與損失函數(shù)計算的值包括預測框的中心點位置和寬高,預測框的置信度指的是預測框與標記框之間的交并比(intersection-over-union,IOU)[7],YOLOv3 中設置IOU>0.7 的預測框為正例,IOU<0.3 的預測框為負例,忽略0.3~0.7 之間的預測框,即只是用被判定為正例和負例的預測框信息計算損失函數(shù).
改進激活函數(shù)也可以提高小目標的識別能力,激活函數(shù)的選取標準應是使更多的淺層神經元被激活,并且賦予不同的權重.YOLOv3 中使用Leaky ReLU[8]作為激活函數(shù),
式中:ai是(1,+∞)區(qū)間內的一個值.可知,ReLU[9]將輸入為負值都設為0,但是在Leaky ReLU 中是在輸入為負值時添加一個非零斜率.如圖2 所示,橫坐標為網絡輸入,縱坐標為網絡輸出,解決了ReLU 中在輸入值為負值時,輸出始終為0,一階導數(shù)也始終為0,導致神經元不能正常更新參數(shù)的問題.由于在負值處引入了很小的坡度,使得導數(shù)不為0,因此允許進行很慢的梯度學習[10].
圖2 Leaky ReLU 函數(shù)圖像Fig.2 Leaky ReLU function graph
在模型優(yōu)化過程中,通過調整學習率對模型的優(yōu)化起到的作用很小[11],而使用更優(yōu)的損失函數(shù)對于模型的優(yōu)化有很大的作用.YOLOv3 中將loss 分為3 個部分:回歸損失lbox是通過邊界框坐標計算loss,對應式(3);置信度損失lcls是置信度帶來的loss,對應式(4);分類損失lobj是類別帶來的loss,對應式(5).
式(3)~(5)中:S 為圖像的劃分系數(shù);B 為每個網格預測的邊界框個數(shù);C 為類別數(shù);p 為類別概率;xi,yi,wi,hi為網格中邊界框中心點處的橫縱坐標及寬高;λ 為權重系數(shù).
從YOLOv3 中的損失函數(shù)來看,并不是網絡的所有輸出都需要計算loss,當物體中心落入cell 中,就需計算分類損失和置信度損失,預測出的邊界框與ground truth 的交并比較大的需要計算回歸損失.而回歸損失會乘以(2 ?wi×hi)的比例系數(shù),以提高對小目標的識別能力,其中wi和hi分別是ground truth 的寬和高.
不同數(shù)據中目標的尺度大小及縱橫比不同,所以選擇合適的錨框尺度對于算法識別能力有很大影響.那么,給定若干個尺度大小的數(shù)據,如何將其進行歸類呢?這里的“類”是指具有相似特征的數(shù)據的集合.聚類算法就是將整個數(shù)據集劃分為多個類,使得最后每個類內數(shù)據相似,類間數(shù)據差異盡可能大.K-means[12]是一種簡單且經典的基于距離的聚類算法,也稱為k 均值聚類算法,一般采用距離作為相似性評價指標,即認為兩個對象的距離越近,那么二者的相似度就越大.給定一個數(shù)據集{x1,x2,···,xn},其中每個數(shù)據都是一個d 維度數(shù)據點,k 均值聚類就是將這n 個數(shù)據劃分到k 個集合中,并使得組內平方和最小.換句話說,K-means 聚類的目標就是找到使式(6)滿足的聚類Si,
式中:μi是Si中所有點的均值.
K-means 的實現(xiàn)是多次迭代的結果,算法分為如下4 步.
(1) 隨機產生k 個位置,作為k 個聚類中心;
(2) 對數(shù)據集中的每個點,計算其與聚類中心的距離,離哪個聚類中心近,就劃分到聚類中心所屬的集合;
(3) 將數(shù)據歸好集合后,重新計算每個集合的聚類中心;
(4) 若重新計算出的聚類中心與原始的聚類中心之間的距離小于某個閾值,表示趨于穩(wěn)定,就可以認為聚類已經達到期望的結果,算法終止.否則返回步驟(2),繼續(xù)迭代.
在YOLOv3 中,Anchors 參數(shù)需要人為設定,通過K-means 聚類得到給定數(shù)據集先驗框的寬高,然后將聚類結果按照大小順序分配給3 個feature map 作為先驗框,使用IOU 作為聚類的距離函數(shù),聚類的目的是使anchor boxes 和臨近的ground truth 有更大的IOU 值,
可見距離越小越好,但IOU 越大越好,所以使用1?IOU 就可以保證滿足條件.
針對YOLOv3 的網絡結構,采用特征金字塔網絡(feature pyramid networks,FPN)進行多尺度特征預測,使用小尺度的feature map 檢測大目標,大尺度的feature map 檢測小目標,但是考慮到水下小目標數(shù)據集中的目標尺度大小是比較集中的,所以沒有充分發(fā)揮出YOLOv3 多尺度的價值,而且在實驗過程中發(fā)現(xiàn)ground truth 比大多數(shù)聚類得到的錨框尺度要大.
本工作針對以上問題進行了特定改動,即將K-means 聚類后的結果進行線性縮放,將錨框的尺度進行拉伸(見圖3),簡單來說就是將錨框的尺度乘以一定的系數(shù),使大的尺度更大,小的尺度更小,
圖3 線性縮放K-means 聚類算法Fig.3 Linear scaling K-means clustering algorithm
式中:設定α=0.5;β=3.
本工作中的縮放方式是一種線性縮放,并不會改變真值框中心點的位置,即縮放方式是對真值框中心點進行長寬的同步拉伸.但這種縮放方式也有一定的局限性,當目標尺寸接近訓練圖尺寸時,無使用的必要性.由于自建數(shù)據集中目標較小(遠小于訓練圖尺寸),人為框出的真值框并不是緊貼目標,所以將小尺寸真值框進行縮小或者大尺寸真值框進行放大,并不會造成真值框框不全目標.并且本工作以原始YOLOv3 為基礎進行多尺度訓練,而對真值框進行線性縮放能夠使真值框的尺度更加符合多尺度,有益于選框的多樣性.
選定K=1 ~14(坐標軸x 對應1~14)分別對數(shù)據集中的ground truth 框的尺度大小進行聚類計算,得出K 與Avg IOU 之間的關系如圖4 所示.隨著K 值的增大,目標函數(shù)的變化趨于平穩(wěn),從數(shù)據上可以分析出,當K 等于12 時,Avg IOU 的值達到最大.
圖4 K-means 聚類分析結果Fig.4 K-means clustering analysis results
YOLOv3 中圖像特征提取采用Darknet-53 的網絡結構(見表1),含有53 個卷積層,并借鑒了殘差網絡[13],用1×1 和3×3 大小的卷積核構成殘差塊,在一些層之間設置快捷鏈路(shortcut connections),避免了網絡層數(shù)增加后梯度消失的問題.每個卷積層之后使用Batch Normalization[14]和Leaky ReLU,提高了網絡的泛化性及推斷速度.Darknet-53 為全卷積結構,去掉了所有的最大池化(MaxPooling)層,使用步長為2 的卷積層代替,避免使用池化后小目標特征丟失.以自建數(shù)據集為例,使用原始的YOLOv3 網絡進行檢測,輸入圖片的大小為512×512,最終劃分的網格大小分別為16×16,32×32,64×64,通過3 個檢測層檢測后,能夠得到的預測框數(shù)量有5 376 個.原始YOLOv3 中使用表1 中的32×32,16×16,8×8 大小特征層,在兩兩之間上采樣后拼接,對小、中、大尺度目標進行預測.
表1 Darknet-53 網絡結構Table 1 Darknet-53 network structure
使用上采樣的原因是,越深層級中的細節(jié)越容易丟失,甚至丟失小目標的語義,所以上采樣的操作對小目標是“友好”的.但是直接使用淺層的特征進行預測往往不可行,因為淺層的語義信息不夠豐富,所以對深層的特征圖進行上采樣后與淺層的特征圖拼接成一個更大的特征圖更有利于預測.
與原始YOLOv3 相比,本工作的改進算法利用了更淺層的特征圖與深層特征圖上采樣后進行拼接,獲得了更大的特征圖,并且使用了更淺的層去學習小目標的特征.調整后的網絡如圖5 所示,其中DBL 模塊、Res-unit、resn 模塊均與原始YOLOv3 保持一致,圖中虛線部分即為改動部分,新的大尺寸特征圖更有利于小目標檢測.以自建數(shù)據集為例,使用本工作算法進行實驗,輸入圖片的大小為512×512,最終劃分的網格大小分別為32×32,64×64,128×128,通過3 個檢測層檢測后,能夠得到的預測框數(shù)量有21 504 個,預測框數(shù)量是原始YOLOv3 的4 倍,預測框數(shù)量的增加提高了模型的檢測能力.
圖5 改進的YOLOv3 網絡結構Fig.5 Improved YOLOv3 network structure
實驗數(shù)據庫使用的是實驗室自建的水下目標數(shù)據集,圖像為聲納采集的水下目標,其中目標尺度基本屬于小目標,且目標尺度分布跨度大,數(shù)據量較少,容易產生過擬合,所以使用數(shù)據擴增方式擴大了數(shù)據集規(guī)模,包括隨機生成類似目標形狀的數(shù)據、最近鄰放大目標[15]、線性增加像素值、目標梯度圖[16]、左右翻轉、旋轉一定角度等操作.自建仿真數(shù)據集約1 812 張圖像,其中60%作為訓練,20%作為驗證,20%作為測試使用.
采用批梯度下降的方式訓練網絡,批大小設置為4,初始學習率設置為0.001,動量設置為0.9,權重衰減設置為0.000 5,訓練時對圖像進行飽和度調整、曝光量調整和色調調整等操作,提高模型的泛化性能.
實驗基于Anaconda3 平臺,通過Python 3.6 完成,所有實驗均在Intel Core i7-9750H CPU 和NVDIA GeForce RTX 2070,16 GB 內存的Windows 平臺上完成,深度學習框架為Pytorch 1.4.0.
由于自建數(shù)據集131 和138 只有一類目標(雷),因此采用精確率P (precision)和召回率R(recall)作為模型的評價標準[17],
式中:TP 為網絡預測出的真目標數(shù);FN 為未能成功預測出的真目標數(shù);TP+FP(n)為預測的目標中是正類目標的數(shù)目;TP+FN(n′)為所有完全滿足標注的目標的數(shù)目.精確率計算公式(9)表示預測出的準確目標數(shù)占總的正類預測數(shù)的比例;召回率計算公式(10)表示預測出的準確目標數(shù)占實際目標數(shù)的比例,以交并比大于閾值0.5 為真目標.
3.2.1 合適的anchor 個數(shù)K 對網絡的影響
使用原始YOLOv3 算法和線性縮放K-means 聚類算法進行實驗,驗證聚類中心個數(shù)對網絡的影響.實驗選取3 個不同的聚類中心個數(shù),分別為9,12,15.單純比較聚類算法的準確率在不平衡的樣本中并不準確,所以使用自建數(shù)據集131 和138 進行模型的訓練與測試,表2 為不同anchor 個數(shù)K 下網絡的性能對比.選擇更多的anchor 數(shù)來增加檢測的密度,有利于召回率的提升,在anchor 個數(shù)從9 增加為12,15 的過程中,單類別目標的平均精確率從0.96 下降至0.95,0.88,平均精確率下降明顯,所以一味增加anchor 的個數(shù)并不可行.
表2 不同anchor 個數(shù)K 下模型的性能Table 2 Performance of the model under different anchor numbers K
3.2.2 驗證改進的聚類算法的優(yōu)異性
分別采用原始YOLOv3 和改進聚類方式的YOLOv3 對自建數(shù)據集131 和138 中的目標進行單類別檢測,結果如表3 所示.可見,使用線性縮放的YOLOv3 算法對小目標檢測的平均精確率為0.96,與未使用聚類的YOLOv3 算法相比提高了3 個百分點,與使用了聚類的YOLOv3 算法相比提高了5 個百分點,且召回率均有一定的提升.
表3 聚類方式不同的YOLOv3 算法目標檢測結果對比Table 3 Comparison of target detection results of YOLOv3 algorithm with different clustering methods
3.2.3 驗證改進網絡連接結構對小目標檢測的優(yōu)異性
分析了改進的YOLOv3 網絡和原始YOLOv3 網絡對自建小目標數(shù)據集131 的檢測效果,從表4 中可以看出,改進的YOLOv3 算法在自建小目標數(shù)據集131 上的各項性能有明顯的提升.與原始YOLOv3 算法相比,改進的YOLOv3 算法的均值平均精確率(mAP)提升了7 個百分點,召回率(Recall)提升了2 個百分點,能夠有效檢測出場景中的小目標,并且在一定程度上避免了對小目標的錯檢漏檢.
表4 不同YOLOv3 算法目標檢測結果的對比Table 4 Comparison of target detection results of different YOLOv3 algorithms
3.2.4 驗證改進YOLOv3 算法的綜合性能
使用規(guī)模更大的新一批次的自建數(shù)據集,其中包含4 類目標(雷、管線、基陣、潛標),進行模型綜合性能的分析.表5 是對改進YOLOv3 的綜合性能進行分析,其中新增的APmine 為雷的平均精確率,APpipeline 為管線平均精確率,AParray 為基陣平均精確率,APbuoy 為潛標平均精確率,Params 為模型總參數(shù)量.從表中可以看出,對于小目標(mine),改進YOLOv3 算法的平均精確率為0.95(提升了9 個百分點);對于管線,改進YOLOv3 算法的平均精確率為0.94;對于基陣,改進YOLOv3 算法的平均精確率為0.98;對于潛標,改進YOLOv3 算法的平均精確率為1;相比原始YOLOv3 算法,改進YOLOv3 算法的均值平均精確率為0.97(提升了2 個百分點),召回率為0.98(提升了2 個百分點).并且,改進YOLOv3 模型的參數(shù)量為62.6×1012,能夠保持原有算法的實時性.
表5 改進YOLOv3 算法的綜合性能分析Table 5 Comprehensive performance analysis of improved YOLOv3 algorithm
針對水下聲納小目標檢測問題,本工作提出一種改進的YOLOv3 算法,首先使用線性縮放的K-means 算法代替?zhèn)鹘y(tǒng)K-means 算法對先驗框尺度進行聚類,接著簡單改動YOLOv3 算法的多尺度連接方式,從而獲得了一種快速、準確的適合水下聲納小目標的檢測算法.應用改進YOLOv3 算法對自建數(shù)據集進行目標分類與識別,驗證了基于深度學習進行水下目標檢測任務的可行性.實驗結果表明,本工作所提出的改進YOLOv3 算法能夠實現(xiàn)對小目標的有效檢測,且針對所有類別的檢測精度均達到90%以上,召回率高達98%,相比原始YOLOv3 算法在檢測小目標上性能明顯提升.