stylegan和progan核心代碼解析

stylegan是在progan的基礎上改進而來,所以要分析漸近生成的訓練過程看progan的代碼更加明白,其實progan和stylegan的代碼也差不多

一.生成器的結構是networks_progan.py中的G_paper(.............)函數

1.latents_in.set_shape(),初始化輸入變量

2.labels_in其實用不着

3.lod_in,控制網絡結構的關鍵變量,在training_loop.py中賦值爲sched.lod

4.函數block(x,res)功能:將輸入特徵圖的尺寸翻倍

res=2時,接一個全連接然後reshape成4*4的特徵圖,再卷積

res>2時,upscale-conv 後再接一個conv

5.函數torgb(x,res)功能:將特徵圖通道數變成3

6.然後就是網絡主結構了,分爲兩個實現方式,linear和recursivelinear實現方式更易懂一點

原論文中說,以4*4爲例,訓練完畢4*4的尺寸之後,加入8*8的block繼續訓練,這裏有一個關鍵點,當前訓練尺寸爲size,那麼大於size的網絡模塊都用上採樣來搭建,整個網絡的大致圖如下:

 

理解lerp_clip(img,images_out,lod_in-lod)函數最爲重要,

以目標圖像512,訓練4*4爲例,lod=[6,0],

訓練開始lod_in=7,那麼lod_in-lod一直大於等於1,則lerp_clip()函數輸出一直是images_out,也就是不斷的上採樣;

當lod_in等於6.x了,說明4*4已經訓練完畢,當lod=6,lerp_clip()函數輸出img+(images_out-img)*(6.x-6)說明8*8的模塊已經加入了,並且隨着訓練的進行,lod_in逐漸降低,img的權重越來越高,也就是論文中中所著的fade in new layers smoothly.

recursive有點坑,img被初始化爲一個對4*4的特徵圖torgb之後一直上採樣到目標尺寸圖像大小,lod_in<lod爲True時,grow下一個分辨率的網絡模塊

二.D.paper(..................)很簡單啊,G的鏡像

除了這個訓練結構困擾了我這麼久,其他看起來都很簡單啊哈哈哈哈哈哈哈哈哈

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