李健源 柳春娜 盧曉春 吳必朗
(1.三峽大學水利與環境學院, 宜昌 443002; 2.中國水利水電科學研究院, 北京 100038;3.中國水利水電科學研究院流域水循環模擬與調控國家重點實驗室, 北京 100038)
大壩的修建會導致河流縱向連通性消失,產生大壩阻隔效應,影響上下游種群基因交流[1]、降低河流生物多樣性[2],尤其對洄游性魚類產生的負面影響最為直接[3-4]。根據水利水電工程建設項目環境保護要求,需要建立減緩筑壩影響的環境保護措施[5],實施生態補償,恢復河流生態系統健康。近些年,水利水電項目逐步開始建設魚道工程作為大壩的連接通道,以協助魚類洄游產卵、促進上下游種群基因交流[6-8],在魚道的運行過程中需要開展過魚監測[9],對驗證魚道的過魚效果、提高魚道的過魚效率、優化運行方式,實現魚道的科學管理,促進魚類資源保護具有重要的理論意義。
目前,已有不少國內外學者開展了魚道過魚監測研究[10-14]。總體來看,國內外魚道過魚效果按監測方式可分為直接法和間接法兩大類,其中人工觀測、張網法、堵截法等屬于直接法[15],雖然可以判斷過魚種類和數量[16],但過度依賴人工操作,效率和準確率較低、對魚類干擾大,成本高。而聲學和PIT遙測法等屬于間接法[17-18],通過深度分析采集的數據,開展過魚效果評估,其中過魚數量的準確性取決于數據分析方法[19]。在分析現階段常采用的監測技術方法差距后可以看出,現有監測技術方法難以滿足過魚監測的準確率和效率要求。
隨著計算機視覺等多個領域取得重大突破[20],越來越多的深度學習算法在眾多領域得到應用[21-23],為提高魚道過魚目標監測的準確率和效率提供了可行性。張亦弛等[24]通過卷積神經網絡對水下聲吶探測到的圖像進行檢測,但網絡比較單一,檢測的準確率比較低;王蓉蓉等[25]基于水下目標檢測特征提取困難、目標漏檢等問題,提出了一種改進的CenterNet算法,但模型檢測速度較低,僅有7 f/s;強偉等[26]基于SSD目標檢測算法,提出用ResNet網絡代替VGG網絡作為算法的特征提取網絡,提高對水下復雜環境的檢測精度和速度;李寶奇等[27]針對水下光學圖像目標檢測精度低的問題,提出了SSD-MV2SDB網絡,有效提升了水下檢測精度;陳宇梁等[28]針對光學圖像在水中衰弱嚴重等問題,提出了YOLOv5s-underwater模型,有效提高了檢測精度。但以上方法都是基于單一背景下的目標檢測,在魚道工程環境里,水下成像背景復雜,存在泥沙、樹枝樹葉等雜質漂浮物,大幅增加魚道過魚目標的檢測難度。而且過魚季節的天然河流水體濁度高,自然光在水體傳播時易受吸收、反射和散射等影響,普遍存在成像效果對比度低、模糊等問題,導致魚類特征信息匹配困難。同時,魚道內的水流具有一定流速,在過魚季節時,魚類高速上溯通過魚道,常伴有密集魚群遮擋通過等問題,為動態目標的快速檢測造成了難度。裴倩倩等[29]采用YOLOv3目標檢測模型實現了魚道內的檢測,但不能解決復雜水體環境下的魚類動態目標快速捕捉、密集魚群遮擋識別問題,造成漏檢、誤檢等現象。漏檢和誤檢不利于科學評估魚道過魚效果,魚道中常會通過一些珍稀物種[30],需要在其游動狀態對目標進行快速準確檢測。為提高檢測網絡精度,往往會在模型中添加注意力機制[31-32]或加深網絡結構深度[33]來提升準確率,但隨著添加注意力機制和網絡的加深,模型的計算參數也會大幅度增加,導致模型處理速度下降[34-37],滿足不了工程現場中實時檢測的需求。
基于上述問題,本文針對魚道水下環境復雜、特征信息匹配困難、準確率和效率低等問題對YOLOv5s網絡模型進行改進。首先,針對魚道工程現場復雜水體環境造成的圖像模糊、過魚目標檢測困難的問題,提出將Swin Transformer (STR)作為檢測層,提高模型對全局信息的捕獲能力,加強對魚類特征信息解碼,以進一步優化模型的檢測性能。其次,針對水下密集魚群相互遮擋時,被遮擋目標易出現漏檢的問題,提出ECA注意力機制作為C3的Bottleneck,提高網絡對目標特征信息的提取能力,增強不同網絡層之間特征信息的傳遞,提升模型檢測精度,降低漏檢率。然后,針對水下光學圖像存在對比度低,檢測目標定位差,造成模型不收斂的問題,利用Focal and efficient IOU loss(FIOU)作為模型損失函數,獲得更加精確的框定位和使訓練損失得到更快收斂,優化模型整體性能。最后,為提高模型的處理速度,將訓練好的模型使用TensorRT框架部署進行優化,使模型達到最大的推理吞吐量和效率,以實現模型推理加速。
YOLOv5為一種高效、快速的單階段目標檢測算法,主要由輸入端、主干提取網絡、頸部網絡、檢測端4部分組成。輸入端(Input)主要是圖像的輸入以及Mosaic數據增強。主干提取網絡(Backbone)由卷積層(Conv)、瓶頸層(C3)和快速空間金字塔池化(Spatial pyramid pooling-fast,SPPF)構成。頸部網絡(Neck)采用實例分割框架下的路徑聚合網絡結構(Path aggregation network,PANet)對網絡進行特征加強。檢測端(YOLO Head)將得到的特征圖進行解碼預測,輸出檢測目標的類別和位置。
魚類在水體中的姿態、形狀會隨著游動在不同時刻發生不同變化,為實現復雜水體環境下的動態目標快速檢測,對YOLOv5模型進行改進,如圖1所示,具體方案為:①在Neck結構,以Swin Transformer模塊作為模型的檢測層,增強模型對特征信息解碼能力。②將C3模塊的Bottleneck用ECA注意力機制代替,提高對圖像有效特征信息的提取能力。③使用FIOU作為模型損失函數,優化模型回歸性能。

