蔡向上
(上海交通大學 船舶海洋與建筑工程學院,上海 200240)
具備實時視覺感知以及裝配機械手的ROV(Re原motely Operated Vehicle)目前已經在漁業養殖,水下船體檢測,維修以及水下搜救與取證等領域被廣泛應用[1]。連接中繼器TMS(Tether Management System)與ROV 本體的臍帶纜可以實時傳輸電力以及視頻信息,在大幅延長ROV 的工作時間與作業范圍的同時還提升了ROV 實時高效處理視頻信息并做出相應決策的能力。這使得ROV 可以完美代替人在水下復雜環境中高效地執行各種任務,既減小了人力成本又提升任務安全系數。在淺水湖泊中就可以部署ROV 監測魚群的動向,并且實時提供魚群的健康信息以及攝食習慣等,為專業養殖人員提供全面的信息。
ROV 在工作結束后往往會通過中繼器TMS 進行回收。原始籠式TMS 回收方案中ROV 在靠近回收裝置的時候會關閉推進器,然后通過絞車收縮臍帶纜的方式緩慢地步進中繼器。這需要有專人負責回收過程末端ROV 與中繼器的對準與固定鎖緊工作,效率低且失敗幾率高。機器視覺的發展打破了這一尷尬局面,2020年Petar Trslic[2]提出了一種基于4個引導燈進行ROV 與TMS 裝置相對位姿估計的視覺方案,采集到的圖像通過ROV 控制艙中計算機進行濾波、二值化閾值處理提取燈光區域,最終基于四個引導等中心點位置與相機參數得到位姿轉換矩陣。這是首次實現ROV 與TMS 的自主動態對接,大西洋的對接試驗證明了他們方案的有效性。然而固定閾值的二值化方式僅僅適用于深海昏暗的環境,在存在噪點光源影響環境光照或者其余雜物的遮擋的情形中,這種檢測方案很可能失敗。
GPU 算力的提升以及神經網絡的不斷完善,基于深度學習的機器視覺也成了不同領域學者的研究熱點。傳統視覺算法中的特征提取算子(sift/surf/orb)帶來了算法的高復雜度,實時性較差。此外淺水環境存在的水草,雜質以及不均勻的光照等都會影響傳統視覺算法檢測精度,魯棒性較差。基于深度學習的視覺檢測算法具有較好的檢測精度與強魯棒性,在訓練過程中自動提取適合檢測目標的特征,但是巨大的卷積計算量以及GPU 顯存消耗給嵌入式設備帶來了不小的挑戰。本研究基于端到端的深度學習神經網絡yolov4 提出了1 種輕量化模型方案,基于tensorrt 加速以及deepstream 部署,在jetson Xavier nx 上獲得了較好實時性的檢測結果。為了提升算法在復雜淺水環境中提取目標特征的能力,引入了CBAM 注意力機制,這以較低的計算成本提升了模型精度。
目標檢測指的是對圖像或者視頻中的目標進行分類和定位的任務。早期目標檢測模型是人為選取特征提取算子的集合,速度慢且準確度較低。卷積神經網絡和深度學習的引入改變了視覺感知領域的格局,2016年Joseph redmon[3]提出的單階段端到端的檢測算法yolov1 相比于之前的RCNN 系列算法在實時性上大大提高,隨后更多研究人員加入了yolo 系列算法改進更新迭代的工作中。基于Durga Nooka Venkatesh Alla 的研究成果,yolov4 算法在AUV 水下對接識別塢站上平均精度最高,本研究選取yolov4 作為輕量化模型的baseline。
Yolov4 模型架構如圖1 所示。其主干部分通過CSPDarknet53 將輸入圖片進行32 倍下采樣并完成特征提取,其中CSP 結引入CSPnet 的理念在減少計算量的基礎上獲得更豐富的特征圖;Neck 部分的FPN與PAN 結構將不同尺度特征層中的信息進行融合并將這些特征分配給檢測頭。CBL 與CBM 都負責特征提取,分別由Conv+Batch Normalization 以及Leaky-ReLU/MISH 激活函數組成。區別在于Mish 激活函數允許負梯度區間值的流入,允許更好的信息流入神經網絡;3個尺度不一的特征圖則負責實現目標的檢測與分類,三層檢測頭的設計能減小目標尺度變化對檢測造成的影響。

