俞國燕,蘇錦萍 ,陳澤佳,陳帥興,陳其菠,吳振陸
(1 廣東海洋大學(xué)機械工程學(xué)院,廣東 湛江 524088;2 廣東海洋大學(xué)數(shù)學(xué)與計算機學(xué)院,廣東 湛江 524088;3 廣東省海洋裝備及制造工程技術(shù)研究中心,廣東 湛江 524088)
拓展海洋經(jīng)濟發(fā)展空間,推進海洋漁業(yè)向深遠海養(yǎng)殖發(fā)展成為必然選擇[1-2],但大型深遠海養(yǎng)殖設(shè)施會因網(wǎng)衣破損引起跑、漏魚而造成巨大經(jīng)濟損失[3-5],故實現(xiàn)網(wǎng)衣破損的精準(zhǔn)實時識別具有重要的研究價值和現(xiàn)實意義。
為突破利用專業(yè)人員下潛排查這一復(fù)雜、危險的傳統(tǒng)網(wǎng)衣破損檢測方式,國內(nèi)外學(xué)者紛紛開展研究。常用的方法有嵌入檢測法[6]、聲吶檢測法[7]和圖像分析法[8]。由于嵌入檢測法會縮短網(wǎng)衣使用壽命,而聲吶檢測法會因魚群游動影響而出現(xiàn)誤檢,故通過水下攝像頭進行圖像采集,并使用目標(biāo)檢測算法識別圖像中損傷區(qū)域的圖像分析法成為近年來的研究熱點。Betancourt等[9]提出的根據(jù)網(wǎng)格節(jié)點的分布來確定網(wǎng)衣是否損傷;Zhao等[10]提出的根據(jù)網(wǎng)孔面積計算特征梯度直方圖來確定損傷在網(wǎng)中的位置,但所提方法在網(wǎng)衣隨浪流動發(fā)生變化的復(fù)雜環(huán)境下檢測效果不佳;Liao等[11]采用改進的多尺度融合算法和MobileNet-SSD目標(biāo)檢測框架進行實時檢測,但對小面積的損壞存在誤檢的現(xiàn)象;陳鑫等[12]使用Faster R-CNN網(wǎng)絡(luò)模型對網(wǎng)箱網(wǎng)衣破損進行檢測具備了一定的檢測精度,但檢測速度還需要進一步提高。
隨著深度學(xué)習(xí)的發(fā)展,目標(biāo)檢測算法主要分為只需一次提取特征即可實現(xiàn)目標(biāo)檢測的一階段(One-stage)和基于候選區(qū)域進行目標(biāo)檢測的兩階段(Two-stage)檢測算法。其中,一階段目標(biāo)檢測因其簡單高效、適合工業(yè)應(yīng)用而被廣泛使用,典型的有以速度著稱的SSD[13]和YOLO系列算法[14-19]。在不同版本的YOLO算法中,性能較好的有專門用于工業(yè)應(yīng)用的YOLOv6網(wǎng)絡(luò)、更快更強以及更高的標(biāo)簽分配和模型訓(xùn)練效率的YOLOv7網(wǎng)絡(luò)。
本研究提出一種基于YOLOv7的改進算法。通過評估指標(biāo)對改進Backbone網(wǎng)絡(luò)和Neck網(wǎng)絡(luò)在提升破損網(wǎng)衣的檢測精度、速度和縮小模型尺寸實現(xiàn)部署的靈活性進行分析與探討,并將其檢測結(jié)果與其他目標(biāo)檢測模型的檢測結(jié)果進行比較以評估該模型的性能。
本研究所用的網(wǎng)衣破損數(shù)據(jù)集來源于廣東省湛江市的開放海域中,通過手持攝像機對自制試驗網(wǎng)箱裝置進行拍攝。網(wǎng)箱裝置長105 cm、寬97 cm、高86 cm,由鋁材搭建框架,上方加浮力塊和不同破損狀態(tài)、位置隨機分布的大、小網(wǎng)目兩種網(wǎng)衣組成,結(jié)構(gòu)如圖1所示。
圖1 自制的網(wǎng)箱圖
對一天不同時間段的網(wǎng)衣破損圖像進行采集,設(shè)備采用索尼機芯傳感器的360°旋轉(zhuǎn)水下攝像頭,在5~30 cm的拍攝距離下分別選擇多種角度、深度進行視頻拍攝。采用視頻截幀的方式獲得網(wǎng)衣破損圖像(見圖2)。通過人工清洗獲得網(wǎng)衣破損圖像 1 250張,并將分辨率調(diào)整為640×640像素,格式為JPG。在數(shù)據(jù)集劃分上,按照9∶1將所得數(shù)據(jù)集隨機分為訓(xùn)練集(1 125張)和測試集(125張)。
圖2 采集到的網(wǎng)衣破損圖像
使用labelImg工具對破損網(wǎng)衣進行人工標(biāo)注,其標(biāo)注界面如圖3所示。在labelImg界面中,先設(shè)定好數(shù)據(jù)集樣本與目標(biāo)樣本文件目錄,并給定對象唯一的broken_net標(biāo)簽。標(biāo)注后目標(biāo)信息保存為與圖像同名的 XML文件,其內(nèi)容包含當(dāng)前圖像各目標(biāo)的標(biāo)簽信息以及繪制框左上角與右下角坐標(biāo)信息等。
圖3 破損的網(wǎng)衣人工標(biāo)注圖
隨著一階段目標(biāo)檢測算法的發(fā)展,相較于SSD,YOLO不僅在特征提取層使用了更高分辨率的特征圖,可以更好地檢測小目標(biāo),而且使用來自不同維度的特征進行檢測和定位,在檢測精度上更有優(yōu)勢,因此其應(yīng)用越來越廣泛。YOLO系列算法已成功用于水下生物的檢測,如鄭宗生等[20]通過改進YOLO v4模型可以快速準(zhǔn)確地檢測到魚的位置和類別;Al等[21]提出了YOLO-Fish不僅減少對小魚的錯誤檢測,還在動態(tài)環(huán)境中檢測魚類外觀;Xu等[22]針對復(fù)雜的水下環(huán)境和海洋底棲動物的特點,提出一種密集小規(guī)模海洋底棲動物的定量檢測算法MAD-YOLO。這些算法在不同程度上都提高了目標(biāo)檢測的性能,為網(wǎng)衣的破損檢測奠定了基礎(chǔ)。
網(wǎng)衣破損通常是微小的單根網(wǎng)線斷裂,如果沒有及時發(fā)現(xiàn)并修補則會演變成狹長撕裂和大面積不規(guī)則破洞。針對這一特性,目前YOLO系列較新算法YOLOv7對網(wǎng)絡(luò)結(jié)構(gòu)、特征提取等方面進行了優(yōu)化,不僅通過采用ELAN網(wǎng)絡(luò)架構(gòu)(圖4),控制最短最長的梯度路徑,使得網(wǎng)絡(luò)可以有效地學(xué)習(xí)微小的單根網(wǎng)線斷裂的特征,還引入模型重參數(shù)化可提高對網(wǎng)衣破損的檢測能力,防止沒有及時發(fā)現(xiàn)并修補而演變?yōu)楠M長撕裂和大面積不規(guī)則破洞,極大地促進了本試驗采用YOLOv7為基礎(chǔ)網(wǎng)絡(luò)對網(wǎng)衣破損進行研究。
圖4 ELAN結(jié)構(gòu)圖
因為640×640的圖像大小可以在保證足夠物體細節(jié)信息的同時加速模型的訓(xùn)練和推理,而1280×1280的圖像大小更耗費計算資源,可能會導(dǎo)致過擬合問題。所以分別對640規(guī)格圖像的YOLOv7和YOLOv7-X進行訓(xùn)練,從表1可知,YOLOv7模型的參數(shù)量、GFLOPs、層數(shù)分別占YOLOv7-X模型的51.4%、54.9%、86.4%,ap、推理時間和尺寸分別比YOLOv7-X模型降低0.8個百分點、4.1 ms和67.3MB。因此,在綜合考慮網(wǎng)絡(luò)的檢測精度、速度和輕量化要求后,確定改進YOLOv7網(wǎng)絡(luò)模型,實現(xiàn)智能化網(wǎng)箱網(wǎng)衣破損檢測。
表1 YOLOv7網(wǎng)絡(luò)模型指標(biāo)參數(shù)
YOLOv7架構(gòu)主要由Input、Backbone、Neck和Prediction網(wǎng)絡(luò)組成,分別用于網(wǎng)箱網(wǎng)衣的輸入,網(wǎng)衣破損特征提取、圖像特征融合和目標(biāo)預(yù)測。本研究主要對Backbone、Neck網(wǎng)絡(luò)進行改進(圖5)。
圖5 YOLOv7-C3NeHX網(wǎng)絡(luò)結(jié)構(gòu)圖
2.3.1 Backbone網(wǎng)絡(luò)的改進
網(wǎng)衣網(wǎng)孔是由網(wǎng)線圍成分布規(guī)律的多邊形,而破損處圍出的是不規(guī)則的多邊形,分布不規(guī)律,其特征與網(wǎng)目的特征十分相似,且網(wǎng)衣會隨浪流動,檢測時存在較大的難度。雖然YOLOv7較YOLO系列的其他版本在速度、準(zhǔn)確率、擴展性和部署性等方面都有較大優(yōu)勢,但針對網(wǎng)衣破損圖像特征的特殊性及位置的流動性,當(dāng)存在多個目標(biāo)還是會出現(xiàn)漏檢的現(xiàn)象,故需要對基礎(chǔ)的檢測框架進行改進以增強對網(wǎng)衣破損的檢測。本研究將Backbone網(wǎng)絡(luò)的第4個ELAN替換為C3_HB(圖6),其主要是使用了HorBlock模塊中的gnConv(圖7)在執(zhí)行空間交互期間通過逐漸增加通道寬度,實現(xiàn)有限復(fù)雜性的高階交互,以提取出更多的網(wǎng)衣破損特征信息;將自注意力中的二階交互擴展到任意階,且完全繼承標(biāo)準(zhǔn)卷積的平移等效性,避免局部注意力帶來的不對稱性,使模型可以更好地處理不同方向和角度的特征,以解決網(wǎng)衣破損特征不明顯且隨浪流動難以識別的問題。
圖6 C3_HB結(jié)構(gòu)圖
圖7 gnConv結(jié)構(gòu)圖
C3_HB模塊的主要功能是:首先將初始的輸入分別送入2個分支進行卷積操作,其中分支1再與HorBlock模塊相連;接著通過Concat操作進行分支1、2輸出特征圖的深度連接;最后經(jīng)過CBS層得到C3_HB的輸出特征圖。
因網(wǎng)衣破損不及時發(fā)現(xiàn)導(dǎo)致的養(yǎng)殖魚群大量逃逸會造成經(jīng)濟損失,亦可能影響生態(tài)平衡,故模型的檢測速度也很關(guān)鍵。為提高破損網(wǎng)衣的檢測速度,將Backbone網(wǎng)絡(luò)的第一個ELAN替換為C3_NeB(圖8),使用了ConvNeXtBlock模塊一方面采用深度可分離卷積以降低參數(shù)量和運算成本,以及通過減少激活函數(shù)以減少頻繁做非線性投影對網(wǎng)絡(luò)特征信息傳遞的影響;另一方面stem部分用步長為4的4×4卷積使滑動窗口不再相交,每次只處理一個patch的信息,以通過減小輸入?yún)?shù)量來減少計算量。
圖8 C3_NeB結(jié)構(gòu)圖
2.3.2 Neck網(wǎng)絡(luò)的改進
實際應(yīng)用中,檢測模型不僅要滿足一定的精度、速度需求,還需要滿足模型封裝移植時內(nèi)存占用低的要求,本試驗將Neck網(wǎng)絡(luò)中4處使用ELAN_2C(圖9)的地方替換為C3_X(圖10),采用Bottleneck模塊使用1×1卷積核用于降低特征維度以減少參數(shù)量來縮小尺寸的特點,使模型達到輕量化。并在兩個分支進行Concat操作后再進行卷積時,使用性能更佳的Mish激活函數(shù),使訓(xùn)練效果更穩(wěn)定、準(zhǔn)確。因此改進后模型權(quán)重參數(shù)量有效降低,尺寸縮小,實現(xiàn)網(wǎng)衣破損檢測的輕量化設(shè)計,為后期更好地將模型部署到硬件設(shè)備中做準(zhǔn)備。
圖9 ELAN_2C結(jié)構(gòu)圖
圖10 C3_X結(jié)構(gòu)圖
網(wǎng)衣通常是透明或半透明的,具有紋理和孔洞結(jié)構(gòu),使物體邊緣和紋理信息比較模糊或不明顯,和普通目標(biāo)檢測圖像不同,以及長時間浸泡于海水中易附著貝類、藻類等生物,導(dǎo)致破損處不易被發(fā)現(xiàn)。針對這一難點,本試驗將無參注意力SimAM(圖11)引入網(wǎng)絡(luò)架構(gòu)中,以更好地提取網(wǎng)衣破損的特征。該模塊采用能量函數(shù)選擇操作,避免了過多的結(jié)構(gòu)調(diào)整,無需額外參數(shù)為特征圖推導(dǎo)出3D注意力權(quán)值,有效發(fā)掘每個神經(jīng)元的重要性,更好聚焦主體目標(biāo),進一步提升輸出特征圖中明顯的特征,有效地解決了檢測模型在網(wǎng)衣材質(zhì)和附著物影響下,難以提取破損特征和實現(xiàn)有效的網(wǎng)衣檢測的問題。
圖11 SimAM的3D注意力權(quán)重
(1)對比YOLOv7、YOLOv7-C3_HB、YOLOv7-C3_NeB、YOLOv7-C3_X、YOLOv7-MP_SimAM、YOLOv7-C3NeHX模型的試驗結(jié)果,分析各改進模塊的有效性,具體設(shè)計如下:1)對每個模型均訓(xùn)練400輪,設(shè)置相同的初始學(xué)習(xí)率、損失函數(shù)等超參數(shù)。2)從每個模型訓(xùn)練生成的權(quán)重集合中選取最優(yōu)的權(quán)重文件,根據(jù)評估指標(biāo)比較改進模型的提升程度。
(2)SSD算法是一種直接預(yù)測邊界框的坐標(biāo)和類別的目標(biāo)檢測算法,通過密集的位置預(yù)測來得出目標(biāo)的位置和類別信息,不需要像兩階段目標(biāo)檢測器那樣先生成候選區(qū)域,再對這些候選區(qū)域進行分類和回歸,從而具有較快的檢測速度。YOLOv6在網(wǎng)絡(luò)結(jié)構(gòu)、訓(xùn)練策略等算法層面進行了多項改進,具有較簡單的網(wǎng)絡(luò)結(jié)構(gòu)和訓(xùn)練流程,是一種硬件友好的目標(biāo)檢測算法,便于在不同的工業(yè)應(yīng)用場景中應(yīng)用。YOLOv7提供了更快更強的網(wǎng)絡(luò)架構(gòu)和更有效的特征集成方法、更準(zhǔn)確的目標(biāo)檢測性能、更魯棒的損失函數(shù)以及更高的標(biāo)簽分配和模型訓(xùn)練效率。在主流算法中,以上算法分別在檢測速度、模型應(yīng)用和檢測精度方面是典型的代表。通過與速度快著稱的SSD模型進行對比驗證本模型在檢測速度上具有的優(yōu)勢、與面向工業(yè)應(yīng)用且部署友好的YOLOv6模型進行對比驗證本模型在實際應(yīng)用場景的可行性、與原YOLOv7模型進行對比驗證本模型改進的可行性。隨后再進一步與Zhao等[10]、Liao等[11]、陳鑫等[12]提出的其他網(wǎng)衣破損檢測模型進行對比以驗證本模型在本領(lǐng)域?qū)z測精度、速度和模型輕量化取得最佳的平衡。具體設(shè)計如下:1) 根據(jù)相關(guān)指標(biāo)對比每個模型訓(xùn)練生成的權(quán)重文件。2)以不同條件下的目標(biāo)作為控制變量,對比7種算法的檢測效果,驗證了本研究提出的模型的合理性和有效性。
使用不同的評價指標(biāo)可以客觀、準(zhǔn)確地評估網(wǎng)絡(luò)的檢測性能[23-26],綜合網(wǎng)衣破損識別速度快、準(zhǔn)確率高,抗水下環(huán)境能力強,部署模型靈活的要求,本研究從不同角度對模型識別效果進行評價,分別是以下4種關(guān)鍵指標(biāo)和模型參數(shù)量(Params)、GFLOPs、推理時間、模型尺寸、檢測幀率(Frames Per Second,FPS)。
(1) 精確率(Precision)反映了分類器對正樣本的準(zhǔn)確程度,精確率越高表示網(wǎng)衣破損錯檢的數(shù)目越少,公式如(1)所示:
(1)
式中:p表示精確率;tp表示被模型正確識別的網(wǎng)衣破損數(shù)量的正樣本;fp表示被模型識別干擾環(huán)境為網(wǎng)衣破損數(shù)目的負樣本。
(2) 召回率(Recall)反映了分類器對正樣本預(yù)測的效果,召回率越高表示網(wǎng)衣破損漏檢的數(shù)目越少,公式如(2)所示:
(2)
式中:r表示召回率;fn表示網(wǎng)衣破損數(shù)目被模型識別為干擾環(huán)境的正樣本。
(3)平均精度 (Average Precision,ap)表示精確率與召回率曲線所圍成的面積,反映了分類器對正樣本的識別準(zhǔn)確程度和檢測到正樣本能力之間的權(quán)衡,值越高代表分類器性能越好,對網(wǎng)衣破損的檢測更趨近于理想效果,公式如(3)所示:
(3)
式中:ap表示平均精度。
(4)F1值,即精確率與召回率的一個平衡點,能同時考慮到精確率和召回率。F1值越高,代表模型越優(yōu),對網(wǎng)衣破損的檢測效果越好,公式如(4)所示:
(4)
式中:F1表示精確率與召回率的一個平衡點。
試驗使用64位Ubuntu 18.04.6 LTS操作系統(tǒng),GPU采用RTX3090型顯卡,基本頻率為3.90 GHz的Intel(R) Xeon(R) W-2245 CPU。通過Anaconda環(huán)境管理器安裝相關(guān)工具包,在Pycharm編譯器實現(xiàn)Python代碼編輯,同時在PyTorch1.10.2架構(gòu)上進行模型的訓(xùn)練和測試。
YOLOv7-C3NeHX模型的損失曲線如圖12所示,損失值在前50輪快速下降,訓(xùn)練到270輪之后,損失值曲線基本趨于擬合。結(jié)合圖13可知,模型的平均精度隨著訓(xùn)練輪數(shù)的增加不斷上升,但在第270輪之后,模型的訓(xùn)練精度反而隨迭代次數(shù)的增加而下降。綜合考慮,本試驗將訓(xùn)練第270輪結(jié)束后輸出的模型作為網(wǎng)衣破損識別的識別模型。
圖12 YOLOv7-C3NeHX模型的損失曲線圖
圖13 YOLOv7-C3NeHX模型的平均精度值曲線圖
為明確YOLOv7-C3NeHX算法中各模塊對目標(biāo)檢測性能的影響,驗證各模塊的有效性,采用消融試驗對數(shù)據(jù)集進行訓(xùn)練,結(jié)果如表2所示,其中YOLOv7-C3_HB表示將Backbone網(wǎng)絡(luò)的第四個ELAN替換為C3_HB,YOLOv7-C3_NeB表示將Backbone網(wǎng)絡(luò)的第一個ELAN替換為C3_NeB,YOLOv7-C3_X表示使用C3_X替換掉Neck網(wǎng)絡(luò)中的ELAN_2C,YOLOv7-MP_SimAM表示在改進后網(wǎng)絡(luò)的第52、58層將卷積層改為SimAM模塊,YOLOv7-C3NeHX表示將所有改進都加入到模型中。
表2 消融試驗結(jié)果
從表2的數(shù)據(jù)可知,加入不同的模塊均可取得理想的效果。加入C3_HB后,ap提高0.9個百分點,提高了模型的檢測精度;加入C3_NeB后,GFLOPs只占原模型的40.8%,推理時間減少2.2 ms,提高了模型的檢測速度;加入C3_X后,模型尺寸占原模型的83.2%,參數(shù)量約減少6.3×106,壓縮了模型尺寸。使用SimAM后,ap提高0.2個百分點,F1值提高1個百分點,發(fā)掘了每個神經(jīng)元的重要性,從而進一步提升輸出特征圖中明顯的特征。將所有改進都加入模型后,ap和F1值分別提高3.1和3個百分點,GFLOPs占原模型的38.2%,推理時間和模型尺寸分別降低2.4 ms和4.3 MB,可以最大限度地結(jié)合各模塊優(yōu)點來提升模型的檢測精度、速度,同時有效地實現(xiàn)網(wǎng)絡(luò)的輕量化。
為驗證本研究所構(gòu)建的YOLOv7-C3NeHX網(wǎng)絡(luò)的性能,分別與速度著稱的SSD、面向工業(yè)應(yīng)用部署友好的YOLOv6、更快更強的原YOLOv7和Zhao等[10]、Liao等[11]、陳鑫等[12]提出的其他網(wǎng)衣破損檢測模型進行對比結(jié)果如表3所示。
表3 不同目標(biāo)檢測網(wǎng)絡(luò)檢測性能對比
由表3可知,YOLOv7-C3NeHX網(wǎng)絡(luò)的ap最高,比原YOLOv7網(wǎng)絡(luò)提高3.1個百分點,比SSD、YOLOv6、Zhao等[10]、Liao等[11]和陳鑫等[12]所提算法分別提高7.88、47.4、82.53、35.3和18.65個百分點,說明使用HorBlock模塊有利于提取出更多的網(wǎng)衣破損特征信息。針對模型的檢測速度,YOLOv7-C3NeHX模型達到了232.56FPS,除了比YOLOv6低,較SSD、YOLOv7、Zhao等[10]、Liao等[11]和陳鑫等[12]提升了163.75FPS、83.31FPS、211.78FPS、221.26FPS、186.35FPS,說明ConvNeXtBlock模塊通過減小輸入?yún)?shù)量來減少計算量的有效性。對于模型尺寸,YOLOv7-C3NeHX模型的尺寸為70.6MB,比YOLOv6、Liao等[11]所提算法大32.5MB、44.6MB之外,分別占SSD、YOLOv7、陳鑫等[12]所提算法的74.32%、94.26%、12.91%,說明了采用Bottleneck模塊的可行性。在未參與訓(xùn)練的測試集中進行檢測,本文所提的YOLOv7-C3NeHX模型漏檢率最低,說明SimAM注意力模塊的嵌入大大降低了漏檢率。
綜上,所提YOLOv7-C3NeHX網(wǎng)絡(luò)不僅能滿足檢測精度、速度的需求,且實現(xiàn)模型的輕量化。
對比水面目標(biāo)檢測[27],本研究的難度在于水下環(huán)境通常比較復(fù)雜,圖像質(zhì)量會受噪聲和失真等影響,可見度低,因此對目標(biāo)邊緣的提取準(zhǔn)確率低;對比泳池溺水行為檢測[28],泳池水清澈且目標(biāo)較大,而遠海的水質(zhì)較為渾濁且網(wǎng)衣斷裂處微小,因此增加了檢測的難度;對比水果檢測[29-31],網(wǎng)衣破損的位置會隨浪流動,故對實時性檢測的要求更高。針對以上存在的難處,YOLOv7-C3NeHX算法使用gnConv結(jié)構(gòu)和SimAM模塊加強對關(guān)鍵特征的提取從而獲得了較高的精度檢測;同時使用深度可分離卷積,并減少激活函數(shù)和改變卷積步長獲得了較快的速度檢測目標(biāo)。
YOLOv7-C3NeHX算法用于破損網(wǎng)衣的檢測,該算法在檢測精度、速度和模型輕量化達到最好的平衡,綜合性能更好。其平均檢測精度為88.1%,檢測速度達到232.56FPS,模型尺寸占原YOLOv7的94.3%。針對復(fù)雜的遠海環(huán)境,YOLOv7-C3NeHX算法能更好地對破損網(wǎng)衣的關(guān)鍵特征進行提取,從而更精確地識別出網(wǎng)衣的破損。對比了這個領(lǐng)域的其他檢測模型,其檢測精度、速度,YOLOv7-C3NeHX算法取得了更佳的檢測效果。視覺系統(tǒng)是智能網(wǎng)衣修補機器人實現(xiàn)高效補網(wǎng)的關(guān)鍵技術(shù)之一,其檢測精度、速度、模型尺寸等仍有一定提升空間,后續(xù)將對模型進一步優(yōu)化,以達到更好的檢測性能和輕量化效果,從而更好地部署到機器人中。