圖1 本文算法框架Fig.1 Framework of algorithm model
1.2.1Swin Transformer模塊
Swin Transformer[38]是一種窗口注意力模塊,由窗口多頭自注意力模型(Window multi-head self-attention modules,W-MSA)和滑動窗口多頭自注意力模型(Shifted-window multi-head self-attention modules,SW-MSA)構成,是Transformer[39]結構的變體,如圖2所示。其中LN表示層歸一化,MLP是多層感知器,相鄰塊之間分別使用了W-MSA和SW-MSA模塊,其利用多頭自注意力機制有效運用同層次的多維度信息,有利于在復雜多樣的目標場景中檢測多尺度目標。因此,本文以Swin Transformer作為模型的檢測層,通過該結構提高模型對于目標識別的泛化性。自注意力機制是STR的核心部分,計算公式為

圖2 Swin Transformer 模塊Fig.2 Swin Transformer module

(1)
Z=contant(A1,A2,…,Aj)W
(2)
其中
(3)
式中Q——圖像注意力查詢向量
K——圖像注意力鍵向量
V——圖像注意力值向量
dk——向量Q和K的維度
W——線性化系數矩陣
Z——多頭自注意力機制結合不同獨立特征空間信息得到的深層次特征
A——自注意力機制
Softmax(t)——歸一化指數函數
N——多類分類器類數
contant(A1,A2,…,Aj)——不同自注意力機制容器
1.2.2ECA結構
魚群通過時,易相互遮擋,被遮擋目標有效信息少,為充分挖掘有限信息,減少漏檢現象,本文將Efficient channel attention(ECA)[40]代替主干網絡C3模塊的Bottleneck。ECA(圖3,圖中χ表示特征圖)是一種極其輕量級的通道注意模塊,主要提出了一種不降維的局部跨信道交互策略和自適應選擇一維卷積核大小的方法,可以減少模型的計算參數量并提升檢測精度。自適應卷積核k的計算式為
(4)
式中 |t|odd——距離t最近的奇數
C——通道數

