GAN系列之pix2pix、pix2pixHD


1. 摘要

圖像處理的很多問題都是將一張輸入的圖片轉變為一張對應的輸出圖片,比如灰度圖、梯度圖、彩色圖之間的轉換等。通常每一種問題都使用特定的算法(如:使用CNN來解決圖像轉換問題時,要根據每個問題設定一個特定的loss function 來讓CNN去優化,而一般的方法都是訓練CNN去縮小輸入跟輸出的歐氏距離,但這樣通常會得到比較模糊的輸出)。這些方法的本質其實都是從像素到像素的映射。於是論文在GAN的基礎上提出一個通用的方法:pix2pix 來解決這一類問題。通過pix2pix來完成成對的圖像轉換(Labels to Street Scene, Aerial to Map,Day to Night等),可以得到比較清晰的結果。

先看一張效果圖:
在這里插入圖片描述

2. 網絡結構

在這里插入圖片描述
上圖描述了本文中的圖像到圖像轉換架構的一個抽象的high-level view。與許多圖像合成模型類似,它使用Conditional-GAN框架。圖像x被用作生成器Generator的輸入和作為鑒別器Discriminator的輸入。

論文對DCGAN的生成器和判別器的結構做了一些改進。

2.1 生成器結構

在這里插入圖片描述
U-Net是德國Freiburg大學模式識別和圖像處理組提出的一種全卷積結構。和常見的先降采樣到低維度,再升采樣到原始分辨率的編解碼(Encoder-Decoder)結構的網絡相比,U-Net的區別是加入skip-connection,對應的feature maps和decode之后的同樣大小的feature maps按通道拼(concatenate)一起,用來保留不同分辨率下像素級的細節信息。U-Net對提升細節的效果非常明顯,下面是文中給出的一個效果對比,可以看到不同尺度的信息都得到了很好的保留。

不同結構的G與不同的目標函數組合的效果對比

2.2 鑒別器結構

pix2pix中使用的PatchGAN鑒別器是該設計的另一個獨特組成部分。PatchGAN / Markovian鑒別器的工作原理是將圖像中的獨立的patches分類為“真實與假”,而不是將整個圖像分類為“真實與假”。作者認為這會強制實施更多約束,從而鼓勵出現尖銳的高頻細節(sharp high-frequency detail)。此外,PatchGAN具有更少的參數,並且比分類整個圖像運行得更快。下圖描繪了不同N大小的情況下,對N x N 大小的patches進行分類的實驗結果:
在這里插入圖片描述

3. 目標函數

pix2pix的優化目標包含2個部分,如下所示。一部分是cGAN的優化目標;另一部分是L1距離,用來約束生成圖像和真實圖像之間的差異,這部分借鑒了其他基於GAN做圖像翻譯的思想,只不過這里用L1而不是L2,目的是減少生成圖像的模糊。

