【Super Resolution】超分辨率——SRCNN

SRCNN

01 閒聊——圖像的超分辨率

在一切開始之前,先整體的介紹一下超分辨率(Super Resolution,SR)。超分辨率是一項底層的圖像處理任務,將低分辨率映射到高分辨率,圖像的超分辨率希望可以達到增強圖像細節的作用。圖像的模糊(Image blurring)有很多的原因,比如說噪聲、壓縮損失、採集失誤等等。圖像的超分辨率是計算機視覺的一個經典應用,通過各種手段,從低分辨率的圖像重構爲高分辨率的圖像,在監控設備、衛星圖像、自然場景識別和檢測等方面都有很重要的應用價值。
圖像的超分辨率從圖像角度可以分爲單張圖像的超分辨率(Single Image Super Resolution,SISR)多幀圖像的超分辨率(Multi-frame Super Resolution,VSR)。我們從單張圖像的超分辯開始學習。單張圖像超分問題實際上是一個逆問題,一張低分辨率的圖像有很多張的高分辨率的圖像與其對應,所以我們要有一個準確的高分辨率圖像作爲先驗知識進行規範化約束。我們的後續關於超分的博客也會不斷的分享,我們也是剛剛涉獵到超分領域,不足之處還希望大家多多指教!


02 SRCNN——超分和DL的結合

我們開始關注將卷積神經網絡用於超分辨率的第一個算法——SRCNN。SRCNN是首個使用CNN結構(即基於深度學習)的端到端的超分辨率算法, SRCNN流程如下:

  1. 輸入預處理:對輸入的低分辨率lr圖像使用bicubic算法進行放大,放大爲目標尺寸。
  2. 將輸入的比較模糊的lr圖像,經過卷積網絡的處理,得到超分辨率sr的圖像,使它儘可能與原圖的高分辨率hr圖像相似。

02-1 雙三次插值

