1. 程式人生 > >基於深度學習框架的超解析度問題一之基本模型架構

基於深度學習框架的超解析度問題一之基本模型架構

目前在調研基於深度學習的觀點對超解析度問題的解決,對於其中的一些方法進行了一個大概的綜述,現將其總結如下:

SRCNN

模型架構

SRCNN是深度學習用在超解析度上的開山之作。首先將圖片通過插值的方式放大到需要變換的尺寸。然後再將放大後的圖片放入到一個3層的卷積神經網路中,最終輸出一個較為清晰的圖片。其對應的3層卷積網路結構如下:

上述網路層次比較簡單但是效果已經能夠遠遠超過傳統的方式。其對應的精確度也與兩次卷積計算的卷積核的多少有關係,卷積核越多其對應的結果越好。該模型的輸入可以使RGB的也可以是YUV中的Y分量。在實驗中作者採用了Y分量進行(主要是為了能夠公平的和目前已有的大部分處理方式進行比較)。但是該模型輸入的較大尺寸的圖片,所以對應的速度較慢。

FSRCNN

模型架構

FSRCNN的提出人和SRCNN是同一個,主要是為了解決SRCNN需要提前進行立方差值作為輸入的問題。FSRCNN的輸入是一個低解析度的圖片,經過一系列的卷積之後,最後採用逆卷積進行上取樣擴大。這樣處理的好處有三點:1. 輸入的資料尺寸較小,這樣計算較快;2. 當需要不同比率的大小時直接微調最後一層的反捲積即可,整個網路的前部分可以共享和複用;3. 整個訓練過程採用3X3的卷積進行,通過一系列的小卷積串聯達到大卷積的目的。

由於輸入的資料尺寸較小,所以此時不在採用9X9的卷積核而是採用5X5的卷積核,同時為了跟別的模型對比,此時依然是對YUV資料中的Y通道進行處理,所以輸入的通道數是1,因此第一層的卷積核是cov(5,d,1),其中d表示卷積核的個數,5表示卷積個的尺寸,1表示卷積計算的輸入通道也就是指卷積計算前的通道數。由於需要將低解析度變成對應的高解析度,因此對低解析度的特徵提取要多一些,這樣才能保證恢復的圖片擁有更多的特徵。所以此時的d往往比較大,對於比較大的d會增加複雜度。因此在後面採用s個1X1的卷積核將其通道數降為s個,即cover(1,s,d);緊接著需要對特徵進行一些非線性的變換;該網路借鑑了VGG的小卷積串聯思想將m個3x3的卷積進行串聯,串聯的卷積核個數始終為s個,即mXcov(3,s,s);特徵提取之後由於用於從建的圖片需要的特徵往往較多,所以在使用d個1X1的卷積核將特徵的個數恢復至d個,即cov(1,d,s),根據實驗顯示如果不使用該層進行恢復,則對應的結果PSNP值下降0.3 。最後使用1個9X9的卷積進行逆卷積計算來擴大維度即cov(9,1,d)。

關於最後一層的卷積主要有以下幾個說明:1. 考慮到如果逆向選取的話(即對高解析度的圖片變換成低解析度的圖片)採用SRCNN提取特徵時使用的是9x9的,因此作者也採用9x9的卷積;2. 根據卷積計算可知,當stride取值為n時,計算後的大小變成原來的1/n,所以逆過來當stride取值為n時,結果就變成原來的n倍。根據上述原理其對應的網路結夠如下:(其中卷積層的stride均為1,即不改變大小)

由上述結構可以看出關於FSRCNN的主要引數是。這也是一些人所說FSRCNN的引數。在該網路中啟用函式採用的是PRELU並且在串聯的3X3卷積中並不適用啟用層,只在最後一個使用。論文作者使用的是56,12,4的引數對效能進行評估,即d=56,s=12,m=4 。其具體效能見後面的效能表。

 

VDSR

模型架構

VDSR其本質上還是對SRCNN的一個改進,只是改進的出發點不一樣。主要針對的是SRCNN輸入的影象較小(雖然放大之後但是總體的輸入只能是較小的輸入,輸入較大時效果不好);收斂慢以及只對某一個固定比率有效(其他比率效果很差,也就相當於無效)這三方面進行的。同時改進的過程中也致力於精度的提高。

 

根據低解析度圖片和高解析度圖片有相同的低頻資訊的特點,採用先將低解析度圖片進行擴大,然後將其直接傳入網路的最後一層和網路直接相加最終得到高解析度圖片的思想,使得網路不在學習所有特徵而是隻學習圖片對應的高頻特徵。這樣雖然網路的層數加深了,但是由於網路學習的特徵不再是所有的特徵,直接導致連線的方式變成了稀疏連結,這樣總體的學習速度反而加快了。其具體結構如上圖:輸入的依然是採用插值方式得到的不清晰的大解析度圖片,輸出的是較為清晰的大解析度圖片,其中所有的卷積核的尺寸均是3X3的。

由於該方法的網路層數比較大(20層)所以其PSNP值相對會高一些,但是同時也會面臨梯度爆炸和梯度消失的風險,因此該網路在訓練的時候採用了迴圈神經網路常用的梯度分割方法,將梯度限制在範圍內,其中表示的是學習率,並且在開始的時候比較大,訓練的過程中隨著步驟會變化會慢慢變小(常用的指數衰減或者幾何衰減)。

針對SRCNN訓練尺寸單一的弊端,該方法採用多個尺度一起訓練,最終得到了可以滿足常用的(2,3,4)倍數的尺度模型,該步驟個人理解只是訓練的資料裡面有不同倍數的圖片對,其網路的結構和引數並沒有發生改變,但是理解並不深入。

由於網路的主要目的是為學習高頻部分,所以本次採用residual_learning來計算損失。其具體的公式為:。相減表示去掉了對應的低頻部分,剩餘的是高頻部分的資訊。

除了上述策略之外,該方法還提出了一個應對卷積變小的策略,就是如果通過卷積計算導致計算後的圖片尺寸變小的話就在圖片周圍補0,通過補0使圖片恢復原來的大小。個人認為該方法並不是原創,也沒有太大的必要,因為在卷積計算時如果使用stride的步長為1,邊界處理的方式為padding=SAME,計算後的尺寸並不會減小。

 

ESPCN

模型架構

ESPCN也是基於SRCNN進行改進的,只不過改進的時候採用的另外一個策略:即輸入的原始解析度較低的圖片,使用亞畫素卷積(sub-pixel convolutional)的方式將低解析度的圖片放大到超解析度的倍數上。其具體結構如下:

如上所示:模型使用了三層卷積計算(和SRCNN的層數相同),前面兩層均是在低解析度圖片上進行的,最後一層卷積要求卷積核的個數是,其中表示放大的倍數,表示圖片的通道數。然後在根據重排列的策略使得最後輸出的通道數變成,圖片的大小變成達到擴大影象尺寸的目的。最後重排列的公式如下:

   表示最後一層特徵圖的位置,  第幾個通道。個人認為第三層卷積生成的結果加上排序的方式在一起才被稱為亞畫素卷積(sub-pixel convolutional)。

該方法利用低解析度特徵進行卷積計算提高了對應的卷積計算速度,同時採用了亞畫素積的方式進行大小的擴張,在準確度上得到了適當的提高;採用tanh的啟用函式,也提高了準確度(實驗表明的)。

LapSRN

模型架構

LapSRN主要是吸取了VDSR和FSRCN的觀點,結合逆卷積和殘差的思想來來提高速度和精度。除此之外該模型還採用了拉普拉斯金字塔的思想來完成當網路多倍數的學習。其主要的出發點是目前無論SRCNN,FSRCNN還是VDSR都存在以下幾方面的問題:

  1. 有些方法在輸入網路之前需要採用預先定義上取樣(比如bicubic)來獲得目標尺寸,這樣增加了額外的計算開銷,但同時也導致了虛影。而有的方法則採用亞畫素卷積和逆卷積取樣,這樣的網路往往過於簡單,效能較差並不能學習到低分辨到高解析度的複雜對映。
  2. 在訓練的時候採用的損失函式,不可避免的會產生模糊的預測,恢復的圖片過於平滑(不是很理解)。
  3. 重建時只採用一次上取樣操作,這樣導致模型在獲得大上取樣(8倍以上)因子時比較困難,而且在不同的上取樣模型往往需要訓練不同的模型(VDSR雖然通過多個尺度一起訓練的方式解決這個問題,但是其能力依然有限)。

針對上述的問題,作者提出使用殘差的思想來加深網路,使用分級上取樣的思想每次上取樣2倍來進行整個結構的擴大(8倍就需要3級),採用Charbonnier懲罰函式來作為誤差計算的方式。並基於這些方法提出了LapSRN模型。其具體結構如下:

由上述結構可以看出該結構是一個分級計算的,其中每一級中間進過一系列的卷積計算(3X3的卷積核,64),卷積之後新增一個逆卷積核(4X4),然後再有兩個分支一個分支繼續進行下一級對應的卷積計算(3X3,64個),另一個分支採用一個卷積提取上取樣之後的特徵(3X3,c個),該特徵就是高頻特徵。除此之外還有一條分路是直接使用逆卷積的計算方式(逆卷積採用的卷積核跟特徵提取時採用的一樣)將原圖進行擴張,最終得到相同倍數的上取樣圖,和卷積網路得出的高頻特徵相加得到恢復後的圖。依次往後可以得到最終需要的大小,並且中間過程是2倍2倍往上增加的。另外對於低層的2倍和4倍那兩級一般卷積核採用的是10層卷積,對於8倍的那一級不希望有太多的卷積規則(文獻上說的,具體原因不詳)因此採用的是5層卷積。

因為該網路有另一條分支直接連線網路的輸出特徵進行相加,所以屬於殘差結構,同時由於其學習的是高頻特徵,因此屬於稀疏連結,所以雖然網路的層數增加了,但是其對應的計算反而減少了,其速度反而提高了。另外每一級的網路都是提高2倍,採用的卷積結構幾乎一樣,所以在每一級之間卷積的引數也是共享的,由於這一共享機制的存在導致該網路在訓練的時候往往也會有更好的速度。

除此之外該網路採用的損失函式是Charbonnier懲罰函式,其具體形式如下:

其中表示第s級網路學習得到的殘差,表示原圖經過上取樣得到的預測圖,根據上述原理,輸出的結果為為真的擴大一定比例的圖片,由於實際在使用中往往不存在同一副圖的多比例原圖,所以一般都是使用最大比例的圖經過插值(bicubic)降到對應的尺寸(這也是一種常用的手段)。表示對應的圖片個數,表示對應的級數。一般取值為1e-3。由上述計算公式可以看出,該結構在計算上是將各級(放大的比例)網路的誤差相結合起來一起發揮作用。

 

SRGAN和SRResNet

模型架構

SRResNet結構簡單的說就是使用殘差模型作為整個網路的主要框架來完成對應的模型構建。該模型的出發點是為了提高精度,因此其採用了更深層次的殘差網路提高準確度。主要是由於殘差網路是目前在ImageNet上取得成績較好的模型,同時根據VDSR殘差可以 提高訓練的速度加深網路的層數,因此採用了殘差的思想,但是這個殘差和VDSR不同,VDSR更多的只是將輸入的低解析度的網路結構直接送入到最後一層,屬於全域性殘差。但是SRResNet的殘差具體是指卷積計算的過程中使用的是殘差塊(Residual block)構建卷積計算(屬於區域性),其對應結構主要如下圖:

根據該結構並結合ESPCN網路的處理方式,採用亞畫素卷積的思想最終就產生了SRResNet的超解析度構建模型,其具體模型架構如下:大部分使用的是3X3的卷積核。

由於該網路結合了最新的ResNet結構和亞畫素卷積,因此其準確度上已經達到了相當高的水平,他可以單獨作為一個超解析度重建的網路模型使用。但是現在提起SRResNet大部分是將其結合進SRGAN模型使用的。SRGAN  模型主要是使用GAN(對抗生成網路)來進行超解析度重建的任務。

GAN模型主要分為兩個網路即G網路和D網路。其中G網路用來生成圖片,D網路用來判斷一張圖片是不是人為生成的,兩個網路的目的是互斥的。也就是說G的目的是儘量生成一張正確的,誤差小的圖片,使其能夠騙過D網路的圖片,讓D網路無法區分;D網路的目的是儘量判斷出G網路生成的圖片,將他與真實圖片分開。當G網路生成的一張圖片,D網路無法判斷時就說明訓練結束了。SRGAN主要就是使用了GAN的思想,將上述SRResNet的結構用於生成網路G的構建,同時將其對應的殘差結構用於D網路的構建,就行成了對應的SRGAN結構,其具體如下:G網路中的B=16(16個殘差塊),D網路存在8個卷積層。