1. SRCNN
論文題目:Learning a Deep Convolutional Network for Image Super-Resolution
存在的問題
現在比較能取得比較好的性能的方法都是基于樣本的(example-based)。基于樣本的方法有兩大類,一類是基于內部相似性的(internal similarity),另一類是基于外部的(external example-based)。其中,稀疏編碼(sparse coding)作為基于外部的樣本學習的代表,由下面幾個步驟組成:
1. 重疊的小塊(batch)從圖像中密集提取并進行預處理。
2. 小塊被編碼成低像素的字典(low-resolution dictionary)。
3. 這些字典的稀疏系數被傳遞到高低像素字典(high-resolution dictionary)。
4. 這些重疊的重建過的小塊被聚集或者平均,作為重建的輸出。
但是,這些過程中,只有建立字典的過程被優化了,其余的過程都沒有經過優化。
解決的問題
在本文中,提出來一種從低像素到高像素的端到端的卷積神經網絡(SRCNN, super-resolution convolutional neural network)。在這個過程中,我們沒有運用到字典,被隱藏節點(hidden units)代替了。并且,提取,聚集以及平均等操作被卷積操作代替了。所以,我們整個的過程都是被優化的。相比稀疏編碼只有字典部分是優化的,我們能取得更好的性能。
所提出的SRCNN具有幾個吸引人的性質。首先,它的結構是故意設計的,簡單的思想,但與最先進的基于樣本的方法相比提供了卓越的精度。第二,使用中等數量的濾波器和層,我們的方法即使在CPU上的實際在線使用也實現了較快的速度。我們的方法比一系列基于樣本的方法更快,因為它是完全前饋的,不需要解決任何使用上的優化問題。第三,實驗表明,當(i)可用數據集較大時,和/或(ii)使用較大的模型時,網絡的恢復質量可以進一步改善。相反,更大的數據集/模型可能對現有的基于樣本(example-based)的方法是一個挑戰。
論文要點
1.? 我們首先使用雙三次插值將其升級到所需的大小,這是我們執行的唯一預處理。即神經網絡的輸入和輸出的大小是相同的。但是我們扔將輸入稱為低像素圖片,因為其由插值得來。
2. 神經網絡的重點是學習一個映射F,它在概念上由三個操作組成:
(1) 小塊提取和表示:該操作從低分辨率圖像Y提取(重疊)小塊,并將每個小塊表示為高維向量。 這些向量包括一組特征映射,其數量等于向量的維度。
圖像恢復中的流行策略是密集地提取小塊,然后通過一組預訓練的基底(例如PCA,DCT,Haar等)來表示它們。這等效于通過一組濾波器對圖像進行卷積,每個濾波器是一個基礎。在我們的公式中,我們涉及這些基礎的優化到網絡的優化。正式地,我們的第一層被表示為操作F1:
其中,W1和B1分別表示濾波器和偏差。這里W1的大小是cxf1xf1xn1,其中c是輸入圖像的通道數量,f1是濾波器的空間尺寸,n1是濾波器數量。直觀地,W1在圖像上應用n1個卷積,并且每個卷積有一個核大小。輸出由n1個特征圖組成。B1是n1維向量,其每個元素與濾波器相關聯。我們對濾波器響應應用修正線性單位。
(2) 非線性映射:該操作將每個高維向量非線性地映射到另一高維向量。每個映射向量在概念上是高分辨率小塊的表示。這些向量包括另一組特征映射。
第一層為每個小塊提取n1維特征。在第二操作中,我們將這些n1維向量中的每一個映射成n2維向量。這等效于應用具有簡單空間支持1×1的n2個濾波器。第二層的操作是
這里,W2的大小為n1×1×1×n2,B2為n2維。每個輸出n2維向量在概念上是將用于重建的高分辨率小塊的表示。可以添加更多的卷積層(其空間支持是1×1)以增加非線性。但這會顯著增加模型的復雜性,因此需要更多的訓練數據和時間。在本文中,我們選擇在此操作中使用單個卷積層,因為它已經提供了令人滿意的質量。
(3) 重建:該操作聚集上述高分辨率小塊片表示以產生最終的高分辨率圖像。該圖像預期與X相似。在傳統方法中,預測的重疊高分辨率小塊經常被平均以產生最終的完整圖像。平均可以被認為是在一組特征圖上的預定義濾波器(其中每個位置是高分辨率小塊的“平展”矢量形式)。由此,我們定義卷積層以產生最終高分辨率圖像:
這里W3大小為n2×f3×f3×c,B3是一個c維向量。
如果高分辨率小塊的表示在圖像域中(即,我們可以簡單地重構每個表示以形成小塊),我們期望濾波器像平均濾波器那樣工作;如果高分辨率小塊的表示在某些其他域中(例如,就某些基底而言的系數),則我們期望W3的行為像首先將系數投影到圖像域上,然后進行平均。在任一方式中,W3是一組線性濾波器。
有趣的是,雖然上述三種操作是由不同的直覺驅動的,但它們都導致與卷積層相同的形式。我們把所有三個操作放在一起,形成一個卷積神經網絡。在這個模型中,所有的過濾權重和偏差都要優化。
3. 與基于稀疏編碼的方法的關系
在基于稀疏編碼的方法中,讓我們考慮從輸入圖像中提取f1×f1低分辨率小塊。該小塊被其平均值減去,然后被投影到(低分辨率)字典上。如果字典大小是n1,這等價于在輸入圖像上應用n1個(f1xf1)線性濾波器(平均減法也是線性運算,所以可以被吸收)。
然后將稀疏編碼解算器應用于投影的n1系數。解碼器的輸出是n2個系數,并且在稀疏編碼的情況下通常是n2=n1。這些n2系數是高分辨率小塊的表示。在這個意義上,稀疏編碼解碼器表現為非線性映射算子。然而,稀疏編碼解碼器不是前饋的,即,它是迭代算法。相反,我們的非線性算子是完全前饋的,可以有效地計算。我們的非線性算子可以被認為是像素級完全連接層。
然后將上述n2個系數(在稀疏編碼之后)投影到另一(高分辨率)字典上以產生高分辨率小塊。然后將重疊的高分辨率小塊進行平均。如上所述,這等價于n2個特征圖上的線性卷積。如果用于重建的高分辨率小塊具有大小f3×f3,則線性濾波器具有大小f3×f3的等效空間支持。
上述討論表明基于稀疏編碼的SR方法可以被視為一種卷積神經網絡(具有不同的非線性映射)。但是在基于稀疏編碼的SR方法的優化中沒有考慮所有的操作。相反,在我們的卷積神經網絡中,低分辨率字典,高分辨率字典,非線性映射,以及平均減法和平均,都涉及要優化的濾波器。因此,我們的方法優化了由所有操作組成的端到端映射。
上面的類比也可以幫助我們設計超參數。例如,我們可以將最后一層的濾波器大小設置為小于第一層的濾波器大小,因此我們更依賴于高分辨率小塊的中心部分(到極端,如果f3=1,則使用沒有平均的中心像素)。我們也可以設置n2。
4. 損失函數:MSE(均方誤差)。
2. SRCNN+
論文題目:Image Super-Resolution Using Deep Convolutional Networks
存在的問題
對SRCNN進行優化。
解決的問題
1. 運用更大尺寸的濾波器在非線性映射層和添加了更多非線性映射層,嘗試了更深的結構。
2. 我們擴展了SRCNN到三色道(three color channels),實驗表明,比起用單色道(single channel),性能有提升。
3. 我們用了更大的數據庫(200張)。
論文要點
基本和上篇一模一樣。
3. CSCN(Cascade sparse coding based network)
論文題目:Deep Networks for Image Super-Resolution with Sparse Prior
解決的問題
在傳統的稀疏編碼上加上深度學習的幾個思想。
(1) 在LISTA的基礎上,完善了前向神經網絡,它的每一層和稀疏編碼的處理流都是一一對應的。
(2) 在對每一層的物理意義理解的初上,我們能初始化更有原則性地對參數進行初始化。
(3) 之前的神經網絡只能對特定放大率的圖片使用,對于不同的方法率要重新訓練不同的網絡。這篇論文的提出了瀑布式的多SCNs以達到對任意放大率的都可以實現的效果。
論文要點
1. 輸入是低分辨率圖片經過雙三次插值得到的高分辨率大小的低分辨率圖片。
2. 模型結構:
(1) 輸入圖片經過一個卷基層,這層是對每一個LR patch提取特征。
(2) 每個LR patch被輸入到LISTA網絡中,在有限的循環階段k后,得到稀疏編碼。LISTA的每個階段由兩個線性層和一個非線性層組成。
(3) 最后一層里,所有被恢復的patch都被放到HR對應的位置。這通過卷積過濾器實現。
3. 代價函數: MSE
4. SCN的好處:
(1) 之前的神經網絡的參數優化,有的是固定一些參數不變,再去調其他的參數,或者有的事事人為的設定的,但在SCN中,所有的參數都是一起被優化的。
(2) 和之前的CNN的網絡相同的地方是在第一層都用了卷積層進行patch提取和重建,不同的地方是我們用了LISTA子網絡進行稀疏表達。
5. 網絡瀑布:
為了解決為每個放大率都進行訓練一個模型,我們采用了瀑布式的設計。不斷地重復一樣的放大率在一個圖片上,直至達到想要的放大率。比如想得到8倍的放大率圖片,將低分辨率先擴大2倍,然后再擴大2倍,再擴大2倍。而不是直接擴大8倍。并且實驗表明,對于慢慢地擴大放大率得到的效果比一次性擴大8倍的效果好得多。
所以CSCN同樣是一個深度神經網絡,每個SCN的輸出,在被雙三次插值后都作為下一個SCN的輸入。
4. VDSR
論文題目:Accurate Image Super-Resolution Using Very Deep Convolutional Networks
存在的問題
盡管SRCNN在解決超分辨率的問題開了先河,但是依然在三個方面存在著問題:
(1) SRCNN依賴于小圖片塊的內容;
(2) 收斂速度太慢;
(3) 網絡只能適用于單一的放大率。
解決的問題
本文提出了VDSR來解決上面的三個問題。
(1) 內容:這個模型利用了大的圖片區域。對于大的放大率來說,小的圖片塊的信息提供的細節常常不足以恢復圖片。使用的方法是用一個很深的網絡,并且使用大的感受野以利用大的圖片塊內容。
(2) 收斂速度:利用了殘差學習CNN和很大的學習速率。
(3) 放大因子:訓練一個適用于多放大因子的模型。
論文的要點
1. 網絡結構
(1) 第一層,提取特征。 最后一層用于圖片重建,由3x3x64的單一濾波器組成。中間的d個層,由3x3x64的濾波器組成。
(2) 低分辨率插值后作為輸入。
2. 對于靠近邊緣的像素,center-surround的關系不能很好的利用。為了解決這個問題,我們用了zero-padding的方法。
3. 殘差學習。我們發現殘差網絡收斂的更快,并且取得更好的表現。
4. 學習速率是0.1的時候,比學習速率是0.01和0.001都要好。
5. Adjustable gradient clipping: 將梯度限制在一個范圍內[-x/r,x/r]。r是當前學習速率。
5. DRCN
論文題目:Deeply-Recursive Convolutional Network for Image Super-Resolution?
存在的問題
在許多神經網絡中, 為了增加感受野,通常的做法是增加神經網絡的深度。要么在卷積層用大于1x1的濾波器,要么是用pooling層減少中間表現層的維度。但這兩種方法都有缺點,卷積層會用到更多的參數,池化層會丟棄掉像素級別的信息。
此外,增加神經網絡的深度會帶來更多的參數,這就會引起兩個問題,一個是過擬合,另一個是模型變得巨大以至于不能被存儲和恢復。
解決的問題
為了解決上面提出的問題,本文提出了一種深度循環卷積神經網絡(DRCN),旨在重復地利用相同的卷積層。這樣,參數的數量就不會增加,盡管重復執行了許多次。此外,我們采用了比SRCNN更大的感受野(41x41)。但是,如果用傳統的隨機梯度下降的辦法,會很難收斂,因為這個是由于梯度消失/爆炸引起的。
為了解決這個問題,本神經網絡用了兩種方法解決這個問題。一個是recursive-supervision,另一個是skip-connection。
論文要點
1. 網絡模型:
這個模型由三個子網絡組成:嵌入層,推斷層和重建層。
嵌入層(embedding net): 接收輸入層,然后用一系列的feature maps來表示他。
推斷層(inference net): 該層解決超分辨率任務的主要成分。通過單一的循環層來分析圖片的大片區域。
重建層(reconstruction net): 將推斷層的輸出進行重建,以恢復原始的圖像。
2. ?迭代監督(Recursive-supervision):
為了解決梯度和最優迭代次數的問題,用了一個改進型模型。為了減輕梯度爆炸/消失的影響,我們監督所有的迭代。我們用了所有的D個中間預測去計算最終的輸出。所有的預測在測試的時候都被平均。
一個相似但是不同概念的監督中間層被Lee層提出。但是有兩個不同,他們為每個隱藏層都用了一個特殊的分類器,每個分類器都需要新的參數。如果我們用了他們的想法,那么我們就需要D個不同的重建層。但這個和我們的初衷是違背的,因為這樣的話又增加了許多參數。還有個不同的是,Lee他們在test的時候,是丟掉了中間的分類器的。只在訓練模型的時候用到。但是無論如何,這種借用了他們思想的ensemble模型提高了我們的性能。
這種方法有兩個好處:
(1) 如果監督信號直接從損失層到之前的迭代層,方向傳播就只會通過很少的層數。這樣把所有的梯度方向傳播的結果加起來會得到一個相對平滑的結果。這樣能減輕了梯度消失/爆炸的問題。
(2) 這個方法對選擇最優迭代次數也是有好處的因為我們的監督能利用中間層的輸出。如果迭代太深,那么我們期望后面預測的參數會很小,反之亦然。通過觀察參數的變化,我們能推斷出迭代次數是否最優。
如果參數不允許被共享,那么我們也提出了CNN的擴展版本,但是這個模型參數會成指數級增長。
3. 跨越連接(skip-connection):
對于SR問題,輸入和輸出具有高度的關聯性。我們增加了一個跨越層,將輸入圖片直接喂入重建層。這樣做有兩個好處:
(1) 在迭代期間,存儲輸入信號的網絡能力被保留了下來。
(2) 輸入信號的準確拷貝將在預測中被直接利用。
雖然這個方法簡單,但是十分有效。
4. 訓練
目標函數: 最小二乘法
評價指標: PSNR
5. 效果