[ICCV2019 Best Paper Award] SinGAN: Learning a Generative Model from a Single Natural Image

本篇是剛剛召開的ICCV2019獲得Best Paper Award的一篇文章。
[arxiv] : 鏈接
[homepage] : 鏈接
[code] : github鏈接
[demo動畫] :youtube鏈接


Too Long; Didn’t Read

本篇文章是一篇關於GAN作圖像生成和圖像編輯的文章。

  1. 在GAN領域首次嘗試使用單張圖作爲訓練數據生成保證結構不變而具有多樣性的圖片。(圖1)
    單張圖訓練
圖1. 單張圖訓練生成大小、內容均不同的圖片
  1. 能夠在各種不同的任務:圖畫轉換、圖像編輯、圖像平滑、超分辨率、動畫等領域都能達到很高的質量。(圖2)
    處理不同的任務
圖 2. 對不同的任務都有很好的效果

信息摘要

模型:Unconditional GAN
方法:用一張圖不同大小的patch疊加訓練,讓不同大小的GAN模型疊加成金字塔型,用噪聲來增加多樣性即圖片上的變化。
亮點:只用一張圖訓練大大減小了訓練開銷,能夠處理在原始圖像上的多種不同問題。
缺點:對於不同圖像的任務都需要重新訓一遍模型(或通過放縮scale),不具備很好的泛化能力。


Motivation & Related Work

作者對於本文提到的兩點:單圖像訓練和圖像編輯都進行了闡述。

  • 對於單圖像訓練問題,以往的方法有些事由原始圖像指導的任務(圖像翻譯)、而無條件的任務則是基本都有語義描述作爲輔助,本文的模型可以是說是完全脫離了對其他輔助信息的依賴,僅僅需要原圖像訓練後就可以由模型生成模仿圖像。(圖3)
    圖3
圖 3. 與傳統的通過語義模型輔助的生成器相比,更能保留住結構特徵信息
  • 對於圖像編輯問題,傳統的方法都主要是用GAN去抓住同一類別圖像的特徵。而作者這裏提出了一個更大膽的想法:去抓住圖像共有的塊(patches)的特徵。通過這些特徵在不同scale上的疊加從而學習出圖像的結構特徵。這一點也是說明了本模型如何能夠通過一張圖像的訓練去做這麼多任務(因爲他們本質還是相同的)。

Model

本文的模型結構稍微比較複雜,但是很好理解:(圖4)
圖4

圖 4. 模型結構

模型整體由多個不同大小的生成器和判別器疊加而成,下面是一次訓練的流程。

  • step1. 首先從一個很小的patch出發,構建一個小patch的噪聲圖ZN,通過生成器(full conv保證大小不變)後,生成同樣大小的圖像與Ground Truth相同塊進行對比,構成損失。
  • step2. 將生成器生成的圖像上採樣r倍,與同樣大小的噪聲疊加(圖5),再用同樣的方法生成圖像傳給判別器。
    圖5
圖 5. 每個生成器內部結構
  • stepN. 擴大後的圖像與原圖大小相等,用最後一層生成器生成圖像,產生損失。損失回傳更新參數。
    具體計算方法參考下面算法部分。

算法 & 參數定義

生成器部分

對於第一層,由於沒有上層圖像,直接由噪聲過Conv生成:
在這裏插入圖片描述
對二層及以後,增加了上層傳來的結構信息:
在這裏插入圖片描述
對於每一層的生成器(參考上圖5),採用residual learning的思想去學習如何補充信息:
在這裏插入圖片描述
兩個加號運算分別對應了圖5中的兩次相加。

損失函數部分

損失函數採用的是最基本的GAN中的對抗損失及圖像的重構損失:
在這裏插入圖片描述
對抗損失即GAN爲判斷圖像真假,生成器與判別器博弈產生的損失,詳細可以看GAN的基本原理。重構損失則是判斷生成的圖像和真實圖像在pixel-wise的不同:
在這裏插入圖片描述
這裏直接很暴力地用了RMSE。

參數定義
  • Conv-blocks: Conv(3*3)-BN-LeakyReLU
  • GAN loss function: WGAN-GP
  • min patchsize: 25
  • max patchsize(image size) : 250
  • r : 4/3 ( (4/3)8 ≈ 10 ) 即8層後可以擴大到最大size。

Results

作者在定性分析和定量分析展示了本模型很有說服力的結果。

隨機生成不同size圖像

在這裏插入圖片描述

超分辨率

右上角是原始圖像
在這裏插入圖片描述

模型優化討論

對於模型編輯的問題,這裏作者做了從模型金字塔的哪一層開始生成圖像的對比實驗:(圖8)
在這裏插入圖片描述

圖 8. 從不同層生成圖像的不同結果

這裏作者從不同層的意思就是在該層之後,將噪聲替換成input image對應patch的圖像。如圖8所示,如果全部都是噪聲生成,很可能產生如最左邊一列比較奇怪的結構。

同時作者還探討了對於金字塔深度對生成圖像質量的影響(圖9)
在這裏插入圖片描述
可以看到模型如果過於淺也無法學習到足夠的結構信息進行重構,從而使生成的圖像產生混亂。

下面圖10-13均是模型在不同圖像編輯上的結果。
在這裏插入圖片描述

圖 10. 超分

在這裏插入圖片描述

圖 11. 畫到圖像的轉化任務

在這裏插入圖片描述

圖 12. 圖像編輯的平滑
這裏作者採用的對比(c)是photoshop中的插件,而(d)的表現比PS顯得更加真實。

在這裏插入圖片描述

圖 13. 圖像平滑

Thoughts

本篇文章的亮點非常能吸引人,僅用單張圖的訓練就能達到如此好的效果。筆者這裏用實驗室的機器基本只用兩個小時就可以跑完一次完整的訓練,但是對於較爲複雜的圖像生成效果還並不是很好(用了人像結果十分扭曲)。作者也提到了如果這個模型應用到工具,那麼對於每一個不同的任務都需要去訓練一次,這樣是十分低效的。
儘管如此,本篇的學習圖像內在分佈,從而簡化訓練集並且將模型對應的單任務擴充到多任務的思想還是值得這個Best Paper Award。


My Experiments

用自己的幾張圖跑了下這個模型,效果出乎意料的好
在這裏插入圖片描述
可以看到除了在第一張圖和第四張圖(圖形語義過於簡單或過於複雜)的情況下,對於一般的圖像都能隨機生成逼真切充滿變化的樣本。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章