論文學習 :Learning a Deep Convolutional Network for Image Super-Resolution 2014


  

(Learning a Deep Convolutional Network for Image Super-Resolution, ECCV2014)


 

 

摘要:我們提出了一種單圖像超分辨率的深度學習方法(SR)。我們的方法直接學習在低/高分辨率圖像之間的端到端映射。這個映射表現為通過一個深度的卷積神經網絡CNN,把低分辨率的圖像作為輸入,輸出高分辨率圖像。我們進一步證明了基於傳統的稀疏編碼超分辨的方法也可以看作是一個深卷積網絡。但不像傳統的方法一樣分離的處理每一個組成,我們的方法聯合優化了所有層。我們的深度CNN有一個輕量級的結構,然而展示了最先進的修復質量,並實現了快速的實際在線使用。

 

1.介紹

  單圖像超分辨率[11]是計算機視覺中的一個經典問題。目前最先進的單圖像超分辨率方法大多是基於實例的。這些方法要么利用同一圖像的內部相似性,要么從外部低分辨率和高分辨率樣本對學習映射函數[2, 4, 9, 13, 20, 24–26, 28]。基於外部實例的方法往往具有豐富的樣本,但同時也面臨着對數據進行有效、簡潔的建模困難。

  基於稀疏編碼的方法[25,26]是基於外部實例的圖像超分辨率的代表性方法之一。該方法在其管道中涉及幾個步驟。首先,從圖像中密集提取重疊的patch並進行預處理(減去均值)。然后用低分辨率字典對這些patches進行編碼。將稀疏系數傳遞到高分辨率字典中,重建高分辨率patches。將重疊的重構patches聚合(或平均)以生成輸出。以前的SR方法特別注重字典的學習和優化或者用其他方法對它們建模。然而,管道中的剩下的步驟很少在統一的優化框架中進行優化或考慮。

  在這篇論文中,我們證明了上述管道相當於一個深卷積神經網絡(更多細節見第3.2節)。出於這結果,我們直接考慮卷積神經網絡,它是在低分辨率和高分辨率圖像之間的端到端映射。我們的方法與現有的基於實例的外部方法有根本的不同,因為我們沒有顯式地學習字典[20,25,26]或復寫[2,4]來建模patch空間。這些都是通過隱藏層隱式實現的。此外,patch的提取和聚集也被表示為卷積層,因此涉及到優化。在我們的方法中,整個SR管道都是通過學習得到的,幾乎沒有預處理/后處理。

  我們命名提出的模型為 Super-Resolution Convolutional Neural Network (SRCNN)。我們提出的SRCNN有幾個吸引人的特性。第一,它的結構是有意設計得簡單,但與最先進的基於實例的方法相比,它提供了更高的精確度。Figure 1給出了一個例子的比較。第二,通過適當的濾波器和層數,我們的方法實現了快速的實際在線使用,甚至是在CPU上的訓練。我們的方法比一系列基於實例的方法更快,因為它是完全前饋的,不需要在使用中解決任何優化問題。第三,實驗表明,當給網絡更多的數據集或者(和)更大的網絡時,網絡的恢復質量會得到更深的提高。相反,較大的數據集/模型可能對現有的基於實例的方法提出挑戰。

  總的來說,這項工作的貢獻主要體現在三個方面:

  1.我們提出了一種用於圖像超分辨率的卷積神經網絡。該網絡直接學習低分辨率和高分辨率圖像之間的端到端映射,除了優化之外,幾乎沒有什么預處理/后處理。

  2.我們建立了基於深度學習的SR方法與傳統的基於稀疏編碼的SR方法之間的關系。這種關系為網絡結構的設計提供了指導。

  3.我們證明了深度學習在經典的超分辨率計算機視覺問題中是有用的,可以達到良好的質量和速度。

 

     Figure 1   提出的SRCNN僅僅通過幾次訓練迭代就超過了雙三次基線,並通過適當的訓練,使其性能優於基於稀疏編碼的[26]方法。隨着更多的訓練迭代,性能可能會進一步提高。

 