圖1 原始YOLOv4 結構圖
1.2.1 引入Ghost 模塊
為了確保卷積神經網絡對數據有深刻的理解,性能優秀的神經網絡的特征層中往往包含著大量冗余重復的信息。殘差結構的提出使得神經網絡往更深層次,更復雜的方向發展,當然模型平均精度也大大提升。為了適應Jetson Xavier NX 有限的顯存與算力,引入Ghost 模塊對yolov4 進行輕量化處理。
2020年Han Kai[4]等人發現神經網絡卷積層各個通道之間存在重復相似的特征圖,提出了一種基于線性變換生成相似特征圖以減少計算量的方法。圖2 是Ghost 卷積的示意圖,Ghost 卷積計算分為兩部分,一部分與普通卷積完全相同,另一部分基于普通卷積的結果進行線性變換得到,最后將兩部分進行通道拼接得到最終結果。Ghost 卷積思想并不在于完全去除網絡中的冗余信息,而是采用廉價計算操作生成比之前更豐富且性能更好的特征映射。所實現的Ghost 卷積中普通卷積數量為50%,線性變換操作通過3*3 的depthwise 卷積實現。

圖2 Ghost 卷積示意圖
給定輸入圖片尺寸c·h·w,c代表通道數,h,w分別代表圖片的高度與寬度;卷積核尺寸為c·k·k·n,其中n 代表輸出卷積核數量;卷積核輸出的尺寸為n·h憶·w憶。則普通卷積的浮點數計算量為:

Ghost 卷積在生成同樣數量的輸出特征圖的情況下所需要的浮點數計算量為:

兩者比值接近于s,其中d 是depthwise 卷積核的尺度,取值3;s是原始卷積與Ghost 卷積中普通卷積數量的比值,本文取為2。本文把yolov4 網絡中所有的普通卷積全部替換為Ghost 卷積,因此理論上改進后的yolov4 模型大小與參數會壓縮至原本的一半。
1.2.2 引入CBAM 注意力機制
淺水環境十分復雜,存在著水草、魚群以及其余氣泡等雜質等干擾中繼器的檢測。此外水下光線的散射與反射會使得拍攝到的圖像存在失真,為了提高中繼器的檢測精度,本文在三個檢測頭部分引入了CBAM 注意力機制,在檢測目標前對特征進行自適應細化處理。
CBAM 是一個輕量級的即插即用的注意力模塊,可以集成到卷積神經網絡結構中一起進行訓練,其模塊示意圖如圖3 所示。特征層的每個通道都相當于一個特征提取器,通道注意力使網絡關注于檢測目標所需要的重要特征,抑制其余干擾特征,關心的是我該“看”什么。而空間注意力則關注的是在圖像二維平面中,我該“看”哪里。經過訓練后,CBAM 結構能自適應地細化輸入到檢測頭中的特征圖。CBAM 結構這樣的特性無疑十分適用于嵌入式jetson 主板在復雜淺水環境下檢測中繼器的任務場景。

圖3 CBAM 結構示意圖
Zhu Xingkui[5]等人將CBAM 結構插在了yolov5頸部帶有殘差結構的C3 模塊與卷積模塊之間,而本文經過實際對比發現將CBAM 模塊插入到檢測頭前面對于map 值有更好的提升。改進后yolov4 整體結構圖如圖4 所示。

圖4 改進后的Ghost-YOLOv4 結構圖
1.2.3 損失函數調整
非極大值抑制(NMS)是一種經典的目標檢測后處理技術,將得分最高的檢測框與其余檢測框逐一計算IOU 值,并過濾掉超過閾值的檢測框。實際場景中往往存在距離很近而重合度很高的目標,YOLOv4 為了提高檢測高重合目標物體的召回率,引入了DIOU-NMS 后處理方法。在ROV 淺水回收任務場景中僅存在一個待檢測中繼器,本文選用經典NMS 進行檢測后處理。
YOLOv4 損失函數依舊由分類損失,置信度損失與邊界框回歸損失三部分組成。本文屬于單一類別檢測,參考Yang Lin 等人DONN 網絡的設計去掉了分類損失的計算。為了提高檢測精度,本文在經過實驗測試后設定置信度損失與邊界框回歸損失權重比值為1頤3。邊界框回歸損失采用的是CIOU函數,表達式如下:

b,bgt分別代表了Anchor 框和目標框的中心點,p代表計算兩個中心點的歐式距離,c代表的是可以同時覆蓋Anchor 框和目標框的最小矩形的對角線距離。琢與v則考慮了預測框與擬合框的長寬比。
本實驗軟件環境為Win11 系統、pytorch 1.10.1、cuda 11.3,訓練主機CPU 型號i7-11700,顯卡為Nvidia Geforce RTX 3060。ROV 嵌入式主板為JETSON XAVIER NX,配置有8 GB Nvidia Volta GPU 以及Nvidia Carmel ARMv8.2 版本CPU。
ROV 水下中繼器不存在公開數據集,本文采用UUV 水下對接塢站公開數據集UDID 作為評估數據集并自己基于虛幻引擎UE4.26 制作ROV 中繼器數據集進行最終驗證。
為了加快模型訓練速度,本文采取預訓練方式以VOC 2007 數據集訓練權重作為初始權重。UDID 數據集12000 張以4頤1 的比例分配訓練集與測試集,并基于梯度下降法訓練150epoch。采用SGD 優化器并設置初始學習率0.01,學習率基于余弦退火策略進行衰減直到0.001。Batchsize 設置為32 以確保更準確的梯度更新方向。
算法主要以UDID 數據集平均精度map,模型參數量,模型計算量以及嵌入式主板運行算法時檢測時間作為評估標準。本文對比了改進前后的YOLOv4 算法性能并做了消融實驗以說明改進方案的有效性,具體見表1。從消融實驗結果可知引入Ghost 模塊后,YOLOv4 模型參數量減少了81.6%,浮點數運算量減少了89.4%,單幀圖片檢測時間減少了40 ms,不過在網絡輕量化的同時網絡平均精度有所降低。引入CBAM 注意力模塊后,最終Ghost_V4-CBAM 模型平均精度僅比原始YOLOv4 模型相差不到1%。在精簡網絡提升實時性能的同時精度滿足本次淺水回收ROV 檢測中繼器任務要求。

表1 網絡改進前后參數對比
Nvidia TensorRT 是NVIDIA 公司發布的一個高性能的深度學習推理加速框架。可以優化深度學習模型架構,并提供高吞吐率和低延遲的推理部署,目前廣泛用于大規模數據中心、嵌入式平臺或自動駕駛平臺進行推理加速。
原始訓練好的FP32 網絡模型導入到Jetson Xavier NX,檢測速度為16 幀/s。這并不能滿足實時性要求較高的與中繼器對接任務的要求。Tensorrt 有多種輸入網絡模型方式,首先將pytorch 下訓練好的模型轉為ONNX 模型,然后導入到Tensorrt 生成engine文件,這便是加速后的可執行推理引擎。
DeepStream 應用程序將深度神經網絡和其他復雜的處理任務引入到流處理管道中,以實現對視頻和其他傳感器數據的近實時分析。Deepstream 處理視頻編碼,解碼的速度比傳統方法要快很多,圖像處理完畢后在調用引擎進行推理。淺水ROV 檢測中繼器依靠兩個攝像頭的輸入,通過Deepstream 部署可以加快整個檢測速度,因此,將上文Tensorrt 生成的引擎文件部署至Deepstream 中進行加速。最終Jetson XAVIER NX 執行的推理速度可以達到60 幀/s,滿足淺水檢測中繼器任務要求。UDID 塢站公開數據集以及UE4.26 自建中繼器仿真數據集上算法運行結果如圖5 所示。

圖5 輕量化網絡模型應用于不同數據集下檢測結果
基于YOLOv4 算法模型以及輕量化網絡Ghostnet 提出了一種ROV 中繼器的輕量級檢測模型Ghost_V4-CBAM 用于ROV 淺水回收。為了提升輕量化模型的檢測精度,使網絡專注于檢測中繼器的重要特征,在檢測頭前插入3個CBAM“注意力”模塊,并調整了損失函數權重強調訓練時的邊界框定位損失。在公開數據集以及自建仿真數據集上評估了算法并基于Tensorrt 以及Deepstream 加速了嵌入式主板上Jetson Xavier NX 上算法的推理速度,能夠滿足ROV淺水回收時檢測中繼器的實時性要求。