CycleGAN原理及實(shí)驗(yàn)(TensorFlow)

生成對(duì)抗網(wǎng)絡(luò)(GAN)是一個(gè)十分有效的深度學(xué)習(xí)模型,由此衍生了CycleGAN。

先簡(jiǎn)單介紹一下GAN。

GAN——Generative Adversarial Networks

網(wǎng)絡(luò)中有生成器G(generator)和鑒別器(Discriminator)。
有兩個(gè)數(shù)據(jù)域分別為X,Y。G 負(fù)責(zé)把X域中的數(shù)據(jù)拿過(guò)來(lái)拼命地模仿成真實(shí)數(shù)據(jù)并把它們藏在真實(shí)數(shù)據(jù)中,而 D 就拼命地要把偽造數(shù)據(jù)和真實(shí)數(shù)據(jù)分開。經(jīng)過(guò)二者的博弈以后,G 的偽造技術(shù)越來(lái)越厲害,D 的鑒別技術(shù)也越來(lái)越厲害。直到 D 再也分不出數(shù)據(jù)是真實(shí)的還是 G 生成的數(shù)據(jù)的時(shí)候,這個(gè)對(duì)抗的過(guò)程達(dá)到一個(gè)動(dòng)態(tài)的平衡。

傳統(tǒng)的GAN是單向的:


單向GAN
GAN損失

訓(xùn)練這個(gè)單向GAN需要兩個(gè)loss:生成器的重建Loss和判別器的判別Loss。
1.重建Loss:希望生成的圖片Gba(Gab(a))與原圖a盡可能的相似。


2.判別Loss:生成的假圖片和原始真圖片都會(huì)輸入到判別器中。公式為0,1二分類的損失。
判別Loss

CycleGAN

CycleGAN本質(zhì)上是兩個(gè)鏡像對(duì)稱的GAN,構(gòu)成了一個(gè)環(huán)形網(wǎng)絡(luò)。
兩個(gè)GAN共享兩個(gè)生成器,并各自帶一個(gè)判別器,即共有兩個(gè)判別器和兩個(gè)生成器。一個(gè)單向GAN兩個(gè)loss,兩個(gè)即共四個(gè)loss。

循環(huán)一致性損失

論文里最終使用均方誤差損失表示:


損失函數(shù)

CycleGAN的網(wǎng)絡(luò)架構(gòu)如圖所示:



CycleGAN結(jié)構(gòu)示意圖

可以實(shí)現(xiàn)無(wú)配對(duì)的兩個(gè)圖片集的訓(xùn)練是CycleGAN與Pixel2Pixel相比的一個(gè)典型優(yōu)點(diǎn)。但是我們?nèi)匀恍枰ㄟ^(guò)訓(xùn)練創(chuàng)建這個(gè)映射來(lái)確保輸入圖像和生成圖像間存在有意義的關(guān)聯(lián),即輸入輸出共享一些特征。

簡(jiǎn)而言之,該模型通過(guò)從域DA獲取輸入圖像,該輸入圖像被傳遞到第一個(gè)生成器GeneratorA→B,其任務(wù)是將來(lái)自域DA的給定圖像轉(zhuǎn)換到目標(biāo)域DB中的圖像。然后這個(gè)新生成的圖像被傳遞到另一個(gè)生成器GeneratorB→A,其任務(wù)是在原始域DA轉(zhuǎn)換回圖像CyclicA,這里可與自動(dòng)編碼器作對(duì)比。這個(gè)輸出圖像必須與原始輸入圖像相似,用來(lái)定義非配對(duì)數(shù)據(jù)集中原來(lái)不存在的有意義映射。

生成器
  • 生成器由編碼器、轉(zhuǎn)換器和解碼器構(gòu)成。


    生成器結(jié)構(gòu)
  • 編碼:第一步利用卷積神經(jīng)網(wǎng)絡(luò)從輸入圖象中提取特征。將圖像壓縮成256個(gè)64*64的特征向量。
  • 轉(zhuǎn)換:通過(guò)組合圖像的不相近特征,將圖像在DA域中的特征向量轉(zhuǎn)換為DB域中的特征向量。作者使用了6層Reset模塊,每個(gè)Reset模塊是一個(gè)由兩個(gè)卷積層構(gòu)成的神經(jīng)網(wǎng)絡(luò)層,能夠達(dá)到在轉(zhuǎn)換時(shí)同時(shí)保留原始圖像特征的目標(biāo)。
  • 解碼:利用反卷積層(decovolution)完成從特征向量中還原出低級(jí)特征的工作,最后得到生成圖像。
鑒別器

鑒別器將一張圖像作為輸入,并嘗試預(yù)測(cè)其為原始圖像或是生成器的輸出圖像。

鑒別器結(jié)構(gòu)

鑒別器本身屬于卷積網(wǎng)絡(luò),需要從圖像中提取特征,再通過(guò)添加產(chǎn)生一維輸出的卷積層來(lái)確定提取的特征是否屬于特定類別。

man2woman實(shí)驗(yàn)

分別有大約2萬(wàn)張男人與女人的臉作為輸入的訓(xùn)練集。

TensorFlow上CycleGAN的實(shí)現(xiàn)代碼:
https://github.com/vanhuyz/CycleGAN-TensorFlow.git
工具:pycharm+python3.6+TensorFlow

數(shù)據(jù)集
man

woman
將圖片轉(zhuǎn)換為tfrecords格式

項(xiàng)目中提供了build_data.py腳本,修改訓(xùn)練集的路徑,運(yùn)行即可。

訓(xùn)練
導(dǎo)出模型
對(duì)單張圖片進(jìn)行轉(zhuǎn)換

將data/test.jpg替換為對(duì)應(yīng)的輸入圖片地址

訓(xùn)練時(shí)踩了比較多坑。由于急于看結(jié)果用了比較高的學(xué)習(xí)率。大概迭代五萬(wàn)次的時(shí)候可以有一點(diǎn)能看的結(jié)果,10萬(wàn)次時(shí)多數(shù)還可以接受。但是仍然有許多問(wèn)題,比如戴眼鏡,臉上亮度不均勻,角度奇異等都可能引起生成的圖像中噪聲較大的問(wèn)題。
轉(zhuǎn)換的特征通常為面部五官特征以及膚色亮度等,不包括發(fā)型,因此男女轉(zhuǎn)化之后顯得比較詭異。。
比如


未完待續(xù)。。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容