最近看了下deepnude的原理,其git上說的是使用了pixel2pixel技術,也就是說是這一篇:
《Image-to-Image Translation with Conditional Adversarial Networks》
這是加里福利亞大學在CVPR 2017上發表的一篇論文,講的是如何用條件生成對抗網絡實現圖像到圖像的轉換任務。
> 原文鏈接:https://arxiv.org/abs/1611.07004
> 論文主頁:https://phillipi.github.io/pix2pix/,其中包含了PyTorch、Tensorflow等主流框架的代碼實現
所以我看了眼這篇文章,發現這篇文章其原理是由CGAN啓發的,所以我們今天來看看CGAN是怎麼一回事。
CGAN(條件GAN)全名:《Conditional Generative Adversarial Nets》
CGAN的論文網址請移步:https://arxiv.org/pdf/1411.1784.pdf
首先簡要介紹一下GAN,具體介紹請移步:https://blog.csdn.net/wenqiwenqi123/article/details/86178376
GAN主要包括兩個網絡,生成器和判別器,生成器的目的就是將隨機輸入的高斯噪聲映射成圖像(“假圖”),判別器則是判斷輸入圖像是否來自生成器。換句話說就是生成器努力矇蔽判別器,而判別器努力不被生成器矇蔽。最優結果就是判別器最終的判別概率爲0.5,無法分辨出哪張圖是真實的哪張圖是生成器生成的。
生成器爲G,判別器爲D。假設真實數據爲x,生成器輸入的噪聲分佈爲,那麼生成器生成的圖爲,數據在判別器上的結果爲。
那麼GAN的目標函數如下:
說完GAN,開始說CGAN:原始的GAN的生成器只能根據隨機噪聲進行生成圖像,至於這個圖像是什麼(即標籤是什麼我們無從得知),判別器也只能接收圖像輸入進行判別是否圖像來使生成器。因此CGAN的主要貢獻就是在原始GAN的生成器與判別器中的輸入中加入額外信息。額外信可以是任何信息,例如標籤。因此CGAN的提出使得GAN可以利用圖像與對應的標籤進行訓練,並在測試階段 利用給定標籤生成特定圖像。
在CGAN的論文中,網絡架構使用的MLP(全連接網絡)。在CGAN中的生成器,我們給定一個輸入噪聲和額外信息,之後將兩者通過全連接層連接到一起作爲隱藏層輸入。同樣地,在判別器中輸入圖像和 額外信息也將連接到一起作爲隱藏層輸入。CGAN的網絡架構圖如下所示:
那麼,CGAN的目標函數可以表述成如下形式:
下面是CGAN論文中生成的手寫數字圖像的結果,每一行代表有一個標籤,例如第一行代表標籤爲0的圖片。