Accelerating the Super-Resolution Convolutional Neural Network
論文鏈接: Accelerating the Super-Resolution Convolutional Neural Network, ECCV2016
FSRCNN與SRCNN都是香港中文大學Dong Chao, Xiaoou Tang等人的工作。FSRCNN是對之前SRCNN的改進,主要在三個方面:一是在最后使用了一個反卷積層放大尺寸,因此可以直接將原始的低分辨率圖像輸入到網絡中,而不是像之前SRCNN那樣需要先通過bicubic方法放大尺寸。二是改變特征維數,使用更小的卷積核和使用更多的映射層。三是可以共享其中的映射層,如果需要訓練不同上采樣倍率的模型,只需要fine-tuning最后的反卷積層。
由于FSRCNN不需要在網絡外部進行放大圖片尺寸的操作,同時通過添加收縮層和擴張層,將一個大層用一些小層來代替,因此FSRCNN與SRCNN相比有較大的速度提升。FSRCNN在訓練時也可以只fine-tuning最后的反卷積層,因此訓練速度也更快。FSRCNN與SCRNN的結構對比如下圖所示。
SRCNN和FSRCNN計算復雜度對比
SRCNN 的處理過程如下:
- 對輸入圖片利用雙立方采樣做上采樣,使得其分辨率為目標分辨率
- 然后分別利用 9x9, 1x1, 5x5 的卷積來提高圖片質量。其中 1x1 卷積是用來把低分辨率(LR)圖像向量非線性映射為高分辨率 (HR) 圖像向量.
計算復雜度為:
計算復雜度和HR圖像大小成線性比例,SHR。HR圖像越大,復雜度越高。
FSRCNN 包含如下五個主要處理步驟:
- 特征提取:利用一個 5x5 卷積代替 SRCNN 中的雙立方差值
- 壓縮:利用 1x1 卷積把特征層從 d 壓縮為 s,其中 s 小于 d
- 非線性映射:多個 3x3 網絡層代替單個的寬網絡層
- 擴大: 1x1 卷積把特征層從 s 擴大為 d
- 反卷積: 利用 9x9 過濾器重建 HR 圖像
以上結構就是 FSRCNN(d,s,m). 其計算復雜度如下:
可見復雜度和 LR 圖像大小成線性比例,SLR,所以它的復雜度小于 SRCNN
網絡中激活函數是 PReLU. PReLU意為帶參數的ReLu,目的是比 ReLU 更好。
PReLU:對于每個卷積層之后的激活函數,我們建議使用參數整流線性單元(PReLU)代替常用的整流線性單元(ReLU)。它們在負數部分的系數上是不同的。對于ReLU和PReLU,我們可以將一般激活函數定義為
其中xi是第i個通道上激活f的輸入信號,并且 ai是負數部分的系數。 對于ReLU,參數ai固定為零,但對于PReLU是可學習的。 我們選擇PReLU主要是為了避免ReLU中零梯度引起的“死亡特征”。 然后我們可以充分利用所有參數來測試不同網絡設計的最大容量。 實驗表明,PReLU激活網絡的性能更穩定。
代價函數是均方誤差(MSE):
如何利用 1x1 卷積對網絡進行壓縮和擴大
假設我們在不使用 1x1 卷積的情況下運行 5x5 卷積,如下所示
計算次數 = (14x14x48)x(5x5x480) = 112.9M
如果使用 1x1 卷積:
1x1 卷積計算次數 = (14x14x16)x(1x1x480) = 1.5M
5x5 卷積計算此時 = (14x14x48)x(5x5x16) = 3.8M
兩者總共計算次數 = 1.5M + 3.8M = 5.3M,比只使用 5x5 足足少了 112.9M 次計算。
因此在兩個卷積層之前使用 1x1 卷積來減少連接(參數)。通過減少參數,我們只需要更少的乘法和加法運算,最終加速網絡。這就是 FSRCNN 比 SRCNN 快的原因。
如何利用多個 3x3 卷積實現非線性映射
如上圖所示通過使用2層 3x3 濾波器來覆蓋 5x5 濾波器的區域,讓參數數量變少。
1層 5x5 濾波器的參數數量 = 5x5 = 25
2層 3x3 濾波器的參數數量 = 3x3+3x3 = 18
參數量減少了28%。而更少的參數意味著網絡在訓練的時候可以更快的收斂,并減少過擬合問題。
實驗訓練數據
訓練集:之前傳統SR method基本都在Set91上訓練,但是對CNN來說,Set91并不夠去訓練大的網絡結構。由于BSD500是jpeg格式,存在壓縮所以也不適合做訓練dataset。本文提出general-100 + Set91進行充當訓練集。并且進行數據增強,1)downscale 0.9, 0.8, 0.7 and 0.6。 2) Rotation 90,180,270。因此我們將會得到20倍的訓練數據。