許小華 李亞琳 呂 姚 包學才 肖 磊 聶菊根
(1.江西省水利科學院,南昌 330000;2.江西省鄱陽湖流域生態(tài)水利技術創(chuàng)新中心,南昌 330000;3.南昌工程學院,南昌 330000)
水位是江河湖庫的基本水文要素之一,水位數(shù)據(jù)是防汛抗旱、灌溉、航運、水利設施建設和管理的基本依據(jù),及時可靠的水位自動監(jiān)測對于提高防洪抗旱的預警預報水平具有重要意義[1]。水尺是識別水位最直觀、最簡單的水位測量工具,但是傳統(tǒng)的人工讀取方式及壓力式、浮子式、超聲波、雷達等水位計水位檢測方式存在安全隱患大、易損壞、成本高、誤差大等弊端[2-6]。因此,如何設計一種普適性的水位檢測算法,實時識別水體水位變化,智能且高精度識別水位值,成為防汛抗旱決策支持的關鍵。
近年來數(shù)字圖像處理計算水位的技術快速發(fā)展,圖像差分法、Canny算子、多模板匹配算法等技術被應用于水尺和水尺字符的識別、矯正,再通過霍夫變換、仿射變換、投影關系等檢測出水位[7-11]。然而這些傳統(tǒng)的圖像處理方法對于水尺本身背景、環(huán)境背景、光線和拍攝角度等要求較高,在處理水域等圖像背景較為復雜的情景時,易受到背景噪聲干擾導致水位測量誤差大,算法不具有普遍適應性。隨著深度學習技術的飛速發(fā)展,通過深度神經(jīng)網(wǎng)絡自適應識別歸納圖像特征,形成了水位檢測的一個重要方向。馬睿等[12]通過傳統(tǒng)圖像處理算法對水尺位置進行定位,然后使用YOLOv4 算法識別水尺刻度線并計算當前水位值。王磊等[13]提出一種由YOLO-v3 對象檢測和ResNet刻度識別兩種模型構成的實時水位識別方法,通過算法設計、訓練和集成,實現(xiàn)與浙江省水資源監(jiān)控信息平臺的集成應用。野外水域復雜,獲得的圖像具有較高的背景噪聲,因此對模型檢測率要求極高,而上述圖像處理技術容易出現(xiàn)錯檢、漏檢,從而影響測量水位的精準度。
針對傳統(tǒng)圖像處理方法在水位檢測中易受背景噪聲影響的缺陷及目前深度學習技術在水位檢測方面應用不充分的問題,結合水域復雜情景的研究背景,本文融合圖像處理技術,提出一種基于深度學習的兩階段智能水位識別算法。
本文利用改進YOLOX 深度學習網(wǎng)絡模塊,提出基于水尺和水尺“E”刻度兩階段檢測識別的水位智能識別算法,該方法可以有效應對天氣、采集圖片角度、光照光線、水尺傾斜、復雜環(huán)境背景影響[14],以及水尺本身附著的藻類、落葉和泥巴等因素的影響。算法流程如圖1所示。
1.1.1 YOLOX-S算法原理
YOLOX 是YOLO 系列中的集大成者,由Ge等[15]2021 年提出YOLO 系列的新版本,根據(jù)網(wǎng)絡的寬度和深度可分為S、M、L 和X4 種基本型號,此外在犧牲了部分精度的前提下還提出了兩個輕量級網(wǎng)絡型號Tiny和Nano。其中,YOLOX-S 在參數(shù)量和檢測精度方面做到了很好的平衡。YOLOX 官方論文中在COCO 數(shù)據(jù)集上不同模型尺寸的相關數(shù)據(jù)如表1所示。
表1 YOLOX不同模型尺寸的相關數(shù)據(jù)
雖然本文研究的水位檢測算法檢測類別數(shù)單一、任務較為簡單,但對算法的實時性和準確性均有較高的要求。綜合考慮,本文選用YOLOX-S 作為改進的基準網(wǎng)絡模型,YOLOX-S結構如圖2所示。
圖2 YOLOX-S網(wǎng)絡結構圖
1.1.2 改進YOLOX-S算法
YOLOX-S 算法模型中的加強特征融合網(wǎng)絡不同尺度特征層之間存在不一致性問題,具體表現(xiàn)為越深層的特征圖經(jīng)過加強特征融合網(wǎng)絡的3個有效特征層輸入解耦頭時,會使得語義信息和位置信息交互越弱化。因此,本文引入具有自適應特征融合的模塊在輸入解耦頭之前加強對不同特征層之間的語義信息和位置信息交互,提高檢測精度。
主干特征提取網(wǎng)絡和解耦頭沿用原本的YOLOX-S,重構加強特征融合網(wǎng)絡為P_ASFF,改進是對主干特征提取網(wǎng)絡輸出的3 個有效特征層經(jīng)過PANet 特征融合后輸出3 個有效特征層Pc1(20*20*512)、Pc2(40*40*256)、Pc3(80*80*128),然后分別經(jīng)過CSPLayer 層得到P1(20*20*512)、P2(40*40*256)、P3(80*80*128)。在得到P1、P2 和P3 后,將其分別加入自適應空間特征,融合ASFF 模塊進行3 層特征層的加權融合,得到P1_out(20*20*512)、P2_out(40*40*256)和P3_out(80*80*128)。改 進 后 的YOLOX-S網(wǎng)絡結構如圖3所示。
圖3 改進YOLOX-S網(wǎng)絡結構
其中,自適應空間特征融合(Adaptively Spatial Feature Fusion,ASFF)[16]可以實現(xiàn)自適應學習不同尺度特征層的權值,能夠融合不同尺度感受野下的目標特征信息,有效改善了目標特征信息丟失和不同層級的特征圖上正負樣本劃分沖突干擾訓練期間梯度計算的問題。ASFF 結構如圖4所示。
圖4 ASFF結構圖
在圖4 中Level1、Level2 和Level3 表示3 個不同尺度的有效特征層,以ASFF-3 為例[17],X1→3、X2→3、X3→3表示3 個有效特征層的特征,分別乘以權重參數(shù)α3、β3、γ3并求和,過程可用式(1)表示:
式中:y表示3 個有效特征層經(jīng)過ASFF-3 之后得到新特征圖,α3+β3+γ3= 1(α3,β3,γ3∈[0,1])。
1.1.3 損失函數(shù)
本文使用基于BCELoss 的PolyLoss[18]計算損失,Poly-Loss 是一種用于理解和設計損失函數(shù)的新框架,該框架有助于將BCELoss 解釋為PolyLoss 系列的特例,將BCELoss函數(shù)在( 1-Pt)處進行泰勒展開,并修改了BCELoss 中的第一個多項式,新加入了可以針對不同模型和任務進行調(diào)優(yōu)的多項式系數(shù)(1-?1),可以獲得更好的分類精度,如式(2)所示:
式中:Pt為目標真實類別的預測概率,j∈(1,+∞)。
利用YOLOX_I1 提取水域圖像中的水尺,之后需要識別水尺上的“E”刻度并截取,水尺“E”刻度識別的準確與否會直接影響到水位值的計算,因此,在進行字符標志識別之前,需要對水尺做矯正處理,圖像矯正流程如圖5所示。
圖5 圖像矯正流程圖
具體流程說明如下:
(1)將截取到的水尺圖像轉成單通道的灰度圖,即將BGR圖像轉換為GRAY圖像。
(2)通過高斯濾波[19]對GRAY 圖像進行模糊去噪,高斯核大小設置為5×5。
(3)利用Canny 邊緣檢測算法[20-21]計算圖像梯度的幅值和方向,通過雙閾值檢測和邊緣連接有效抑制由噪聲引起的孤立弱邊緣點,提高邊緣檢測精度。Canny邊緣檢測流程如圖6所示。
圖6 邊緣檢測流程圖
(4)利用霍夫變換[22-23]對Canny 算法檢測到的水尺邊緣進行直線檢測,直線表達式如式(3)所示。返回檢測出的直線,另一種形式的表達式如式(4)所示。根據(jù)ρ和θ結合三角函數(shù)在直線上任取不同兩點A(x1,y1)和B(x2,y2),通過公式k=(y2-y1)∕(x2-x1)求出該直線斜率,再利用反正切函數(shù)求出直線傾斜角度并對水尺圖像進行矯正(圖7)。
圖7 水尺圖像矯正前后
式中:ρ為原點到待檢測直線的垂直距離;θ為原點到待檢測直線垂直距離上直線和x軸的夾角。
待測的水域圖像經(jīng)過YOLOX_I1 和YOLOX_I2 處理后,分別截取水尺圖像和水尺“E”刻度圖像,但這些圖像的上下端會存在一些背景噪聲,影響最終水位計算結果。本文提出以基線為篩選閾值,分別對圖像像素點的水平直方圖和垂直直方圖進行處理,圖像多余背景濾除流程如圖8所示,以處理水尺“E”刻度圖像為例說明具體步驟:
圖8 圖像多余背景濾除流程圖
(1)對截取的水尺“E”刻度圖像進行高斯模糊去噪處理,將處理后的彩色圖像轉成單通道的灰度圖,對灰度圖進行二值化處理,得到二值化圖像。
(2)分別從水平方向和垂直方向遍歷二值化圖像的每個像素點,統(tǒng)計像素值為255的像素點數(shù)量,生成水平直方圖和垂直直方圖(圖9)。取出垂直直方圖中像素點數(shù)量的最大值E_max_v,根據(jù)水尺上實際測量出的單個“E”寬度是其“E”刻度最左邊豎線寬度的5 倍,對垂直直方圖進行處理,像素點數(shù)量大于E_max_v 4∕5 的保留,小于E_max_v的4∕5 置為0,統(tǒng)計像素點數(shù)量值不為0 的位置寬度記為E_vn;對水平直方圖處理,像素點數(shù)量值大于E_vn 的保留,小于E_vn置為0。
圖9 水平直方圖和垂直直方圖
(3)根據(jù)水平直方圖中左右兩端像素點數(shù)量值不為0的位置信息,將不在左右兩端范圍內(nèi)的水尺“E”刻度圖像相應部分濾除;重復上述操作,實現(xiàn)對每個截取水尺“E”刻度圖像的多余背景濾除,圖像多余背景濾除前后效果對比如圖10所示。
(4)根據(jù)濾除多余背景后的水尺“E”刻度圖像,計算圖像高度像素值,建立所有多余背景濾除后水尺“E”刻度圖像高度像素值列表,對該像素值列表中的值按降序方式重新排列。若該列表的長度N為奇數(shù),則選取該列表的中間值代表水尺“E”刻度的標準圖像高度像素值;若該列表的長度N為偶數(shù),則選取該列表中第N∕2和第(N+1)∕2個數(shù)的平均值代表水尺“E”刻度的標準圖像高度像素值he。
在包含水尺的多個不同水域圖像8 503 張和單獨水尺圖像1 780張中選取典型的4組圖像:(a)復雜背景、(b)夜間環(huán)境、(c)雨天環(huán)境、(d)背光環(huán)境(圖11),采用人工標注的方式分別對水尺和水尺“E”刻度進行標注,制作兩套獨立的VOC格式數(shù)據(jù)集。其中用來識別水尺的數(shù)據(jù)集訓練樣本數(shù)量為6 886張,驗證樣本數(shù)量為766張,測試樣本數(shù)量為851張;用來識別水尺“E”刻度的數(shù)據(jù)集訓練樣本數(shù)量為1 441張,驗證樣本數(shù)量為161張,測試樣本數(shù)量為178張。
圖11 水尺數(shù)據(jù)集和水尺“E”刻度數(shù)據(jù)集
本文所用訓練設備CPU型號是15核Intel(R)Xeon(R)Platinum 8358P CPU @ 2.60GHz,內(nèi)存80 GB,GPU 型號為RTX A5000,顯存24 GB。操作系統(tǒng)是ubuntu18.04,PyTorch版本1.7.0,Python版本3.8,CUDA版本11.0。
所有模型均不使用預訓練模式,即訓練過程中不需要加載預訓練權重。迭代次數(shù)(epoch)為300,Batch_size設為16,Weight_decay設為0.000 5,表示權重衰減,可以防止過擬合。優(yōu)化器選用SGD,其內(nèi)部使用到的momentum 參數(shù)設為0.937,學習率設為0.01,學習率衰減采用余弦退火的方式。
訓練過程中YOLOX_I1和YOLOX_I2的損失值變化曲線如圖12 所示。從圖12 中可以看出,YOLOX_I1 的訓練集和驗證集損失值分別收斂于1.859、1.838,YOLOX_I2 的訓練集和驗證集損失值分別收斂于1.104、1.097。
圖12 訓練過程的損失值
2.3.1 評價指標
為了判斷模型對水尺和水尺“E”刻度的檢測效果,選擇平均精度(AP)、F1、幀率(FPS)作為評價指標。AP是對單個類別下被正確分配的正樣本數(shù)占總分配正樣本數(shù)的比例取平均精度,如式(5);F1 是當參數(shù)α= 1 時查準率和查全率加權調(diào)和平均值,綜合了查準率和查全率結果,當F1較高時則說明試驗方法比較有效,如式(6);FPS是每幀推理的時間,它衡量的是算法的檢測速度,值越高算法實時性越好,如式(7)。
式中:Tp為正樣本被正確識別的數(shù)目;Fp為錯誤地被識別為正樣本的數(shù)目;N為類別數(shù);Precision為查準率,Recall為查全率;frameNum為圖像的幀數(shù)編號;elapsedTime為運行固定幀數(shù)花費的時間。
2.3.2 實驗結果對比
采用改進的YOLOX-S 算法模型分別對水尺和水尺“E”刻度檢測,在參數(shù)相同情況下,與YOLOv4-S、YOLOv5-S、YOLOX-S 算法做對比,同樣為了驗證重構后的P_ASFF 模塊和使用PolyLoss 優(yōu)化后的BCE Loss 在改進的YOLOX-S 算法中的效果,設計依次增加Poly Loss 和P_ASFF的對比,如圖13、表2和表3所示。
表2 水尺識別算法各指標對比
表3 水尺“E”刻度檢測算法各指標對比
圖13 算法對比圖
其 中,AP50和AP70分 別 表 示 閾 值 為50、70 時 水 尺“E”刻度的AP值,閾值設置越高對檢測的結果越嚴格,預測框和真實框的貼合程度要求越高。從圖13、表2 和表3 中可以看出無論是AP50、AP70還是F1,本文提出的改進YOLOX-S 算法在對水尺和水尺“E”刻度檢測上均有很好的效果,F(xiàn)PS值同樣能滿足實時性的目標檢測的需求。在YOLOX-S 基礎上分別增加PolyLoss 和P_ASFF 之后AP值均有提升,綜上,改進后的目標檢測算法在當前任務中可靠性較好。
為驗證水位檢測算法的有效性和可靠性,以較為模糊的水尺圖像為例,與王磊等[13]使用的YOLO-v3 和ResNet刻度識別算法做了實際對比測試,對比結果如圖14所示。
圖14 實測效果對比
從圖14 可以看出,在水尺圖像較為模糊的情景下,YOLO-v3 和ResNet 刻度識別算法僅僅識別出水尺上的兩條刻度線,若只依據(jù)水尺刻度線進行水位識別容易出現(xiàn)漏檢的現(xiàn)象,對后續(xù)統(tǒng)計刻度數(shù)目和計算水位值有很大影響。而利用本文算法,水尺“E”刻度均可識別出來,說明該水位檢測算法在初始圖像模糊的情景下仍然具有很好的檢測效果,可靠性高并且適應性好。
為進一步驗證算法的水位檢測性能,選取8 組實驗數(shù)據(jù),數(shù)據(jù)選取白天背景較為復雜的水面環(huán)境、雨天環(huán)境、外部環(huán)境干擾導致的模糊水尺和夜間環(huán)境下水尺,分別與孫維亞等[10]使用的主策略算法、YOLO-v3和ResNet算法做對比。通過測量誤差分布圖可以看出本文提出的水位檢測算法誤差波動最?。▓D15)。最終計算的水位值平均誤差、最大誤差、最小誤差和極差的檢測對比結果如表4所示。
表4 不同算法水位檢測結果參數(shù)對比
圖15 算法誤差對比圖
從表4 可以看出,YOLO-v3 和ResNet 刻度識別算法平均誤差為6.14 cm,最大誤差為10.33 cm,最小誤差為0.70 cm,極差為9.63 cm,說明水位檢測算法的結果誤差變動范圍較大,算法穩(wěn)定性不強,主策略算法平均誤差為2.50 cm,最大誤差為5.00 cm,最小誤差為1.00 cm,極差為4.00 cm,相較于YOLO-v3 和ResNet 刻度識別算法的結果誤差雖然變動范圍減小,但極差仍有4.00 cm,而本文算法的平均誤差、最大誤差和最小誤差均最低,極差也只有0.78 cm,小于另外兩種算法。
本文算法性能較好且誤差較小的原因在于使用兩階段目標檢測算法和針對多余背景濾除的圖像處理技術,其中基于深度學習的兩階段目標檢測算法能準確地定位待測區(qū)域和水尺刻度“E”,圖像處理技術能對檢測出的圖像基于像素級的水平直方圖和垂直直方圖處理多余背景,使得檢測結果更加精確。為驗證提出多余背景濾除處理技術的有效性,對是否使用多余背景濾除處理的水位檢測結果進行了對比。分別選取白天背景較為復雜的水面環(huán)境、雨天環(huán)境、外部環(huán)境干擾而導致的模糊水尺和夜間環(huán)境下水尺共8組實驗數(shù)據(jù),對比結果如表5所示(實際水位的讀數(shù)以人工讀數(shù)為準,誤差分析以絕對誤差作為評價指標)。
表5 多余背景濾除處理的性能分析
從表5 可以看出,在不對圖像做多余背景濾除處理時,測試樣本中的最大誤差高達6.40 cm,而針對該樣本使用本文算法中的多余背景濾除處理之后測量的誤差僅有0.48 cm,測量誤差降低5.92 cm,這表明在使用基于深度學習的目標檢測算法后,圖像的背景噪聲干擾依舊很大,而在準確提取檢測目標前提下引入圖像處理技術依據(jù)像素點數(shù)目對圖像做多余背景濾除處理時能減小水位測量誤差。因此,本文提出的在水位檢測算法中引入傳統(tǒng)圖像處理方法效果顯著。
本文針對江河湖庫等水域的水位檢測,提出了一種基于深度學習的水位智能檢測算法,引入ASFF 模塊重新構建了YOLOX-S 的加強特征融合網(wǎng)絡,提高算法特征信息融合能力,引入多項式損失(Poly Loss)對二元交叉熵損失(BCE Loss)進行優(yōu)化;使用改進后的模型對基于水尺的水域圖像分兩階段檢測識別,結合傳統(tǒng)圖像處理技術對水尺圖像做矯正和多余背景濾除處理、對水尺“E”刻度做多余背景濾除處理,可以濾除背景噪聲并較為準確地讀取到圖像高度像素值,最終根據(jù)公式計算水位。結果表明改進后的YOLOX-S 對第一階段水尺的識別率為98.94%,對第二階段關鍵水尺“E”刻度的識別率為99.86%,F(xiàn)PS 均可達到59,改進后的YOLOX-S 算法滿足實時性要求,并且在使用了多余背景濾除方法后,最終計算水位的平均誤差小于0.60 cm、極差誤差小于0.80 cm,較傳統(tǒng)典型水位識別方法分別減少1.98 cm 和3.22 cm,實現(xiàn)對江河湖庫等水域水位的高精度智能識別,為防汛抗旱決策提供有效技術支撐。