1. 程式人生 > >深度學習---影象修復

深度學習---影象修復

影象修復問題就是還原影象中缺失的部分。基於影象中已有資訊,去還原影象中的缺失部分。

從直觀上看,這個問題能否解決是看情況的,還原的關鍵在於剩餘資訊的使用,剩餘資訊中如果存在有缺失部分資訊的patch,那麼剩下的問題就是從剩餘資訊中判斷缺失部分與哪一部分相似。而這,就是現在比較流行的PatchMatch的基本思想。

CNN出現以來,有若干比較重要的進展:

  • 被證明有能力在CNN的高層捕捉到影象的抽象資訊。
  • Perceptual Loss的出現證明了一個訓練好的CNN網路的feature map可以很好的作為影象生成中的損失函式的輔助工具。
  • GAN可以利用監督學習來強化生成網路的效果。其效果的原因雖然還不具可解釋性,但是可以理解為可以以一種不直接的方式使生成網路學習到規律。

基於上述三個進展,參考文獻[1]提出了一種基於CNN的影象復原方法。

CNN網路結構

該演算法需要使用兩個網路,一個是內容生成網路,另一個是紋理生成網路。內容生成網路直接用於生成影象,推斷缺失部分可能的內容。紋理生成網路用於增強內容網路的產出的紋理,具體則為將生成的補全影象和原始無缺失影象輸入進紋理生成網路,在某一層feature_map上計算損失,記為Loss NN。

內容生成網路需要使用自己的資料進行訓練,而紋理生成網路則使用已經訓練好的VGG Net。這樣,生成影象可以分為如下幾個步驟:

定義缺失了某個部分的影象為x0

  • x0輸入進內容生成網路得到生成圖片x
  • x作為最後生成影象的初始值
  • 保持紋理生成網路的引數不變,使用Loss NN對x進行梯度下降,得到最後的結果。

關於內容生成網路的訓練和Loss NN的定義,下面會一一解釋

內容生成網路

生成網路結構如上,其損失函式使用了L2損失和對抗損失的組合。所謂的對抗損失是來源於對抗神經網路.

在該生成網路中,為了是訓練穩定,做了兩個改變:

  • 將所有的ReLU/leaky-ReLU都替換為ELU層
  • 使用fully-connected layer替代chnnel-wise的全連線網路。

紋理生成網路

紋理生成網路的Loss NN如下:

它分為三個部分,即Pixel-wise的歐式距離,基於已訓練好紋理網路的feature layer的perceptual loss,和用於平滑的TV Loss。

α和β都是5e-6

Pixel-wise的歐氏距離如下:

TV Loss如下:

Perceptual Loss的計算比較複雜,這裡利用了PatchMatch的資訊,即為缺失部分找到最近似的Patch,為了達到這一點,將缺失部分分為很多個固定大小的patch作為query,也將已有的部分分為同樣固定大小的patch,生成dataset PATCHES,在匹配query和PATCHES中最近patch的時候,需要在紋理生成網路中的某個layer的啟用值上計算距離而不是計算畫素距離。

但是,尋找最近鄰Patch這個操作似乎是不可計算導數的,如何破解這一點呢?同MRF+CNN類似,在這裡,先將PATCHES中的各個patch的的feature_map抽取出來,將其組合成為一個新的卷積層,然後得到query的feature map後輸入到這個卷積層中,最相似的patch將獲得最大的啟用值,所以將其再輸入到一個max-pooling層中,得到這個最大值。這樣,就可以反向傳播了。

高清影象上的應用

本演算法直接應用到高清影象上時效果並不好,所以,為了更好的初始化,使用了Stack迭代演算法。即先將高清影象down-scale到若干級別[1,2,3,…,S],其中S級別為原圖本身,然後在級別1上使用影象均值初始化缺失部分,得到修復後的結果,再用這個結果,初始化下一級別的輸入。以此類推。

效果

上圖從上往下一次為,有缺失的原圖,PatchMatch演算法,Context Decoder演算法(GAN+L2)和本演算法。

內容生成網路的作用

起到了內容限制的作用,上圖比較了有內容生成網路和沒有內容生成網路的區別,有的可以在內容上更加符合原圖。

應用

影象的語義編輯,從左到右依次為原圖,扣掉某部分的原圖,PatchMatch結果,和本演算法結果。

可知,該方法雖然不可以復原真實的影象,但卻可以補全成一張完整的影象。這樣,當拍照中有不想幹的物體或人進入到攝像頭中時,依然可以將照片修復成一張完整的照片。

總結

CNN的大發展,影象越來越能夠變得語義化了。有了以上的影象復原的基礎,儘可以進行發揮自己的想象,譬如:在影象上加一個東西,但是光照和顏色等缺明顯不搭,可以用紋理網路進行修復。

該方法的缺點也是很明顯:

  • 效能和記憶體問題
  • 只用了圖片內的patch,而沒有用到整個資料集中的資料。

參考文獻

[1]. Yang C, Lu X, Lin Z, et al. High-Resolution Image Inpainting using Multi-Scale Neural Patch Synthesis[J]. arXiv preprint arXiv:1611.09969, 2016.