祝子維,陶青川,沈建軍,雷磊
(四川大學(xué)電子信息學(xué)院,成都610065)
近年來,南方夏季經(jīng)常暴雨成災(zāi),多地洪水泛濫,汛情來勢洶洶,河流水位智能監(jiān)控對于減少人力和實時監(jiān)控分析有著重要意義。隨著信息化時代的發(fā)展,社會基礎(chǔ)設(shè)施的完善,信息化建設(shè)逐漸滲透到各個領(lǐng)域,水域監(jiān)控系統(tǒng)日益完善,智能監(jiān)控逐漸取代人工監(jiān)控。水位值測量傳統(tǒng)方法主要依靠安裝水尺人工讀數(shù)或者通過傳感器[1]自動采集模擬信息并轉(zhuǎn)為數(shù)字信息來獲取,這些方式測量水位值成本較高而且實時性低。隨著圖像技術(shù)的發(fā)展,許多學(xué)者將人工智能、機器視覺方法運用到水尺測量,測量過程主要分為兩步,首先是水尺定位去掉背景里的大部分背景信息,目前主要使用傳統(tǒng)機器視覺或深度學(xué)習(xí)目標檢測的方式進行定位,傳統(tǒng)機器視覺方法主要使用圖像處理的邊緣檢測算子[2]進行水尺邊緣角點特征提取、從HSV 色域空間提取水尺顏色定位水尺以及人工標定水尺區(qū)域等方法,霧天、噪聲、周圍環(huán)境等因素對傳統(tǒng)機器視覺檢測方法影響極大,需要不斷調(diào)參適應(yīng)不同環(huán)境,實用性差?;谏疃葘W(xué)習(xí)目標檢測算法如SSD[3]等雖然可以大致框出水尺位置,但還是會有一部分背景信息對后續(xù)的水尺刻度提取造成影響。第二步水尺刻度提取目前主要采用傳統(tǒng)機器視覺形態(tài)學(xué)處理、二值化、旋轉(zhuǎn)矯正、字符分割等方法[4],但是這些方法里的閾值參數(shù)設(shè)置受環(huán)境影響較大,不能自主學(xué)習(xí),并不能適應(yīng)復(fù)雜多變的實際監(jiān)測環(huán)境。
本文提出一種基于改進SegNet 和YOLOv3 網(wǎng)絡(luò)的水尺刻度檢測算法,通過深度學(xué)習(xí)語義分割和目標檢測提取水尺信息,有較強的抗干擾能力,能適應(yīng)復(fù)雜多變的環(huán)境。語義分割是一種分類算法,實現(xiàn)對圖像像素的歸類并提供類別語義,輸入一張圖像經(jīng)過語義分割網(wǎng)絡(luò)得到一張逐像素標注的圖像,語義分割從像素級別解釋圖像,目前已廣泛應(yīng)用在醫(yī)療、無人駕駛等眾多領(lǐng)域。Vijay Badrinarayanan 等人提出一種用于圖像分割的深度卷積編碼-解碼架構(gòu)SegNet[5],SegNet 分割引擎包含一個編碼網(wǎng)絡(luò)和一個解碼網(wǎng)絡(luò)并跟隨一個像素級別的分類層,相比其他廣泛的語義分割網(wǎng)絡(luò)(FCN[6]、UNet[7]、DeepLab[8])等,在保證良好分割精確度的同時,內(nèi)存和時間的利用率上更加高效,能在AI 計算芯片(Atlas 200、Hi3559A 等)運行。改進SegNet 融入雙重注意網(wǎng)絡(luò)DANet[9],引入位置注意力模塊和通道注意力模塊改進特征表示,一定程度上解決分割邊界粗糙,提高分割準確度。Joseph Redmon 提出的YOLOv3[10]在BackBone 網(wǎng)絡(luò)上將用DarkNet-53 替換DarkNet-19,性能提升巨大,本文在保證水尺特殊字符檢測精確度前提下,修改BackBone 模塊卷積層,使網(wǎng)絡(luò)權(quán)重大幅減小,提高運行效率。
本文算法結(jié)合SegNet 和YOLOv3 改進網(wǎng)絡(luò)對圖像進行處理,提取水尺刻度,具體步驟分為:①從攝像機采集視頻流,通過視頻解碼模塊,得到RGB 格式的圖像幀。②將RGB 格式圖像幀輸入SegNet 語義分割模塊,分離出水尺、水域、背景3 個特征部分。③由邊緣檢測算子提取出水岸線。④截取水尺圖像resize 后輸入到Y(jié)OLOv3 改進網(wǎng)絡(luò),檢測出特殊字符個數(shù)。⑤配合水岸線位置計算出部分進入水中的不完整字符長度值,最后得到完整水尺刻度值。算法流程如圖1 所示。
(1)SegNet 網(wǎng)絡(luò)概述
SegNet 是劍橋大學(xué)團隊開發(fā)的開源語義分割網(wǎng)絡(luò),網(wǎng)絡(luò)在像素級別對圖像內(nèi)部不同特征分類,主要分為編碼模塊(encoder)和解碼模塊(decoder)兩塊,編碼模塊基于VGG16[11]網(wǎng)絡(luò)模型,通過卷積神經(jīng)網(wǎng)絡(luò)解析圖像信息,得到圖像的特征圖譜。解碼模塊在得到編碼模塊從原圖解析出來的特征圖譜后,實現(xiàn)對圖像每一個像素的分類標注,最后得到語義分割圖。SegNet編碼和解碼結(jié)構(gòu)是一一對應(yīng)關(guān)系,一個編碼模塊對應(yīng)一個解碼模塊,他們具有相同的空間尺寸和通道數(shù)。SegNet 采用池化索引(pooling indices)解決過多的邊界細節(jié)損失,存儲每個池化窗口中最大特征值的位置,用于編碼模塊和解碼模塊的特征映射。在保證精度前提下,SegNet 內(nèi)存消耗比其他語義分割架構(gòu)明顯更小。
(2)改進的SegNet 網(wǎng)絡(luò)結(jié)構(gòu)
SegNet 網(wǎng)絡(luò)分割雖然可以保證低內(nèi)存使用率情況下對圖片特征像素級的分類,但仍然是使用局部感受野進行特征的提取,這會導(dǎo)致最終的feature map 的表達可能不同,以致分割效果不理想。DANet 是一種雙重注意力網(wǎng)絡(luò),可以自適應(yīng)地將局部特征和全局依賴項聯(lián)系在一起。水尺也暴露在露天室外環(huán)境,時常因為光照、霧天、遮擋等環(huán)境因素而影響分割效果,SegNet網(wǎng)絡(luò)雖然可以有效捕獲目標,但是忽略了全局信息。因此,本文在SegNet 中融入DANet 注意力機制,DANet包括位置注意力模塊(position attention)和通道注意力模塊(channel attention),從SegNet 解碼出feature map分別送入兩個注意力模塊,得到新的加權(quán)feature map,再相加后輸入到解碼模塊。
①位置注意力模塊
特征圖的表示能力體現(xiàn)對圖像的理解,位置注意模塊將全局語義信息融入局部感受野中,增強特征圖表示能力,具體流程如圖2 所示。
圖2 位置注意力模塊流程
如圖2 所示,對SegNet 解碼模塊輸出的特征圖T0∈RC×H×W,其通道特征數(shù)為C,經(jīng)過一個帶有BN 層和ReLU 層的卷積網(wǎng)絡(luò)得到 3 個新的特征圖T1,T2,T3∈RC×H×W,將T1,T2矩 陣 變 換 為RC×N,其 中N=H×W,將T1乘以T2的轉(zhuǎn)置,然后通過Softmax 層計算位置注意力映射圖S∈RN×N,計算如公式(1)所示。
其中Sij表示第i 個位置對于第j 個位置的影響程度,值越大表明特征越相似。然后將T3∈RC×H×W矩陣變換為RC×N,再乘以S,矩陣變換為RC×H×W,乘上因子α,并與特征圖T0逐像素相加得到最終特征E,如公式(2)所示。
其中加權(quán)系數(shù)α初始設(shè)置為0,然后不斷學(xué)習(xí),E為通過注意力機制模塊后得到的特征圖,其中每個位置為所有位置的特征和原始特征加權(quán)和,因此融入全局的圖像信息。
②通道注意力模塊
通道注意力模塊通過獲取不同通道映射之間的聯(lián)系增強特征圖語義的表達能力。具體流程如圖3所示。
圖3 通道注意力模塊流程
與位置注意力模塊中把特征圖通過卷積神經(jīng)網(wǎng)絡(luò)再與原始特征加權(quán)和不同,通道注意力直接把原始特征T0∈RC×H×W矩陣轉(zhuǎn)換為RC×N,其中N=H×W,然后與不同通道特征轉(zhuǎn)置后進行一次矩陣乘法,最后通過Softmax 層獲得RC×C特征矩陣,如公式(3)所示。
其中Xij表示第i 個通道與第j 個通道的聯(lián)系,然后對Xij轉(zhuǎn)置后與原始特征進行矩陣乘法運算得到RC×H×W,再乘上因子β并與原始特征逐像素相加得到最終的特征圖E∈RC×H×W,如公式(4)所示。
每個通道都是所有通道的特征和原始特征圖的加權(quán)和,增強通道之間的依賴,增強特征圖的判別能力。將DANet 模塊加入到SegNet 的解碼和編碼之間的整體結(jié)構(gòu)圖如圖4 所示。
圖4 加入注意力機制的SegNet網(wǎng)絡(luò)
(3)改進SegNet 模型分割圖像結(jié)果
本文使用2112 張樣本圖訓(xùn)練網(wǎng)絡(luò)模型,加載訓(xùn)練好的模型對圖像進行分割。分割結(jié)果如圖5 所示,其中黑色代表背景,紅色代表水尺,綠色代表水域。從分割圖中提取水尺位置和水岸線信息,水尺區(qū)域之后輸入到目標檢測模塊提取水尺刻度,水岸線用來計算不完整字符長度。
圖5 分割結(jié)果
目前,在定位水尺之后,水尺刻度提取大都基于傳統(tǒng)機器視覺,通過傾斜矯正、水尺裁剪、圖像形態(tài)學(xué)操作分割字符、刻度提取等步驟,很容易受到環(huán)境影響。因此,本文改進YOLOv3 網(wǎng)絡(luò)提取水尺特殊字符“?”和“ヨ”。
(1)RulerYolo 網(wǎng)絡(luò)結(jié)構(gòu)
YOLOv3 網(wǎng)絡(luò)結(jié)構(gòu)采用DarkNet-53 作為特征提取的特征網(wǎng)絡(luò),DarkNet-53 引入殘差ResNet 模塊,解決深層次網(wǎng)絡(luò)梯度問題,減小梯度爆炸的風(fēng)險,提高學(xué)習(xí)能力,重復(fù)利用兩個卷積層和一個快捷鏈路組成的殘差組件,而原網(wǎng)絡(luò)結(jié)構(gòu)較深,權(quán)值參數(shù)太過龐大,本文根據(jù)YOLOv3 來改進的網(wǎng)絡(luò),在保證精度的情況下,減少內(nèi)存使用和運行速率,為了方便理解,將改進的YO?LOv3 網(wǎng)絡(luò)稱為RulerYolo。在卷積層和殘差模塊組成的特征提取的BackBone 基礎(chǔ)上,對網(wǎng)絡(luò)深度和特征圖數(shù)量上進行縮減,通過5 次下采樣,每次采樣步長為2,先后通過7×7 的卷積核和MaxPooling 2 倍下采樣,然后殘差塊的數(shù)量從1,2,8,8,4 改變?yōu)?,3,3,4,保證網(wǎng)絡(luò)特征能力的前提下,縮減網(wǎng)絡(luò)的層數(shù),使網(wǎng)絡(luò)權(quán)重大大減少,提高運行速度。利用多尺寸特征進行對象檢測,水尺圖像為矩形形狀,自定義輸入尺寸為768×384,圖像通過BackBone 網(wǎng)絡(luò)32 倍、16 倍、8 倍下采樣得到三種不同尺度的預(yù)測結(jié)果,分別為24×12、48×24、96×48 三種尺度,改進后輸入尺寸為768×384,權(quán)值大小為3.8Mb,大小相對于原始YOLOv3 減小了64 倍,GPU 運行平均耗時12ms,改進后的結(jié)構(gòu)框圖RulerYolo 如圖6所示。
圖6 RulerYolo網(wǎng)絡(luò)結(jié)構(gòu)圖
經(jīng)過修改網(wǎng)絡(luò)模型結(jié)構(gòu),樣本制作,訓(xùn)練模型,得到RulerYolo 網(wǎng)絡(luò)模型,將水尺區(qū)域圖像通過雙線性插值resize 到768×384 尺寸,輸入到網(wǎng)絡(luò)模型中得到目標檢測結(jié)果如圖7 所示。
圖7 目標檢測結(jié)果
(2)水尺刻度檢測
本文完整水尺檢測算法分為兩部分,第一部分長度通過RulerYolo 檢測特殊字符“?”和“ヨ”獲取,第二部分長度通過SegNet 語義分割獲取的水岸線位置和RulerYolo 獲取特殊字符最低位置距離來估算不完整字符的長度,水岸線可以通過Canny 邊緣檢測算子提取,水岸線位置坐標通過Canny 邊緣算子獲取的邊緣輪廓像素取均值得到,具體計算如公式(5)、(6)、(7)所示。
式(5)中d 為水面之上水尺總刻度,d1為RulerY?olo 測得完整特殊字符的刻度和,d2為不完整字符的長度。式(6)中5 表示為一個“?”和“ヨ”字符刻度為5 cm,n為字符個數(shù)。式(7)中round為取整,eiy和eih分別為第i個框的左上角縱坐標和高,w為水岸線。計算出總刻度之后,除以水尺總刻度,乘水尺實際長度即可得水岸之上的長度,最后得到水位值。各參數(shù)在圖中具體表示如圖8 所示。
圖8 水尺刻度檢測標注
本文樣本數(shù)據(jù)集通過互聯(lián)網(wǎng)爬取、成都河長制水利攝像頭獲取、四川大學(xué)附近人工河拍攝得到,由于網(wǎng)上水尺圖片樣本較少和人工拍攝的樣本比較單一,通過對圖片進行裁剪、旋轉(zhuǎn)、加噪、亮度、對比度等操作進行樣本擴充??偣?112 張圖像,隨機抽取1689 張作為訓(xùn)練集,423 張圖像作為驗證集。首先使用labelme對樣本圖進行人工標注,分為水域、水尺、水岸3 個區(qū)域,把水域標注為紅色,水尺標注為綠色,水岸等其他背景標注為黑色,通過腳本文件把JSON 格式文件轉(zhuǎn)換出人工分割圖作為真實分割效果,然后由人工分割圖制作全黑的mask 圖像作為圖像模型分割訓(xùn)練。
本文實驗環(huán)境為PyTorch1.4.0、Cuda9.0、Python3.6、Ubuntu18.04.4LTS;處理器為Intel Core i5-7400,CPU頻率為3.0 GHz;內(nèi)存8 Gb;GPU 顯卡為NVIDIA GTX 1080TI,顯存11 Gb。
實驗測試包括圖片和視頻,選取圖片測試集分辨率大小不一,從不同的水位高度、不同的水尺傾斜角度、不同遠近距離、水面清晰度等選取的100 張測試圖片,水尺種類為紅色和藍色兩種水尺,總長為1m,最小刻度為1cm。視頻是通過成都河長制水利系統(tǒng)部署的攝像頭獲取的,因?qū)嶋H環(huán)境,攝像機捕捉的視頻有輕微抖動,也更正符合水利監(jiān)控的實際場景,對紅藍兩種水尺場景進行測試,視頻通過FFMpeg 進行解碼,分別率為1920×1080、幀率為30。水位檢測實驗結(jié)果如表1所示,水位檢測部分結(jié)果圖如圖9 所示。
從表1、圖9 可以看出,本文算法測試大部分圖結(jié)果誤差在0 cm 到3 cm 之間,準確率達到了95%,對不可控的環(huán)境因素有較強的適應(yīng)性,基本能滿足實際水利監(jiān)控的要求,對水利監(jiān)控系統(tǒng)有一定的幫助。
表1 實驗結(jié)果
圖9 實驗結(jié)果圖
本文基于深度學(xué)習(xí)網(wǎng)絡(luò)提出的水尺檢測算法,能準確測出水尺刻度,計算當(dāng)前水位值,并且有較強的環(huán)境適應(yīng)力,對于不同水域環(huán)境如:水庫、河流等場景都能很好適應(yīng),對于不同光照、霧天、攝像機輕微抖動等不可控因素有一定適應(yīng)性。實現(xiàn)了對水域水位線實時監(jiān)控,極大減少了人工監(jiān)控成本,為水利智能化監(jiān)控提供新的方法。本文提出改進SegNet、YOLOv3 網(wǎng)絡(luò)還可以推廣到其他目標的分割和檢測,諸如:人入侵、車輛、水面漂浮物等場景,有較強的應(yīng)用性。