圖3 ECA注意力機制Fig.3 ECA attention mechanism

圖4 TensorRT優化流程圖Fig.4 TensorRT optimization process
1.2.3Focal and efficient IOU loss
YOLO作為典型的one-stage網絡模型,為了提高檢測速度[41],相對于two-stage目標檢測模型[42],舍棄了生成候選框這一階段,缺少了對anchor box的篩選過程,導致目標定位生成的錨框正負樣本不平衡,而且YOLOv5原本使用的Generalized intersection over union loss (GIOU)[43]在預測框和真實框重合時,無法區分預測框和真實框的位置關系,預測框與真實框之間的誤差較大。因此本文使用Focal and efficient IOU loss(FIOU)[44]作為模型損失函數,其通過減少易分類樣本的權重,使得模型在訓練時更專注于難分類的樣本,優化目標框定位,提升收斂速度,FIOU損失計算式為
LFIOU=IOUγLEIOU
(5)
其中

(6)
(7)
式中IOU——邊界框與真實框進行交并比
b——預測框中心點
bgt——真實框中心點γ——超參數
w——預測框寬度wgt——真實框寬度
h——預測框高度ρ——兩點間歐氏距離
hgt——真實框高度
Rw、Rh——能夠同時包含預測框和真實框的最小閉包區域寬度、高度
R——能夠同時包含預測框和真實框的最小閉包區域的對角線距離
為提高模型的處理速度,采用TensorRT框架部署進行優化。TensorRT是NVIDIA推出的高效推理引擎,其包含2個階段:構建(build)和部署(deployment)。在構建階段,TensorRT對神經網絡圖(Neural network graph)進行了幾個重要的轉換和優化:①消除未使用的輸出的層以避免不必要的計算。②將Convolution、Bias和ReLU層融合形成單個層,主要是垂直層融合和水平層融合,減少計算步驟和傳輸時間,如圖4所示。在部署階段,TensorRT以最小化延遲和最大化吞吐量運行優化了的網絡。將訓練好的.pt權重通過C語言轉換為引擎文件.engine和動態庫.dll,將其部署在網絡中可使模型獲得加速推理。
深度學習目標需要大量的數據集支撐,且在所需檢測場景下,數據采集對該場景的目標檢測效果往往具有決定性作用。因此本文數據集分別在西藏自治區某魚類增殖站、水產科學研究所和某水電站自行采集所得,采集后的數據集經過人工剔除冗余、像素質量差圖像,共3 000幅魚類圖像。將圖像數據使用LabelImg標注后使用腳本轉換為YOLOv5訓練格式文件,并將其按比例8∶2隨機構建訓練集和驗證集。
為客觀評價不同模型算法對魚類目標的檢測性能,采用準確率(Precision)、召回率(Recall)、平均精度均值(mAP)、參數量(Params)以及單幅圖像平均處理時間綜合衡量模型。準確率可以衡量模型預測正確的比例;召回率衡量模型預測正確的目標比例;平均精度均值衡量模型的整體性能;參數量衡量計算內存資源的消耗;圖像平均處理時間衡量模型的實時性。
實驗基于Windows 10,CPU處理器為Intel(R)i7-11800H、GPU為GeForce RTX3080顯卡(顯存為16GB),在Pytorch 1.9深度學習框架進行訓練,選用YOLOv5s模型進行實驗,具體環境配置和模型訓練參數見表1。
為驗證本文研究對YOLOv5s提出3種改進策略的有效性和先進性,在相同實驗平臺的基礎上,進行8組消融實驗,并采用同一驗證集進行驗證,評估不同改進對模型性能的影響。
通過表2可以看出不同的改進策略對原YOLOv5s模型性能均有不同程度的提升,結果表明,模型B召回率雖有微小降低,但準確率得到大幅提高,mAP較模型A提升2.3個百分點,計算參數量減少0.62 MB,使得處理時間減少2.7 ms,證明將ECA注意力機制作為主干特征提取網絡中C3結構的Bottleneck在減輕模型計算參數量的同時可以更好地提取目標特征信息,提升檢測精度。將STR作為檢測層,模型召回率得到改善,mAP提升3.3個百分點,模型解碼能力得到加強,提升了模型對目標的檢測能力。從圖5a可以看出,模型用FIOU作為模型損失函數后,目標框訓練損失值得到了有效降低,雖然mAP沒有得到提高,但檢測速度得到了大幅提升,解決了模型不收斂、定位框不準確的問題。從圖5b可以看出,本文改進的算法較其它模型,整體的mAP達到最優,為91.9%,較YOLOv5s提升4.8個百分點,且沒有為提升檢測精度而犧牲檢測速度,模型單幅圖像檢測時間為10.4 ms。