在這里插入圖片描述
cGAN的優化目標如公式1所示,z表示隨機噪聲,判別器D的優化目標是使得公式1的值越大越好,而生成器G的優化目標是使得公式1的log(1-D(x,G(x,z))越小越好,這也就是公式4中min和max的含義。這里需要注意的是正如GAN論文提到的,公式1有時候訓練容易出現飽和現象,也就是判別器D很強大,但是生成器G很弱小,導致G基本上訓練不起來,因此可以將生成器G的優化目標從最小化log(1-D(x,G(x,z))修改為最大化log(D(x,G(x,z))),pix2pix算法采用修改后的優化目標。
在這里插入圖片描述
L1距離如公式3所示,用來約束生成圖像G(x, z)和真實圖像y之間的差異。
在這里插入圖片描述

4. pix2pix實驗結果

Table1是關於不同損失函數的組成效果對比, 這里采用的是基於分割標簽得到圖像的任務。評價時候采用語義分割算法FCN對生成器得到的合成圖像做語義分割得到分割圖,假如合成圖像足夠真實,那么分割結果也會更接近真實圖像的分割結果,分割結果的評價主要采用語義分割中常用的基於像素點的准確率和IOU等。
在這里插入圖片描述
Table2是關於不同生成器的效果,主要是encoder-decoder和U-Net的對比。
在這里插入圖片描述
Table3是關於判別器PatchGAN采用不同大小N的實驗結果,其中1 ∗ 1 111∗1表示以像素點為單位判斷真假,顯然這樣的判斷缺少足夠的信息,因此效果不好;286 ∗ 286 286286286∗286表示常規的以圖像為單位判斷真假,這是比較常規的做法,從實驗來看效果也一般。中間2行是介於前兩者之間的PatchGAN的效果,可以看到基於區域來判斷真假效果較好。
在這里插入圖片描述
最后放一下pix2pix的生成圖像,可以基於圖像邊緣得到圖像、基於語義分割的標簽得到圖像、背景去除、圖像修復等。更多結果可以參考原論文,效果還是很不錯的。
在這里插入圖片描述

5. pix2pixHD

這篇paper作為pix2pix的改進版本,如其名字一樣,主要是可以產生高分辨率的圖像。具體來說,作者的貢獻主要在以下兩個方面:

  • 使用多尺度的生成器以及判別器等方式從而生成高分辨率圖像。
  • 使用了一種非常巧妙的方式,實現了對於同一個輸入,產生不同的輸出。並且實現了交互式的語義編輯方式,這一點不同於pix2pix中使用dropout保證輸出的多樣性。

5.1 高分辨率圖片生成

為了生成高分辨率圖像,作者主要從三個層面做了改進:

  • 模型結構:coarse-to-fine的生成器。
  • Loss設計:multi-scale的判別器。這個比較簡單,就是在三個不同尺度上判別,然后取平均。更好的loss設計,總loss = GAN loss + Feature matching loss + Content loss。
  • 使用Instance-map的圖像進行訓練。

5.2 模型結構

coarse-to-fine的生成器
如上圖,生成的流程:圖片先經過一個生成器$G_2$的卷積層進行2倍下采樣,然后使用另一個生成器 $G_1$生成低分辨率的圖,將得到的結果和剛剛下采樣得到的圖進行element-wise的相加,然后輸出到 $G_2$的后續網絡生成高分辨率的圖片。

這么做的好處是低分辨率的生成器會學習到全局的連續性(越粗糙的尺度感受野越大,越重視全局一致性),高分辨率的生成器會學習到局部的精細特征因此生成的圖片會兼顧局部特征和全局特征的真實性如果僅使用高分辨率的圖生成的話,精細的局部特征可能比較真實,但是全局的特征就不那么真實了

判別器使用多尺度判別器,在三個不同的尺度上進行判別並對結果取平均。判別的三個尺度為:原圖,原圖的1/2降采樣,原圖的1/4降采樣(實際做法為在不同尺度的特征圖上進行判別,而非對原圖進行降采樣)。顯然,越粗糙的尺度感受野越大,越關注全局一致性。

生成器和判別器均使用多尺度結構實現高分辨率重建,思路和PGGAN類似,但實際做法差別比較大。

5.2 損失函數

這里的Loss由三部分組成:

  • GAN loss:和pix2pix一樣,使用PatchGAN。
  • Feature matching loss:將生成的樣本和Ground truth分別送入判別器提取特征,然后對特征做Element-wise loss
  • Content loss:將生成的樣本和Ground truth分別送入VGG16提取特征,然后對特征做Element-wise loss
    在這里插入圖片描述

使用Feature matching loss和Content loss計算特征的loss,而不是計算生成樣本和Ground truth的MSE,主要在於MSE會造成生成的圖像過度平滑,缺乏細節。Feature matching loss和Content loss只保證內容一致,細節則由GAN去學習。

5.3 使用Instance-map的圖像進行訓練

pix2pix采用語義分割的結果進行訓練,可是語義分割結果沒有對同類物體進行區分,導致多個同一類物體排列在一起的時候出現模糊,這在街景圖中尤為常見。在這里,作者使用個體分割(Instance-level segmention)的結果來進行訓練,因為個體分割的結果提供了同一類物體的邊界信息。具體做法如下:

  • 根據個體分割的結果求出Boundary map
  • 將Boundary map與輸入的語義標簽concatnate到一起作為輸入 Boundary map求法很簡單,直接遍歷每一個像素,判斷其4鄰域像素所屬語義類別信息,如果有不同,則置為1。下面是一個示例:
    在這里插入圖片描述

5.4 語義編輯

不同於pix2pix實現生成多樣性的方法(使用Dropout),這里采用了一個非常巧妙的辦法,即學習一個條件(Condition)作為條件GAN的輸入,不同的輸入條件就得到了不同的輸出,從而實現了多樣化的輸出,而且還是可編輯的。具體做法如下:
在這里插入圖片描述

  • 首先訓練一個編碼器
  • 利用編碼器提取原始圖片的特征,然后根據Labels信息進行Average pooling,得到特征(上圖的Features)。這個Features的每一類像素的值都代表了這類標簽的信息。
  • 如果輸入圖像有足夠的多,那么Features的每一類像素的值就代表了這類物體的先驗分布。 對所有輸入的訓練圖像通過編碼器提取特征,然后進行K-means聚類,得到K個聚類中心,以K個聚類中心代表不同的顏色,紋理等信息。
  • 實際生成圖像時,除了輸入語義標簽信息,還要從K個聚類中心隨機選擇一個,即選擇一個顏色/紋理風格

這個方法總的來說非常巧妙,通過學習數據的隱變量達到控制圖像顏色紋理風格信息。

5.5 總結

pix2pix主要的貢獻在於:

  • 提出了生成高分辨率圖像的多尺度網絡結構,包括生成器,判別器
  • 提出了Feature loss和VGG loss提升圖像的分辨率 - 通過學習隱變量達到控制圖像顏色,紋理風格信息
  • 通過Boundary map提升重疊物體的清晰度

可以看出,這篇paper除了第三點,都是針對性的解決高分辨率圖像生成的問題的。

6. 最后


免責聲明!

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



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