雙三次插值(Bicubic interpolation) 是二維空間中最常用的插值方法。在這種方法中,函數f在點 (x,y) 的值可以通過矩形網格中最近的十六個採樣點的加權平均得到,在這裏需要使用兩個多項式插值三次函數,每個方向使用一個。
W(x)={(a+2)x3(a+3)x2+1for |x|<=1ax35ax2+8ax4afor 1<|x|<20otherwise W(x)= \begin{cases} (a+2)|x|^3-(a+3)|x|^2+1 & \text {for |x|<=1} \\ a|x|^3-5a|x|^2+8a|x|-4a & \text{for 1<|x|<2} \\0& \text{otherwise} \end{cases}

其中a=0.5;
i=03j=03aijxiyj\sum^3_{i=0}\sum^3_{j=0} a_{ij}x^iy^j

其中xix_iyjy_j就是分別指的(i,j)點在水平方向和垂直方向上的兩個多項式插值三次函數的值即WiW(i)WjW(j)

02-2 SRCNN的網絡結構

下面是SRCNN的結構圖:
在這裏插入圖片描述
SRCNN的結構較簡單,整個卷積網絡包括三個卷積層,甚至沒有池化和全連接層,但都通過Relu函數三個卷積層使用的卷積核的大小分爲爲9x9,,1x1和5x5,前兩個的輸出特徵個數分別爲64和32。:

  1. 對低分辨率的圖進行卷積操作,生成n1n_1維的feature maps
    F1(Y)=max(0,W1Y+B1)F_1(Y)=max(0,W_1∗ Y+B_1)
  2. n1n_1維的feature map進行卷積操作生成n2n_2維 feature maps
    F2(Y)=max(0,W2F1(Y)+B2)F_2(Y)=max(0,W_2∗ F_1(Y)+B_2)
  3. n2n_2維的feature maps進行卷積生成超分辨的圖像(反捲積)
    F(Y)=W3F2(Y)+B3F(Y)=W_3∗F_2(Y)+B_3

分別對應三個處理流程:

  1. 提取圖像特徵: 從低分辨率圖像中提取多個patch圖像塊,每個塊被卷積操作表示爲多維的向量(維數等於filter的數量),所有的特徵向量組成特徵矩陣(feature maps)
  2. 非線性映射:n1n_1維特徵矩陣,通過卷積操作實現非線性映射,變成另一n2維特徵矩陣。
  3. 重構圖像: 等於是個反捲積的過程,將n2的特徵矩陣還原爲超分辨圖像
    想特別提出的一點:所謂非線性映射指的是地位的LR圖像的特徵向高維圖像HR的特徵的映射,而所應用的函數是Relu非線性函數,所以爲非線性映射。

個人對這個網絡理解爲對於一個傳統超分方法(雙三次插值)的應用CNN的優化方案。而其精髓則在於將SC的超分方法用卷積神經的方法表達出來。並最終實現對LR圖像的特徵提取,非線性映射和重構過程。

02-3 Training 訓練階段

從GroundTruth裏選擇圖片並對其進行剪裁從而生成子圖片。並對這些字圖片應用升尺度因子進行子採樣,最後再用雙三次插值將其放大到相同大小。損失函數爲MSE,通過從具有零均值和標準偏差0.001(和偏差爲0)的高斯分佈中隨機繪製來初始化每個層的濾波器權重。前兩層的學習率爲10410^{−4},最後一層的學習率爲10510^{−5}

03 EXPERIMENTS 實驗階段

1.對比卷積核大小(filter size)、卷積核數量(filter numbers)對復原效果的影響的實驗
經過實驗後的結論:卷積核數量越多,即特徵向量維數越高,實驗效果越好,但是會影響算法速度,故需要綜合考慮;另外三層卷積層的卷積核大小越大,實驗效果也會略微更好,同樣會影響算法速度。
2.對比網絡層數(layer numbers)對復原效果的影響的實驗
經過實驗後的結論:並非網絡越深,效果越好,結果恰恰相反。作者也給出瞭解釋:因爲SRCNN沒有池化層和全連接層,導致網絡對初始參數和學習率非常敏感,結果即網絡訓練的時候非常難以收斂,即使收斂了也可能停在了壞的局部最小值(bad local minimum)處,並且即使訓練了足夠的時間,學習到的filter參數的分散度也不夠好。
3.與最前沿的其他超分算法對比速度與性能的實驗
數據集選擇的是ImageNet上的Set14、Set5(指14幅圖像和5幅圖像),對比對象是Bicubic、SC、NE+LLE、KK、ANR與SRCNN。
4.算法速度
通過實驗可以看出提出的SRCNN實現了最先進的超分辨率質量,同時與現有的基於實例的方法相比保持了高的和競爭的速度。
5.在更大訓練數據下的表現
結果表明,使用更大、更多樣化的圖像訓練集可以進一步提高SRCNN的性能。

04 對於一些名詞的理解

  1. PSNR是"Peak Signal to Noise Ratio"的縮寫,即峯值信噪比,是一種評價圖像的客觀標準,它具有侷限性,一般是用於最大值信號和背景噪音之間的一個工程項目。具體的可以參見我們的博客【Super Resolution】超分辨率的總結——評價指標
  2. NE+:一組鄰域嵌入方法,利用最近鄰搜索(nearest neighbor search)在字典中選擇若干LR候選patch,並利用它們的HR版本重構HR輸出patch,重構方法可能是最小二乘(NE+LS)、局部線性嵌入(NE+LLE)、非負最小二乘(NE+NNLS)。
  3. SC或SrSC:找到稀疏表示來稀疏近似輸入的LR patch,然後利用得到的係數稀疏生成相應的HR輸出patch。
  4. KK:採用核匹配跟蹤和梯度下降相結合的稀疏方法,基於核脊迴歸(kernel ridge regression,KRR),直接從輸入LR圖像學習到目標HR圖像的映射。
  5. A+,ANR和GR:錨定鄰域迴歸(Anchored Neighborhood Regression,ANR)是一種改進K-SVD和SC的方法,它引入脊迴歸(可離線求解,每個字典原子/錨都可存儲)。一個不太精確但更有效的變異是採用了全局迴歸,因此,GR. A+ (advanced ANR)這個名稱是後來改進的方法,與ANR不同,它不僅從字典原子中學習,還學習了局部鄰域錨(anchor)的所有訓練patch。雖然具有類似的時間複雜性,但已經證明A+的性能優於ANR和GR。

感謝其他博客大大們的分享,我們引用了下述博客,再次表示感謝!!!
https://blog.csdn.net/PPLLO_o/article/details/90040801
https://blog.csdn.net/qq_34885184/article/details/79163991
https://blog.csdn.net/clover_my/article/details/90481015

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章