論文原文:https://arxiv.org/pdf/1608.03981.pdf
一、簡介
老實說,這篇論文后半部分不太值得細讀,大量內容都是討論實驗,寫的比較啰嗦。啟發性的內容較少,看完后只知道你的模型效果好,但不太知道為什么好。
文章重點:
-
強調了residual learning(殘差學習)和batch normalization(批量標准化)在圖像復原中相輔相成的作用,可以在較深的網絡的條件下,依然能帶來快的收斂和好的性能。
-
文章提出DnCNN,在高斯去噪問題下,用單模型應對不同程度的高斯噪音;甚至可以用單模型應對高斯去噪、超分辨率、JPEG去鎖三個領域的問題。
二、DnCNN網絡模型

網絡結構:
第一部分:Conv(3 * 3 * c * 64)+ReLu (c代表圖片通道數)
第二部分:Conv(3 * 3 * 64 * 64)+BN(batch normalization)+ReLu
第三部分:Conv(3 * 3 * 64)
每一層都zero padding,使得每一層的輸入、輸出尺寸保持一致。以此防止產生人工邊界(boundary artifacts)。第二部分每一層在卷積與reLU之間都加了批量標准化(batch normalization、BN)。
深度架構:給定深度為D的DnCNN,由三種類型的層,展示在圖1中有三種不同的顏色。(i) Conv+ReLU:對於第一層,使用64個大小為的濾波器被用於生成64個特征圖。然后將整流的線性單元
用於非線性。這里的c代表着圖像的通道數,即c=1時為灰色圖像,c=3時為彩色圖像。(ii) Conv+BN+ReLU:對應於層
,使用64個大小
的過濾器,並且將批量歸一化加在卷積和ReLU之間。(iii) Conv:對應於最后一層,c個大小為
的濾波器被用於重建輸出。
總之,我們的DnCNN模型有兩個主要的特征:采用殘差學習公式來學習R(y),並結合批量歸一化來加速訓練以及提高去噪性能。通過將卷積和ReLU結合,DnCNN可以通過隱藏層逐漸將圖像結構與在噪聲觀察分開。這種機制類似於EPLL和WNNM等方法中采用的迭代噪聲消除策略,但我們的DnCNN以端到端的方式進行訓練。
2.1.殘差學習residual learning
DnCNN結合了ResNet的residual learning,關於ResNet的知識總結,見我另一篇文章:https://www.jianshu.com/p/11f1a979b384
不同的是DnCNN並非每隔兩層就加一個shortcut connection,而是將網絡的輸出直接改成residual image(殘差圖片),設純凈圖片為x,帶噪音圖片為y,假設y=x+v,則v是殘差圖片。即DnCNN的優化目標不是真實圖片與網絡輸出之間的MSE(均方誤差),而是真實殘差圖片與網絡輸出之間的MSE。
根據ResNet中的理論,當殘差為0時,堆積層之間等價於恆等映射,而恆等映射是非常容易訓練優化的。作者注意到在圖像復原領域(尤其是在噪音程度較小的情況下),噪音圖片與純凈圖片的殘差非常小,所以理論上殘差學習非常適合運用到圖像復原上。
通俗講,這樣的網絡設計就是在隱層中將真實的圖片x從原噪音圖y中消去。作者注意到:在超分領域,低分辨率圖片就是高分辨率圖片的雙三次上采樣操作形成的,故超分領域的殘差圖片和去高斯噪聲領域的殘差圖片是等價的,同理還有JPEG解鎖領域的殘差圖片。也么一來,用一個模型應對三種問題便有了可能性,最終實驗證明確實有效。
2.2.批量標准化batch normalization
SGD(隨機梯度下降法)廣泛應用於CNN的訓練方法中,但是訓練的性能卻很大程度受內部協變量移位這一問題所影響。BN就是在每一層的非線性處理之前加入標准化、縮放、移位操作來減輕內部協變量的移位。可以給訓練帶來更快的速度,更好的表現,使網絡對初始化變量的影響沒有那么大。
內部協變量移位(internal covariate shift):深層神經網絡在做非線性變換前的激活輸入值,隨着網絡深度加深或者在訓練過程中,其分布逐漸發生偏移或者變動,之所以訓練收斂慢,一般是整體分布逐漸往非線性函數的取值區間的上下限兩端靠近(對於Sigmoid函數來說,意味着激活輸入值WU+B是大的負值或正值),所以這導致反向傳播時低層神經網絡的梯度消失,這是訓練深層神經網絡收斂越來越慢的本質原因。
批量標准化(batch normalization):就是通過一定的規范化手段,把每層神經網絡任意神經元這個輸入值的分布強行拉回到均值為0方差為1的標准正態分布,即把越來越偏的分布強制拉回比較標准的分布,這樣使得激活輸入值落在非線性函數對輸入比較敏感的區域,所以輸入的小變化才就會導致損失函數有較大的變化,意思就是讓梯度變大,避免梯度消失問題產生,而且梯度變大意味着學習收斂速度快,能大大加快訓練速度。
2.3.網絡深度network depth
作者參考《Very deep convolutional networks for large-scale image recognition》的標准,將DnCNN的卷積核大小設置為3 * 3,並且去掉了所有的池化層。
感受野:是卷積神經網絡中某一層輸出的特征圖對到網絡輸入圖像中映射的區域的大小。

感受野計算時有下面的幾個情況需要說明:
- 第一層卷積層的輸出特征圖像素的感受野的大小等於濾波器的大小;
- 深層卷積層的感受野大小和它之前所有層的濾波器大小和步長有關系;
- 計算感受野大小時,忽略了圖像邊緣的影響,即不考慮padding的大小。
此外,關於每一層的strides的說明,這個strides是之前所有層stride的乘積,即
strides(i)= stride(1) * stride(2) * ...* stride(i-1)
對於單層卷積網絡,其feature map上每個特征點對應原圖上的感受野大小等於卷積層濾波器的大小;對於多層卷積網絡,可由此逐層往回反饋,通過反復迭代獲得原始輸入圖像中感受野大小,即后面深層的卷積層感受野大小就和之前所有網絡層的濾波器大小和步長有關系了,在計算的時候,忽略圖像Padding的大小。使用的公式可以表示如下:
r(i) = (r(i+1) - 1) * stride(i) + c(i)
其中,r(i)表示第i層感受野大小,stride(i)表示第i層步長,c(i)表示第i層卷積核大小。
此外,對於卷積網絡中的激活函數層(ReLU/Sigmoid/...)等,感受野迭代公式為:
r(i)=r(i+1)
對於DnCNN網絡,網絡層數是d的時候,網絡的感受野就是(2d+1) * (2d+1)。DnCNN的感受野與網絡深度d相關,而卷積神經網絡中的感受野可以類比到傳統去噪算法中的effective patch size。故作者參考最主流的幾個去噪算法,根據2d+1=effective patch size,反向推出DnCNN一個合適的網絡深度。
最終,在噪聲水平為25的情況下,作者選擇EPLL的36*36作為參考標准,因為EPLL的effective patch size橫向比較最小(如果DnCNN選擇最小的感受野都能勝過這些主流算法,就說明DnCNN很牛逼)。處理高斯去噪的DnCNN的深度為17,通用去噪任務的DnCNN的深度為20。
三、實驗
作者做了三種實驗:
-
對比有無residual learning與batch normalization對復原效果、收斂快慢的影響,最終證明這兩是相輔相成的,都利用上時網絡各方面性能達到最好。
-
根據特定程度的高斯噪聲訓練DnCNN-S、根據不定程度的高斯噪聲訓練DnCNN-B、根據不同程度的噪音(包括不同程度的高斯噪聲、不同程度的低分辨率、不同程度的JPEG編碼)訓練的DnCNN-3來與最前沿的其他算法做對比實驗。結論:DnCNN-S有最好的性能,但是DnCNN-B也有優於其他算法的性能,證明了DnCNN-B具有很好的盲去高斯噪聲的能力;DnCNN-3則證明了DnCNN-3具有不俗的復原圖像的泛化能力。
-
對比了DnCNN與其他前沿去噪算法的運行速度的實驗,結論:速度還是不錯的,CPU\GPU環境下均屬於中上水平。
文章轉載來源:https://www.jianshu.com/p/3687ffed4aa8