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

網(wǎng)絡(luò)結(jié)構(gòu):
第一部分:Conv(3 * 3 * c * 64)+ReLu (c代表圖片通道數(shù))
第二部分:Conv(3 * 3 * 64 * 64)+BN(batch normalization)+ReLu
第三部分:Conv(3 * 3 * 64)
每一層都zero padding,使得每一層的輸入、輸出尺寸保持一致。以此防止產(chǎn)生人工邊界(boundary artifacts)。第二部分每一層在卷積與reLU之間都加了批量標(biāo)準(zhǔn)化(batch normalization、BN)。
2.1.殘差學(xué)習(xí)residual learning
DnCNN結(jié)合了ResNet的residual learning,關(guān)于ResNet的知識總結(jié),見我另一篇文章:http://www.itdecent.cn/p/11f1a979b384
不同的是DnCNN并非每隔兩層就加一個shortcut connection,而是將網(wǎng)絡(luò)的輸出直接改成residual image(殘差圖片),設(shè)純凈圖片為x,帶噪音圖片為y,假設(shè)y=x+v,則v是殘差圖片。即DnCNN的優(yōu)化目標(biāo)不是真實(shí)圖片與網(wǎng)絡(luò)輸出之間的MSE(均方誤差),而是真實(shí)殘差圖片與網(wǎng)絡(luò)輸出之間的MSE。
根據(jù)ResNet中的理論,當(dāng)殘差為0時,堆積層之間等價于恒等映射,而恒等映射是非常容易訓(xùn)練優(yōu)化的。作者注意到在圖像復(fù)原領(lǐng)域(尤其是在噪音程度較小的情況下),噪音圖片與純凈圖片的殘差非常小,所以理論上殘差學(xué)習(xí)非常適合運(yùn)用到圖像復(fù)原上。
通俗講,這樣的網(wǎng)絡(luò)設(shè)計(jì)就是在隱層中將真實(shí)的圖片x從原噪音圖y中消去。作者注意到:在超分領(lǐng)域,低分辨率圖片就是高分辨率圖片的雙三次上采樣操作形成的,故超分領(lǐng)域的殘差圖片和去高斯噪聲領(lǐng)域的殘差圖片是等價的,同理還有JPEG解鎖領(lǐng)域的殘差圖片。也么一來,用一個模型應(yīng)對三種問題便有了可能性,最終實(shí)驗(yàn)證明確實(shí)有效。
2.2.批量標(biāo)準(zhǔn)化batch normalization
SGD(隨機(jī)梯度下降法)廣泛應(yīng)用于CNN的訓(xùn)練方法中,但是訓(xùn)練的性能卻很大程度受內(nèi)部協(xié)變量移位這一問題所影響。BN就是在每一層的非線性處理之前加入標(biāo)準(zhǔn)化、縮放、移位操作來減輕內(nèi)部協(xié)變量的移位??梢越o訓(xùn)練帶來更快的速度,更好的表現(xiàn),使網(wǎng)絡(luò)對初始化變量的影響沒有那么大。
內(nèi)部協(xié)變量移位(internal covariate shift):深層神經(jīng)網(wǎng)絡(luò)在做非線性變換前的激活輸入值,隨著網(wǎng)絡(luò)深度加深或者在訓(xùn)練過程中,其分布逐漸發(fā)生偏移或者變動,之所以訓(xùn)練收斂慢,一般是整體分布逐漸往非線性函數(shù)的取值區(qū)間的上下限兩端靠近(對于Sigmoid函數(shù)來說,意味著激活輸入值WU+B是大的負(fù)值或正值),所以這導(dǎo)致反向傳播時低層神經(jīng)網(wǎng)絡(luò)的梯度消失,這是訓(xùn)練深層神經(jīng)網(wǎng)絡(luò)收斂越來越慢的本質(zhì)原因。
批量標(biāo)準(zhǔn)化(batch normalization):就是通過一定的規(guī)范化手段,把每層神經(jīng)網(wǎng)絡(luò)任意神經(jīng)元這個輸入值的分布強(qiáng)行拉回到均值為0方差為1的標(biāo)準(zhǔn)正態(tài)分布,即把越來越偏的分布強(qiáng)制拉回比較標(biāo)準(zhǔn)的分布,這樣使得激活輸入值落在非線性函數(shù)對輸入比較敏感的區(qū)域,所以輸入的小變化才就會導(dǎo)致?lián)p失函數(shù)有較大的變化,意思就是讓梯度變大,避免梯度消失問題產(chǎn)生,而且梯度變大意味著學(xué)習(xí)收斂速度快,能大大加快訓(xùn)練速度。
2.3.網(wǎng)絡(luò)深度network depth
作者參考《Very deep convolutional networks for large-scale image recognition》的標(biāo)準(zhǔn),將DnCNN的卷積核大小設(shè)置為3 * 3,并且去掉了所有的池化層。
感受野:是卷積神經(jīng)網(wǎng)絡(luò)中某一層輸出的特征圖對到網(wǎng)絡(luò)輸入圖像中映射的區(qū)域的大小。

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