這篇綜述主要介紹目前深度學習領域超分辨率問題的一些方法。首先介紹了圖像超分辨率問題以及問題的評價標准,之后重點介紹了監督學習領域的幾大關鍵,包括上采樣方法、網絡結構、學習策略、其他優化策略等。並且分析了各種不同方法的優缺點。之后介紹了無監督學習的一些方法,最后給出了一些未來可能的研究方向。
圖像超分辨率問題(Image super-resolution, SR)
從低分辨率(LR)的圖像中恢復出高分辨率(HR)的圖像。
可以應用在醫學、監控等領域。
其難點在於,一個LR圖像總時對應了多個HR圖像,因此他是一個不適定性問題。(解存在、唯一並且穩定的則稱該問題是適定的)
通常采用的方法有:基於預測的、基於統計學的、基於邊界的、基於塊的、基於稀疏表示和深度學習。這篇綜述主要介紹深度學習領域的超分辨率方法。
通常認為LR($I_x$)是HR($I_y)$圖像的退化,即$I_x=D(I_y;\sigma)$。其中只有$I_x$是已知的,$D$為退化函數。SR問題就是需要根據$I_x$得到HR圖像的一個近似$\widehat{I_y}=F(I_x;\theta)$,因此需要估計對退化函數進行估計。
一種估計方式是將其認為是單一的下采樣操作,即$D(I_y;\sigma)==(I_y)\downarrow_s,{s}\subset\sigma$, s為縮放因子
另一種估計$D(I_y;\sigma)=(I_y\otimes \kappa)\downarrow_s+n_{\epsilon}, {\kappa,s,\epsilon}\subset\sigma$,其中$I_y\otimes \kappa$是blur kernel與$I_y$的卷積,$n_{\epsilon}$是標准差為$\epsilon$的高斯白噪聲。這種估計方式更接近現實,效果更好。
因此SR問題的目標就可以表述成:
$\widehat{\theta}=argmin_{\theta}L(\widehat{I_y},I_y)+\lambda\phi(\theta)$,其中$\lambda$為tradeoff參數,$\phi(\theta)$為regularization term
相關競賽:
- NTIRE, CVPR
使用DIV2K數據集。超分辨率上有四個賽道,其中一個為使用經典的bicubic降尺度方式作為待重建圖像,進行8倍放大重建。這也是目前大部分文獻中最常見的設置方式之一。而其余三個賽道均是來自不同程度(Mild、Difficult、Wild)未知退化算子模擬相機采集的待重建圖像,進行4倍放大重建。
- PIRM, ECCV
圖像質量評估(Image Quality Assessment, IQA)
可以從主觀和客觀兩個角度對圖像的質量進行評估,一般以客觀角度為主,不同角度可能會導致結果不一致。
客觀IQA根據使用參考圖像情況不同,主要分為三類:full-reference; reduced-reference; no-reference
下面介紹集中主要的IQA。
峰值信噪比(Peak Signal-to-Noise Ratio, PSNR)
是目前最受歡迎的對有損變換的重建質量評估之一
$PSNR=10log_{10}(\frac{L^2}{\frac{1}{N}\sum_{i=1}^{N}(I(i)-\widehat{I}(i))^2})$,$L$為像素可達到的最大值。
缺點是僅考慮了像素級別的均方差,沒有考慮視覺角度。
結構相似度(Structural Similarity, SSIM)
從亮度、對比度和結構三個角度對圖像質量進行獨立的評估,更接近人眼視覺。
$\mu_I=\frac{1}{N}\sum_{i=1}^{N}I(i)$
$\sigma_I=\frac{1}{N-1}\sum_{i=1}^{N}((I(i)-\mu_I)^2)^\frac{1}{2}$
$C_l(I,\widehat{I})=\frac{2\mu_i\mu_{\widehat{I}}+C_1}{\mu_I^2+\mu_{\widehat{I}}^2+C_1}$
$C_c(I,\widehat{I})=\frac{2\sigma_i\sigma_{\widehat{I}}+C_2}{\sigma_I^2+\sigma_{\widehat{I}}^2+C_2}$
$C_1=(k_1L)^2, C_2=(k_2L)^2$,其中$k_1, k_2\llless1$用於避免不穩定
$\sigma_{I\widehat{I}}=\frac{1}{N-1}\sum_{i=1}^{N}(I(i)-\mu_I)(\widehat{I}(i)-\mu_{\widehat{I}})$
$C_s(I,\widehat{I})=\frac{\sigma_{I\widehat{I}}+C_3}{\sigma_I\sigma_{\widehat{I}}+C_3}$
$SSIM=[C_l(I, \widehat{I})]^\alpha[C_c(I,\widehat{I})]^\beta[C_s(I,\widehat{I}]^\gamma$
平均主觀意見分(Mean Opinion Score, MOS)
常用的主觀IQA,由人來給圖像評分,1~5表示從壞到好,最后取平均。
缺點:評分標准的偏差和方差以及尺度都是非線性感知的【?】
基於學習的感知質量(Learning-based Perceptual Quality)
- No-reference Ma, NIMA:根據主觀視覺分數
- DeepAQ:預測視覺相似性
- LPIPS:根據深層特征的差異評估perceptual image patch similarity(LPIPS)
訓練網絡對圖像的質量進行預測,目前的主要問題是我們所需要哪些視覺特征仍未知。
基於任務(Task-based Evaluation)
SR任務可以作為其他任務的基礎,提升其他任務的表現。因此可以根據其他任務的表現對SR任務進行評估
其他
MS-SSIM, 多尺度SSIM
FSIM, feature similarity
NIQE, Natural Image Quality Evalutor
基於監督學習超分辨率
模型框架
SR任務需要使用上采用算法得到更高分辨率的圖像,在結合深度學習網絡優化圖像質量。根據上采樣的階段不同划分為四種類型的模型框架。
-
Pre-upsampling
上采樣過程在神經網絡之前,此時的CNN只需學習如何refine,因此學習難度大大降低。並且可以接收任意大小的輸入圖片和縮放因子而不需重新訓練神經網絡。
缺點在於圖像中的噪聲和模糊會被放大,過程中的大部分操作都在高維空間進行時空復雜度大。
-
Post-upsampling
輸入先通過深層神經網絡,最后通過端到端可學習上采樣層。將操作集中在低維空間,大大減少時空復雜度。但缺點是無法適應多尺度情況,且在縮放尺度較大時,由於只進行了一次上采樣因此學習難度較大。
-
Progressive upsampling
不斷重復經過神經網絡和上采樣層,減小學習難度同時也可以適應多尺度問題,且沒有過度增大時空復雜度。缺點在於這樣的模型多階段和訓練的穩定性難以保證,模型設計比較復雜。未來在這方面需要更多的模型設計值得和更先進的訓練策略。
-
Iterative up-and-down sampling
利用重建誤差重復應用反向投影進行優化,可以更好地挖掘LR-HR圖像之間的深層關系,從而提供更高質量的重建結果。缺點在於目前反向投影模塊的設計標准仍不是很明確,這也意味着這還有比較大的研究潛力。
上采樣方法
主要分為基於插值和基於深度學習兩大類。
基於插值
易於實現,可解釋性強,僅根據圖像本身信息。比較常用的方法有:
- 最近鄰插值,Nearest-neighbor Interpolation
將目標各點的像素值設為源圖像中與其最近的點。速度快,但通常會導致低質量的塊狀圖案。
- 雙線性插值,Bilinear Interpolation
選取源圖像中最近的2$\times$2,先在一個坐標軸上進行一次線性插值,再在另一個坐標軸上進行線性插值。
上圖中目標點為P,選取的點為四個Q。先以橫坐標進行線性插值,得到兩個R點,再用R以縱坐標進行線性插值。
- 雙三次插值,Bicubic Interpolation
在兩個坐標軸上進行三次插值,考慮的是4$\times$4的范圍。得到的結果會更光滑,失真更少,但速度較慢。
基於深度學習
- 反卷積,Transposed Convolution Layer
可以視為與卷積對稱的過程。如果我們將卷積的過程表示為矩陣,輸入和輸出均為列向量。那么卷積可以表示為$Y=CX$, 反卷積可以表示為$X=C^TY$。反卷積過程可以恢復$X$的大小,但不能恢復每個元素值。
缺點:can easily cause "uneven overlapping" on each axis; the multiplied results on both axes further create a checkerboard-like pattern of varying magnitudes【?】
- 子像素層,Sub-pixel Layer
用卷積操作生成$s^2$個channel,再reshape。與反卷積相比感受野更大,可以提供更多的信息。
缺點是感受野分布不平均且塊狀區域共享相同的感受野會導致不同塊的邊界處存在失真。獨立預測塊狀區域相鄰像素會導致不光滑結果。
- 任意縮放模塊,Meta Upscale Module
對HR中每一個目標位置,將其映射到LR特征圖中的一小塊區域,預測卷積權重。對於任意的縮放因子可以不斷縮放。缺點是結果可能不穩定,當遇到較大的縮放因子時效率不高。
網絡設計
殘差學習 Residual Learning
分為全局和局部的,但都使用shortcut connections和element-wise addition。區別在於全局的直接連接input和output,僅學習輸入與target件的殘差,只需學到一個residual map 用於存儲丟失的高頻細節。局部的類似ResNet,在不同層直接進行shortcuts用於減輕-准確率下降問題(degradation problem)。層級大到一定程度時准確率就會飽和,然后迅速下降,這種下降即不是梯度消失引起的也不是overfit造成的,而是由於網絡過於復雜,以至於光靠不加約束的放養式的訓練很難達到理想的錯誤率。degradation problem不是網絡結構本身的問題,而是現有的訓練方式不夠理想造成的。
遞歸學習 Recursive Learning
將某些模塊重復多次,從而不會引入大量參數。優點是不需引入大量的新參數,可以學得更advanced representations。缺點是仍不能避免high computational costs,並且會帶來梯度消失/爆炸的問題。
多路徑學習 Multi-path Learning
利用不同路徑(進行不同的操作),從而大幅提升學習能力。分為全局、局部和指定尺度。
全局多路徑利用不同路徑從不同角度提取圖片特征,這些路徑可以在propagation過程中進行交叉。指定尺度多路徑是共享一些principle component(用於特征提取的中間層),再在前后接上多個與規模相關的預處理路徑和上采樣路徑。在訓練時,只有與尺度對應的路徑會被激活並更新。
稠密連接 Dense Connections
可以從層級別/塊級別進行稠密連接,某一層特征會作為所有后續層的輸入。優點是減輕梯度消失,增強信號傳播,鼓勵特征重用。並通過使用小growth rate,squeezing channels減小模型的大小。
注意力機制 Attention Mechanism
主要有通道注意力和非局部注意力。通道注意力考慮了不同通道特征表示間的相互依賴。
Advanced Convolution
- 空洞卷積 Dilated Convolution
空洞卷積:在卷積核中間填充0,有兩種實現方式,第一,卷積核填充0,第二,輸入等間隔采樣。可以擴大感受野,捕捉多尺度上下文信息,而不引入額外參數。但會造成局部信息的丟失
- 分組卷積 Group Convolution
假設常規卷積的輸入尺寸為$C\times H\times W$,卷積核尺寸為$C\times K\times K$,卷積核數量為$N$.現在分成$G$組,每組的輸入變為$\frac{C}{G}\times H\times W$,卷積核尺寸也相應的變為$\frac{C}{G}\times K\times K$.則卷積的總參數量變為原來的$\frac{1}{G}$
- 深度可分離卷積 Depthwise Separable Convolution
當分組卷積的分組數等於輸入的特征圖數,就變為了深度可分離卷積。
區域遞歸學習【?】
propose pixel recursive learning to perform pixel-by-pixel generation, by employing two networks to capture global contextual information and serial generation dependence, respectively
一種基於概率的模型,引入了像素之間的條件獨立性。但預測時需要逐個像素,比較慢
缺點:a long propagation path greatly increases the computational cost and training difficulty
金字塔池化
小波變換
將圖像信號分解為包含紋理細節的高頻子帶核包含全局拓撲信息的低頻子帶。
逆亞像素 Desubpixel
上采樣sub-pixel中shuffle的反操作。將圖像像素分開,堆成額外的channel從而避免信息丟失。先將圖像desubpixel操作,在低維空間學習,最后上采樣至對應尺寸。
xUnit
一種帶有可學習參數的激活函數,適合圖像恢復類的任務。可以捕捉更復雜的特征從而減少層數和參數。
class Modulecell(nn.Module): def __init__(self,in_channels=1,out_channels=64,kernel_size=3,skernel_size=9): super(Modulecell,self).__init__() self.features = nn.Sequential( nn.Conv2d(in_channels,out_channels,kernel_size=kernel_size,padding=((kernel_size-1)//2))) self.module = nn.Sequential( nn.BatchNorm2d(out_channels), nn.ReLU(), nn.Conv2d(out_channels,out_channels,kernel_size=skernel_size,stride=1,padding=((skernel_size-1)//2),groups=out_channels), nn.BatchNorm2d(out_channels), Gaussian()) def forward(self,x): x1 = self.features(x) x2 = self.module(x1) x = torch.mul(x1,x2) return x
學習策略
損失函數
通常是將多種損失函數通過加權的方式結合在一起。
- 像素級損失
計算圖像像素級的差異,主要包含$L_1$loss (mean absolute error)和$L_2$loss (mean square error)
$L_{pixel-l1}(\widehat{I}, I)=\frac{1}{hwc}\sum_{i, j, k}|\widehat{I}_{i, j, k}-I_{i, j, k}|$
$L_{pixel-l2}(\widehat{I}, I)=\frac{1}{hwc}\sum_{i, j, k}(\widehat{I}_{i, j, k}-I_{i, j, k})^2$
$L_1$loss變體Charbonnier loss:
$L_{pixel-Cha}(\widehat{I}, I)=\frac{1}{hwc}\sum_{i, j, k}\sqrt{(\widehat{I}_{i, j, k}-I_{i, j, k})^2+\epsilon^2}$
缺點是不考慮圖像質量,可能會丟失高頻的細節;可能會導致紋理過於光滑。
- 內容損失
使用預訓練的圖像分類網絡$\phi$計算圖像間的語義差別
$L_content(\widehat{I}, I;\phi, l)=\frac{1}{h_lw_lc_l}\sqrt{\sum(\phi_{i, j, k}^{(l)}(\widehat{I})-\phi_{i, j, k}^{(l)}(I))^2}$,其中$l$表示網絡的第$l$層
鼓勵圖像在視覺上相近而不是讓像素值一樣。
- 紋理損失
$L_texture(\widehat{I}, I;\phi, l)=\frac{1}{c_l^2}\sqrt{\sum(G_{i,j}^{(l)}(\widehat{I})-G_{i,j}^{(l)}(I))^2}$
$G_{i,j}^l(I)=vec(\phi_i^(l)(I))\cdot vec(\phi_j^(l)(I))$,$\phi_i^l(I)$為圖像$I$在$l$層的特征圖的第$i$個channel
缺點是目前決定需要匹配紋理的patch的大小仍依賴經驗
- 對抗損失
將SR模型視為一個generator,再定義一個discriminator,使用GAN的方法。可以提取處潛在的難以學習的特征,使HR圖像更加真實。
缺點是目前GAN的訓練過程比較困難且不穩定。
- 循環一致性損失
將得到的HR圖像$\widehat{I}$通過另一個CNN下采樣得到另一個LR圖像$I'$,使$I$與$I'$一致。
$L_{cycle}(I', I)=\frac{1}{hwc}\sqrt{\sum_{i,j,k}(I'_{i,j,k}-I_{i,j,k})^2}$
- 全變分損失
$L_{TV}(\widehat{I})=\frac{1}{hwc}\sum_{i,j,k}\sqrt{(\widehat{I}_{i,j+1k}-\widehat{I}_{i,j,k})^2+(\widehat{I}_{i+1,j,k}-\widehat{I}_{i,j,k})^2}$
用於衡量噪聲得到更加光滑的圖像
- 基於先驗損失
引入先驗知識,保持結果與先驗的一致性。
Batch Normalization
最初是為了解決內部協方差平移(ICS)問題引入的,通過校准內部特征分布減輕梯度消失,使網絡可以使用更高的學習率,不需要過分關心初始化。
但一些人認為BN丟失了每個圖像的scale信息,gets rid of range flexibility from networks.去除BN,用省下的內容搭建更大規模的網絡。
內部協方差平移問題:輸入分布經過多次線性非線性變換已經改變,但對應的分類未變。每個神經元的輸入數據不再是“獨立同分布”,會導致上層網絡需要不斷適應新的輸入數據分布,使學習速率降低。而下層輸入的變化可能趨向於變大或變小,導致上層落入了飽和區,使得學習過早停止。並且每一層的更新都會影響到其他層,因此每層的參數更新策略都需要盡可能謹慎。
Curriculum Learning
是指學習時從小任務開始,逐步提升學習難度。針對大縮放任務進行分解,比如將放大8倍的任務分解為,1倍到2倍,2倍到4倍,4倍到8倍的子任務,對這些子任務單獨訓練並以一定策略拼接優化。可以大幅度減小學習難度,縮短訓練的總時間。
多監督
在模型中引入多個監督信號,避免梯度消失/爆炸問題(,可以和遞歸學習進行結合)。實際操作中通常是在損失函數中添加一些額外的項。
其他改進
Context-wise Network Fusion, CNF
對多個SR網絡的預測結果進行融合。
數據增強
圖像領域的常用操作,如切割、翻轉、縮放、旋轉等
多任務學習
通過利用其他相關任務訓練數據中包含的指定領域信息提升泛化能力。
網絡插值
將具有相同結構的網絡參數進行線性組合,通過調整權重可以實現平滑連續的效果。在SR任務中,可以對同一結構但使用不同loss函數的網絡參數進行線性組合,可以綜合不同loss的優點。
Self-Ensemble
將原圖像進行旋轉、對稱等操作,全部通過SR網絡得到HR圖像后取平均或是中值作為結果。
目前比較好的監督學習超分辨率模型
無監督學習超分辨率
對於同一個場景通常很少會有多種分辨率的圖像,所以一些超分數據集實際上都是對HR的圖像進行一些退化處理,這會引入一些人工的退化先驗,並且與真實世界的情況有些不同。無監督學習的方法有非常大的研究價值。
Zero-shot SR, ZSSR
在測試時進行訓練,對要測試的圖像$I$用不同縮放比進行一系列下采樣,再進行圖像增強得到一組圖片。學習這組圖片到測試圖像$I$之間的映射,用這個映射去獲得$I$所對應的HR圖像。由於是在測試時對不同圖片進行學習,因此預測的耗時長。
弱監督學習SR
- 學習退化函數
先訓練一個HR-to-LR的GAN,學到退化函數,用這個退化函數生成HR-LR對。再訓練LR-to-HR GAN
- Cycle-in-cycle SR
將LR和HR視為2個不同的域,訓練的目標是將映射結果與對應域的分布相同,同時圖像又要可恢復。
深層圖像先驗
利用一個任意初始化的CNN作為先驗。訓練一個generator,將任意輸入向量生成一張HR圖像,目標是找到一個HR圖像其下采樣剛好是LR圖像$I_x$
未來研究方向
- 網絡設計
- 結合全局和局部信息
- 結合高層和低層信息
- 關注於紋理的注意力機制
- 更高效的結構,減小模型大小提升速度
- 上采樣方法,現有的上采樣方法都有一些缺點
- 學習策略
- SR問題最佳的損失函數尚不明確
- 有效的規范化的方法
- 評估指標
- 目前SR質量還沒有統一公認的度量指標
- Blind IQA Methods。目前的主要評估方法需要LR-HR圖像對,但這樣的真實圖像對是比較難獲取的。
- 無監督學習
- 針對現實世界
- 處理多種退化。目前人工處理得到的數據集訓練出的網絡在真實情況下表現不好。
- 具有領域針對性的應用