論文名稱:SinGAN: Learning a Generative Model from a Single Natural Image
論文作者:Tamar Rott Shaham, Tali Dekel, Tomer Michaeli
發行時間:Submitted on 15 Dec 2019, last revised 31 Mar 2020
論文地址:https://arxiv.org/abs/1905.01164
代碼開源:https://github.com/tamarott/SinGAN
一. 概要
本文提出了 SinGAN
模型,其是一個非條件生成器模型中對單張自然圖像進行訓練的模型。 SinGAN
由金字塔型的一系列全卷積 GAN
組成,其中的每個 GAN
都用來學習圖像在不同尺寸下的 patches
數據分佈。該模型被訓練來捕獲圖像中 patches
之間數據分佈,然後可生成一系列尺寸的高質量圖像,這些圖像同訓練圖像在語義結構上相似,但包含了新的對象配置和結構。如下圖所示。
具體來說,SinGAN
僅對一張圖像進行訓練,訓練完畢後又在這張圖像上進行測試。即只能對訓練的圖像進行測試,一旦想換一張圖測試效果,需要重新對這張圖像進行訓練。
對於從原圖中分割出來的 pathch
,實際上是在對應的尺寸上的圖像分割出來的 patch
,其中原文中的感受野和 patch
大小都設置爲 的大小。對於最粗糙的圖中,其分割出來的多個重疊 patches
,忽略了圖像的細節信息,較好的保留了圖像整體的佈局信息。然後隨着訓練的不斷推進,圖像的尺寸不斷增大,隨之而來的是分割出來的 patch
逐漸開始注重細節,同時由於模型的殘差設計,會逐漸往之間的模糊圖像中引入更多的細節,最終得到有效的圖像。SinGAN使用多個GAN結構分別學習了不同尺度下分辨率 的圖像塊的分佈,並從粗糙到細緻、從低分辨率到高分辨率逐步生成真實圖像。
二. SinGAN 模型
第 層的 的具體實現:
2.1. 多尺度架構
如上圖所示,模型由 個 GAN
組成,包含金字塔型生成器 ,金字塔型判別器 。 是一系列尺寸金字塔型圖像,其中 是訓練圖 按照係數 進行下采樣圖, (原文說 應該儘量接近於 )。 是一系列對應尺寸的隨機噪聲圖。
**模型是從粗糙到精細()逐漸進行訓練的,且每個尺寸訓練上都注入了噪聲,並使用了殘差學習的思想。**首先看生成器:
- 對於模型的第 層,作爲最粗糙的生成器 直接接受 來生成 。
- 對於模型的第 層(),首先將該層的噪聲圖 加上前一層生成器 生成的圖 的上採樣圖 ,然後將該圖輸入到當前層的生成器 中, 然後再將生成器的圖加上上採樣圖 ,得到最終的輸出圖 。
- 用表達式表示第 層生成器 的結果如下所示:
更具體的說,由於生成器實際上是由 個由 Conv(3×3)-BatchNorm-LeakyRelu
的卷積塊組成的全卷積網絡 。所以可以更詳細的寫出第 層生成器 的表達式:
再看判別器,這裏的判別器的網絡結構和生成器一樣都是5個由 Conv(3×3)-BatchNorm-LeakyRelu
的卷積塊組成的全卷積網絡 ,不同的是這裏採用的是馬爾科夫判別器,即在全連接網絡的最後一層卷積結果經過 Sigmoid
處理並輸出,得到一個概率判別圖,其大小和當前層的的 大小一樣(不包含通道),其中每個位置的值都表示了 以該位置爲中心的 的 Patch
和對應位置處的 的 Patch
一致的概率。最終 的輸出是這個概率判別圖的平均值。
- 對於模型的第 層,判別器接受的原始圖像 和對應層生成器生成的圖像 。
- 對於模型的第 層(), 判別器接受的是原始圖像下采樣到對應尺寸的圖 和對應層生成器生成的圖像 。
總的來說,對於其中第 層, 學到了該尺度下 圖像 patches
的分佈,並能夠結合上一尺寸的輸出來生成當前尺寸下的圖像。 則能夠判別一個 的圖像的 patches
是否是該尺寸下的真實圖像的 patches
。
2.2. Patch的精巧處理
本小結引用自 QbitAl的博客
雖然在網絡的輸入端都是完整圖像,但實際上,作者通過一個巧妙的設計使得其等價於將圖像分割成 的 Patch
分別輸入:
- 由於所有的生成器 和判別器 都擁有相同的網絡結構,都由 個 的卷積塊組成,對應的感受野都是 。將一張圖像輸入一個擁有 感受野的網絡,網絡會輸出的每個位置的值,等價於原圖以該位置爲中心,大小爲11x11的
patch
輸入網絡後的輸出值。(並不嚴謹,可意會一下)
2.3. 訓練階段
模型從從粗糙()到精細()尺寸逐漸進行訓練,且一旦某個階段的 GAN
訓練完畢,就將其權重固定住。本文第 層的訓練損失由對抗性損失和重構性損失這兩部分組成:
其中
-
對 與 中的
patches
分佈間的距離進行懲罰。對於對抗性損失 ,實際上就是使用WGAN-UP loss
,可有效地增加訓練的穩定性。 -
用來確保存在一個噪聲集合 能夠生成當前尺寸下的原圖 。爲此,作者特意選取了一組隨機噪聲,即僅在生成最粗糙的圖像時用到 ,之後的階段都取消噪聲輸入:
這裏的 是訓練前隨機選取的固定噪聲圖,於是重構性損失表示如下:
即我們希望儘可能最小化該層的 與 之間的差異的二範數。