漫談深度學習在Super Resolution(超解析度)領域上的應用

沈子恆發表於2017-05-31

1.前言

清晨,師兄推薦給我一篇文章,關於利用DeepLearning思想進行影象超分辨恢復的。超分辨這個話題幾年之前還是比較火爆的,無論是BiCube、SP、A*都給出了令人振奮的結果。但是細節恢復部分仍存在一些瑕疵。

Super Resolution(SR),這個方向做的事情是給你一張低解析度的小圖(Low Resolution,LR),通過演算法將這張LR放大成一張高解析度的大圖(High Resolution,HR)。這個事情乍一聽挺簡單的,普通的插值演算法即可勝任,其實大有玄機,主要的難點在於細節的恢復,如下兩張圖,第一張圖是原圖,第二張圖是將原圖進行3倍下采樣後,用Bicubic插值演算法[1]進行SR恢復的影象,從影象整體來看,第二張圖比第一張圖要顯得糊一些,如果將蝴蝶的翅膀紋路放大看可以發現,第二張圖的細節已經很不清晰,紋路間的邊緣已經模糊。這正是SR這個方向所面臨的挑戰。

      

SR這個領域在深度學習之前就已經大量優秀的研究工作,如Sparse Code(SC),A+等,各自效果如圖所示(1)原始影象(2)SC稀疏編碼進行高分辨恢復(3)A*演算法進行高解析度恢復。

            

篇幅所限,本文暫不討論傳統SR演算法,本文主要聊聊基於深度學習的SR相關演算法。

2.DL用於SR恢復的鼻祖

  1. 說到基於深度學習的SR工作,肯定得提起“開山鼻祖”——SRCNN,SRCNN是第一篇將深度卷積神經網路(CNN)引入SR領域。這篇文章的思想很清晰,演算法也很簡單,一般大牛的大作都是如此。。。這篇文章認為LR之所以能通過一定的演算法升級為HR,主要是他們兩者之間存在著一些“共通的特徵”,因此,這篇文章將SR過程主要分為三個階段:
  2. LR 特徵提取(Patch extraction and representation),這個階段主要是對LR進行特徵提取,並將其特徵表徵為一些feature maps;
  3. 特徵的非線性對映(Non-linear mapping),這個階段主要是將第一階段提取的特徵對映至HR所需的feature maps;
  4. HR重建(Reconstruction),這個階段是將第二階段對映後的特徵恢復為HR影象。

又想感慨一句,開山之作往往都是如此簡單、清晰的思路,輕鬆收穫一篇ECCV、一篇PAMI。這篇文章將上述的三個階段很自然地翻譯成三個卷積計算工作,輕鬆搞定:

  1. LR特徵提取可表徵為“卷積層(c*f1*f1卷積核)+RELU”
  2. 非線性對映可表徵為“全連線層+RELU”,而全連線層又可表徵為卷積核為1x1的卷積層,因此,本層最終形式為“卷積層(n1*1*1卷積核)+RELU”;
  3. HR重建可直接表徵為“卷積層(n2*f3*f3)”
下面所示的是SRCNN網路框圖:


SRCNN的損失函式也很“簡單粗暴”,直接計算原圖與SR大圖之間所有畫素點的MSE。至此,SRCNN的所有工作就介紹到這,接下來我們看下SRCNN的效果:


SRCNN非常簡潔,不過SRCNN也存在著幾個可以改進的點:

  • 從SRCNN的整個網路來看,要求這個網路的引數需要足夠“稠密”,才能直接從網路中對映出一張高清的HR影象,這在一定程度對SRCNN的訓練要求比較高,另外也減緩了SRCNN的訓練速度;
  • SRCNN特徵提取只用了一層卷積層,存在著perceptive field比較小的問題,即提取出來的特徵是非常區域性的特徵,而SR影象需要對紋理細節進行恢復,區域性特徵難以奏效。

3.優化及創新

在SRCNN之後,又有若干進一步優化的文章出現,如RED(NIPS2016)、CSCN(ICCV 2015)、SRGAN(我們復現之後發現效果並不是特別好)、DRCN(CVPR2016)等。
接下來我想分享的是CVPR2016的一篇很有創新的文章:VDSR(CVPR2016)。這篇文章有幾個創新點:

  • 引入更深的網路(VGG16)做SR;
  • 將residual的思想引入SR,減輕了網路的“負擔”,又加速了學習速率;
  • 構造了一個適用於不同放大尺度的網路,並通過實驗驗證了該網路的可靠性。
這篇文章將VGG16引入作為SR的網路,如果網路架構同SRCNN,從上述SRCNN第一個可改進點可知,VGG16的權重將會變得非常稠密,從而加大了網路的學習成本,很可能會碰到vanishing/exploding gradients problem,這個問題在SRCNN文章的4.3.3也提到過,在原文中,作者認為網路越深效果越好的這個定律不適用於SR領域。為了解決該問題,這篇文章的作者將redisual的思想引入了網路架構中,VGG不再需要學習如何恢復一張高清的HR影象,而是學習高清影象與LR影象拉伸之後的殘差,網路架構如下:


這一點創新做得非常漂亮,由於只需要學習殘差,而殘差中大部分值都為0,從而大大降低了網路學習的成本,也加快了學習的速率,在這篇文章中,作者也對比了殘差目標和非殘差目標的學習速率,如下。可以看到殘差思想的引入,極大地加速了訓練速度,也提高了效果的穩定性,在這篇文章中,作者提到訓練一個16層的網路用於SR只需要4個小時,這無疑極大地提升了訓練速度。


殘差目標和非殘差目標學習速率對比

殘差思想的引入,使得深度網路能夠應用於SR領域,而隨著深度的加深,網路的perceptive field變得越來越寬,使得網路不僅具備區域性特徵,也能捕捉到更加全域性的特徵,全域性特徵的加入更有利於SR紋理細節的恢復。
一般的網路結構只能做特定尺度的upscale,如一個網路結構確定為放大尺度為2的網路,那麼該網路訓練後也就只能用於尺度為2的upscale,而隨著網路結構的加深,訓練成本相應增加,若網路只能做單一尺度的放大,那麼網路的可重用性比較差。在這篇文章中,作者還引入了另一種令人驚訝的網路結構,該網路結構對外暴露多一個尺度引數,該尺度引數可控制影象放大的尺度。這種設計方案極大地提升了網路的可重用性。作者還在這篇文章中對比了單一尺度網路的效果和多尺度網路的效果,如表(10)。可以發現,多尺度網路的效果不僅不降低,反而提升了PSNR值。


最後文章給出了一些與SRCNN的效果對比,如下圖。可以看出,VDSR由於更深網路的引入,在紋理細節上表現得更加的清晰。


VDSR與SRCNN對比(上面為VDSR效果圖,下面為SRCNN效果圖)

4.參考文獻

[1] Bicubic interpolation
[2] http://www.vision.ee.ethz.ch/publications/papers/proceedings/eth_biwi_01165.pdf
[3] http://www.columbia.edu/~jw2966/papers/YWHM10-TIP.pdf
[4] Learning a Deep Convolutional Network for Image Super-Resolution
[5] http://www.ifp.illinois.edu/~jyang29/papers/ICCV15-rnnsr.pdf
[6] https://arxiv.org/pdf/1603.09056.pdf
[7] [1609.04802] Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network
[8] [1511.04491] Deeply-Recursive Convolutional Network for Image Super-Resolution
[9] https://arxiv.org/pdf/1511.04587.pdf

相關文章