一、progan,https://zhuanlan.zhihu.com/p/93748098
stylegan的前身是progan,Progressive Growing of GANs for Improved Quality, Stability, and Variation
ProGAN 最大的貢獻在於提出了一種新的訓練方式,即,我們不要一上來就學那么難的高清圖像生成,這樣會讓 Generator 直接崩掉,而是從低清開始學起,學好了再提升分辨率學更高分辨率下的圖片生成。
從4x4到8x8一直提升到1024x1024,循序漸進,即能有效且穩定地訓練出一個高質量的高分辨率生成器模型。
在某清晰度階段訓練好后,如何提升模型輸出的分辨率后繼續訓練呢,下面是模型的整體結構,4-8-16-32-64-128-256-512-1024,無論是生成器還是判別器,在某清晰階段訓練好后,只要各加上三層(表格中從上往下加),接着訓練就好啦~

更具體地說,一開始的 4x4 分辨率階段的訓練結束后,接下來的訓練循環進行以下兩步:
- 加入新層,提升分辨率訓練,使新層 fade in,舊層 fade out。
- 新層完全加入,正常訓練。
二、stylegan
(1)第一個是Mapping network,即下圖 (b)中的左部分,由隱藏變量 z 生成 中間隱藏變量 w的過程,這個 w 就是用來控制生成圖像的style,即風格,為什么要多此一舉將 z 變成 w 呢,后面會詳細講到。
(2)第二個是Synthesis network,它的作用是生成圖像,創新之處在於給每一層子網絡都喂了 A 和 B,A 是由 w 轉換得到的仿射變換,用於控制生成圖像的風格,B 是轉換后的隨機噪聲,用於豐富生成圖像的細節,即每個卷積層都能根據輸入的A來調整"style",通過B來調整細節。
(3)整個網絡結構還是保持了 PG-GAN (progressive growing GAN) 的結構。

左側是progan的網絡結構,右側是stylegan的
層和分辨率越低,它所影響的特征就越粗糙。簡要將這些特征分為三種類型:
1、粗糙的——分辨率不超過82,影響姿勢、一般發型、面部形狀等;
2、中等的——分辨率為162至322,影響更精細的面部特征、發型、眼睛的睜開或是閉合等;
3、高質的——分辨率為642到10242,影響顏色(眼睛、頭發和皮膚)和微觀特征;
三、stylegan---第一部分,mapping network
1.添加 Mapping Network 的目標是將輸入向量編碼轉為中間向量,並且中間向量后續會傳給生成網絡得到 18 個控制向量,使得該控制向量的不同元素能夠控制不同的視覺特征。
2.為何要加 Mapping Network 呢?因為如果不加這個 Mapping Network 的話,后續得到的 18個控制向量之間會存在特征糾纏的現象——比如說我們想調節 8*8 分辨率上的控制向量
(假 設它能控制人臉生成的角度),但是我們會發現 32*32 分辨率上的控制內容(譬如膚色)也被改變了,這個就叫做特征糾纏。所以 Mapping Network 的作用就是為輸入向量的特征解纏提供一條學習的通路。
3.為何 Mapping Network 能夠學習到特征解纏呢?簡單來說,如果僅使用輸入向量來控制視覺特征,能力是非常有限的,因此它必須遵循訓練數據的概率密度。
例如,如果黑頭發的人的圖像在數據集中更常見,那么更多的輸入值將會被映射到該特征上。因此,該模型無法將部分輸入(向量中的元素)映射到特征上,這就會造成特征糾纏。
然而,通過使用另一個神經網絡,該模型可以生成一個不必遵循訓練數據分布的向量,並且可以減少特征之間的相關性。(沒看懂)