表1 實驗平臺參數配置Tab.1 Parameter configuration of experimental platform

表2 消融實驗評估Tab.2 Evaluation form of ablation experiment

圖5 消融實驗訓練損失值和mAPFig.5 Ablation experiment training loss and mAP

圖6 YOLOv5s和本文算法檢測效果對比Fig.6 Comparison between YOLOv5s and proposed algorithm
為檢驗本文算法改進的準確性,隨機抽取某水電站魚道過魚季節圖像作為YOLOv5s和本文算法的測試集。圖6為該水電站魚道過魚實際拍攝圖的檢測結果,圖6a在密集魚群相互遮擋時,因圖像信息少,YOLOv5s產生漏檢的情況,而本文算法并未發生漏檢;圖6b在微小目標模糊場景下,YOLOv5s未能檢測出圖像中間模糊的小目標魚類,本文算法成功的檢測出小目標魚類;在圖6c水下場景復雜,樹枝等雜質漂浮物與目標魚類重疊,容易將魚類與雜質混淆,在水體濁度較大的情況下,YOLOv5s將左下的樹枝陰影識別成魚類,而本文算法則完成了正確的檢測和識別。
綜上,本文算法有效提高了算法在渾濁水體下對目標的檢測能力,減少了因魚群遮擋、模糊和有效信息少造成漏檢的情況,并有效提升了模型精度,魯棒性更強,能夠適應復雜的水下環境。
為進一步驗證本文提出的改進算法在復雜水體下魚道過魚監測識別能力優于其它目標檢測算法,使用相同復雜水體數據集對SSD、Faster R-CNN、YOLOv4、YOLOv5s和YOLOv5x在同一實驗平臺進行訓練和驗證,主要測試其檢測精度和速度,結果如表3所示。從表3可以看出,與其它算法相比,本文提出的改進YOLOv5s算法在mAP取得了最優值。YOLOv5x通過增加網絡的深度使得模型的mAP得到一定的提升,但模型參數計算量也隨著模型深度的增加而增加,導致模型處理速度比YOLOv5s增加了一倍。而本文算法在保證處理速度的前提下,提高了模型的mAP等各項指標,進一步證明了本文算法在檢測性能上具有更高的優勢,更適合完成復雜水體下魚道過魚目標檢測。

表3 主流算法實驗評估結果Tab.3 Experimental evaluation results of mainstream algorithms
目前YOLOv5網絡模型轉TensorRT有兩種方式:①直接使用YOLOv5自帶的轉換腳本轉換成onnx形式后直接生成.engine文件(方式1),這種比較便捷直接,但模型推理速度優化有一定局限性。②本文的轉換方式,首先通過C語言對YOLOv5進行編譯,然后生成.engine引擎文件和.dll動態鏈接庫進行部署(方式2)。選取100幅圖像分別對推理加速前、方式1推理加速以及方式2推理加速進行測試,得到的推理效率結果見圖7。從圖7可以看出,將模型部署為TensorRT后推理速度均可得到大幅提升。原始YOLOv5s模型每幅圖像平均推理時間為10.8 ms,本文算法為10.4 ms,使用方式1的方法將模型部署為TensorRT后,2個模型的推理速度分別提升2.6倍和2.3倍,而使用本文的方式將模型部署為TensorRT,推理速度達到2.6、2.3 ms,相比轉換前,模型推理速度提高4倍多,該方式可以有效解決模型檢測速度慢或者因改進模型而降低處理速度的問題,優化計算損耗。