2.相關工作

  圖像超分辨率  一類最先進的SR方法[學習低/高分辨率patches之間的映射。這些研究如何學習一個緊湊的字典或多方面的空間來關聯低/高分辨率的patches,以及如何在這些空間中進行表示方案方面存在差異。在Freeman開創性的工作中,字典被直接表示為低/高分辨率的patch對,在低分辨率空間中找到輸入patch的最近鄰(NN),用其對應的高分辨率patch進行重建。Chang介紹了一種流形嵌入技術作為神經網絡策略的替代方法。在Yang等人的工作中[25,26],上述NN對應關系提出了一種更為復雜的稀疏編碼公式。這種基於稀疏編碼的方法及其若干改進[24,20]是目前最先進的SR方法之一。在這些方法中,patches是優化的重點;將patch提取和聚集步驟視為預處理/后處理,並分別處理。

  卷積神經網絡  卷積神經網絡(CNN)可以追溯到幾十年前的[15],最近由於其在圖像分類[14]上的成功而顯示出爆炸式的流行。在這一進程中,有幾個因素至關重要: ( i )在現代功能強大的gpu上實現高效的訓練  ( ii )ReLU的提出,這使得收斂速度更快,同時仍然呈現出良好的質量( iii )易於獲取的豐富數據(如ImageNet[5])來訓練更大的模型。我們的方法也從這些進展中獲益。

  深度學習用於圖像修復  已經存在一些利用深度學習技術對圖像修復的學習。多層感知機(MLP)的所有層都是全連通的(與卷積不同),用於自然圖像去噪[3]和去模糊后去噪[19]。與我們的工作更緊密相關的是,卷積神經網絡用於自然圖像去噪[12]和去除噪聲模式(污垢/雨水)。這些恢復問題或多或少是由去噪驅使的。相反,在圖像超分辨率問題上,並沒有充分利用深度學習技術。

 

3.利用卷積神經網絡進行超分辨

3.1 規划

  考慮一個低分辨率的圖像。我們首先使用雙三次插值將其提升到所需的大小,這是我們唯一的預處理。表示插值后的圖像為Y。我們的目標是從Y圖像中恢復出F(Y)圖像,該圖像與真實高分辨率圖像X盡可能相似。為了便於表示,我們仍然將Y稱為“低分辨率”圖像,盡管它的大小與X相同。我們想學習一個映射F,它在概念上由三個操作組成 :

   (a)Patch提取與表示  該操作從低分辨率圖像Y中提取(重疊)patch,並將每個patch表示為高維向量。這些向量由一組特征圖組成,特征圖的數量等於向量的維數。??

     (b)  非線性映射 : 這個操作將每個高維向量非線性地映射到另一個高維向量上。每個映射向量在概念上表示一個高分辨率的patch。這些向量包含另一組特征映射。

     (c)  重建 : 該操作聚合上述高分辨率的拼接表示,生成最終的高分辨率圖像。這幅圖像預計基本與X相似。

  我們將展示所有這些操作構成一個卷積神經網絡。圖2描述了網絡的概述。接下來,我們詳細介紹每個操作的定義。

 

  Fig2  對於給定低分辨率圖像Y, SRCNN的第一卷積層提取一組特征圖。第二層將這些特征映射到高分辨率的patch上表示。最后一層結合空間鄰域內的預測,生成最終的高分辨率圖像F(Y)

 

 

Patch提取與表示

  一種流行的圖像恢復策略(例如,[1])是密集提取patch,然后用一組經過訓練的基礎來表示它們,如PCA, DCT, Haar等。這相當於用一組濾波器對圖像進行卷積,每個濾波器都是一組基。在我們的公式中,我們將這些基的優化納入到網絡的優化中。形式上,我們的第一層表示為操作F1:

                  F1(Y) = max(0, W1 * Y + B1

 其中,W1和B1分別表示濾波器和偏差。這里W1的大小為c × f× f× n1,其中c為輸入圖像中通道的個數,f1為濾波器的空間大小,n1為濾波器的個數。直觀地,W1在圖像上應用n1卷積,每個卷積都有一個內核大小c×f1×f1。輸出由n1特征映射組成。B1是一個n1維向量,它的每個元素都與一個過濾器相關聯。我們應用了整流線性單元(ReLU,max(0,x)]在過濾器響應。

 

非線性映射 

  第一層為每個patch提取一個n1維度特征。在第二個操作中,我們將這些n1維向量映射成一個n2維向量。這相當於應用n2個在空間上支持1×1的濾波器。第二層的操作是:

                  F2(Y) = max (0, W2 * F1(Y) + B2 )

 這里,W2 的大小是 n1 *  1 * 1 * n2, B2是一個n2維度向量。每個輸出的n2維向量在概念上表示一個高分辨率的patch,用於重建。

   為了增加非線性可以添加更多的卷積層(空間支持為1×1)。但這會顯著增加模型的復雜度,因此需要更多的訓練數據和時間。在本文中,我們選擇在這個操作中使用一個單獨的卷積層,因為它已經提供了令人信服的質量。

 

重建

  在傳統的方法中,對預測的重疊高分辨率patch進行平均,得到最終的完整圖像。平均可以看作是一組特征圖上的預定義過濾器(其中每個位置都是高分辨率patch的“扁平”向量形式)。基於此,我們定義了一個卷積層來生成最終的高分辨率圖像:

                F(Y) = W3 * F2(Y) + B3

其中, W3大小為 n2 * f3 * f3 * c , B3是一個c維的向量。

  如果高分辨率patches的表示在圖像域中(即我們可以簡單地對每個表示進行重新塑造,以形成patches),我們期望濾波器的作用類似於平均濾波器;如果高分辨率patches的表示在其他域中(系數是基的形式),我們期望 W3的行為類似於先將系數投影到圖像域中,然后求平均值。無論哪種方式, W3都是一組線性濾波器。

   有趣的是,盡管上述三種操作的動機不同,但它們都與卷積層的形式相同。我們將這三個操作放在一起,形成一個卷積神經網絡(圖2)。在該模型中,所有的濾波權值和偏差都要進行優化。盡管整體結構簡潔,但我們的SRCNN模型是在超分辨率方面取得重大進展的基礎上,吸取了豐富的經驗而精心開發的[25,26]。我們將在下一節詳細介紹這種關系。

 

3.2 與基於稀疏編碼的方法的關系

   我們證明基於稀疏編碼的SR方法[25,26]可以看作是卷積神經網絡。

 

              Figure  3  基於卷積神經網絡的稀疏編碼方法

   

   在基於稀疏編碼的方法中,我們考慮從輸入圖像中提取一個f1×f1低分辨率的patch。這個patches減去其平均值,然后投射到一個(低分辨率)字典上。如果這個字典大小是n1, 這相當於在輸入圖像上應用n1維的線性濾波器(f1×f1)(減去平均值的操作也可以看成是線性操作)。

  然后將稀疏編碼求解器應用於投影的n1維系數。該求解器的輸出為n2維系數,在稀疏編碼的情況下,通常為n2 = n1。這些n2維系數是高分辨率patches的表示。在這個意義上,稀疏編碼求解器表現為一個非線性映射操作。參見圖3的中間部分。然而,稀疏編碼求解器不是前饋的,即,這是一個迭代算法。相反,我們的非線性算子是完全前饋的,可以有效地計算。我們的非線性算子可以看作是一個像素級的全連通層。

   然后將上述n2個系數(稀疏編碼后)投影到另一個系數上(高分辨率)字典生成高分辨率patch。然后對重疊的高分辨率斑塊進行平均。 如上所述,這等價於n2維特征圖上的線性卷積。如果用於重建的高分辨率patches尺寸為f3×f3,則線性濾波器的空間支持等效為f3×f3。請參見圖3的右側部分。

   上述討論表明,基於稀疏編碼的SR方法可以看作是一種卷積神經網絡(具有不同的非線性映射)。但是在基於稀疏編碼的SR方法中,並沒有考慮到所有的操作。相反,在我們的卷積神經網絡中,需要優化的濾波器都涉及到低分辨率字典、高分辨率字典、非線性映射以及均值減法和均值平均。因此,我們的方法優化了包含所有操作的端到端映射。

  上面的類比也可以幫助我們設計超參數。例如,我們可以設置過濾器最后一層的大小小於第一層,因此我們更加依賴中央部分的高分辨率patch(極端地,如果f3 = 1,我們使用該中心像素沒有平均)。我們也可以設n2 < n1,因為它應該更稀疏。一個典型的設置是f1 = 9, f3 = 5, n1 = 64, n2 = 32(我們在實驗部分評估了更多的設置)。   

 

3.3 Loss Function

  學習端到端映射函數F需要估計參數Θ= {W1 W2, W3, B1, B2, B3}。這是通過最小化重建圖像F(Y;θ)與高分辨X之間的損失來實現的。給定一組高分辨率圖像{Xi}及其對應的低分辨率圖像{Yi},我們使用均方誤差(MSE)作為損失函數 :

                            

 

其中,n是訓練集樣本個數。采用隨機梯度下降法和標准反向傳播法使損失最小化。使用MSE作為損耗函數有利於高的PSNR。PSNR是一種廣泛應用的定量評價圖像恢復質量的指標,它至少部分地與感知質量有關。值得注意的是,卷積神經網絡並不排斥使用其他類型的損失函數,只要損失函數是可導的。如果在訓練過程中給出了一個更好的感知動機度量,那么網絡就可以靈活地適應該度量。我們以后會研究這個問題。相反,這種靈活性通常很難實現

 

4.實驗

數據集

  為了與傳統的基於實例的方法進行公平的比較,我們使用了與[20]中相同的訓練集、測試集和協議。具體來說,訓練集由91幅圖像組成。使用Set5[2](5幅圖像)評價放大因子2、3、4的性能,使用Set14[28](14幅圖像)評價放大因子3。除了91幅圖像的訓練集,我們還研究了5.2節中更大的訓練集。

比較

  我們將我們的SRCNN與最先進的SR方法進行了比較:Yang等人的SC(稀疏編碼)方法[26],基於k - svd的方法[28],NE+LLE(鄰域嵌入+局部線性嵌入)[4],n +NNLS(鄰域嵌入+非負最小二乘)[2],錨定鄰域回歸(ANR)方法[20]。這些實現都來自作者提供的公開可用代碼。對於我們的實現,培訓是使用cuda-convnet包[14]實現的。

實現細節  

   根據3.2節,我們在主要計算中設置f1 = 9, f3 = 5, n1 = 64, n2 = 32。我們將在第5節中評估其他設置。對於每個放大因子∈{2,3,4},我們為每一個因子訓練一個特定的網絡。

   在訓練階段,從訓練圖像中隨機抽取32×32像素子圖像,得到真值圖像{Xi}(對於放大因子3,輸入大小為33×33,因此可以除以3)。所謂“子圖像”,我們的意思是這些樣本被視為小的“圖像”,而不是“patches”。在這個意義上,“patches”是重疊的,需要一些平均作為后處理,但“子圖像”不需要。為了合成低分辨率樣品{Yi},我們使用適當的高斯核對一個子圖像進行模糊處理,使用放大因子對其進行子采樣,並通過雙三次插值對同一因子進行放大。91幅訓練圖像提供了大約24800幅子圖像。從原始圖像中提取出步長為14的子圖像。我們嘗試了更小的步長,但是沒有觀察到顯著的性能改進。從我們的觀察來看,訓練集足以訓練我們提出的深度網絡。訓練8×108反向傳播)在GTX 770 GPU上大約需要3天。

   根據[20],我們在實驗中只考慮亮度通道(在YCrCb顏色空間中),所以在第一層/最后一層中c = 1。這兩個色度通道是雙三次上采樣的,僅用於顯示,不用於培訓/測試。注意,我們的方法可以擴展到直接訓練彩色圖像通過設置c = 3。我們在本文中使用c = 1主要是為了與之前的方法進行公平的比較,因為它們大多只涉及亮度通道。

   為了避免訓練過程中的邊界效應,所有的卷積層都沒有填充,網絡產生較小的輸出(20×20)。MSE損失函數僅僅用來評估Xi中間的 20*20核與網絡輸出的誤差。在處理測試圖像時,卷積神經網絡可以應用於任意大小的圖像。在測試過程中,所有卷積層都有足夠的補零,使得輸出圖像與輸入圖像大小相同。為了解決邊界效應,在每個卷積層中,每個像素處的輸出(ReLU之前)由有效輸入像素個數進行歸一化,有效輸入像素個數可以預先計算。

   每一層的濾波權值由高斯分布隨機抽取,均值為0,標准差為0.001(偏差為0)。前兩層的學習速度為10 - 4,后一層的學習速度為10 - 5。我們通過實驗發現,最后一層的學習率越小,網絡的收斂性越好(類似於去噪情況[12])。

 

 

4.1 定量評價

 

如表1和表2所示,提出的SRCNN產生最高的平均值在所有實驗的PSNR。注意,我們的SRCNN結果基於8×108反向傳播。具體而言,如表1 (Set5)所示,SRCNN的平均增益分別為0.51 dB、0.47 dB和0.40 dB,在三個向上縮放因子上均高於排名第二的方法ANR[20]。我們注意到,由於測試樣本數量有限,Set5可能不是一個結論性的測試集,但是結果表明,所提出的模型能夠很好地處理不同的升級因子。在較大的Set14數據集上,我們的SRCNN始終比其他方法有較大的優勢(平均≥0.3 dB)。一個當我們使用SSIM[22,21]作為性能指標時,也發現了類似的趨勢,其結果可在補充文件中找到。值得指出的是,SRCNN在學習階段的一開始就超過了雙三次基線(見圖1),經過適度的訓練,SRCNN的表現優於現有的最先進的方法(見圖6)。我們推測,如果訓練時間較長,可以得到更好的結果(見圖6)。在5.2節中,我們將說明,我們的方法也受益於更多的訓練數據。圖7、圖8和圖9通過比例因子3顯示了不同方法的超分辨率結果。可以觀察到,SRCNN產生的邊緣比其他方法要尖銳得多,而且圖像上沒有任何明顯的偽影。雖然SRCNN的平均PSNR值是最好的,但是對於Set5中的“baby”和“head”圖像,SRCNN並沒有達到最高的PSNR。盡管如此,我們的結果在視覺上仍然很吸引人(參見圖10)。

                      

          

 

  

 4.2  運行時間

 

  圖4顯示了幾種最先進方法的運行時間比較,以及它們的恢復性能。所有基線方法均來自於相應作者的MATLAB實現,而我們的方法則在c++。我們用同一台機器分析了所有算法的運行時間(Intel CPU 3.10 GHz, 16gb內存)。我們的方法在Set14中每幅圖像平均花費0.39秒(表2),而其他方法要慢幾倍甚至幾個數量級。注意速度差距主要不是由MATLAB/ c++實現的不同造成的;相反,其他方法需要在使用上解決復雜的優化問題(如稀疏編碼或嵌入),而我們的方法是完全前饋的。我們還注意到,我們的方法的處理時間與測試圖像分辨率高度線性,因為所有圖像都經過相同數量的卷積。

 

 5  深層分析

5.1 學習過濾器

  圖5顯示了通過縮放因子2對91幅圖像(24,800個子圖像)進行訓練的學習的第一層過濾器的示例。有關放大因子3和4的模式,請參閱我們發布的實現。有趣的是,每個學習過濾器都有其特定的功能。例如,濾波器a和f像拉普拉斯/高斯濾波器,濾波器b、c和d像不同方向的邊緣檢測器,濾波器e像紋理提取器。我們觀察到一些“死”過濾器,它們的權重都接近於零,類似於[27]中觀察到的過濾器。然而,如果訓練時間足夠長,這些死過濾器中的一些可能會出現模式。我們將在以后的工作中研究這一現象。

 5.2 從ImageNet學習超分辨率

  如文獻所示,深度學習一般得益於大數據培訓。在上述實驗中,我們使用了包含91幅圖像的標准訓練集,以確保與現有方法的公平比較。在本節中,我們展示了我們的深度模型可以在較大的訓練集下獲得更好的性能。我們總共使用了來自ILSVRC 2013 ImageNet檢測訓練分區的395,909張圖像進行SRCNN學習。這些圖像被分解成500萬子圖像並使用33的步長。我們使用與上述實驗相同的網絡設置,即f1 = 9, f3 = 5, n1 = 64, n2 = 32。由於反向傳播次數相同,ImageNet上的訓練時間與91幅圖像上的訓練時間基本相同。實驗在Set5上進行了測試,使用了向上縮放因子3。在ImageNet上訓練的測試收斂曲線和其他方法的結果如圖6所示。可以看出,用相同數量的反向傳播(即, 8×108), SRCNN+ImageNet達到32.52 dB,高於原始SRCNN對91幅圖像(or)訓練得到的32.39 dB,24800子圖片)。結果表明,使用更大、更多樣化的圖像訓練集可以進一步提高SRCNN的性能

 

 

 5.3 過濾器數量

   與其他CNN結構[14]相比,我們使用相對較小的網絡規模來實現超分辨率的最新性能。一般來說,如果我們以運行時間為代價,擴大網絡規模,例如增加更多的層和過濾器,性能仍然會提高。在這里,我們評估使用不同數量過濾器的性能。具體來說,根據我們的網絡默認設置n1 = 64和n2 = 32,我們又進行了兩個實驗:

(i)其中一個網絡更大,n1 = 128, n2 = 64

 (ii)另一個網絡較小,n1 = 32, n2 = 16

與第5.2節類似,我們還在ImageNet上對這兩個模型進行了培訓,並在Set5上進行了縮放因子測試

 結果如表3所示。很明顯, 使用更多的過濾器可以獲得更好的性能。但是,如果需要較快的恢復速度,最好選擇較小的網絡規模,這樣仍然可以獲得比最先進的性能更好的性能。

 

5.4  過濾器的大小

  在本節中,我們將研究網絡對不同過濾大小的敏感度。在之前的實驗中,我們將第一層的filter size設為f1 = 9,最后一層的filter size設為f3 = 5。這里,我們將過濾器的大小放大到f1 = 11和f3 = 7。所有其他設置與5.2節相同。在Set5上使用縮放因子3的結果為32.57 dB,略高於5.2節中報告的32.52 dB。這表明,一個合理的較大的過濾器大小可以掌握更豐富的結構信息,從而導致更好的結果。然而,隨着過濾器大小的增大,部署速度也會降低。因此,網絡規模的選擇應該始終是性能和速度之間的權衡

 

6.結論

   我們提出了一種新的單圖像超分辨率深度學習方法(SR)。結果表明,傳統的基於稀疏編碼的圖像超分辨率方法可以重構為深卷積神經網絡。提出的SRCNN方法學習低分辨率和高分辨率圖像之間的端到端映射,除了優化之外幾乎沒有額外的預處理和后處理。 SRCNN結構輕巧,性能優於最先進的方法。我們推測,通過探索網絡中更多的隱藏層/過濾器以及不同的訓練策略,可以進一步提高性能。此外,該結構具有簡單、魯棒性強等優點,可應用於圖像去模糊或同時進行SR+去噪等低階視覺問題。人們也可以研究一個網絡來應對不同的升級因素。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM