【閱讀筆記】SinGAN:Learning a Generative Model from a Single Natural Image

論文名稱: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 大小都設置爲 11×1111 \times 11 的大小。對於最粗糙的圖中,其分割出來的多個重疊 patches ,忽略了圖像的細節信息,較好的保留了圖像整體的佈局信息。然後隨着訓練的不斷推進,圖像的尺寸不斷增大,隨之而來的是分割出來的 patch 逐漸開始注重細節,同時由於模型的殘差設計,會逐漸往之間的模糊圖像中引入更多的細節,最終得到有效的圖像。SinGAN使用多個GAN結構分別學習了不同尺度下分辨率 11×1111 \times 11 的圖像塊的分佈,並從粗糙到細緻、從低分辨率到高分辨率逐步生成真實圖像。

image-20200608153502618

二. SinGAN 模型

image-20200608153821378

nn 層的 GnG_n 的具體實現:

image-20200608160046088

2.1. 多尺度架構

如上圖所示,模型由 N+1N+1GAN 組成,包含金字塔型生成器 {G0,,GN}\left \{ G_0,\cdots, G_N \right \},金字塔型判別器 {D0,,DN}\left \{ D_0,\cdots,D_N \right \}{x0,,xN}\left \{ x_0,\cdots,x_N \right \} 是一系列尺寸金字塔型圖像,其中 xnx_n 是訓練圖 x0x_0 按照係數 rr 進行下采樣圖,r>1r>1 (原文說 rr 應該儘量接近於 43\frac{4}{3})。{z0,,zN}\left \{ z_0,\cdots,z_N \right \} 是一系列對應尺寸的隨機噪聲圖。

**模型是從粗糙到精細(N0N \to 0)逐漸進行訓練的,且每個尺寸訓練上都注入了噪聲,並使用了殘差學習的思想。**首先看生成器:

  • 對於模型的第 NN 層,作爲最粗糙的生成器 GNG_N 直接接受 zNz_N 來生成 x~N\tilde{x}_N
  • 對於模型的第 nn 層(n<Nn < N),首先將該層的噪聲圖 znz_n 加上前一層生成器 Gn+1G_{n+1} 生成的圖 x~n+1\tilde{x}_{n+1}上採樣圖 (x~n+1)r(\tilde{x}_{n+1})\uparrow^r,然後將該圖輸入到當前層的生成器 GnG_n 中, 然後再將生成器的圖加上上採樣圖 (x~n+1)r(\tilde{x}_{n+1})\uparrow^r,得到最終的輸出圖 x~n\tilde{x}_n
  • 用表達式表示第 ii 層生成器 GiG_i 的結果如下所示:

x~i={Gi(zi),  i=NGi(zi,(x~i+1)r),  i<N \tilde{x}_i=\left\{\begin{matrix}G_i(z_i) & ,~~i=N\\ G_i(z_i,(\tilde{x}_{i+1})\uparrow^r) & ,~~i<N \\ \end{matrix}\right.

更具體的說,由於生成器實際上是由 55 個由 Conv(3×3)-BatchNorm-LeakyRelu 的卷積塊組成的全卷積網絡 ψ\psi所以可以更詳細的寫出第 ii 層生成器 GiG_i 的表達式:
x~i={ψi(zi),  i=N(x~i+1)r+ψi(zi+(x~i+1)r),  i<N \tilde{x}_i=\left\{\begin{matrix} \psi_i(z_i) & ,~~i=N\\ (\tilde{x}_{i+1})\uparrow^r + \psi_i(z_i+(\tilde{x}_{i+1})\uparrow^r)& ,~~i<N \\ \end{matrix}\right.
再看判別器,這裏的
判別器的網絡結構和生成器一樣都是5個由 Conv(3×3)-BatchNorm-LeakyRelu 的卷積塊組成的全卷積網絡 ψ\psi
,不同的是這裏採用的是馬爾科夫判別器,即在全連接網絡的最後一層卷積結果經過 Sigmoid 處理並輸出,得到一個概率判別圖,其大小和當前層的的 x~n\tilde{x}_n 大小一樣(不包含通道),其中每個位置的值都表示了 x~n\tilde{x}_n 以該位置爲中心的 11×1111 \times 11Patch 和對應位置處的 xnx_nPatch 一致的概率。最終 DnD_n 的輸出是這個概率判別圖的平均值。

  • 對於模型的第 00 層,判別器接受的原始圖像 x0x_0 和對應層生成器生成的圖像 x~0\tilde{x}_0
  • 對於模型的第 nn 層(n>0n>0), 判別器接受的是原始圖像下采樣到對應尺寸的圖 xnx_n 和對應層生成器生成的圖像 x~n\tilde{x}_n

總的來說,對於其中第 nn 層,GnG_n 學到了該尺度下 11×1111\times 11 圖像 patches 的分佈,並能夠結合上一尺寸的輸出來生成當前尺寸下的圖像。DnD_n 則能夠判別一個 11×1111\times 11 的圖像的 patches 是否是該尺寸下的真實圖像的 patches

2.2. Patch的精巧處理

本小結引用自 QbitAl的博客

雖然在網絡的輸入端都是完整圖像,但實際上,作者通過一個巧妙的設計使得其等價於將圖像分割成11×1111\times11Patch 分別輸入:

  • 由於所有的生成器 GG 和判別器 DD 都擁有相同的網絡結構,都由 553×33\times3 的卷積塊組成,對應的感受野都是 11×1111\times 11將一張圖像輸入一個擁有 11×1111\times 11 感受野的網絡,網絡會輸出的每個位置的值,等價於原圖以該位置爲中心,大小爲11x11的 patch 輸入網絡後的輸出值。(並不嚴謹,可意會一下)

2.3. 訓練階段

模型從從粗糙(25px25 px)到精細(250px250 px)尺寸逐漸進行訓練,且一旦某個階段的 GAN 訓練完畢,就將其權重固定住。本文第 nn 層的訓練損失由對抗性損失重構性損失這兩部分組成:
minGnmaxDnLadv(Gn,Dn)+αLrec(Gn) \mathop{\min}\limits_{G_n} \mathop{\max}\limits_{D_n}\mathcal{L}_{adv}(G_n,D_n)+\alpha\mathcal{L}_{rec}(G_n)
其中

  • Ladv\mathcal{L_{adv}}xnx_nx~n\tilde{x}_n 中的 patches 分佈間的距離進行懲罰。對於對抗性損失 Ladv\mathcal{L_{adv}},實際上就是使用 WGAN-UP loss,可有效地增加訓練的穩定性。

  • Lrec\mathcal{L}_{rec} 用來確保存在一個噪聲集合 {z0,,zN}\left \{ z_0,\cdots,z_N \right \} 能夠生成當前尺寸下的原圖 xnx_n。爲此,作者特意選取了一組隨機噪聲,即僅在生成最粗糙的圖像時用到 zz^{\star} ,之後的階段都取消噪聲輸入:
    {zNrec,zN1rec,,z0rec}={z,0,,0} \left \{ z_N^{rec},z_{N-1}^{rec},\cdots,z_0^{rec} \right \}=\left \{ z^{\star},0,\cdots,0 \right \}
    這裏的 zz^{\star} 是訓練前隨機選取的固定噪聲圖,於是重構性損失表示如下:
    Lrec={GN(z)xN,  n=NGn(0,(x~n+1rec)r)xn22,  n<N \mathcal{L}_{rec}= \left\{\begin{matrix} ||G_N(z^{\star})-x_N|| & ,~~n=N \\ ||G_n(0,(\tilde{x}^{rec}_{n+1})\uparrow^r)-x_n||_2^2 & ,~~n<N \end{matrix}\right.
    即我們希望儘可能最小化該層的 xnx_nx~n\tilde{x}_n 之間的差異的二範數。

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