圖7 TensorRT部署推理時間對比Fig.7 Comparison of TensorRT deployment reasoning time
本文對YOLOv5s進行了改進,檢測精度和處理速度均為側重點,表2為消融實驗驗證不同改進對算法的影響。每個改進模塊對模型提升的效果均不一樣,YOLOv5s在添加ECA模塊后(模型 B),其準確率大幅度提升,對目標的特征匹配能力增強,但召回率有所下降。召回率衡量實際為正的樣本中被預測為正樣本的概率,是不可忽略的一部分。而實驗中發現,YOLOv5s將STR作為檢測層后能有效提高模型的召回率(模型 C),因此將兩者組合起來后,進行了互補,模型(模型 E)的精確度mAP得到了進一步提高,但模型的平均處理速度卻降低了,雖然在準確率和召回率提高的情況下,推理速度增加的時間是可以接受的,并不影響在魚道工程中的過魚實時檢測。但為了不犧牲檢測效率提升模型精度,本文對模型的損失函數進行了更換(模型 D),發現FIOU作為損失函數后模型的精度提升可以忽略不計,但處理速度卻提高1.6倍。因此將3種改進措施進行組合(本文算法),實驗結果表明,本文算法在檢測精度、能力、計算消耗和處理速度4個指標上均優于YOLOv5s,在惡劣環境下本文算法具有更好的性能,可以很好地解決水下環境復雜、特征信息匹配困難、準確率和效率低等問題。如圖6所示,在魚群遮擋、圖像模糊、有效信息少的情況下,與YOLOv5s相比,本文算法在目標定位和檢測能力等方面都有很大提升。然而,當環境過于復雜、目標魚類較小時,本文的模型仍然可能存在漏檢。如圖8所示,圖像中左邊的魚類頭部沒有被檢測出來。且在實驗的過程中發現,雖然對樹枝等雜質漂浮物誤識別的概率大幅度降低,但該現象還會偶爾發生。出現這種現象可能的原因有:①數據集不夠豐富,對訓練中沒有出現的微小目標魚類識別困難。②數據集中沒有添加負樣本,導致將樹枝等雜質容易識別成目標魚類。未來,針對微小目標魚類識別困難的問題,可以對數據集進行擴充,針對性的添加微小目標魚類圖像,通過提高樣本類型的豐富性和實時性來提高模型的魯棒性;針對誤識別的問題,可以在訓練集中添加負樣本,如添加各種雜質和漂浮物(特別是樹枝和樹葉)樣本,可以避免誤檢,提高目標魚類的檢測精度。

圖8 YOLOv5s和本文算法漏檢現象Fig.8 Missing detection of YOLOv5s and proposed algorithm
此外,本文通過C語言轉換的方式對模型進行TensorRT部署,避免不必要的計算,使推理速度大幅度提升。圖9為本文算法使用TensorRT部署前后的檢測效果,可以看出兩者的檢測性能和推理生成的定位框幾乎沒有任何的差異,故本文方法將模型部署為TensorRT不會影響其檢測精度。

圖9 TensorRT部署前后檢測效果Fig.9 Detection effect before and after TensorRT deployment
(1)為解決傳統魚道監測方式過度依賴人工、對魚類干擾大以及現階段技術對復雜水體下的魚道過魚監測效率低、準確率差等問題,提出了一種基于YOLOv5模型改進的復雜水體魚道檢測算法,并將其部署在TensorRT上,相比其它算法模型,本文算法在各指標均表現出強大的優勢。
(2)針對水下環境復雜,檢測目標困難的問題,將STR作為模型檢測層,提高了檢測能力;將輕量級注意力ECA作為C3模塊Bottleneck,加強模型特征提取能力,減輕了計算參數量并提升了模型檢測精度;使用FIOU作為損失函數,使模型預測框更精確;將本文算法部署于TensorRT,優化模型結構,降低計算損耗,處理速度得到大幅度提升。
(3)實驗結果表明,本文算法的準確率、召回率、平均精度均值均有提升,mAP達到91.9%,較YOLOv5s提升4.8個百分點,具有更好的檢測性能,使用TensorRT部署后模型處理時間可以達到每幅圖像2.3 ms,提高4.5倍。