王炳德, 楊柳濤
(上海船舶運輸科學研究所 航運技術與安全國家重點實驗室, 上海 200135)
隨著海洋資源的不斷勘探開發和海洋儀器的不斷發展,海洋目標檢測在監測、跟蹤和對抗等諸多領域發揮著重要作用。隨著我國船舶裝備的快速發展,對船舶檢測的精度和實時性要求也越來越高。因此,無論在軍事、民用還是在商業領域,不斷提高船舶檢測的技術都具有重要意義。
在深度卷積神經網絡(Deep Convolutional Neural Network, DCNN)介入之前,傳統的目標檢測和識別算法都基于原始的手工提取特征方法,其主要流程為區域選擇、提取特征、分類回歸。其中比較有代表性的可變形組件模型(Deformable Parts Model,DPM)算法[1],其基本思想是先提取DPM人工特征,再用latentSVM分類。DPM算法在目標檢測中大大提高了人工特征的精度,但特征相對復雜,計算速度較慢。傳統的目標檢測與識別算法不能保證其實時性和泛化性能。
近年來,隨著大數據的日趨深入和計算速度的不斷提高,深度學習技術得到快速發展。KRIZHEVSKY等[2]首先提出深度卷積神經網絡GIRSHICK等[3]結合深度神經網絡和圖像目標檢測做了一系列卓有成效的工作,從R-CNN(Region-CNN)到Fast R-CNN[4],再到Faster R-CNN[5],奠定了目標檢測算法的經典結構。神經網絡作為一種端到端模型,避免人工設計特征帶來的巨大消耗,隨著模型的不斷深化,準確率也不斷提高。但由于R-CNN系列算法本身結構的限制,其檢測速度遇到瓶頸,難以滿足部分場景實時性的需求。因此,REDMON等[6]提出一種基于回歸方法的YOLO(You Only Look Once)目標檢測算法,在保證一定準確率的前提下,速度得到極大提升。LIU等[7]將YOLO的回歸思想和Faster R-CNN的anchor box機制結合提出SSD(Single Shot MultiBox Detector)算法,在保持YOLO算法快速特性的同時,也保證了Faster R-CNN的邊框定位效果。隨后,REDMON等[8-9]又對YOLO算法不斷進行改進,先后發表了YOLO9000等論文,其中YOLOv3具有較高的準確率和良好的檢測速率,能夠滿足船舶目標檢測對精度和實時性的要求。
目前,YOLOv3算法網絡模型在目標檢測中的應用較為廣泛,考慮到YOLOv3算法的優點以及船舶目標檢測對高精度與實時性要求的日益迫切,故將YOLOv3算法應用到船舶目標檢測方法中,開展基于YOLOv3的船舶目標檢測算法研究。本文主要分析YOLOv3算法的網絡結構和損失函數,制作船舶目標檢測所需的數據集,并對YOLOv3算法進行一些改進和優化,通過云服務器訓練算法網絡模型,最后進行試驗對比,驗證了算法的檢測效果和性能。
YOLO v3是一種深度學習方法,其使用一種新的深度網絡來實現特征提取,這個網絡主要是由一系列的1×1和3×3的卷積層組成,因為網絡中共有53個卷積層,所以叫做Darknet-53。Darknet-53的結構見圖1左側,右側為基本的卷積層和殘差塊結構示意。其中殘差塊借鑒了ResNet網絡的殘差結構,在一些層之間設置快捷鏈路[10],解決了深度網絡的退化問題,讓網絡結構可以更深。同時,YOLOv3借鑒了FPN(Feature Pyramid Networks)[11]的特征融合金字塔思想,通過上采樣和特征融合方法,最終輸出3種不同尺度的特征圖(13×13,26×26,52×52)。對于小目標,大尺度特征圖提供分辨率信息,小尺度特征圖提供語義信息;而對于大目標,直接是小尺度特征圖同時提供分辨率和語義信息。利用多尺度特征檢測可增加特征的豐富度,提升大目標和小目標的檢測效果。
損失函數是決定網絡效果的重要參數之一,在模型的訓練過程中,不斷調整網絡中的參數,優化損失函數Loss的值達到最小,完成模型的訓練。YOLOv3的損失函數主要由邊界框中心點(x,y)的預測誤差、邊界框的寬高(w,h)預測誤差、置信度誤差和分類預測誤差等4部分組成。具體的計算為

圖1 YOLOv3的網絡結構圖

(1)

(2)

在深度學習中數據集質量會直接影響最終檢測的效果,同時還需要足量的樣本來使得網絡能夠充分學習待檢測目標的特征,因此建立船舶目標檢測數據集見表1。

