






摘要:目標檢測是深度學習最重要的任務之一,在各種應用場景都發揮著重要作用,比如:人臉檢測、車輛自動駕駛檢測、遙感檢測等。本文以 YOLOv8 模型為基線,探討深度學習算法在船舶識別領域的應用,以完成對圖像中船舶目標的精準檢測與識別任務,實現端到端的訓練目標?;?PyQt5 設計了用戶操作界面,用于系統的展示和測試。實驗測試結果表明,改進后的方法在計算量略微下降的同時提升平均精度到84%。
關鍵詞:深度學習;目標檢測;船舶識別;YOLOv8
中圖分類號:TP311 文獻標識碼:A
文章編號:1009-3044(2024)23-0037-05
開放科學(資源服務)標識碼(OSID)
0 引言
0.1 研究背景及意義
隨著中國海洋強國建設的推進,船舶數量和種類不斷增加,相關工作部門對船舶監控需求日益增長。本文旨在研究船舶識別算法,通過分析船舶形狀實現對船舶種類的準確識別,以提升船舶監控的能力[1]。首先,船舶識別技術能夠幫助監測船舶在海上的位置和移動情況,提高海上交通的安全性。通過實時監控船只的位置和航行情況,可以及時事故的發生,有效保護船員和船只的安全。其次,船舶識別系統可以幫助管理者更好地了解船只的分布和航行情況,提高海上交通的管理效率,優化通航路徑,從而提升海上交通的運行效率和服務水平。此外,船舶識別技術也有助于發現和防止非法捕撈、海上污染等其他破壞海洋環境的活動。因此本文研究具有重要的研究意義。
0.2 基于深度學習的船舶識別算法應用挑戰
通過對船舶識別領域的研究現狀可以看出,船舶識別在深度學習的領域發展迅速,對不同情況下的船舶識別有不錯的效果,但仍然存在以下一些問題和難點:
(1) 因為目標之間大小差異過大且模型對目標信息級別的區別能力不夠,小目標檢測精度不夠;
(2) 由于模型的參數量大且計算量大,存在模型訓練效率不足的問題;
(3) 由于數據集背景目標遠多于前景目標,導致困難樣本多,模型泛化能力不足。
本文針對以上三個難點進行研究,對網絡的改進包括構建更加高效精準的網絡模型、設計輕量化模塊、更換更加高效的損失函數。為此,本文引入了 GD(Gatherand-Distribute) 機制以提高網絡檢測頭對不同大小目標的檢測精度,還采用了基于 Fasternet更加快速高效的模塊。
本文采用基于深度學習的船舶識別算法,旨在提高海洋監控和安全管理的智能化水平,為實現海洋強國戰略目標和維護海洋生態環境健康做出積極貢獻。而通過科技創新,旨在為海洋安全與環境保護事業注入新的動力和活力。
1 YOLOv8的基本原理
YOLO 算法的工作原理是將輸入圖像劃分為多個固定尺寸的網格格點,每個格點負責預測其區域內可能存在的物體的邊界框和類別概率。YOLOv8 采用了當前流行的解耦頭結構(Decoupled-Head) 來重新設計檢測頭(Detection Head) [2]。這種結構將分類和檢測任務分離開來,同時還將目標檢測從基于 Anchor 的方式轉變為基于 Anchor-Free 的方式。解耦頭的核心理念是在圖像分割中引入額外的分支網絡,該網絡專門用于像素級預測,兩條并行的分支分別提取類別特征和位置特征,然后各用一層1×1卷積完成分類和定位任務。這種設計使得模型能夠更有效地利用不同層次的語義信息,從而提高分割結果的質量和細節保留能力。
為了進一步提升 YOLOv8 在船舶識別任務上的性能,本文對其進行了以下改進:
1) 引入基于 Fasternet 的 c2f-Faste r模塊替換原有 c2f,通過PConv 減少計算量和模型大小,提高精度1.6%。
2) 采用華為提出的 GOLD-YOLO 中的 Gather-and-Distribute機制改進 Head 檢測頭,增強對不同大小目標的檢測能力。
3) 引入 EMASlideLoss 損失函數,結合融合指數移動平均(EMA) 概念和滑動損失機制,提升模型精度和泛化能力。
具體改進和訓練過程如下。
2 YOLOv8的改進和訓練
2.1 c2f-Faster Block
2.1.1 FasterNet和FasterNet Block
FasterNet 是一種新的神經網絡架構,?旨在提高運行速度并對許多視覺任務非常有效。?這種架構通過使用新型的 PConv(Partial Convolution) 和現成的 PWConv(Pointwise Convolution) 作為主要的算子,?進一步提升了其性能?[3]。而 FasterNet Block 中最重要的組件就是 PConv,PConv 在減少冗余計算和內存訪問量的同時,能夠保持高效的空間特征提取能力。PConv 的 FLOPs 更低,這是因為常規卷積和深度卷積對內存的訪問次數遠高于 PConv。因此,PConv 的網絡延遲更低。
FasterNet 最核心的模塊就是 FasterNet Block,由激活函數、歸一化層、一個3×3的 PConv、兩個1×1的 PWConv 卷積組成。 PConv 通過僅對輸入特征圖的一部分通道應用常規卷積,而保留其余通道不變,從而減少 FLOPs 和內存訪問,而 PWConv 用于在 PConv 之后進一步提取特征,同時保持網絡的輕量化。總的來說,FasterNet Block 的設計既保持了特征提取的能力,又降低了神經網絡的延遲,使得網絡更加輕量化。
2.1.2 基于FasterNet改進的c2f-Faster Block
YOLOv8 的 c2f 模塊中堆疊了大量 Bottleneck 組件,這使得網絡深度足夠深,模型性能也會變好,但是模型的參數和計算量卻居高不下,為了實現模型網絡輕量化,本文在減少計算量和內存訪問方面進行了研究,將 YOLOv8 中 BackBone 和 Head 中的 c2f 中的 Bottleneck 替換成基于 FasterNet 的 FasterNet Block,形成了稱為 c2f-Faster Block 的新模塊。
本文通過引入 c2f-Faster Block 這個創新結構,成功降低了網絡模型的計算復雜度和內存訪問量,提高了網絡在輕量化方面的性能和效率。這些創新對于在資源受限的移動設備上部署深度學習模型具有重要意義,能夠加速模型推理速度并減少能耗消耗,推動了深度學習技術在船舶識別算法應用中的可行性和普及度。
2.2 YOLOv8改進的Head
2.2.1 GOLD-YOLO和GD機制
Gold-YOLO 是一種高效的目標檢測模型,由華為諾亞方舟實驗室的研究者開發,旨在提升多尺度特征融合的能力[4]。Neck 網絡是 Gold-YOLO 的核心創新所在,它使用 GD 機制來增強不同尺度特征的融合。GD 機制包含以下這幾種模塊,這些模塊的組合可以改善不同尺度特征的融合問題。
低層 GD 分支專注于小目標和中等大小目標的檢測,它使用Low-FAM(Low Feature Alignment) 和 Low-IFM(Low Information Fusion Module) 來處理從 backbone 提取的 B2,B3,B4,B5 特征圖。高層 GD 分支專注于大目標的檢測。它將 Low-GD 生成的 P3,P4,P5 特征圖進行融合。
2.2.2 基于GOLD-YOLO的GD機制的改進的Head
本文通過引入 Gather-and-Distribute (GD) 機制來改進 YOLOv8 Head部分。YOLOv8 的頭部結構被重新設計,以適應 GD 機制,改進后的 Head 的結構如圖1所示。新的頭部結構包括了專門用于實現 GD 機制的模塊,如 Transformer 模塊,這些模塊能夠處理和融合來自不同層級的特征。高效的特征提取:通過 GD 機制,YOLOv8 的頭部能夠更高效地提取和利用不同級別的特征,這對于提高模型的檢測速度和準確性至關重要。
2.3 損失函數EMASlideLoss
YOLOv8 原本的分類損失函數是 Sigmoid 激活函數和二元交叉熵損失的結合,如公式(1) 所示。
[Lossx,y=-1Ni=0n[yilog (σ(xi))+(1-yi)log (1-σ(xi))] ] (1)
本研究針對樣本不平衡問題,將 YOLOv8 原分類損失函數結合了指數移動平均(EMA) 的概念和滑動損失(Slide Loss) 的機制[5]。EMA是一種對時間序列數據進行平滑的方法,它通過給過去的觀測值賦予指數遞減的權重來計算加權平均值。在本次改進中,EMA 用于平滑 IoU 閾值,使得損失函數可以逐漸適應模型在不同訓練階段的性能變化。Slide Loss 機制的核心是動態調整損失函數的某些參數,以適應模型的學習進度,損失函數就是根據預測框與真實框之間的 IoU (交并比)大小來區分簡單樣本和困難樣本。
設置衰減函數用于計算衰減值,如公式(2) 所示,x 是當前的更新次數或訓練步數。decay 是初始衰減率,一個介于0和1之間的常數。τ是時間常數,控制衰減速度的參數。衰減值是用于控制不同時期的 [iou當前] 對 [ioumean] 的影響,如公式(3) 所示,指數衰減提供了一種平滑的過渡方式,避免了在訓練初期由于數據的隨機性而導致的 [ioumean] 的劇烈波動。
[d=decay×(1-e-xτ)] (2)
[ioumean=d×ioumean+ 1-d×iou當前] (3)
調制因子的作用是實施滑動損失機制,即根據模型對樣本分類的難易程度來調整每個樣本損失的權重,如公式(4) 所示。x 是預測框與真實框之間的 IoU 值,[ioumean] 是動態計算的閾值。當 x 遠低于 [ioumean] 時,這些樣本為負樣本,權重為1,意味著它們對總損失的貢獻較小。當 x 的值和 [ioumean] 的值相近時,越近越增加權重,表示對這種模糊的樣本有更多的關注。當 x 值大于 [ioumean] 時,該樣本為正樣本,應該鼓勵關注,就會給一個較大的權重。
[a1=1,b1=1a2=e1-ioumean,b2=1 a3=e1-x,b3=1 x≤ioumean-0.1ioumean-0.1<x<ioumeanx≥ioumean] (4)
權重的調制對于訓練過程至關重要,首先是平衡正負樣本,在目標檢測中,負樣本(不包含目標的背景區域)通常遠多于正樣本(包含目標的區域)。調制權重可以幫助減少負樣本對損失函數的貢獻,從而避免模型對背景過擬合。其次就是關注難分類樣本,通過為難以正確分類或檢測的樣本(如小目標、遮擋目標)分配更高的權重,模型可以更多地學習這些樣本的特征,提高對這些情況的檢測性能。公式如(5) 所示。
[modulatingweight=a1×b1+a2×b2+a3×b3] (5)
最后是對 YOLOv8 的原損失函數進行一個基礎計算,公式如(6) 所示。
[Loss=Lossx,y×modulatingweight] (6)
EMASlideLoss的引入使得模型對樣本分布不均衡的問題具有更強的適應性和魯棒性,有助于提高目標檢測模型在復雜場景下的性能表現和泛化能力[6]。
3 模型的訓練
3.1 數據集選擇
船舶數據集是專門用于船舶識別、檢測和分類任務的數據資源,其來源多樣化,可能來自各種航海數據提供商、衛星圖像公司、科研機構或開放數據平臺。這些數據集涵蓋了全球各地的海洋和港口,其中包含大量船舶圖像,這些圖像可通過衛星、無人機、攝像頭或其他傳感器獲得[7]。船舶數據集中的船舶類型多種多樣,包括貨船、客船、漁船、油輪、游艇等,有些數據集還可能包含船舶的子類型或特定類別,例如船舶用途、船舶大小等。
由于SeaShips數據集包含大量圖像,覆蓋多種常見的船舶類型,能夠反映不同的成像變化,如不同的比例、船體部件、照明條件、視角、背景和遮擋等,因此為了滿足本文船舶算法研究的需要,本文選擇了 SeaShips(7000) 為本項研究的數據集,挑選了1 000張圖片作為測試集和6 000張圖片作為訓練集,如圖2所示。
3.2 訓練的結果
基于本文研究的各種對 YOLOv8 算法的改進措施,采用遷移學習,對選擇的數據集進行訓練,設定為200個 epoch,YOLOv8 三點改進的結果,損失函數、模型的準確度、召回率、類間平均精度,如圖3所示。
經過3點改進后的測試結果,如圖4所示,經過訓練的模型在船舶目標檢測方面表現出色,無論是對目標的識別,達到了較高的準確度和穩定性。這些圖像不僅證明了模型在處理復雜場景時的強大能力,也展現了其在細節捕捉上的精細度。從圖像中可以看出,模型能夠準確地識別出不同類型的船只,包括客船和漁船,并且在不同時間段和不同條件下都能保持較高的置信度評分。模型對于多目標和小目標的檢測效果同樣令人滿意,這表明了模型在處理低分辨率或遠距離多目標時依然能夠保持較高的識別準確率。
4 基于 PyQt5 的用戶操作界面設計及測試
在構建用戶界面(UI) 的過程中利用 Qt Designer 這一可視化工具來創建界面設計。利用 Qt Designer 設計界面,然后通過 PyUIC將設計轉換為 Python 代碼,最后結合 PyQt5 進行界面的開發和測試,從而完成對比實驗和功能測試。
首先是單一目標船只的測試,如圖5所示。然后是更為復雜的多目標測試,如圖6所示,這里展示系統在應對多個目標時的效率和準確性。通過這些圖像可以看到系統在不同測試條件下的表現,為進一步分析和優化提供有力的視覺支持。
5 結束語
本文對 YOLOv8 算法模型進行了三個地方的改進,首先是對YOLOv8 的 c2f 模塊的 Bottleneck 進行的替換;然后是對 YOLOv8 的 Head 進行基于 GD 機制的修改;最后是對 YOLOv8 原分類損失函數結合上 EMA 概念和 SlideLoss 機制進行改進。在模型展示方面,本文使用了基于 PYQT5 的用戶交互界面作為效果展示平臺。
本文對模型進行的三個改進在各種指標上有不錯的改進,但是仍然存在各種問題值得探討:
1) 模型在各個改進點上都在 map@50 上都有所提升,但是提升的幅度不大,各種細節可以改進,包括各種訓練技巧、數據集的強化技巧等,都有助于 map@0.5 提升。
2) 模型在改進后有所提升,但是在測試時卻無法很精準地體現出來,甚至有些時候會展現出不好的效果。
3) 數據集的選擇上過于單調,這是導致模型泛化能力不夠的原因之一,模型在其他數據集上的表現不佳。
人工智能目標檢測在船舶業的可以發揮不小的作用,在港口或者在海上對船舶對船只信息的快速收集有利于管理人員或者操作人員做出適當的相應的策略和操作,未來可以從以上三個方面入手繼續優化。
參考文獻:
[1] 楊一平,柳圣軍,周超,等.多視覺信息融合的內河航道智能監控系統[J].中國圖象圖形學報,2018,13(8):1608-1616.
[2] Zheng Ge, Songtao Liu, Feng Wang, Zeming Li, Jian Sun. YOLOX: Exceeding YOLO Series in 2021 [J]. ariXiv,2021, arXiv:2107.08430:1-7.
[3] Jierun Chen, Shiu-hong Kao, Hao He. Run, Don’t Walk: Chasing Higher FLOPS for Faster Neural Networks[J]. arXiv,2023, arXiv:2004.10934:1-15.
[4] WANG C C,HE W,NIE Y,et al.Gold-YOLO:efficient object detector via gather-and-distribute mechanism[EB/OL].2023:2309.11331.https://arxiv.org/abs/2309.11331v5.
[5] YU Z P,HUANG H B,CHEN W J,et al.YOLO-FaceV2:a scale and occlusion aware face detector[EB/OL].2022:2208.02019.https://arxiv.org/abs/2208.02019v2.
[6] 張秀再,沈濤,許岱.基于改進YOLOv8算法的遙感圖像目標檢測[J].激光與光電子學進展,2024,61(10):298-308.
[7] 石文豪,安博文.基于多結構形態學的港口船舶檢測方法[J].計算機系統應用,2016,25(10):283-287.
【通聯編輯:李雅琪】