SinGAN:Learning a generative Model from a Single Natural Image解讀(ICCV2019最佳論文)

昨天晚上看完了這篇論文。不得不說,這篇工作確實很棒,使用一個統一的模型,卻能解決很多視覺任務。而且方式也是很簡單,不需要設立各式各樣複雜的condition。
論文和項目地址


updated on 2019.12.2
我之前一直以爲SinGAN的訓練是從原圖crop出一些樣本,用這些樣本以及這些樣本的下采樣圖像進行訓練。今天再次讀了論文,發現大錯特錯啊!!!所以做一些更正。

總覽

先大致說下這篇論文是做什麼的,以及如何做。
SinGAN在僅僅一張圖像上訓練,這張圖片既是訓練樣本也是測試樣本。在這張圖像上訓練完了之後,同樣在這樣圖片上測試。如果你想換一張圖像測試,就必須先在那張圖像上訓練,這是有異於其他GAN的。
~但不是整個圖像送進網絡,而是在一張圖片上crop出可以重疊的patches~。
作者把原圖按照一定的比例下采樣,得到很多的下采樣版本的圖像,作者稱這些樣本爲patch,用這些patches訓練。patch的意思一般都是指從原圖crop,就這一點把我誤導了
SinGAN採用無條件GAN方式設計,而且是級聯式的Generator-Discriminator pair的形式。每一個G-D都負責一種尺度**。作者發現,通過學習patch內部的數據分佈,網絡最終能在測試時輸出保留原圖中目標的結構以及形象,但是又不同於原圖的真實圖像。**

在下圖就是作者舉的例子。隨着噪聲z的不同,生成了一系列不同於原圖,但保留原圖結構的新圖。看上去就是同一個相機在相同的風景區,在不同視角不同地方下進行一連串的拍攝。
在這裏插入圖片描述

創新點

  • 一種統一的結構,能解決一些完全不一樣的視覺任務: 繪製,編輯, 融合, 超分辨, 動畫化。僅僅依賴一張圖片。
  • 產生高質量的,且能保留訓練樣本內部數據分佈同時賦予輸出圖像新的模樣的圖像
  • 所有的G和D都是相同的結構,網絡簡單。

從下圖我們可以看出方法的用途,如果我們在一張風景圖像訓練,然後送入一張畫圖,然後網絡將原圖的數據分佈賦予到由畫圖生成的新圖像上,同時新圖像還保留畫圖的樣式。
如果我們在原圖上crop出一個不同長寬比的patch,把這個patch直接粘貼到原圖上,送進用原圖訓練好的網絡測試,就能把細長的目標拉伸。

以及等等其他用途。太神奇了。

在這裏插入圖片描述

提出背景

GAN在最開始提出就是學習圖像分佈然後生成和訓練圖像類別相同的圖像,那麼這就有第一個限制,訓練集的類別是具體的(Specific),一些無條件GAN通常都是這樣的訓練方式,在class-specific的數據集上訓練,同時如果類別衆多,性能就會出現下降。比如一些生成人臉的GAN用ImageNet訓練,生成那些多種多樣的類別的圖像,效果其實很差的(這方面我做過實驗),所以一般要加入其它條件來幫助訓練,一般都是指定圖像的類別送進網絡作爲條件(condition)。
另外一個限制就是圖像需要很多張。如果我們僅僅在一張圖片上訓練, 非條件GAN中,目前這樣的方法只適用於具體任務,比如超分辨,紋理擴展(? texture expansion)。

作者提出SInGAN,打破了兩個限制。SinGAN就在一張圖像上訓練,不在乎圖像的類別,不管數據集都單類的人臉數據等,還是多類的分類數據等,都只在一張圖像上訓練,自然不在乎圖像的類別的。採用Unconditional GAN能處理很多種任務同樣是首創。

