cycle/Pix2Pix 模型
CycleGAN是在去年三月底放在arxiv的一篇文章,文章名為Learning to Discover Cross-Domain Relations with Generative Adversarial Networks,同一時期還有兩篇非常類似的 DualGAN 和 DiscoGAN ,簡單來說,它們的功能就是:自動將某一類圖片轉換成另外一類圖片。
?
由于CycleGAN這個框架具有較強的通用性,因此一經發表就吸引了大量注意,很快,腦洞大開的網友想出了各種各樣神奇的應用。
比如將貓變成狗:
?
讓圖片中的人露出笑容:
?
將男人變成女人:
?
?
如果說這些應用多少可以理解,那么下面的應用就有點“匪夷所思”了:你可以想象將人和拉面做轉換嗎?
日本網友加藤卓哉(Takuya Kato)就訓練了這樣一個模型,它可以從拉面中生成人像,此外將人臉變成拉面的圖片。鑒于生成的結果比較鬼畜,如果有興趣的可以搜索觀看生成結果。
此外,知乎上的 @達聞西 還用CycleGAN訓練了可以脫掉女優衣服的模型(可以參考提高駕駛技術:用GAN去除(愛情)動作片中的馬賽克和衣服),其腦洞之大,實在是讓人驚嘆了一番。
?
?
還有自動美顏,卸妝...
?
CycleGAN與pix2pix模型的對比
pix2pix也可以做圖像變換,它和CycleGAN的區別在于,pix2pix模型必須要求成對數據(paired data),而CycleGAN利用非成對數據也能進行訓練(unpaired data)。
?
?
比如,我們希望訓練一個將白天的照片轉換為夜晚的模型。如果使用pix2pix模型,那么我們必須在搜集大量地點在白天和夜晚的兩張對應圖片,而使用CycleGAN只需同時搜集白天的圖片和夜晚的圖片,不必滿足對應關系。因此CycleGAN的用途要比pix2pix更廣泛,利用CycleGAN就可以做出更多有趣的應用。
?
?
在TensorFlow/Pytorch中實驗CycleGAN
1.Tensorflow中開源代碼主要可以參考這個
vanhuyz/CycleGAN-TensorFlow(地址:https://github.com/vanhuyz/CycleGAN-TensorFlow)。
具體操作也比較簡單,今天主要給大家玩玩Pytorch版CycleGAN 與 pix2pix二合一版的。
?
2.提高駕駛技術
?
一行代碼都不用改,只需要按照前面的步驟把數據準備好,然后按照pix2pix官方的使用方法訓練就可以了:
https://github.com/phillipi/pix2pix
pyTorch版pix2pix(Cycle-GAN二合一版):
https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix
具體步驟:
1.拷貝項目
git clone https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix
cd pytorch-CycleGAN-and-pix2pix
這個沒啥好說的,不會github命令請轉身學習幾分鐘。
?
2.玩轉CycleGAN
CycleGAN train/test
懶人系列就直接安裝源碼中給出的數據集,一步步來就ok.
這里主要介紹如何在自己的數據集上去訓練。
數據集準備
To train a model on your own datasets, you need to create a data folder with two subdirectories?trainA?and?trainB?that contain images from domain A and B. You can test your model on your training set by setting?--phase train?in?test.py. You can also create subdirectories?testA?and?testB?if you have test data.
簡單說就是,訓練自己的CycleGAN,需要在datasets目錄下新建兩個文件夾 trainA 和trainB,同時為了后面的測試,可以再建testA,testB,完整目錄展示如下:
注意mosaic是我存放兩個數據集的根目錄。看名字就知道我這個數據集就是用來玩馬賽克的。
數據集有千百種獲取方式,,寫個爬蟲腳本,收集一下需要的圖片,然后做些處理,隨機crop,翻轉等數據增強操作。記得一定要準備兩類,比如高清圖,對應的馬賽克圖,美顏圖,對應的需要卸妝后的圖。如果你跟我一樣比較懶,那么也好辦,從來源數據集下載總可以了吧。這里我下載的celeba數據集,然后截取了兩萬張,,,后來發現訓練太慢來,再次截取,最后采集來三千張來玩,由于我要做的是原圖與馬賽克圖之間的translation,所以,隨機采集3000張后的圖作為trainB,然后打馬賽克的圖作為trainA.最后圖像轉換的方向就是A==>B
話說回來,如何打mosaic?前幾天剛好研究到這里,已經放出了代碼,請自行移步這里
?
訓練
python3 train.py --dataroot ./datasets/mosaic --name mosaic_cyclegan --model cycle_gan --pool_size 50 --no_dropout --gpu_ids 0,1?
說明下:
CycleGAN訓練是個非常漫長的過程,如果沒有GPU,小哥哥你還是看看就好。我是直接放到服務器上玩的了,配置如下:
?
如上訓練命令,我使用的是GPU DEVICE 0和1
代碼想要跑起來,必須搭建好環境,參照項目源碼自行配置,記得安裝
pip install visdom
pip install dominate
可視化過程:
python3 -m visdom.server記得現把這個執行下,不然直接跑訓練命令會報錯。
訓練過程是這樣的
?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
?
?
看不出來?再貼一張:
?
?
測試命令在:
?
/scripts/test_cyclegan.sh?
python test.py --dataroot ./datasets/mosaic --name mosaic_cyclegan --model cycle_gan --phase test --no_dropout?
?
?
3.玩轉pix2pix
?
pix2pix train/test
數據集準備
?
We provide a python script to generate pix2pix training data in the form of pairs of images {A,B}, where A and B are two different depictions of the same underlying scene. For example, these might be pairs {label map, photo} or {bw image, color image}. Then we can learn to translate A to B or B to A:
Create folder?/path/to/data?with subfolders?A?and?B.?A?and?B?should each have their own subfolders?train,?val,?test, etc. In?/path/to/data/A/train, put training images in style A. In?/path/to/data/B/train, put the corresponding images in style B. Repeat same for other data splits (val,?test, etc).
Corresponding images in a pair {A,B} must be the same size and have the same filename, e.g.,?/path/to/data/A/train/1.jpg?is considered to correspond to?/path/to/data/B/train/1.jpg.
?
這個比較復雜一點,主要是要求圖像必須成對
我們同樣在./datasets/mosaic文件夾下新建兩個文件夾,A 和 B,然后在它們各自目錄下再建三個folder,test,train,val
最后將訓練數據放到各自的train下,測試的在test下,驗證在val下。
整個文件結構長這樣子:
?
?
細心的盆友可能發現mosaic根目錄下也有三個folder,test,train,val,對的,這個是用代碼自動生成的:
python3 datasets/combine_A_and_B.py --fold_A ./mosaic/A --fold_B ./mosaic/B --fold_AB ./mosaic到此,我們的數據集算是搞定了。
?
訓練
還不就是一句話的事
python3 train.py --dataroot ./datasets/mosaic --name mosaic_pix2pix --model pix2pix --which_model_netG unet_256 --which_direction AtoB --lambda_B 100 --dataset_mode aligned --no_lsgan --norm batch --pool_size 0?
注意參數選取
?
可視化
一樣的,通過
run?python3 -m visdom.server?and click the URL?http://localhost:8097.?
?
測試
so easy ..
#!./scripts/test_pix2pix.sh
python test.py --dataroot ./datasets/facades --name facades_pix2pix --model pix2pix --which_model_netG unet_256 --which_direction BtoA --dataset_mode aligned --norm batch
數據集改成自己測試的數據集路徑就好。
?
參考文獻:
1.https://cloud.tencent.com/developer/article/1064970
2.https://cloud.tencent.com/developer/article/1077415
3.https://blog.csdn.net/Gavinmiaoc/article/details/80585531
總結
以上是生活随笔為你收集整理的cycle/Pix2Pix 模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: silverlight storyboa
- 下一篇: linux下构建Zabbix网络监控平台