(原)GAN之pix2pix


轉載請注明出處:

https://www.cnblogs.com/darkknightzh/p/9175281.html

 

論文:

Image-to-Image Translation with Conditional Adversarial Networks

https://arxiv.org/pdf/1611.07004v1.pdf

 

代碼:

官方project:https://phillipi.github.io/pix2pix/

官方torch代碼:https://github.com/phillipi/pix2pix

官方pytorch代碼(CycleGAN、pix2pix):https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix

第三方的tensorflow版本:https://github.com/yenchenlin/pix2pix-tensorflow

 

pix2pix使用的是Conditional GAN(cGAN)。傳統的GAN通過隨機向量z學習到圖像y:$G:z\to y$;cGAN則是通過輸入圖像x及隨機向量z學到圖像y:$G:\{x,z\}\to y$。其目標函數是

${{L}_{cGAN}}(G,D)={{E}_{x,y\sim {{p}_{data}}(x,y)}}\left[ \log D(x,y) \right]+{{E}_{x\sim {{p}_{data}}(x),z\sim {{p}_{z}}(z)}}\left[ \log (1-D(x,G(x,z))) \right]$

 

如下圖所示,左側為正樣本,右側為負樣本。其中真實圖像為y,真是圖像對應的航空圖像為x,這兩張圖像通過判別器,得到正樣本。右圖中將航空圖像x通過生成器G,得到重建的圖像G(x,z),而后將重構圖像及真實航空圖像輸入判別器D,作為負樣本。

由於以前的研究中發現,對於cGAN,增加一個額外的損失,如L2距離(真實圖像和生成圖像),效果更好。此時判別器的損失不變,生成器的損失變了。該論文中使用L1距離,原因是相比於L2距離,L1距離產生的模糊更小。

${{L}_{L1}}(G)={{E}_{x,y\sim {{p}_{data}}(x,y),z\sim {{p}_{z}}(z)}}\left[ {{\left\| y-G(x,z) \right\|}_{1}} \right]$

因而,pix2pix最終的目標函數是:

${{G}^{*}}=\arg \underset{G}{\mathop{\min }}\,\underset{D}{\mathop{\max }}\,{{L}_{cGAN}}(G,D)+\lambda {{L}_{L1}}(G)$

 

pix2pix未使用傳統的encoder-decoder的模式(下圖左側),而是使用了U-Net(下圖右側)網絡。U-Net論文為:U-net: Convolutional networks for biomedical image segmentation。U-net在decoder部分,每個conv層之前將輸入和decoder對應的鏡像層進行了拼接,因而輸入的通道數增加了1倍,但是不嚴謹的說,輸入的通道數不會影響卷積的輸出維度,因而網絡不會出問題。

網絡中的判別器結構比較容易理解,生成器按照上面U-Net理解之后,也比較容易理解(開始沒有理解U-Net,導致對生成器中encoder的理解有困難)。具體網絡結構如下圖所示(對應於第三方的tensorflow代碼)。當輸入為256*256的圖像時,第一行為圖像寬高(未考慮batchsize及channel),第二行中e1…e8和第三行d1…d8為generator函數中對應的變量。第三行d1t…d7t為generator函數中encoder的臨時變量。其和e8…e2在channel維度進行concat后得到最終的d1…d7。最終d8經過tanh后,得到輸入范圍為[-1,1]之內的生成圖像。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM