老照片修復之Bringing Old Photos Back to Life


1. 摘要

老照片修復中面臨着許多的圖像處理問題,比如填孔洞、去划痕、上色、去噪等,也就是說包含了多種圖像退化問題。而使用深度學習進行訓練時往往需要制造樣本對,但是真實的低質量數據包含多種退化問題,想要通過正常圖像模擬出完全符合數據分布的低質量圖像幾乎是不可能的。(同樣的問題在Deblur、SR、Denoise等Low level問題中也有遇到)
在這里插入圖片描述
為了回避樣本制造的問題,本文將老照片修復模擬成三域轉換的問題,三個域分別是真實的老照片的域 R 、合成的低質照片的域 X 、真實的高質照片(GT)的域 Y 。整體的思路如下面這張圖所示。
在這里插入圖片描述
簡單地介紹上面圖中的表達的意思就是,從域 X XX 可以轉換到低維的 latent space$Z_{x}$,同樣地,從域 R 可以轉換到低維的 latent space $Z_{r}$ 。雖然合成的退化圖像 x 與真實圖像 z 在退化方式等方面存在差異,但都是損壞了的圖像,有許多相似表現。因此,通過一些約束可以盡量讓$Z_{r}$與$Z_{x}$分布盡量重合,也就是上圖中的虛線的部分。由於 x 是由 y 合成,兩者之間存在聯系,可以將$z_{x}$轉換到$z_{y}$,再由$z_{y}$恢復出 y 。這樣就形成了一個弱監督,通過拉近$Z_{r}$與$Z_{x}$,然后借助從$z_{x}$到 y 的途徑來恢復出高質量的 Z 。這就是文章三域轉換的主要思想。

2. 網絡結構

本文的模型主要由三個部分組成兩個變分自編碼器(variational autoencoder,VAE)和一個latent space 映射網絡 $\tau$,每個部分都可以看作是單獨的一個模塊。下面將介紹網絡設計的思想和不同部分的作用。
在這里插入圖片描述
作者使用了兩個 VAE:

第一個 VAE 用於將合成的老照片(模糊、磨損)進行編碼到隱空間。

第二個 VAE 用於將對應的干凈的老照片進行編碼。

然后,在隱空間學習從污損的老照片到干凈照片的映射。

就這樣,實現了一個老照片的修復算法。

這個有點像在學習控制圖片清晰、磨損的一個特征表示,通過控制這個特征,可以達到修復破損照片的目的。

下面詳細介紹下:

2.1 VAE

首先是最上方的$VAE_{1}$,由編碼器 $E_{R,X}$與生成器$G_{R,X}$組成,它將圖像 r rr 與 x 分別編碼到$Z_{r}$與$Z_{x}$,然后再重新恢復;並且使潛在編碼符合都高斯分布(以及使用重參數化技巧使模型可以進行訓練,都是VAE方法中的技巧)。當輸入為 r 時,它的目標函數表達式如下;
在這里插入圖片描述
第一項使用是$VAE$訓練時使用到的約束項,用KL散度約束潛在編碼的分布接近高斯分布,其中$E_{R,X}(z_{r}|r)$表示輸入為 r 時通過$E_{R,X}$得到的$z_{r}$服從的先驗概率分布。第二項表示通過$VAE$編碼恢復結果與輸入數據 r 之間的$l_1$ loss,這一項是latent code有了明確的含義。第三項是一個LSGAN loss,眾所周知,VAE生成的結果往往過於平滑,而GAN的生成結果的高頻細節更加豐富,所以作者在這里引入一個GAN loss。輸入為 x 時也使用同樣的 loss 進行訓練,$VAE_{2}$用於訓練 y,也使用同樣的 loss 進行約束。

因為 r 與 x 共用一個VAE,這使得兩者的latnet space 非常靠近,為了更進一步拉近$Z_{r}$與$Z_{x}$,作者又使用了一個判別器,與之前的GAN loss不同,這個判別器用來區分兩個潛在編碼。
在這里插入圖片描述
理論上,這個GAN loss的存在會使$Z_{r}$與$Z_{x}$的分布更加一致,那么$VAE_{1}$總的loss就是如下形式;
在這里插入圖片描述

2.2 映射網絡$\tau$

簡單地來說,$\tau$ 的作用是將$z_{x}$映射到$z_{y}$,這樣做有兩個優勢。第一,由於 X 與 R 在潛在編碼空間對齊,所以借助從$z_{x}$恢復得到 y 的途徑也能恢復出一個好的 r ;第二,在低維的latent space 進行轉換要比在復雜的圖像域轉換更加簡單。訓練$\tau$的 loss 如下;
在這里插入圖片描述
第一項是$l_1$ loss,$L_{\tau}(x,y)=E\left | \tau(z_{x})-z_{y} \right |{1}$ ,第二項是 LSGAN ,作用於$z{x} \mapsto y$,使通過$z_{x}$生成的圖像與GT看上去更真實,第三項也是常見的使用VGG 網絡求取的感知loss。

通過上面的介紹三個網絡的作用和訓練方法已經很清晰了。下面將進一步分析網絡的設計 。

2.3 多重退化修復

在$\tau$中,主要是用的是殘差模塊,由於感受野的限制,網絡主要關注局部的特征。然而一些老照片中一些結構的損壞需要更大范圍內的信息進行搜索填充,因此需要讓設計的網絡即支持獲取局部的信息,又支持獲取全局的信息。因此,作者添加了一個含有非局部模塊的全局信息提取的分支。這里采用一個mask作為輸入,來防止圖片中損壞區域的像素不會被用於修復損壞區域。(本文中使用合成的數據集來訓練一個 Unet 網絡以檢測mask)

對於一個HWC維度的特征F,m 表示同樣大小的單通道二值mask圖像,m中值為1時表示表示損壞區域,值為0表示正常區域。那么對於F中位置 i 與位置 j 之間的關系可以表示為$s_{i,j}$,$s_{i,j}\in R^{HW\times HW}$,是每個pixel 之間的關系。公式如下;
在這里插入圖片描述
從公式中可以看出,$s_{i,j}$表示像素 j 對於像素 i 相關性的歸一化表示,也可以看作是像素點 j 貢獻的權重值,當像素點在m中標記為腐壞點時,貢獻值為0;其中$f_{i,j}$的式子如下;
在這里插入圖片描述
上面的式子中$F_{i}$、$F_{j}$是一個維度為 C*1 的向量;$\theta$ 與 $\Phi$ 是將向量映射到高斯分布的函數,所以最終 $f_{i,j}$是一個標量。最終,部分非局部的輸出為;
在這里插入圖片描述
不難看出,$_{i,j}$就是權重值。而這里的 v 和 u 用於進一步整合特征。 v 、 u 、 v 、$\Phi$都是1x1卷積。

通過這樣的上述的模塊,就可以起到全局感受野的作用。但是只希望對被腐壞的區域進行上述操作,其他區域不需要這樣的操作,因此作者又做了個區域融合,即當mask中對應的區域被標記為損壞區域時使用global的信息,否則使用局部特征信息。
在這里插入圖片描述
公式中的圓點表示矩陣的哈達瑪積,即Elementwise product,至此所有的模型設計就講完了。

3. 結果

在這里插入圖片描述
這篇文章是一篇弱監督的文章,思路很清晰易懂,也很明確,是一份很好的工作,有很多地方值得借鑒。但也有以下幾個地方我覺得需要改進:

  1. 耗時;先不說三個網絡單獨訓練的耗時,光是Prediction來看就比較耗時,雖說作者沒有給出時間對比,但是也說了pix2pix和自己的工作的耗時最少,可以說明一點,本文的網絡應該比pix2pix耗時。
  2. 弱監督的任務往往很難在高分辨的圖像上使用。
  3. mask的問題,如果要將模型實際應用,如何獲取mask也是一個問題,本文中使用特殊訓練的Unet結構來預測mask,無疑又加大了計算量。

4. 最后


免責聲明!

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



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