1. 程式人生 > >Image Super-Resolution Using Deep Convolutional Networks

Image Super-Resolution Using Deep Convolutional Networks

主要思想

(1)首先將一張低解析度的圖片使用二次插值法縮放到desired size,這一步使用的也是卷積操作,可以使用卷積層實現

(2)學習對映F,包含以下三個步驟:
Patch提取和表示,從低解析度影象中提取patch,然後將每個patch表示成一個高維向量,由這些向量組成一個特徵集
非線性對映,將每個高維向量對映到另一個高維向量上,每個映射向量都是一個高解析度patch的表示。由這些向量能夠組成另一個特徵集
重建,將上述高解析度的patch大小的表示組合到一起,生成最終的高解析度影象,這裡希望輸出能夠和ground-truth的結果相同。
patch提取和表示

傳統的patch提取方法是使用預先訓練好的模板進行提取,如PCA,DCT等作為基底進行提取。本文中,將這些基底的優化也包含到網路中去,第一層可以用公式表達成

F 1
( Y ) = m a x ( 0 ,
W 1 Y + B 1 )
其中 W 1 大小為 n 1 c f 1 f 1 ,輸出為 n 1 個特徵圖。

非線性對映

經過第一層後,每個patch都能夠得到 n 1 個特徵圖,在第二階段,將每個 n 1 維向量對映到一個 n 2 維向量上。這步的操作是在每個特徵圖上進行的

F 2 ( Y ) = m a x ( 0 , W 2 F 1 ( Y ) + B 2 ) W 2 包含 n 2 個大小為 n 1 f 2 f 2 的filter。每個輸出都是一個高解析度patch的表示,將用於重建。

重建

在傳統方法中,預計重疊的高解析度patch通常採用取平均值的方法,這也可以認為是一種卷積操作,本文定義產生最後的高解析度影象的卷積層公式為

F ( Y ) = W 3 F 2 ( Y ) + B 3 W 3 包含 c 個大小為 n 2 f 3 f 3 的filter。

Tips

(1)將前面層的filter size設計的比後面的大,以便將重心放在高解析度patch中的中心部分。
(2)由於重建部分使用到的每個patch的畫素量為 ( 9 + 5 1 ) 2 = 169 ,比傳統方法使用到的畫素量更大,因此使得SRCNN能夠給出更好的效果。

Training

  • 需要學習的引數包括 W 1 , W 2 , W 3 , B 1 , B 2 , B 3 ,可以通過最小化重構影象loss進行訓練。使用L2距離定義loss策略函式 L ( θ ) = 1 n i = 1 n | | F ( Y i ; θ ) X i | | 2
  • filter weight初始化使用高斯隨機分佈~(0,0)。前兩層學習速率為0.0001,最後一層學習速率為0.00001。基於經驗發現最後一層使用更小的學習速率將有助於收斂。
  • 為了在訓練過程中避免border effects,所有的卷積層都不使用padding。

實驗

1.研究使用不同資料集時模型的表現
2. 測試使用本文方法學習到的filter
3. 嘗試不同的網路設計結構,研究超解析度效能與深度、filter數量以及filter大小等元素間的關係

    1.使用不同資料集進行效果比較,結果發現無論使用大的資料集(ImageNet)或是小的資料集(91 images)得到的結果是相同的,訓練時間也相同。但PSNR資料比較發現使用91 images得到的值更小,原因在於91 images已經包括了自然影象的變化;同時由於網路較小,因此對於91 images也不會產生過擬合。
    2.第一層特徵圖主要包含不同的結構(如不同方向的邊),第二層特徵圖主要是強度不同
    3.模型和效能的權衡
3.1 filter 數量
隨著filter數量的增加,效能也得到提升,但是計算速度就會下降
n 1 = 128
n 1 = 64
n 1 = 64