另一方面, 從新的角度上詮釋了生成圖像。以往的GAN,往往都在提供了某一類的衆多的圖像作爲訓練集,然後生成器學習到這些樣本中的相同特徵的分佈。,比如說人臉都有眼睛嘴巴等。那麼我就用人臉舉例子。然後測試的時候,輸入噪聲,網絡就能輸出帶有人臉特徵的人臉了。但SinGAN從新的角度,不去學習人臉類的共同特徵,轉而學習單一人臉圖像的數據分佈,這樣網絡可以生成這個人的臉,同時可能有不同視角下的這個人的臉。

以上我都是用人臉圖像舉例,實際上可以是任意圖像,不限制類別。作者在論文中也沒有使用人臉圖像作爲例子。

方法

在這裏插入圖片描述

上圖的結構乍一看很複雜,其實很簡單,從最下面看開始看。
假設有N個尺度,最下面的第N個尺度是最粗糙的,最上面的尺度是最細的(finest)。
最下面的G的輸入是高斯噪聲z_N,輸出
w~N=GN(zN)\tilde{w}_N = G_N(z_N)
然後w~N\tilde{w}_N上採樣得到w~Nr\tilde{w}_N \uparrow^r, 送到GN1G_{N-1}中,同時送進GN1G_{N-1}還有zN1z_{N-1},再往上都是這個套路。
再看另一邊,生成的假圖像w~\tilde{w}和經過resize的patch xx送到D中,和普通GAN的思路是一致的。論文采用的D是馬爾科夫判別器。
G和D的結構是相同的(我在想D不是要輸出置信度嗎,怎麼會是全卷積的,但是馬爾科夫D可能有特殊之處吧)。有5個3x3的卷積層構成,所以感受野是11x11。同時G輸出的是後一個尺度(更粗糙尺度)所丟失的細節(殘差學習),輸出的丟失細節加上上採樣得到的更粗糙的圖,就變成了更細化更具體的圖。
在這裏插入圖片描述

另外還有一些細節,,~諸如effective patch size是什麼意思~,尺度N和上採樣比例的關係,我沒有細看。
effective patch size 的意思很好理解。最粗的那一個尺度上,輸入的是原圖經過下采樣最小的patch,經過固定的11*11的感受野,因爲輸入的圖像是原圖縮小到很小的patch,即便是網絡僅有很小的感受野,也能覆蓋掉輸入圖像很大的區域,對應回原圖,就是很大的區域。而越往細的尺度上,由於輸入圖像越來越大,感受野不變,能覆蓋的尺度會越來越小。所以effective patch size越來越小,但也越關注細節,所以輸出圖像的細節更加豐富,逼真。

另外作者在論文第三頁指明瞭,小的感受野的好處:

The GANs have small receptive fields and limited capacity, preventing them from memorizing the single image.

訓練

總的損失函數分爲兩個部分

在這裏插入圖片描述
前面那一部分就是對抗損失,G和D互相博弈。
後面的部分是重構損失,其作用是確保有一組噪聲圖能產生xnx_n, 是很重要的屬性(給出了補充材料)
在這裏插入圖片描述
大致意思是,不加噪聲生成的圖像要和patch做L2loss,就是內容上重構。

另外有一些細節,如噪聲方差的選取,我並沒有看懂。

實驗

作者實驗部分寫的非常詳細。我只說兩點。
作者開頭探討了在測試和訓練中,選取尺度的問題。

在測試中的尺度影響

因爲網絡是多級的,在訓練中有N個尺度,但是在測試中,可以使用更少的尺度,或者改變所使用的的尺度,來控制生成圖像的變化。比如從第N-2個尺度開始,就會生成一些更真實的樣本。下圖的對比中,可以發現,從第N個尺度生成的斑馬,有很多條腿。但是從第N-1個尺度開始,生成的樣本就很真實了。而且對於細節保留的更多。
在這裏插入圖片描述

在訓練中尺度的影響

在這裏插入圖片描述
選擇更豐富的尺度,能捕獲全局的結構,也是因爲感受野大了。
尺度數目越小(意味着本身就從一個很細化的patch開始訓練),僅僅能捕獲到局部的紋理細節。丟失了全局的結構內容。

更多的應用請參見論文。就不一一敘述了。

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