【PGGAN】1、Progressive Growing of GANs for Improved Quality, Stability, and Variation 论文阅读
使用漸進式增長GAN提升質量、穩定性、變化性?
paper:https://arxiv.org/abs/1710.10196
code :https://github.com/facebookresearch/pytorch_GAN_zoo
PGGAN基本思路:?
如果現在我們想生成超高分辨率的圖像,譬如 1024×1024 圖片,假設我們采用 StackGAN 或者是 LapGAN 的話,我們需要用到的 GANs 結構會非常多,這樣會導致網絡 深度巨大,訓練起來非常慢。為了解決這一問題,PGGAN(漸進式增長 GAN)提出的想法是,我們只需要一個 GANs 就能產生 1024×1024 圖片。但是一開始的時候 GANs 的網絡非常淺,只能學習低分辨率(4×4)的圖片生成,隨著訓練進行,我們會把 GANs 的網絡層數逐漸加深,進而去學習更高分辨率的圖片生成,最終不斷的更新 GANs 從而能學習到 1024×1024 分辨率的圖片生成。
也就是說,PGGAN 與 StackGAN 和 LapGAN 的最大不同在于,后兩者的網絡結構是固定的,但是 PGGAN 隨著訓練進行網絡會不斷加深,網絡結構是在不斷改變的。這樣做最大的好處就是,PGGAN 大部分的迭代都在較低分辨率下完成,訓練速度比傳統 GANs提升了 2-6 倍。
一、訓練方法:
1、原文中
訓練開始于有著一個4×4像素的低空間分辨率的生成器和判別器。隨著訓練,我們逐漸向生成器和判別器網絡中添加層,進而增加生成圖片的空間分辨率。所有現存的層在過程中保持可訓練性。這里N×N是指卷積層在N×N的空間分辨率上進行操作。這個方法使得在高分辨率上也能穩定合成并且加快了訓練速度。右圖我們展示了六張通過使用在1024 × 1024空間分辨率上漸進增長的方法生成的樣例圖片。
?Figure 1: Our training starts with both the generator (G) and discriminator (D) having a low spatial resolution of 4×4 pixels. As the training advances, we incrementally add layers to G and D, thus increasing the spatial resolution of the generated images. All existing layers remain trainable throughout the process. Here N × N refers to convolutional layers operating on N × N spatial resolution. This allows stable synthesis in high resolutions and also speeds up training considerably. One the right we show six example images generated using progressive growing at 1024 × 1024.
但是上述這樣的做法會有一個問題,就是從4×4的輸出變為8×8的輸出的過程中,網絡層數的突變會造成GANs的急劇不穩定,使得GANs需要花費額外的時間從動蕩狀態收斂回平穩狀態,這會影響模型訓練的效率。為了解決這一問題,PGGAN提出了平滑過渡技術。
Figure 2: When doubling the resolution of the generator (G) and discriminator (D) we fade in the new layers smoothly.
This example illustrates the transition from 16 × 16 images(a) to 32 × 32 images (c).
During the transition (b) we treat the layers that operate on the higher resolution like a residual block, whose weight α increases linearly from 0 to 1. Here 2× and 0.5× refer to doubling and halving the image resolution using nearest neighbor filtering and average pooling, respectively. The toRGB represents a layer that projects feature vectors to RGB colors and fromRGB does the reverse; both use 1 × 1 convolutions. When training the discriminator, we feed in real images that are downscaled to match the current resolution of the network. During a resolution transition, we interpolate between two resolutions of the real images, similarly to how the generator output combines two resolutions.
??如上圖所示,當把生成器和判別器的分辨率加倍時,會平滑的增強新的層。我們以從16 × 16像素的圖片轉換到32 × 32像素的圖片為例。在轉換(b)過程中,把在更高分辨率上操作的層視為一個殘缺塊,權重α從0到1線性增長。當α為0的時候,相當于圖 (a),當α為1的時候,相當于圖(c)。所以,在轉換過程中,生成樣本的像素,是從 16x16到 32x32轉換的。同理,對真實樣本也做了類似的平滑過渡,也就是,在這個階段的某個訓練batch,真實樣本是: X =??? (1?α) +??? α。
上圖中的2× 和 0.5× 指利用最近鄰卷積和平均池化分別對圖片分辨率加倍和折半。toRGB表示將一個層中的特征向量投射到RGB顏色空間中,fromRGB正好是相反的過程;這兩個過程都是利用1 × 1卷積。當訓練判別器時,插入下采樣后的真實圖片去匹配網絡中的當前分辨率。在分辨率轉換過程中,會在兩張真實圖片的分辨率之間插值,類似于將兩個分辨率結合到一起用生成器輸出。
2、知乎中
作者采用progressive growing的訓練方式,先訓一個小分辨率的圖像生成,訓好了之后再逐步過渡到更高分辨率的圖像。然后穩定訓練當前分辨率【通過加權】,再逐步過渡到下一個更高的分辨率。
如上圖所示。更具體點來說,當處于fade in(或者說progressive growing)階段的時候,上一分辨率(4*4)會通過resize+conv操作得到跟下一分辨率(8*8)同樣大小的輸出,然后兩部分做加權,再通過to_rgb操作得到最終的輸出。這樣做的一個好處是它可以充分利用上個分辨率訓練的結果,通過緩慢的過渡(w逐漸增大),使得訓練生成下一分辨率的網絡更加穩定。
上面展示的是Generator的growing階段。下圖是Discriminator的growing,它跟Generator的類似,差別在于一個是上采樣,一個是下采樣。這里就不再贅述。
不難想象,網絡在growing的時候,如果不引入progressive(fade in),那么有可能因為比較差的初始化,導致原來訓練的進度功虧一簣,模型不得不從新開始學習,如此一來就沒有充分利用以前學習的成果,甚至還可能誤導。我們知道GAN的訓練不穩定,這樣的突變有時候是致命的。所以為了穩定突變的分辨率,fade in(漸進)對訓練的穩定性來說至關重要。
借助這種growing的方式,PG-GAN的效果超級好。另外,我認為這種progressive growing的方法比較適合GAN的訓練,GAN訓練不穩定可以通過growing的方式可以緩解。不只是在噪聲生成圖像的任務中可以這么做,在其他用到GAN的任務中都可以引入這種訓練方式。我打算將progressive growing引入到CycleGAN中,希望能夠得到更好的結果。
二、增加多樣性,防止模型崩塌:
P-GAN通過設計判別多樣性的特征人為引導增加多樣性,從而解決模型崩塌問題。
作者沿用improved GAN的思路,通過人為地給Discriminator構造判別多樣性的特征來引導Generator生成更多樣的樣本。Discriminator能探測到mode collapse是否產生了,一旦產生,Generator的loss就會增大,通過優化Generator就會往遠離mode collapse的方向走,而不是一頭栽進坑里。Improved GAN引入了minibatch discrimination層,構造一個minibatch內的多樣性衡量指標,它引入了新的參數。
為簡化計算,文中直接計算minibatch 中feature 的標準差的均值,該scalar經擴展為feature map大小后直接作為新feature map的一個通道。我們把這層叫做Minibatch stddev層。該層可以加到D中的任意位置,但是作者只加到了D的末端。下圖是網絡的最終結構(D與G對稱):
生成對抗網絡總有一種捕獲訓練數據中部分數據分布的傾向,學術界稱之為 mode collapse,情況嚴重的話,稱之為 mode dropping。這與我們 GAN 生成對抗網絡的原本思想背道而馳,我們希望 GAN能夠捕捉出所有數據的分布,進而生成器可以產生盡可能真實、多樣的圖片。為了應對這種情況,作者提出了一種方法 minibatch standard deviation。
該方法的前身是?Minibatch discrimination。是生成對抗網絡之父 Ian Goodfellow 在 2016 年?Improved Techniques for Training GANs?中提出,具體的步驟如下圖所示:
Ian Goodfellow 在論文中曾經說道 Minibatch Discriminator 的中心思想在于讓 discriminator 每一次看多個 instance 的組合,而不是單獨的看一個 instance。(這樣可以增加 mode collapse 的懲罰)。每次看多個樣本的方法,有一點和 Batch Normalization 類似。然而,考慮到 Minibatch Disrminator 只是作為防止 mode collapse 的工具,因此,我們對他進一步限制,查看我們生成的圖像距離是否足夠的 '接近'。 查看樣本之間距離的方法很多,作者進行大量的實驗,介紹的 Minibatch Disrminator 就是一個較好的衡量距離的方法。
實在看不下去了.....? 具體的看:PGGAN(ProGAN) 介紹 2022/05/06 - lucky_light - 博客園
?Progressive Growing GANs簡介+PyTorch復現 - 知乎
論文閱讀《Progressive Growing of GANs for Improved Quality, Stability, and Variation》_framebreak的博客-CSDN博客
PGGAN(ProGAN) 介紹 2022/05/06 - lucky_light - 博客園
總結
以上是生活随笔為你收集整理的【PGGAN】1、Progressive Growing of GANs for Improved Quality, Stability, and Variation 论文阅读的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: rdm最新版编译mac版本
- 下一篇: ubunut 安装winehq + 官网