pix2pix 学习笔记
論文:
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
?
如下圖所示,左側(cè)為正樣本,右側(cè)為負(fù)樣本。其中真實(shí)圖像為y,真是圖像對(duì)應(yīng)的航空?qǐng)D像為x,這兩張圖像通過判別器,得到正樣本。右圖中將航空?qǐng)D像x通過生成器G,得到重建的圖像G(x,z),而后將重構(gòu)圖像及真實(shí)航空?qǐng)D像輸入判別器D,作為負(fù)樣本。
?
?
1. 介紹:
圖像處理的很多問題都是將一張輸入的圖片轉(zhuǎn)變?yōu)橐粡垖?duì)應(yīng)的輸出圖片,比如灰度圖、梯度圖、彩色圖之間的轉(zhuǎn)換等。通常每一種問題都使用特定的算法(如:使用CNN來解決圖像轉(zhuǎn)換問題時(shí),要根據(jù)每個(gè)問題設(shè)定一個(gè)特定的loss function 來讓CNN去優(yōu)化,而一般的方法都是訓(xùn)練CNN去縮小輸入跟輸出的歐氏距離,但這樣通常會(huì)得到比較模糊的輸出)。這些方法的本質(zhì)其實(shí)都是從像素到像素的映射。于是論文在GAN的基礎(chǔ)上提出一個(gè)通用的方法:pix2pix 來解決這一類問題。通過pix2pix來完成成對(duì)的圖像轉(zhuǎn)換(Labels to Street Scene, Aerial to Map,Day to Night等),可以得到比較清晰的結(jié)果。
先看一張效果圖:
?
2. 方法
training procedure
訓(xùn)練大致過程如上圖所示。圖片 x 作為此cGAN的條件,需要輸入到G和D中。G的輸入是{x,z}(其中,x 是需要轉(zhuǎn)換的圖片,z 是隨機(jī)噪聲),輸出是生成的圖片G(x,z)。D則需要分辨出{x,G(x,z)}和{x,y}。
?
2.1 目標(biāo)函數(shù)
pix2pix使用的是Conditional GAN(cGAN)。傳統(tǒng)的GAN通過隨機(jī)向量z學(xué)習(xí)到圖像y:G:z→yG:z→y;cGAN則是通過輸入圖像x及隨機(jī)向量z學(xué)到圖像y:G:{x,z}→yG:{x,z}→y。一般的cGAN的目標(biāo)函數(shù)如下,生成器 G 不斷的嘗試minimize下面的目標(biāo)函數(shù),而D則通過不斷的迭代去maximize這個(gè)目標(biāo)函數(shù)。
cGAN的目標(biāo)函數(shù)
為了測(cè)試輸入的條件x對(duì)于D的影響,論文也訓(xùn)練一個(gè)普通的GAN,判別器D只用于判別生成的圖像是否真實(shí)。
?
GAN
前人的一些工作中發(fā)現(xiàn),將GAN的目標(biāo)函數(shù)和傳統(tǒng)的loss結(jié)合,可以帶來更好的效果。由于以前的研究中發(fā)現(xiàn),對(duì)于cGAN,增加一個(gè)額外的損失,如L2距離(真實(shí)圖像和生成圖像),效果更好。此時(shí)判別器的損失不變,生成器的損失變了。該論文中使用L1距離,原因是相比于L2距離,L1距離產(chǎn)生的模糊更小。所以論文增加了一個(gè)L1 loss交給生成器G去最小化。
L1 loss
?
所以最終的目標(biāo)函數(shù)是:
?
final objective
?
文中對(duì)于不同的loss的效果做了一個(gè)對(duì)比,可以看到L1 + cGAN的效果相對(duì)于只用L1或者cGAN都是比較好的。
?
different loss
2.2 網(wǎng)絡(luò)結(jié)構(gòu)
論文對(duì)DCGAN的生成器和判別器的結(jié)構(gòu)做了一些改進(jìn)。
2.2.1 生成器結(jié)構(gòu)
?
pix2pix未使用傳統(tǒng)的encoder-decoder的模式(下圖左側(cè)),而是使用了U-Net(下圖右側(cè))網(wǎng)絡(luò)。U-Net論文為:U-net: Convolutional networks for biomedical image segmentation。U-net在decoder部分,每個(gè)conv層之前將輸入和decoder對(duì)應(yīng)的鏡像層進(jìn)行了拼接,因而輸入的通道數(shù)增加了1倍,但是不嚴(yán)謹(jǐn)?shù)恼f,輸入的通道數(shù)不會(huì)影響卷積的輸出維度,因而網(wǎng)絡(luò)不會(huì)出問題。
網(wǎng)絡(luò)中的判別器結(jié)構(gòu)比較容易理解,生成器按照上面U-Net理解之后,也比較容易理解(開始沒有理解U-Net,導(dǎo)致對(duì)生成器中encoder的理解有困難)。具體網(wǎng)絡(luò)結(jié)構(gòu)如下圖所示(對(duì)應(yīng)于第三方的tensorflow代碼)。當(dāng)輸入為256*256的圖像時(shí),第一行為圖像寬高(未考慮batchsize及channel),第二行中e1…e8和第三行d1…d8為generator函數(shù)中對(duì)應(yīng)的變量。第三行d1t…d7t為generator函數(shù)中encoder的臨時(shí)變量。其和e8…e2在channel維度進(jìn)行concat后得到最終的d1…d7。最終d8經(jīng)過tanh后,得到輸入范圍為[-1,1]之內(nèi)的生成圖像。
U-Net
U-Net是德國Freiburg大學(xué)模式識(shí)別和圖像處理組提出的一種全卷積結(jié)構(gòu)。和常見的先降采樣到低維度,再升采樣到原始分辨率的編解碼(Encoder-Decoder)結(jié)構(gòu)的網(wǎng)絡(luò)相比,U-Net的區(qū)別是加入skip-connection,對(duì)應(yīng)的feature maps和decode之后的同樣大小的feature maps按通道拼(concatenate)一起,用來保留不同分辨率下像素級(jí)的細(xì)節(jié)信息。U-Net對(duì)提升細(xì)節(jié)的效果非常明顯,下面是文中給出的一個(gè)效果對(duì)比,可以看到不同尺度的信息都得到了很好的保留。
不同結(jié)構(gòu)的G與不同的目標(biāo)函數(shù)組合的效果對(duì)比
?
2.2.2 判別器結(jié)構(gòu)
利用馬爾科夫性的判別器(PatchGAN)
pix2pix采用的一個(gè)想法是,用重建來解決低頻成分,用GAN來解決高頻成分。一方面,使用傳統(tǒng)的L1 loss來讓生成的圖片跟訓(xùn)練的圖片盡量相似,用GAN來構(gòu)建高頻部分的細(xì)節(jié)。
final objective
另一方面,使用PatchGAN來判別是否是生成的圖片。PatchGAN的思想是,既然GAN只用于構(gòu)建高頻信息,那么就不需要將整張圖片輸入到判別器中,讓判別器對(duì)圖像的每個(gè)大小為N x N的patch做真假判別就可以了。因?yàn)椴煌膒atch之間可以認(rèn)為是相互獨(dú)立的。pix2pix對(duì)一張圖片切割成不同的N x N大小的patch,判別器對(duì)每一個(gè)patch做真假判別,將一張圖片所有patch的結(jié)果取平均作為最終的判別器輸出。
具體實(shí)現(xiàn)的時(shí)候,作者使用的是一個(gè)NxN輸入的全卷積小網(wǎng)絡(luò),最后一層每個(gè)像素過sigmoid輸出為真的概率,然后用BCEloss計(jì)算得到最終loss。這樣做的好處是因?yàn)檩斎氲木S度大大降低,所以參數(shù)量少,運(yùn)算速度也比直接輸入一張快,并且可以計(jì)算任意大小的圖。論文對(duì)比了不同大小patch的結(jié)果,對(duì)于256x256的輸入,patch大小在70x70的時(shí)候,從視覺上看結(jié)果就和直接把整張圖片作為判別器輸入沒有多大區(qū)別了:
patchGAN
3. 效果
?
?
?
4. 總結(jié)
?
優(yōu)點(diǎn):pix2pix巧妙的利用了GAN的框架來為“Image-to-Image translation”的一類問題提供了通用框架。利用U-Net提升細(xì)節(jié),并且利用PatchGAN來處理圖像的高頻部分。
缺點(diǎn):訓(xùn)練需要大量的成對(duì)圖片,比如白天轉(zhuǎn)黑夜,則需要大量的同一個(gè)地方的白天和黑夜的照片。
作者:AlanPaul
鏈接:https://www.jianshu.com/p/8c7a7cb7198c
來源:簡書
簡書著作權(quán)歸作者所有,任何形式的轉(zhuǎn)載都請(qǐng)聯(lián)系作者獲得授權(quán)并注明出處。
總結(jié)
以上是生活随笔為你收集整理的pix2pix 学习笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 运行报错error: (-215:Ass
- 下一篇: WGAN-GP 学习笔记