表1 船舶目標檢測數據集 張
數據集采用PASCAL VOC 數據集格式,通過百度圖片、谷歌圖片、爬蟲、截取ImageNet數據集等方式,得到4 000張船舶圖像。隨后將圖像尺寸統一縮放為416×416,再通過手工標記、批量修改等方式得到包含邊界框坐標和類別信息的xml文件。最后,根據相應比例將樣本隨機分配給訓練集和驗證集,完成數據集的構建。
YOLOv3算法在目標檢測領域已經取得很好的檢測效果,但對于特定的船舶目標檢測,可進行一些改進和優化,以得到更好的檢測效果和性能。
1.4.1k-means[12]聚類先驗框
YOLOv3算法使用邊界框來預測目標物體在圖像中的具體位置,通過預先給定的9組先驗框,深度網絡在訓練過程中不斷調整邊界框的尺寸,最終得到目標的檢測框。因此,若一開始就選擇更好的、更有代表性的先驗框,那么網絡就更容易得到準確的預測位置。YOLOv3算法本身的先驗框是根據coco數據集中80個類別的數據所得到的,對于船舶目標檢測并不完全適用。根據已經構建的船舶目標檢測數據集,使用k-means聚類算法得到最優的先驗框,并分配給3種不同尺寸的特征圖。
標準的k-means方法用的是歐氏距離,但是這樣會使得大的邊界框擁有更大的誤差。因此,使用目標檢測算法中常用的性能指標交并比(Intersection over Union,IOU)來代替歐氏距離,聚類算法使用的距離公式[13]為
d(box,centroid)=1-IOU(box,centroid)
(3)
IOU的計算公式見圖2,IOU越大代表檢測框和目標越接近、相似度越高,而距離判定(1-IOU)就越近。

圖2 IOU計算公式
設定k=9,總共聚類出9種尺寸的先驗框。聚類結果見圖3。分為9種不同顏色的類別,9個星星代表每個類別的聚類中心,其坐標即為新的先驗框的寬高維度。

圖3 聚類結果
將得到的先驗框平均分配給不同尺度的特征圖。在最小的13×13特征圖上(有最大的感受野)應用較大的先驗框(302,109)、(347,219)、(380,364),適合檢測較大的對象;在中等的26×26特征圖上(中等感受野)應用中等的先驗框(158,77)、(187,285)、(278,330),適合檢測中等大小的對象;在較大的52×52特征圖上(較小的感受野)應用較小的先驗框(36,44)、(62,144)、(117,231),適合檢測較小的對象。
1.4.2mixup[14]
mixup是一種數據增強方法,每次隨機取2個樣本點(xi,yi)、(xj,yj)然后按照如下的方式生成1個新的虛擬樣本點為
(4)
(5)
式(4)和式(5)中:λ~Beta(α,α),α∈(0,∞)。mixup為鄰域風險最小化的一種形式,結合先驗知識,生成特征向量的線性插值來擴展訓練分布。mixup在很少的幾行代碼中就可得以實施,并且很少或幾乎沒有計算開銷。在廣泛的評估中,結果表明:mixup改進了當前最先進的模型在ImageNet、CIFAR、語音和表格數據集中的泛化誤差。此外,mixup有助于消除對錯誤標簽的記憶、對抗樣本的敏感性以及對抗訓練的不穩定性。
1.4.3 標簽平滑化[15]
在多類別訓練任務中,對于給定的數據集的標簽類別,將正樣本設為1,負樣本設為0,是一個one-hot向量:
(6)
式(6)中:y為目標的真實類別;i為多類別中的一類。
這樣會導致模型過于相信預測的類別,當數據出現噪聲的時候,使得訓練結果出現偏差。同時,在數據量分布不均衡的時候,過度依賴某一類數量多的標簽會出現過擬合現象。
標簽平滑化最早在Inception v2中被提出,是一種正則化的策略。[16]其通過“軟化”傳統的one-hot類型標簽,使得在計算損失值時能夠有效抑制過擬合現象。其將標簽的真實概率分布改為
(7)
式(7)中:k為總的分類類別。更新后的分布就相當于往真實分布中加入噪聲ε(為方便計算,ε通常取均勻分布), 減少標簽的真實類別在計算損失值時的權重,同時增加其他類別在損失函數中的權重。最終在訓練網絡時,最小化預測概率和真實概率的交叉熵,從而得到最優的預測概率分布為
(8)
式(8)中:α可取任意實數。
因此,在YOLOv3網絡模型訓練時,加入標簽平滑化可在一定程度上抑制過擬合現象,增加網絡的泛化能力,提升分類效果。
本文的試驗使用谷歌的Colaboratory工具,Colaboratory 是一個 Google 研究項目,旨在幫助傳播機器學習培訓和研究成果。其是一個 Jupyter 筆記本環境,預裝了Keras和Pytorch等深度學習框架,并且完全在云端運行。具體的硬件配置為16 G內存,16 G顯存的Tesla T4 GPU,CUDA版本為10.0,并可與谷歌云盤進行數據互通,方便訓練數據的保存和下載。
試驗選取最常用的3個目標檢測算法Faster R-CNN、SSD以及YOLOv3與改進后的YOLOv3算法進行對比分析,以驗證模型的檢測效果以及優化策略的有效性。其中基本的超參數設置為:最大訓練輪數為500,初始學習率和學習率衰減分別配置為0.000 1 和0.1,動量和批量大小分別為0.9和16.0,最終經過訓練得到最優的網絡模型用于試驗對比。
選取的目標檢測模型的評價指標為:平均精度均值(mean Average Precision,mAP)和每秒檢測幀數(Frames Per Second,FPS),其中mAP的定義為
(9)
(10)
(11)
式(9)~式(11)中:Precision為準確率;Recall為召回率[17];TP為真正例;FP為假正例;FN為假負例;AP為某一類的平均精度,而mAP為所有類別的AP再取平均值。通過訓練可分別得到4種算法的網絡模型,并可畫出4種模型的mAP變化曲線見圖4。

