去雨系列論文筆記

論文:Restoring An Image Taken Through a Window Covered with Dirt or Rain
首頁:https://cs.nyu.edu/~deigen/rain/python

傅雪陽首頁:https://xueyangfu.github.io/
廈門大學智能數據分析與處理實驗室:
https://xmu-smartdsp.github.io/git

1. Restoring an image (ICCV 2013)

在咱們拍攝照片的時候會遇到透過玻璃拍攝的場景,如窗戶、車窗,或者透過玻璃自拍等,而玻璃上的污漬會影響照片的效果,這篇論文針對這類透過玻璃拍攝的照片,進行污跡或者雨漬的去除。github

CNN結構同LeNet,函數表示:微信

$x$ 表示$N × M × 3$的RGB輸入圖像,激活函數使用tanh,第一個卷積層使用「valid」填充,卷積核大小爲16X16(果真年代久遠,還有偶數的大卷積核);最後一層使用「full」填充,卷積核大小爲8;中間使用$1*1$的卷積,通道數爲512,共兩個中間層(L=3)。因此:W1 :16X6X3X512,W2:1X1X512X512,W3:8X8X512X512。網絡

損失函數採用輸入標籤和網絡輸出的MSE:ide

輸入爲64X64大小的圖像塊,輸出大小爲56X56,作MSE時,和GT中間56X56對應像素相減。採用隨機梯度降低(SGD)更新可訓練參數:函數

$\eta$爲學習率,參數初始化使用均值爲0,方差爲0.001的正態分佈,偏置b初始化爲0,學習率衰減因子:0.001,不使用動量和權重正則化。性能

測試環境:Matlab + Nvidia GTX 580;耗時:3888 × 2592 彩色圖像60s,1280 × 720彩色圖像7s。學習

2. Clearing the Skies (TIP 2017)

論文主要借鑑上一篇文章的網絡結構,設計了一個改進的單圖像去雨CNN結構,主要改進點:測試

  • CNN映射有雨圖和去雨圖的細節層,而不是直接在原圖創建映射關係。
  • 未將網絡結構複雜化,而是經過雨滴先驗知識進行圖像預處理,改變了優化的目標函數。
網絡結構

CNN結構函數表示:

做者把雨滴視爲圖像高頻部分,經過低通濾波(引導濾波、雙邊濾波或者滾動濾波)將有雨圖I和其無雨圖標籤J分別分爲基礎層和細節層:

基礎層爲平滑後的圖像,有:$I_{base} ≈ J_{base}$,因此只須要創建兩個細節層的映射關係便可,損失函數由原來預測圖與標籤圖的MSE變爲了:

訓練時,參數設置同第一篇論文一致,輸入64X64圖像塊,輸出56X56大小圖像,

圖像加強處理

網絡訓練完成後,去雨結果圖像能夠直接經過如下運算獲得:

可是在雨比較大的狀況下,會出現霧的狀況,影響視覺效果,因此對基礎層和輸出的細節層作了圖像加強:

3. deep detail network (CVPR 2017)

論文在上一篇的基礎上進行了進一步優化,設計了一個改進的單圖像去雨CNN結構,主要改進點:

  • 創建真實圖像和雨圖之間的負殘差映射,再次縮小映射範圍,優化映射空間。
  • 使用殘差結構,可使用更深的網絡創建映射關係,並經過先驗知識,輸入圖像細節層。

CNN結構函數表示:

其中,

L爲CNN總層數,*表示卷積操做,BN表示batch normalization,$\sigma$表示激活函數ReLU,不使用池化操做。

利用引導濾波將雨跡圖劃分爲細節層和基礎層(同上一篇),

損失函數:

參數設置:層數L=26,優化器:SGD,權重衰減因子$10^{-10}$,動量0.9,batch size:20,初始學習率:0.1,迭代100K/200K時除以10,共迭代210K次,卷積核大小爲3,個數爲16。

4. Residual-Guide Network (ACM MM 2018)

一樣採用負殘差映射的思想設計了一個CNN單圖像去雨網絡ResGuideNet,主要貢獻點:

  • 經過由淺入深的Block結構,獲取由粗到細獲取負殘差輸出。
  • 經過聯合損失優化每一個Block輸出,根據集成學習的思想融合全部負殘差輸出。

CNN結構函數形式:

特徵複用:經過密集鏈接複用每個Block輸出的負殘差特徵。

循環計算:如結構圖左下角左下角所示,爲平衡模型參數和性能,每一個Block內部的兩個卷積層採用循環計算的策略加深Block深度,函數表示:

爲了不結構加深帶來的梯度消失的問題,將Block第一個 Conv+LReLU的輸出加到每一個子循環中:

塊間融合:如結構圖右下角所示:經過集成學習的思想將不一樣Block的預測結果concatenate在一塊兒,最後經過1X1卷積獲得最後的結果。

損失函數:對於每個Block,採用$L_2$+SSIM loss 損失函數:

M個Block和最後merge輸出的總損失:

實驗細節:環境:python + TensorFlow、NVIDIA GeForce GTX 1080(8GB),初始化:Xavier,優化器:RMSProp,初始學習率: 0.001,batch size:16,迭代次數:50000,每層卷積爲:16個3X3,輸出層卷積,3個1X 1。

5. Lightweight Pyramid Networks (T-NNLS 2019)

爲了使去雨網絡更輕量化,使其適用於移動設備,做者提出了輕量級的金字塔去雨網絡LPNet,參數量少於8K,主要貢獻:

  • 將傳統的高斯-拉普拉斯金字塔運用到CNN中,使用一個參數量少的小網絡可實現很好的結果。
  • 結合多尺度、循環計算和殘差學習技術,在大雨場景下,也能很好地實現單圖像去雨。

CNN結構函數形式:

a、構建拉普拉斯金字塔

b、特徵提取網絡

c、循環模塊

d、重建高斯金字塔

做者以前提出方法(方案2、方法三)經過引導濾波將圖像分解成基礎層和細節層,運用細節層訓練能夠有效減少優化空間,可是引導濾波針對雨量比較厚的圖像達不到很好的細節提取效果。因而,做者使用拉普拉斯金字塔將圖像分解爲不一樣尺度的圖像金字塔,最後融合不一樣尺度圖片的處理結果。

損失函數:

實驗細節

5個尺度的拉普拉斯金字塔:[0.0625, 0.25, 0.375, 0.25, 0.0625]爲構建高斯金字塔的固定平滑核。

全部子網絡結構相同,卷積核個數不一樣,$W^{0,1,3,4}$卷積核大小爲3x3,W^2卷積核大小爲1,每一個子網絡循環block次數T = 5,激活函數LReLUs,參數爲:0.2。

使用生成的雨圖,包含大雨圖像和小雨圖像,輸入大小$80 × 80$ 圖像塊,Adam優化器,batch size爲10,學習率:0.001,epoch爲3。

想了解更多,請關注微信公衆號:AI搞事情

相關文章
相關標籤/搜索