李光昊,張瑩,劉義飛,莫浩銘
(廣東海洋大學數學與計算機學院,湛江 524088)
水產品中富含天然動物蛋白和多種維生素,日趨得到人們的重視與青睞,水產養殖已成為各國滿足高品質水產品產量的重要手段[1]。但是,我國的水產養殖技術總體水平較低,自動化和機械化程度不高,養殖過程中需要人不斷的去查看才能知道養殖的實時情況,耗費人力和時間。機器視覺的發展為研究網箱養殖中魚的行為提供了新手段,可以充分觀察和記錄魚活動的情況,并且不會干擾到它們。
在水下魚類識別方面,大多數基于傳統算法的已有方案并不能真正解決水下機器視覺識別難的問題。傳統目標檢測通常步驟為人工提取目標特征后,將特征用以訓練構建好的分類器學習分類規則[2]。這樣的傳統方法存在弊端:一是提取目標特征十分復雜,使用人工方法要求人對待檢測的目標有一定的了解;二是特征提取與分類訓練分離,分類訓練的效果好壞很大程度上依賴于提取到的特征是否明顯;三是可移植性差,非常依賴具體任務,假如待檢測的目標出現較大變化,就必須重新進行特征提取與分類訓練。
隨著機器視覺技術的發展,深度學習成為當前目標檢測與識別領域的熱門方法,它為提高水產養殖技術和管理的自動化水平提供了一種新的手段[3]。本文提出將YOLOv3 目標檢測算法應用于水下魚類識別。YOLOv3 目標檢測算法由Joseph Redmon 和Ali Farhadi于2018 年提出[4],在車輛實時檢測、行人檢測與定位等方面表現出色,其高性能使得它廣泛應用在各行各業。
我南海海域特有的區系特點,使得魚類品種豐富多樣[5]。本文根據《南海魚類檢索》挑選出十種常見的典型魚類,首先,并利用爬蟲技術獲得了4109 張圖像,經過人工清洗,去除模糊不清的圖像以及不含南海典型魚類的無關圖像后,得到3638 張含有南海典型魚類的水下圖像。其次,使用水下攝像機等設備置入網箱實地拍攝了438 張水下圖像,經過人工清洗,去除質量不佳的圖像,最終保留387 張實地拍攝水下圖像。兩種來源的圖像合并,共計獲得有效圖像4025 張。
將南海典型魚類數據集按照80%:20%的比例劃分為訓練集和測試集。由于建模并訓練權重需要大量的訓練數據,同時為了減少由圖像變換對南海典型魚類監測的影響,所以要對訓練集進行數據增廣,具體操作有順時針翻轉、逆時針翻轉、垂直翻轉、水平翻轉、灰度化五種方法。

圖1 圖像的增廣
最初用于目標檢測的深度學習方法為R-CNN,然后衍生出了Fast R-CNN[6]以及Faster R-CNN[7],這些方法都將目標檢測問題轉變為了一個分類問題。為了檢測一個物體,這些方法要在一張圖片上使用不同尺寸的sliding window 均勻滑動,得到不同尺寸的bounding box 后利用該物體的分類器去評估是否存在該物體,接著通過post-processing 來改善bounding box,以消除重復的檢測目標。這樣完成一次目標檢測需要耗費大量的時間,并且由于每個環節耦合性低,檢測性能難以進行優化。
不同于以上方法,YOLO 將目標檢測問題當作一個回歸問題來處理,通過使用一個神經網絡,直接得到一整張圖像的一個bounding box 的坐標、box 中所包含的目標物體的置信度以及目標物體的probabilities。其中,bounding box 的寬度和高度是以被檢測目標的中心位置相對網格位置的偏移,而網格的坐標值均被歸一化。此外,置信度的高低代表著是否包含目標以及包含目標情況下位置的準確性優劣,其定義為:

式中,Pr(Object)表示檢測邊界框包含目標物體的概率表示目標物體真實bounding box 與網絡預測bounding box 的交并比。最后計算每一個網格預測到的類別概率Ci=P(Classi|Object)。
根據理想輸出與實際輸出,建立損失函數,定義為:

以最小化損失為目標,利用隨機梯度下降法對網絡進行優化,即可完成YOLO 目標檢測網絡的訓練。
相比于早期YOLO 算法,YOLOv3 目標檢測算法的創新點在于使用了DarkNet-53 進行特征提取。DarkNet-53 是基于 YOLOv2、DarkNet-19 以及新型殘差網絡,通過3×3 和1×1 的卷積層堆疊組成的,其網絡結構如圖2 所示。Darknet-53 網絡不僅在性能上優于DarkNet-19,在檢測效率上還優于 ResNet-101 和ResNet-152,其在ImageNet 數據集上的測試結果如表1。

圖2 DarkNet-53的結構

表1 ImageNet 數據集測試結果
由于YOLO 的目標檢測流程是在一個神經網絡內完成,是一個end-to-end 的模型,所以可以優化目標檢測性能。
精確率(precision)即正確預測結果占所有預測結果的比例,用于衡量預測結果的精確性。召回率(recall)即正確預測結果占所有正確結果的比例,用于衡量正確預測結果的好壞。

此外,以精確率為縱坐標,召回率為橫坐標,可以繪制 P-R(Precision-Recall)曲線,精度均值(Average Precision,AP)即為 P-R 曲線的積分。
同時,交并比(Intersection over Union,IoU)是候選框與人工標記框的交集與并集之比,即檢測結果與正確結果的重疊率,也是評測目標檢測精確率的重要指標。
本文采用小批量梯度下降法在訓練中更新神經網絡梯度信息,訓練過程中神經網絡根據誤差通過反向傳播進行參數更新,使得損失函數逐漸收斂。
在試驗初期,學習率設定為10-3。然而,學習率過低會導致損失函數的變化率偏小,這也就意味著需要花更多的時間進行訓練;學習率過高雖然可以加速訓練,但是容易造成損失值爆炸的問題。所以本文采用自適應學習率方法(Adaptive Learning Rate)根據訓練所處階段自動更新學習率。
如圖3 所示,倘若神經網絡不斷訓練,會導致模型在訓練集中的精確度不斷上升,在驗證集中的精確度不斷下降,即出現過擬合現象,這會使得模型泛化性能降低,因此,本文在訓練過程中使用了早停法(Early Stopping)。

圖3 準確率曲線圖
此外,由于YOLOv3 網絡結構中存在多尺度訓練(Multi-Scale Training)方法,在訓練過程中每訓練完10批樣本后,網絡會自動將輸入數據的尺寸調整為降采樣參數32 的倍數,即輸入數據的最小尺寸為320×320,最大尺寸為608×608,再根據輸入數據的大小對網絡結構進行相應的調整展開下一輪訓練,這樣訓練出來的網絡模型可以更好地適應不同尺寸的圖片,提高目標檢測的精度。
圖4 為訓練集損失函數值歷史曲線圖,由圖4 可知訓練過程中模型通過不斷學習使得損失函數值逐漸下降,并最終收斂至[7,8]區間。同時,圖5 為驗證集損失函數值歷史曲線圖,由圖5 可知在驗證集中的損失函數值也是隨著訓練的進行不斷下降,最終收斂于[20,30]之間。而圖6 是模型的學習率歷史曲線圖。由于模型采用自適應學習率方法,所以模型的學習率是動態變化的。由圖可知,模型以1×10-4的學習率開始訓練,在9×102次訓練迭代后將學習率降為1×10-5,最終由于學習率過小使得模型停止訓練。

圖4 訓練集損失函數值歷史曲線圖

圖5 驗證集損失函數值歷史曲線圖

圖6 模型的學習率歷史曲線圖
圖7 為南海水下典型魚類檢測結果。算法成功檢測出數據中的南海典型魚類。圖7(a)中即使在目標與背景相似的情況下算法依然能準確檢測、分類出目標并標注出檢測邊界框。
圖7(b)中出現了多目標,算法在檢測邊界框重合度高的情況下仍然能準確檢測出目標。

圖7 算法檢測結果
本文通過利用深度學習的方法,建立YOLO 目標檢測算法,在一定程度上優于傳統的水下圖像檢測算法,達到實時檢測南海水下典型魚類的目的。這是目標檢測算法應用的一次頗有意義的嘗試,相信將來得到更多的水下資料以及更多的訓練時間后,能夠進一步提升該南海水下典型魚類實時檢測模型的準確度,從而指導水產養殖業的自動化。
本文使用采集的南海典型魚類影像資料對YOLOv3 深度神經網絡進行權值訓練,通過調整算法的超參數獲得了不同的性能表現,最終,算法滿足水下作業要求的實時性與準確率,表明本文提出的方法具有一定的使用價值。