圖4 4種算法的mAP變化曲線
模型在測試集上的性能見表2,由表2可知:改進后的YOLOv3算法雖然在FPS上稍稍落后于SSD算法,但也達到了30 FPS,滿足實時性要求;而在精度指標mAP上均超過其他算法,達到了89.90%,具有優異的檢測性能。

表2 算法對比結果
原始YOLOv3算法(YOLOv3_1)和改進YOLOv3算法(YOLOv3_2)的損失值曲線圖見圖5。由圖5可知:改進后算法的邊界框中心點損失以及寬高損失收斂更快、Loss值更小,k-means聚類先驗框的優化策略起到了明顯的作用;比較置信度損失可看出兩種算法的Loss值差距很小,改進算法使用mixup方法生成的虛擬樣本對損失函數幾乎無影響;而比較分類損失的曲線圖,可看出改進算法的曲線收斂較慢,是因為標簽平滑化方法會輕微的抑制收斂速度,但最終的損失值不變,且可提高最終的mAP值。由總的Loss變化曲線可得出,改進算法的收斂更快、Loss值更低,實現算法性能的優化,最終的檢測精度mAP也獲得了提高,見圖6。

a) 中心點損失

b) 寬高損失

c) 置信度損失

d) 分類損失

a) 總損失變化

b) mAP變化
將待檢測圖像輸入訓練所得的網絡模型,即可完成檢測,4種算法的檢測效果對比見圖7。其中:圖7a中Faster R-CNN算法的檢測結果很差,出現了明顯的錯檢和漏檢;圖7b和圖7c均檢測到了3個船舶目標,YOLOv3算法的檢測結果的置信度更高,檢測效果更好,但兩種算法對于小目標的檢測效果不很理想;而圖7d改進算法的檢測結果中,圖像中的所有船舶目標都能夠被完全檢測出來,并使用相應尺度的邊界框準確地標記出來,檢測效果最好,可見優化策略提高了YOLOv3算法對于小目標的檢測效果。
為驗證算法的魯棒性,對海霧環境下的船舶圖像進行檢測,其檢測效果對比見圖8。其中:圖8a中Faster R-CNN算法未檢測到目標;圖8b中SSD算法檢測到了船舶目標,但檢測框偏大,置信度勉強達到0.45的篩選閾值;圖8c和圖8d中YOLOv3和改進YOLOv3算法均成功檢測到目標,檢測效果良好,而改進算法置信度稍高一點,檢測性能更高。結果表明算法具有魯棒性。

a) Faster R-CNN

b) SSD

c) YOLOv3

d) 改進YOLOv3

a) Faster R-CNN

b) SSD

c) YOLOv3

d) 改進YOLOv3
驗證改進算法的檢測性能和魯棒性后,可進一步將數據集細分為9類:集裝箱船、救生船、郵船、帆船、快艇、小船、散貨船、油船、雜貨船,并重新訓練可得到多類別船舶目標檢測模型,其檢測結果見圖9。

a) 集裝箱船

b) 救生船

c) 郵船

d) 帆船

e) 快艇

f) 小船

g) 散貨船

h) 油船

i) 雜貨船
本文基于YOLOv3算法模型,采用k-means聚類先驗框、mixup、標簽平滑化等優化策略對算法進行改進和優化,提出一種船舶目標實時檢測的方法。使用自制船舶圖像數據集,通過云服務器訓練網絡模型,并與Faster-RCNN、SSD以及YOLOv3等算法進行對比分析。試驗結果表明:改進算法的mAP達到了89.90%,優于其他算法,具有良好的檢測效果和魯棒性;同時檢測速度達到30 FPS,滿足船舶目標實時檢測的要求。