丁宇陽,李明悅,謝檸宇,劉 淵,晏 濤
江南大學 人工智能與計算機學院,江蘇 無錫214122
雨天能見度降低,高密度的雨水還會使光線發(fā)生漫反射,在遠處呈現霧狀,給自動駕駛、交通監(jiān)控等基于目標識別的實際應用產生了極大的影響,降低了目標檢測的準確性。
圖像去雨一直是計算機視覺領域的熱門研究課題[1],伴隨著全天候自動駕駛等人工智能技術的發(fā)展顯得愈發(fā)重要。在相機鏡頭中,近處的雨滴通常會發(fā)生光的折射而使場景變形,遠處的雨條紋看起來像薄霧,會導致場景模糊和泛白[2-4]。單張圖像去雨算法只能通過背景的顏色信息來修復被遮擋區(qū)域,在存在大面積雨條紋遮擋時,無法有效地修復圖像細節(jié)。同時,由于單張圖像很難獲取準確的深度信息,在修復帶有霧氣的遠景時,不能準確分離出前景與背景,從而導致顏色的錯誤修復。
光場相機作為一種新興的成像傳感器,能夠記錄三維場景豐富的結構和紋理信息,使光場圖像在去雨工作中有以下優(yōu)勢:(1)在3D EPI(Epipolar Plane Image)中,近景雨條紋的斜率與遠景雨條紋的斜率有很大差異,相比于傳統2D圖像更能更加準確地提取出雨條紋。(2)在面臨大面積雨條紋遮擋時,可以利用相鄰子視點未被遮擋的部分來有效地修復圖像。(3)相比于單張圖,可以更正確地提取深度信息,有助于去除遠景的雨霧。
本文提出了一種基于雙LSTM神經網絡的光場去雨算法,包含三個步驟,如圖1所示。第一步,使用匹配成本量方法計算場景深度圖;將深度圖與輸入雨圖連接,作為后續(xù)網絡的輸入。第二步,使用RSDNet提取雨條紋,再將雨水蒙版連接到雨圖,輸入BRNet。第三步,使用BRNet來修復背景得到無雨圖。其中應用的LSTM結構將RSDNet中間有用的特征傳遞給BRNet。
圖1 本文算法總覽Fig.1 Overview of proposed method
本文使用Blender來渲染近景的雨條紋和遠景的霧氣,并利用斯坦福的真實光場數據集來合成真實世界的光場有雨圖像,用于訓練和評估提出的網絡架構。
本文的貢獻歸納為以下幾個方面:
(1)針對光場圖像,提出了一種基于深度學習的光場圖像去雨算法,該算法可以提取雨條紋并修復光場圖像得到無雨圖。
(2)提出了一種雙LSTM結構,將RSDNet丟失的部分中間信息傳遞到BRNet,保留雨條紋的高頻信息。
(3)構建了一個使用真實場景光場圖像合成的光場有雨圖像數據集,有利于后續(xù)研究人員對光場圖像去雨的研究。
傳統算法通常利用優(yōu)化模型或機器學習方法來探索雨紋的物理特征。利用雨條紋圖像特征等先驗信息,對單張圖像中的雨和背景進行信號分離。但是,當圖像包含大量雨條紋時,這些方法無法獲得高質量的無雨圖像。
Garg和Nayar[2-3]提出了一個雨的視覺綜合模型,該模型可以捕獲雨的動力學特性,并且構建了基于物理學的運動模糊模型來解釋雨的光學特性,最終提出了一種視頻雨水檢測與去除算法。但是,該方法并不能穩(wěn)定地清除雨條紋。Yu等人[5]將去雨問題公式化為圖像分層問題,即雨條紋層疊加在背景層上。他們使用基于兩個高斯混合模型(GMM)的分段平滑先驗算法,用于對背景和雨條紋圖層進行建模。使用半二次方分裂[6]技術來解決非凸問題,以產生無雨圖像和雨條紋圖像。Luo等人[7]提出了一種非線性復合模型來模擬雨天圖像。他們使用一種基于字典學習的稀疏編碼算法,以準確分離雨條紋和無雨層。Kang等人[8]使用基于形態(tài)成分的分析方法,將除雨公式化為圖像分解問題。該方法首先使用雙邊濾波器[9]將雨圖像分解為低頻和高頻部分,然后利用字典學習和稀疏編碼,根據雨條紋的特點,只針對高頻部分來處理,將高頻部分分解為雨條紋部分和背景部分,最后與低頻部分相加得到無雨圖。Chen等人[10]提出了一種低秩的降雨模型,并將其從矩陣推廣到張量,以捕獲降雨條紋之間的時空相關性。該方法將輸入分解為雨條紋部分,無雨背景部分和成像噪聲部分。Li等人[11]把雨圖像進行分層,并分別對兩層梯度進行正則化,使其中一層具有長尾分布,而另一層具有短尾分布,通過迭代來解決正則化問題。
隨著深度學習算法和相關硬件技術的發(fā)展,基于深度學習的除雨方法在過去幾年中取得了重大進展,已成為當今研究的主流趨勢。
Fu等人[12]提出了DerainNet的神經網絡來完成除雨。該方法首先通過濾波器將輸入的雨圖像分為低頻的基礎圖和高頻的細節(jié)圖,根據雨條紋主要在高頻的特點,只訓練高頻圖來得到無雨的高頻細節(jié)圖,最后和基礎層相加得到最終的無雨圖像。但是,該方法很難完全去除雨條紋。Qian等人[13]提出了一種從單張圖像去除雨滴的注意力機制生成對抗網絡。生成器網絡借助注意力機制來更多的關注雨滴區(qū)域及其周圍環(huán)境,判別網絡則用于判別恢復的無雨區(qū)域的局部一致性。Hu等人[4]分析了景深對降雨圖像的影響,建立了一個帶有雨條紋和霧的成像模型。他們提出了一個深度引導的注意力機制的神經網絡,來生成預測的無雨圖像。然而,從單張雨圖像中估計出的深度圖是往往是不準確,嚴重影響了隨后除雨算法的效果。Li等人[14]提出了一種NL(Non-Local[15])增強的網絡[16]框架。其網絡由殘差模塊和NL模塊組成,殘差模塊用來獲取局部信息,NL模塊用來獲得全局信息。
Ren等人[17]提出了一個遞歸網絡來解決多階段的除雨問題。他們在每一層均部署了ResNet,利用跨階段深層特征的相關性,形成漸進式遞歸網絡(PReNet)。Yang等人[18]提出了一種新的降雨圖像模型,包括一個降雨條紋累積層和多個降雨條紋層?;谠撃P?,他們提出了一種迭代的雨水檢測和清除網絡來逐步清除積累的雨條紋。在每次迭代中,使用多流擴張卷積模型,以不同的感受野來獲得二元雨條紋圖、雨條紋外觀圖和無雨圖。Zhang等人[19]提出了一種密度感知的多流網絡,該方法不僅可以除雨,還可以估計雨水的密度,從而根據不同密度來更好地完成除雨任務。他們所提出的體系結構包括兩個部分,一是雨密度分類網絡,用于確定給定雨圖像的密度水平,二個是多流密集卷積的除雨網絡,用于利用估計的雨量密度信息來完成除雨工作。
Wang等人[20]提出了一種結合了時間先驗和人工監(jiān)督的半監(jiān)督方法。為了更好地模擬實際雨條紋的隨機分布,他們提出了一種空間關注網絡(SPANet),該網絡以局部到全局的方式消除雨條紋。Jiang等人[21]提出了一種多尺度漸進融合網絡(MSPFN),利用多尺度降雨信息來協同模擬降雨條紋。Ren等人[22]提出了一種單遞歸網絡(SRN)進行圖像去雨,兩次遞歸網絡可以通過LSTM進行多階段傳播。另外,該方法還提出了雙遞歸網絡(BRN)來傳遞雨條紋和背景圖像之間的信息。
視頻除雨方法也有大量的研究成果,Garg和Nayar[2-3]提出了視頻雨水建模的開創(chuàng)性工作。最近有研究人員利用視頻幀序列中的空間和時間冗余信息來進行除雨[23-26]。
Li等人[23]提出了一種多尺度卷積稀疏編碼(MS-CSC)模型來去除視頻中的雨條紋。該方法使用卷積操作在稀疏特征圖上提取視頻中雨條紋的特征,然后利用多尺度濾波器來去除不同位置的雨條紋。Liu等人[24]提出了一個循環(huán)除雨和背景重建的神經網絡,它結合了基于空間紋理特征的除雨和基于時間相干性的背景細節(jié)重建。Yang等人[25]提出了一個兩級遞歸網絡,該網絡逆向恢復了視頻雨水合成的過程。Yang等人[26]提出了一種基于時間相關性和一致性的兩階段自學習網絡來去除雨條紋。
視頻中不同幀之間的雨條紋位置不相關,相比之下,光場圖像的不同子視點圖中的雨條紋位置具有高度相關性。同時,光場圖像中也不能利用時間信息。因此,光場圖像去雨與視頻去雨有很大不同。
綜上,單張圖像和視頻的除雨算法均有很多的研究成果,然而在光場圖像中的去雨算法卻鮮有研究。當單張圖像包含大量雨條紋時,這些方法均無法獲得高質量的無雨圖像,也難以正確處理遠景的顏色和紋理恢復問題。因為光場圖像記錄了三維場景豐富的顏色、紋理和結構信息,所以不論在雨條紋檢測和無雨圖修復中,均可以展現出更好的性能。
本文算法主要包含以下三個步驟:
(1)使用基于匹配成本量的方法計算輸入光場圖像的深度圖。
(2)把帶雨的光場圖結合上一步得到的深度圖作為輸入,使用3D殘差雨條紋檢測網絡RSDNet來提取雨條紋圖。
(3)把帶雨的光場圖結合上一步得到的雨條紋圖和第一步得到的深度圖作為輸入,使用3D U型背景修復網絡BRNet進行無雨光場圖像恢復。
采用匹配成本量最小化的方法[27]計算輸入光場圖像的子視點視差圖。該方法將光場單一子視點作為目標視點,目標視點的視差值可由匹配成本量計算得出。使用該方法來分別迭代計算作為本文所提算法輸入數據的3D EPI中每個子視點的視差圖。
匹配成本量是待計算視差的圖像對的差分的集合。匹配成本量一共有dn層,每層對應一個視差。每一層的成本,是按該層對應視差d整體平移后的圖像Id與原圖像I的差異。因此,固定像素(x,y),可在成本量C中得到C(x,y)是一個向量,代表該像素的視差取值取[d0,dn]范圍內的某個離散值的成本,更低的成本值對應的視差更接近正確結果。
匹配成本根據相位平移定理計算得到。根據圖像傅里葉變換的平移性質,圖像I與平移后圖像Iω存在如下關系:
其中,F是傅里葉變換算子。位于(s0,t0)視點I按一系列視差標簽d平移至目標視點(s,t):
平移后圖像與原圖像的差異定義為匹配成本量C,具體描述如下:
其中,(s,t)代表光場視點坐標。該方法更多細節(jié)可參考文獻[27]。
本文的雙LSTM結構如圖2所示,標準LSTM[28]由遺忘門f、輸入門i、輸出門ο和隱藏狀態(tài)h組成。在算法[29]中提出了Bilateral LSTMs結構,通過循環(huán)網絡,使其雨條紋信息與背景信息相互作用,從而達到更好的背景層恢復效果。由于光場圖像相比于單張圖像參數量劇增,為防止內存占用過高,本文所提算法中將該結構改為單向作用,實現隱藏層的跨階段傳播。
圖2 雙LSTM結構Fig.2 Dual LSTM structure
雨條紋提取網絡中LSTM結構可以表示為:
其中,?表示3D卷積,σ表示Sigmoid激活函數,f(?)表示輸入卷積層,x為輸入,d為深度圖,W和b是對應的卷積矩陣和偏置向量。
雨條紋恢復網絡中LSTM結構可以表示為:
其中,r和h分別為雨條紋提取網絡的生成雨條紋蒙版及隱藏層。
本文提出的RSDNet結構如圖3所示,在得到了每個光場圖像的深度圖之后,把得到的深度圖分別串聯在有雨水光場3D EPI之后,作為雨條紋提取網絡的輸入。本文提出的雨條紋提取網絡總共使用12個3D卷積殘差塊,每一層由兩個卷積核為3×3×3大小的3D卷積層組成,每個卷積層后接一個ReLU激活函數,再接一個BN(Batch Normalization)層組成,BN層的結果作為下一層殘差塊的輸入。最后一層使用Sigmoid為激活函數,來提取出雨條紋蒙版。生成的雨條紋蒙版是一個0到1的單通道3D數據,越接近1代表雨條紋越明顯,越接近0代表雨條紋越淡,越趨向于背景。
圖3 本文的網絡結構圖Fig.3 Proposed network structure
在網絡第二層使用LSTM結構來傳遞部分雨條紋信息給BRNet,本文提出的LSTM結構如圖3。由于隨著網絡的加深,雨條紋的部分特征會丟失,這樣會導致部分高頻信息的缺失,最后導致雨條紋難以完全去除。而使用LSTM結構可以把第一個3D殘差網絡提取的部分雨條紋信息通過篩選給予第二個網絡,彌補了雨條紋提取網絡的不足。本文提出的RSDNet的損失,定義如下:
其中,Lossr表示雨條紋損失,Rgt表示雨條紋的真值,Rgen表示生成的雨條紋。
本文的BRNet網絡結構如圖3所示,以多雨的3D EPI,結合第一步生成的深度圖和第二部分生成的雨條紋圖作為輸入,給予網絡場景深度和雨條紋位置及大小的先驗信息,以便網絡可以同時處理近景的雨條紋和遠景的霧氣效果。每個卷積層的卷積核大小為3×3×3,選擇ReLU作為激活函數。每個卷積層之后添加BN層,以避免梯度消失。編碼器通道的數量設置為64到1 024。解碼器部分與編碼器部分對稱,并且相應的層通過跳級連接進行連接,以減少高頻信息的缺失。最后一層使用Sigmoid為激活函數,輸出無雨的3D EPI。
在網絡第二層使用LSTM結構來接收RSDNet提取出來的部分雨條紋信息,這部分信息將會用于增強編碼層的信息傳遞,同時傳遞到解碼層來增強細節(jié)區(qū)域雨條紋的去除。這對于恢復無雨圖有著重要意義。
本文提出的BRNet的損失Lossb被定義為:
其中,Lossb表示為總的無雨圖損失LossL2表示L2損失,Lossper表示感知損失,Lossstyle表示風格損失,參數λ1,λ2和λ3依照經驗被設置為0.1、10和10。
LossL2被定義為:
其中,Bgen表示生成的無雨圖結果,Bgt表示無雨圖像的真值。本文使用預訓練的VGG-16網絡對生成的結果和真值進行特征提取。并選擇pool1、pool2和pool3網絡層來計算特征圖的損失。
感知損失Lossper定義如下:
其中,ψgen和ψgt分別表示生成結果和圖像真值對應的VGG網絡所提取的第P層特征圖,N表示特征圖的總層數,在本次實驗中為3。
風格損失Lossstyle定義如下:
其中,G代表Gram矩陣,用來計算特征圖的自相關性。
因為目前不存在公開的帶雨的光場圖像數據集,也為了在復雜場景上驗證本文所提算法的有效性,專門制作了一個帶雨的光場圖像數據集。將雨條紋疊加到現實世界的光場圖像上,以生成更有真實感的帶雨光場圖。具體而言,首先從斯坦福大學的公共數據集中獲取真實場景的數據,使用基于匹配成本量的方法獲得光場數據的深度圖。然后使用Blender軟件渲染了多個具有不同方向的9×9光場雨條紋數據集。最后,將虛擬雨條紋數據和視差圖按比例合成的數據添加到原始光場數據中,如圖4所示。
圖4 本文模擬現實世界的有雨LFI的生成過程Fig.4 Proposed real-world-like rainy LFI generation procedure
該方法具有兩個優(yōu)點。第一,真實場景光場圖像比建模的光場圖像更接近真實場景。第二,合成雨帶也具有豐富的三維信息,更有利于網絡的訓練。本文使用了120組光場數據,其中80組光場圖像用來訓練,30組光場圖像用來評估模型,10組光場圖像用來測試。合成低頻雨圖像的公式如下:
其中,F是霧的圖像,D是深度圖,其已標準化為[0,1],R是雨條紋的圖像,R?是帶有霧的合成雨條紋圖像,B是無雨圖,即背景圖,α和β是常數參數,分別設置為0.3和0.6。本文在Titan X GPU上進行網絡的訓練,訓練次數為500,初始學習率設為0.000 2。
將本文的方法與基于經典優(yōu)化算法的除雨方法[11]和基于深度學習的方法[12-13,20-21]在單張2D圖像進行了定量比較。為了實驗更加合理公正,使用制作的光場數據集的單張子視點圖像作為基于深度學習方法[11-12,20-21]的訓練集,按照各個文獻原來既定的參數進行訓練,均在評估數據的平均指標達到最優(yōu)時保存模型。同時,還添加了兩組基于視頻的除雨算法[23-24]的對比實驗,由于本文的訓練數據和視頻不同,所以使用其訓練好的模型進行測試。在光場圖像9×9的中心子視點上,采用了兩個典型的度量標準,即峰值信噪比(PSNR)和結構相似性(SSIM),以比較本文的方法與其他方法的性能。如圖5~10所示,(a)~(h)分別是輸入圖像、Li[11]、Fu[12]、Qian[13]、Wang[20]、Jiang[21]、本文算法的實驗結果,以及真值圖像,同時分別標注了PSNR/SSIM指標。實驗結果表明,基于深度學習的除雨方法[12-13,20-21]在大多數場景中優(yōu)于基于傳統優(yōu)化算法方法,而基于視頻的除雨算法[23-24]在評測指標上的表現并不理想。本文實驗結果的PSNR和SSIM值均高于其他方法,特別是在具有復雜結構的小場景中,如圖9和10所示,本文的算法可以和其他算法拉開較大的差距。對于霧氣效果明顯的大型場景,如圖6、7和8所示,本文也具備一定優(yōu)勢。而對于一些結構簡單,景深較淺,霧氣效果不是很明顯的場景,如圖5所示,Wang[20]和Jiang[21]等人的算法也有良好的表現,本文算法無法與他們的算法拉開較大差距,但數值仍然是最優(yōu)的。
圖5 場景1圖像去雨效果實驗對比(PSNR/SSIM)Fig.5 Rain streaks removal in Scene 1
圖6 場景2圖像去雨效果實驗對比(PSNR/SSIM)Fig.6 Rain streaks removal in Scene 2
定性分析表明。Li的方法[11]可以很好地去除一些細雨條紋,但是它既不能成功去除近景較大的雨條紋,也不能除去遠景的霧氣效果,并且在圖像的細節(jié)中引入了模糊,如圖7~10所示?;谏疃葘W習的方法[12-13,20-21]在大多數情況下效果良好,但它們仍然存在一些缺陷。Fu的方法[12]在可以處理掉大多數細雨條紋,但是面對近景比較大的雨條紋,仍然會留下明顯的痕跡,如圖5~7所示。同時,如圖9和圖10所示,它無法去除圖像中遠景的霧氣效果。其原因可能是該方法采用了濾波器將輸入圖像分為高頻層和低頻層,而只把高頻層通過神經網絡進行了處理,沒有處理包含大的雨條紋和霧氣的低頻層。
圖7 場景3圖像去雨效果實驗對比(PSNR/SSIM)Fig.7 Rain streaks removal in Scene 3
圖8 場景4圖像去雨效果實驗對比(PSNR/SSIM)Fig.8 Rain streaks removal in Scene 4
圖9 場景5圖像去雨效果實驗對比(PSNR/SSIM)Fig.9 Rain streaks removal in Scene 5
圖10 場景6圖像去雨效果實驗對比(PSNR/SSIM)Fig.10 Rain streaks removal in Scene 6
Qian的方法[13]可以除去大部分雨條紋。然而,它仍然不能非常有效地消除大的雨條紋,如圖9和10所示。原因可能是該方法專門設計用于去除雨滴,因此對于去除雨水條紋效果不佳。同時該方法可以去除部分遠景的霧氣效果,但是會給圖片整體引入模糊和黑影,這可能是因為其第一層網絡結構中感知圖預測不是很準確導致的。
Wang[20]和Jiang方法[21]的結果也有著類似的問題,即只能處理細小的雨條紋,而面對近景大的雨條紋卻表現不佳,如圖7~9。這可能是因為面對大面積遮擋時,單張圖只能借助周圍像素的信息來修復被遮擋區(qū)域,這會導致修復錯誤或者難以修復。同時未能合理利用深度信息,導致遠處的雨霧也并不能很好地去除。
視頻除雨算法也存在類似問題,如圖11所示。Li的方法[23]只能去除少量雨條紋,而Liu的方法[24]可以去除掉大部分雨條紋,但是在面對遠景雨霧基本沒有效果,可能是該方法并沒有把遠處雨水的特點做充分考慮。
圖11 與視頻去雨效果實驗對比(PSNR/SSIM)Fig.11 Comparison with rain removal on video sequence
圖13 真實場景2圖像去雨效果實驗對比Fig.13 Rain streaks removal in real Scene 2
圖14 真實場景2圖像去雨效果實驗對比Fig.14 Rain streaks removal in real Scene 3
本文提出的方法采用3D EPI作為輸入,以檢測雨條紋并恢復被雨條紋覆蓋的遮擋區(qū)域。通過利用3D EPI中的大量紋理和結構信息,可以更準確檢測雨條紋并更好地恢復背景。實驗表明,本文方法可以比任何其他方法更正確地保留和恢復LFI的紋理細節(jié),也可以有效去除遠景霧氣效果,如圖10中紅色/綠色框中突出顯示的區(qū)域所示。因此,本文算法的性能總是比其他方法[11-13,20-21]更好。本文在真實多雨光場數據集上進行了測試,如圖12~14所示,本文的結果均好于其他方法,證明了本文算法的實用性。本文得到的深度圖和雨條紋圖部分結果如圖15,表明提出的方法可以準確且有效地提取雨條紋。另外,由于輸入的3D EPI維度高于普通2D圖像,本文方法的內存成本和計算成本高于其他所有方法。
圖12 真實場景1圖像去雨效果實驗對比Fig.12 Rain streaks removal in real Scene 1
圖15 本文得到的深度圖和雨條紋圖部分結果Fig.15 Depth maps and rain streak images for proposed method
提出一種基于結合深度信息的神經網絡的光場圖像去雨算法,利用光場圖像豐富的三維信息來有效去除雨條紋,得到高質量的無雨圖。并且使用真實光場圖像構建了一個帶雨光場圖像數據集,用于訓練和評估提出的算法。算法首先使用匹配成本量方法計算光場圖像的深度圖,之后結合3D EPI輸入到RSDNet,利用3D殘差網絡提取每個子視點的雨條紋蒙版,最后把雨條紋蒙版與3D EPI連接后傳入BRNet,利用3DU型網絡進行背景修復。本文的算法充分利用3D EPI的紋理和結構信息來檢測和消除圖像中的雨條紋,并提出了一種有效的雙LSTM結構,保留網絡中有用的中間信息,避免了雨條紋高頻信息的丟失。實驗結果表明,本文的方法能夠更準確地提取近景的雨條紋,對于遠景霧氣的去除也有良好的表現,優(yōu)于最新的2D圖像去雨方法和視頻去雨方法。