王治國 王 勇 譚 笑 張 歡
(海軍工程大學 武漢 430033)
近年來,隨著我國海洋經(jīng)濟的不斷增長,海上交通要道的地位越來越重要,海洋權(quán)益的維護越來越迫切,為加快海洋經(jīng)濟發(fā)展,國家提出了南海戰(zhàn)略發(fā)展思路。水面目標快速檢測是在港口監(jiān)控、漁業(yè)監(jiān)察、海事管理、軍事情報分析等領(lǐng)域具有重要的地位和作用[1-4],在計算機視覺領(lǐng)域,目標檢測與識別是其重要的任務(wù),運用各種算法實現(xiàn)目標特征表達,完成影像中目標位置確定和類別識別。傳統(tǒng)的目標檢測是依賴人工設(shè)計影像特征,具有較大的局限性,深度學習技術(shù)能夠自動完成影像特征提取,可以大幅提高檢測精度,但檢測速度方面往往需要依靠強大的GPU硬件支持才能完成,因此,如何提高影像中目標的檢測速度與精度一直是各國學者研究的熱點問題。
基于深度學習的目標檢測算法主要分為兩大類,一類是one-stage檢測算法,另一類是two-stage算法。one-stage類檢測算法不生成候選框,直接將目標框的檢測定位問題轉(zhuǎn)化為回歸問題,完成目標檢測需要特征提取、目標分類和定位框回歸三個步驟,代表性算法有 YOLO 系列算法[5~8]和 SSD[9]算法;two-stage類檢測算法采用一定的方法獲取待檢測目標的候選框并將其作為樣本,然后由卷積神經(jīng)網(wǎng)絡(luò)完成樣本分類,完成目標檢測主要有四個步驟:基于卷積神經(jīng)網(wǎng)絡(luò)的特征抽取、候選框生成、目標分類和定位框回歸,代表性算法有RCNN[10],F(xiàn)ast RCNN[11]、Faster RCNN[12]、Mask RCNN[13]等 。在檢測精度方面通常two-stage類算法優(yōu)于one-stage類算法,在檢測速度方面通常后者優(yōu)于前者。近年來,國內(nèi)外學者提出了許多目標檢測算法,圖1為其中典型的算法代表。
與采用滑動窗口和RPN網(wǎng)絡(luò)的方法不同,YOLO算法將目標檢測當做是一個回歸預測問題,直接得到目標的回歸框和屬于某一類別的概率。其圖像的多尺度特征提取采用卷積神經(jīng)網(wǎng)絡(luò)實現(xiàn),特征融合采用全連接網(wǎng)絡(luò)層,目標邊界框和類別概率由預測網(wǎng)絡(luò)完成[14]。YOLO算法將影像分為s*s個窗格,每個窗格用于檢測一個目標,即檢測中心點落在該窗格的某個目標,每個窗格還將預測N個邊界框和邊界框的置信度。
YOLO算法從提出到現(xiàn)在,已經(jīng)有YOLOv1、YOLOv2(YOLO9000)、YOLOv3、YOLOv4等多個版本。YOLOv1算法的網(wǎng)絡(luò)結(jié)構(gòu)參考GoogLeNet模型,包含卷積層24個和全連接層2個,該網(wǎng)絡(luò)結(jié)構(gòu)中前20個卷積網(wǎng)絡(luò)參數(shù)是在ImageNet1000 class數(shù)據(jù)集上預訓練得到的,在預訓練網(wǎng)絡(luò)中增加4個卷積層和2個全鏈接層,并隨機初始化權(quán)重。
YOLOv2是針對YOLOv1在目標定位不夠準確,召回率較低的問題做了相應(yīng)的改進,改進的策略包括批歸一化(Batch Normalization)[15]、高分辨率分類器(High Resolution Classifier)、卷積錨框(Convolutional with Anchor Boxes)、維度聚類(Dimension Clusters)、精細特征圖(Fine-Grained Features)、多尺度訓練(Multi-scale Training)等,基礎(chǔ)網(wǎng)絡(luò)采用Darknet-19,這些改進大部分都是在借鑒以前相關(guān)問題的改進方法基礎(chǔ)上綜合處理得到的。
YOLOv3采用Darknet53作為基礎(chǔ)網(wǎng)絡(luò),相對于ResNet152和ResNet101,該網(wǎng)絡(luò)在計算精度方面差不多,但由于層數(shù)較少,因此檢測速度更快。YOLOv3采用Darknet53的前52層,大量使用殘差的跳層鏈接,采用卷積中的stride操作完成降采樣,而不是使用傳統(tǒng)的pooling層操作,降低了池化帶來的梯度負面效果。為了增強對小目標的檢測效果,采用了上采樣和融合層操作等改進策略。
YOLOv4針對目前大部分高精度目標檢測算法實時運行能力差、訓練需要多個GPU才能完成的問題,構(gòu)建了僅在單個GPU上就能訓練和實時運行的目標檢測算法。該網(wǎng)絡(luò)采用CSPDarknet53作為基礎(chǔ)網(wǎng)絡(luò),并在ImageNet上進行預訓練得到模型參數(shù),使用SPP、PAN模塊實現(xiàn)不同位置特征的融合,最后采用YOLOv3進行預測。YOLOv4的創(chuàng)新主要包括以下四部分。
一是在網(wǎng)絡(luò)的輸入端,對樣本采用Mosaic數(shù)據(jù)增強。Mosaic數(shù)據(jù)增強對原始影像采取隨機縮放、隨機裁剪、隨機排布的方式進行拼接,一方面豐富了訓練樣本集,隨機縮放增加大量小目標樣本,更加強了網(wǎng)絡(luò)的魯棒性,另一方面可以減少訓練隊GPU計算資源的需求量。
二是將各種新的方式組合形成功能強大的主干網(wǎng)絡(luò)。CSPDarknet53[16]是在 Yolov3 主干網(wǎng)絡(luò)Darknet53 的基礎(chǔ)上借鑒 CSPNet[17]的經(jīng)驗生成的Backbone結(jié)構(gòu),其中包含了5個CSP模塊[18],每個CSP模塊前面的卷積核的大小都是3*3,stride=2,可以起到與polling層類似的下采樣的作用。采用CSPDarknet53網(wǎng)絡(luò)結(jié)構(gòu)一方面增強了CNN的學習能力,在輕量化的同時保持準確性,另一方面降低了計算瓶頸和內(nèi)存消耗。在CSPDarknet53主干網(wǎng)絡(luò)中采用2019年提出的Mish激活函數(shù)[19],其余的網(wǎng)絡(luò)則仍然使用leaky_relu激活函數(shù),這樣的策略可進一步提高檢測精度。YOLOv4中還采用了2018年提出的Dropblock策略,與傳統(tǒng)的Dropout隨機刪除減少神經(jīng)元的數(shù)量使網(wǎng)絡(luò)變得更簡單不同,Dropblock是對整個局部區(qū)域采取刪減丟棄操作。該方法借鑒了cutout數(shù)據(jù)增強方式,實驗結(jié)果表明Dropblock的效果優(yōu)于Cutout。
三是采用空間金字塔池化(Spatial Pyramid Pooling,SPP)結(jié)構(gòu)、FPN+PAN結(jié)構(gòu)作為Neck。SPP[20]模塊由四個并行的分支構(gòu)成,分別為kernel size為5*5、9*9、13*13的最大池化和一個跳躍連接,該模塊實現(xiàn)了局部特征和全局特征融合,更新了特征圖的表達能力,對于影響中存在大小差異較大目標的情況檢測效果明顯提升。FPN+PAN策略是借鑒2018年CVPR會議論文中PANet,該方法主要應(yīng)用于圖像分割領(lǐng)域,F(xiàn)PN[21]自頂向下將高層的特征信息通過上采樣的方式進行傳遞融合,得到進行預測的特征圖。
四是預測階段使用 DIOU_Loss[22]損失函數(shù),預測框篩選采用DIOU_nms。目標檢測中損失函數(shù)包括分類損失函數(shù)和回歸損失函數(shù),回歸損失函數(shù)常用IOU_Loss,該函數(shù)存在當預測框和目標框不相交時無法反映兩個框距離的遠近且此時損失函數(shù)不可導、無法區(qū)分不同相交狀態(tài)等問題,而改進的DIOU_Loss增加了重疊面積、中心點距離和邊界框?qū)捀弑瘸叨刃畔⒌让枋?,提高了檢測精度、加快了檢測速度。傳統(tǒng)的預測框篩選采用nms方式,而DIOU_nms方法考慮了邊界框中心點的位置信息,在重疊目標檢測中表現(xiàn)更優(yōu)。
YOLOv4將近年來深度學習領(lǐng)域最新的研究應(yīng)用到了YOLO算法中,進一步提高了YOLO的檢測精度和效率。
硬件環(huán)境:Intel(R)Core i7-9700 3.0GHz 8核,ARM 16GB,GPU NVIDIA GeForce TRX 2060 SUPER;軟件環(huán)境:NVIDIA CUDA 11.1.0,CUDNN 8.0.4。
從谷歌地圖中截取60張港口影像,采用開源標注軟件Labelimg標注器對圖片中的航母、水面艦船和潛艇進行標注,部分影像如圖2所示。
圖2 水面目標檢測訓練數(shù)據(jù)集
目標檢測任務(wù)中,設(shè)置適當?shù)腶nchor對于提升檢測精度具有重要作用。根據(jù)數(shù)據(jù)集中目標的大小可以確定anchor的預設(shè)值,并根據(jù)預設(shè)anchor計算召回率,若召回率大于0.98,則不用優(yōu)化,直接返回,如果小于0.98,則利用遺傳算法與k-means重新計算anchor預設(shè)值。經(jīng)過計算,本數(shù)據(jù)集的anchor預設(shè)值分別為[10,30,26,16,8,62]、[70,19,22,107,40,59]和[115,44,70,130,199,155]。每次訓練輸入的影像數(shù)設(shè)為64,每次訓練輸入影像數(shù)據(jù)的1/32。
訓練過程中Loss變化曲線如圖3所示,可見在5400次迭代后損失值趨于平穩(wěn)。
圖3 Loss值變化曲線
利用訓練得到的網(wǎng)絡(luò)進行測試,航母目標檢測正確率為99.88%,水面艦船目標檢測正確率為98.73%,潛艇檢測爭取率為70.97%,總的mAP為89.86%,檢測速度為15fps。從檢測結(jié)果可以看出,航母和水面艦船的檢測正確率都高于98%,表明了YOLOv4算法在水面目標檢測方面的有效性,潛艇的檢測正確率較低,是由于數(shù)據(jù)集中潛艇的訓練數(shù)量較少,影響了檢測準確率。部分結(jié)果如圖4所示。
圖4 水面目標檢測結(jié)果
針對水面目標檢測問題,本文將YOLOv4網(wǎng)絡(luò)模型引入水面目標檢測任務(wù)。簡要介紹了YOLO系列算法的特點,重點分析YOLOv4算法在四個方面的改進策略,并在自建的數(shù)據(jù)集上驗證了YOLOv4算法在水面目標檢測的可行性。后續(xù)工作將進一步充實數(shù)據(jù)集資源,收集更多種類和數(shù)量的目標影像資料,提高模型的檢測準確率和魯棒性。