Github: https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix
PyTorchのCycleGANとpix2pix
これは、対になっていない画像対画像変換のためのPyTorchの現在の実装です。
コードはJun-Yan ZhuとTaesung Parkによって書かれました。
論文とまったく同じ結果を再現したい場合は、オリジナルのCycleGAN TorchとPix2pix Torchコードをチェックしてください。
CycleGAN: [プロジェクト] [ペーパー] [トーチ]
Pix2pix: [プロジェクト] [ペーパー] [トーチ]
[EdgesCatsデモ] [pix2pix-tensorflow]
あなたの研究にこのコードを使用する場合は、引用してください:
Cycle-Consistent Adversarial Networksを用いた非対話型画像 – 画像変換
Jun-Jun Zhu *、 Taesung Park *、 Phillip Isola 、 Alexei A. Efros
arxiv、2017年(*同等の貢献)
条件付き対立ネットワークを用いた画像から画像への変換
フィリップ・イゾラ 、 ジュン・ヤン・チュウ 、 鎮輝周 、 アレクセイ・エフロス
CVPR 2017で。
その他の実装:
CycleGAN
[ Tensorflow ] (アーサー・ラトーレ)、 [ Tensorflow ] (ヴァン・フイ)、 [Tensorflow] (Xiaowei Hu)、 [ Tensorflow -simple] (Zhenliang He)、 [TensorLayer] (lunoxier)、 [Chainer] (Yanghua Jin)、 [Minimal PyTorch] (yunjey)、 [Mxnet] (Ldpe2G)、 [lasagne / keras] (tjwei)
pix2pix
[Tensorflow] (by Christopher Hesse)、 [ Tensorflow ] (EyyübSariu)、 [Tensorflow(face2face)] (Dat Tran)、 [Tensorflow(フィルム)] (Arthur Juliani)、 [Tensorflow(zi2zi)] (チェンジャー)(マティア)、 [tf / torch / keras / lasagne] (ツイウェイ)、 [Pytorch] (by taey16)
前提条件
- LinuxまたはmacOS
- Python 2または3
- CPUまたはNVIDIA GPU + CUDA CuDNN
入門
インストール
- PyTorchと依存関係をhttp://pytorch.orgからインストールする
- ソースからTorchのビジョンをインストールします。
git clone https://github.com/pytorch/vision
cd vision
python setup.py install
pip install visdom
pip install dominate
- このレポをクローン:
git clone https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix
cd pytorch-CycleGAN-and-pix2pix
CycleGANトレーニング/テスト
- CycleGANデータセットをダウンロードする(例:地図):
bash ./datasets/download_cyclegan_dataset.sh maps
- モデルを訓練する:
#!./scripts/train_cyclegan.sh
python train.py --dataroot ./datasets/maps --name maps_cyclegan --model cycle_gan --no_dropout
- トレーニング結果と損失プロットを表示するには、
python -m visdom.server
を実行し、URL http:// localhost:8097をクリックします。 より多くの中間結果を確認するには、../checkpoints/maps_cyclegan/web/index.html
を参照してください。 - モデルをテストします。
#!./scripts/test_cyclegan.sh
python test.py --dataroot ./datasets/maps --name maps_cyclegan --model cycle_gan --phase test --no_dropout
テスト結果はhtmlファイルに保存されます: ./results/maps_cyclegan/latest_test/index.html
/ ./results/maps_cyclegan/latest_test/index.html
/ ./results/maps_cyclegan/latest_test/index.html
/ ./results/maps_cyclegan/latest_test/index.html
。
pix2pix列車/テスト
- pix2pixデータセットをダウンロードする(egfacades):
bash ./datasets/download_pix2pix_dataset.sh facades
- モデルを訓練する:
#!./scripts/train_pix2pix.sh
python train.py --dataroot ./datasets/facades --name facades_pix2pix --model pix2pix --which_model_netG unet_256 --which_direction BtoA --lambda_A 100 --dataset_mode aligned --no_lsgan --norm batch --pool_size 0
- トレーニング結果と損失プロットを表示するには、
python -m visdom.server
を実行し、URL http:// localhost:8097をクリックします。 より多くの中間結果を確認するには、../checkpoints/facades_pix2pix/web/index.html
を参照してください。 - モデルをテストします(
bash ./scripts/test_pix2pix.sh
)。
#!./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
テスト結果はhtmlファイルに保存されます: ./results/facades_pix2pix/latest_val/index.html
/ ./results/facades_pix2pix/latest_val/index.html
/ ./results/facades_pix2pix/latest_val/index.html
/ ./results/facades_pix2pix/latest_val/index.html
。
さらにスクリプトの例はscripts
ディレクトリにあります。
事前訓練を受けたモデルを適用する(CycleGAN)
- 次のスクリプトを使用して、事前に訓練されたモデル(eg horse2zebra)をダウンロードできます。
bash pretrained_models/download_cyclegan_model.sh horse2zebra
事前に訓練されたモデルは、. ./checkpoints/{name}_pretrained/latest_net_G.pth
保存され./checkpoints/{name}_pretrained/latest_net_G.pth
。
- モデルをテストするには、horse2zebraデータセットもダウンロードする必要があります。
bash ./datasets/download_cyclegan_dataset.sh horse2zebra
- 次に、
python test.py --dataroot datasets/horse2zebra/testA --checkpoints_dir ./checkpoints/ --name horse2zebra_pretrained --no_dropout --model test --dataset_mode single --loadSize 256
結果は./results/
に保存され./results/
。 結果ディレクトリを指定するには、– --results_dir {directory_path_to_save_result}
を使用します。
-
注:TorchとPyTorchを使用して訓練されたモデルでは、結果が若干異なりますが、どの結果が良いかは判断できませんでした。 私たちの論文で同じ結果を再現したい場合は、トーチコードベースで事前に訓練されたモデルを使用することをお勧めします。
-
あらかじめ訓練されたモデルを(画像ペアではなく)入力画像の集合に適用する場合は、–
--dataset_mode single
と--model test
オプションを使用してください。 ここにFacadeのラベルマップ(facades/testB
というディレクトリに保存)にモデルを適用するためのスクリプトがあります。
#!./scripts/test_single.sh
python test.py --dataroot ./datasets/facades/testB/ --name {your_trained_model_name} --model test --dataset_mode single
訓練されたモデルのジェネレータアーキテクチャと一致するように--which_model_netG
を指定することができます。
事前に訓練されたモデルを適用する(pix2pix)
./pretrained_models/download_pix2pix_model.sh
、事前に訓練されたモデルを./pretrained_models/download_pix2pix_model.sh
ます。
- たとえば、Facadesデータセットでlabel2photoモデルをダウンロードする場合は、
bash pretrained_models/download_pix2pix_model.sh facades_label2photo
- pix2pix facadesデータセットをダウンロードする
bash ./datasets/download_pix2pix_dataset.sh facades
- 次に、
python test.py --dataroot ./datasets/facades/ --which_direction BtoA --model pix2pix --name facades_label2photo_pretrained --dataset_mode aligned --which_model_netG unet_256 --norm batch
ファサードデータセットのAからBの方向として--which_direction BtoA
を指定すると、ラベルから写真になります。
- 現在利用可能なモデルの一覧は、
bash pretrained_models/download_pix2pix_model.sh
参照してください。
トレーニング/テストの詳細
- フラグ:すべてのトレーニングフラグについては
options/train_options.py
とoptions/base_options.py
を参照してください。options/test_options.py
とoptions/base_options.py
をoptions/base_options.py
してすべてのテストフラグを確認してください。 - CPU / GPU(デフォルト
--gpu_ids 0
):CPUモードを使用するには、--gpu_ids -1
を設定します。 マルチGPUモードの場合は--gpu_ids 0,1,2
を設定します。 複数のGPUのメリットを得るには、大きなバッチサイズ(たとえば、–--batchSize 32
)が必要です。 - 視覚化:トレーニング中に、現在の結果を2つの方法で見ることができます。 まず、–
--display_id
> 0を設定すると、 visdomによって起動されたローカルグラフィックスWebサーバーに結果と損失プロットが表示されます 。 これを行うには、visdom
インストールし、python -m visdom.server
コマンドでサーバーを実行する必要があります。 デフォルトのサーバーURLはhttp://localhost:8097
です。display_id
は、visdom
サーバーに表示されるウィンドウIDに対応します。visdom
表示機能は、デフォルトでオンになっています。visdom
と通信する余分のオーバーヘッドを避けるには--display_id 0
設定し--display_id 0
。 次に、中間結果は[opt.checkpoints_dir]/[opt.name]/web/
HTMLファイルとして保存されます。 これを避けるには、–--no_html
設定し--no_html
。 - 前処理:–
--resize_or_crop
オプションを使用すると、イメージをさまざまな方法でサイズ変更およびトリミングできます。 デフォルトのオプション'resize_and_crop'
はイメージのサイズを(opt.loadSize, opt.loadSize)
サイズ変更し、サイズのランダムな切り抜きを行います(opt.fineSize, opt.fineSize)
。'crop'
はリサイズステップをスキップし、ランダムクロップのみを実行します。'scale_width'
は、アスペクト比を維持しながら画像の幅をopt.fineSize
します。'scale_width_and_crop'
最初にイメージのサイズを'scale_width_and_crop'
幅にopt.loadSize
、次にサイズのランダムクロッピングを行います(opt.fineSize, opt.fineSize)
。 - ファインチューニング/レジュームトレーニング:事前にトレーニングされたモデルを微調整したり、以前のトレーニングを再開したりするには、–
--continue_train
フラグを使用します。 プログラムはwhich_epoch
基づいてモデルをロードしwhich_epoch
。 デフォルトでは、プログラムはエポックカウントを1として初期化します。異なるエポックカウントを指定するには、 –--epoch_count <int>
を設定します。
CycleGANデータセット
次のスクリプトを使用してCycleGANデータセットをダウンロードします。 いくつかのデータセットは他の研究者によって収集されます。 データを使用する場合は、論文を引用してください。
bash ./datasets/download_cyclegan_dataset.sh dataset_name
-
facades
: CMP Facadesデータセットからの400枚の画像。 [ 引用 ] -
cityscapes
: Cityscapesトレーニングセットからの2975の画像。 [ 引用 ] -
maps
:1096のGoogleマップからスクレイプされたトレーニング画像。 -
horse2zebra
:キーワードを使用してImageNetからダウンロードした939の馬の画像と1177のゼブラの画像wild horse
andzebra
-
apple2orange
:996のリンゴイメージと1020のオレンジイメージがImageNetからダウンロードされました 。 -
summer2winter_yosemite
:1273夏Flickr APIを使用してヨセミテ画像と854冬ヨセミテ画像をダウンロードしました。 我々の論文で詳細を参照してください。 -
monet2photo
、vangogh2photo
、ukiyoe2photo
、cezanne2photo
:アート画像はWikiartからダウンロードされました 。 実際の写真は、タグ風景と風景写真の組み合わせを使用してFlickrからダウンロードされます。 各クラスの訓練セットのサイズは、モネ:1074、セザンヌ:584、ゴッホ:401、浮世絵:1433、写真:6853です。 -
iphone2dslr_flower
:両方のクラスの画像がFlickrからダウンロードされました。 各クラスのトレーニングセットのサイズはiPhone:1813、DSLR:3316です。 我々の論文で詳細を参照してください。
独自のデータセットでモデルをトレーニングするには、ドメインAとBの画像を含む2つのサブディレクトリtrainA
とtrainB
を持つデータフォルダを作成する必要があります。トレーニングセットでモデルをテストするには、 test.py
。 テストデータがある場合は、サブディレクトリtestA
とtestB
作成することもできます。
私たちのメソッドは、入力と出力のデータセットの任意の組み合わせ( cats<->keyboards
)で動作するとは限りません 。 私たちの実験から、2つのデータセットが同じような視覚的な内容を共有するならば、より良い結果が得られます。 たとえば、 landscape painting<->landscape photographs
は、 portrait painting <-> landscape photographs
よりもはるかに優れています。 zebras<->horses
cats<->dogs
完全に失敗する間に魅力的な結果を達成する。
pix2pixデータセット
次のスクリプトを使用してpix2pixデータセットをダウンロードします。 いくつかのデータセットは他の研究者によって収集されます。 データを使用する場合は、論文を引用してください。
bash ./datasets/download_pix2pix_dataset.sh dataset_name
-
facades
: CMP Facadesデータセットからの400枚の画像。 [ 引用 ] -
cityscapes
: Cityscapesトレーニングセットからの2975の画像。 [ 引用 ] -
maps
:Googleマップから掻き集められた1096のトレーニング画像 -
edges2shoes
: UT Zappos50Kデータセットからの50kトレーニング画像。 エッジは、 HEDエッジ検出器+後処理によって計算されます。 [ 引用 ] -
edges2handbags
:137K Amazon iGANプロジェクトのハンドバッグ画像。 エッジは、 HEDエッジ検出器+後処理によって計算されます。 [ 引用 ]
私たちは、画像のペア{A、B}の形でpix2pixトレーニングデータを生成するためのPythonスクリプトを提供します。ここで、AとBは、同じ基本シーンの2つの異なる描写です。 たとえば、これらは{ラベルマップ、写真}または{画像、カラー画像}のペアである可能性があります。 次に、AからBまたはBをAに変換する方法を学ぶことができます。
サブフォルダA
とB
フォルダ/path/to/data
を作成します。 A
とB
はそれぞれ独自のサブフォルダtrain
、 val
、 test
などが必要ですval
/path/to/data/A/train
にはトレーニングイメージをスタイルAに入れ/path/to/data/B/train
には、他のデータ分割( val
、 test
など)に対しても同じことを繰り返します。
ペア{A、B}の対応するイメージは、同じサイズで同じファイル名でなければなりません。たとえば、 /path/to/data/B/train/1.jpg
/path/to/data/A/train/1.jpg
は/path/to/data/B/train/1.jpg
に対応すると見なされ/path/to/data/B/train/1.jpg
。
データがこのようにフォーマットされたら、
python datasets/combine_A_and_B.py --fold_A /path/to/data/A --fold_B /path/to/data/B --fold_AB /path/to/data
これにより、画像の各ペア(A、B)が単一の画像ファイルに結合され、トレーニングの準備が整います。
引用
あなたの研究にこのコードを使用する場合は、私たちの論文を引用してください。
@inproceedings{CycleGAN2017,
title={Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networkss},
author={Zhu, Jun-Yan and Park, Taesung and Isola, Phillip and Efros, Alexei A},
booktitle={Computer Vision (ICCV), 2017 IEEE International Conference on},
year={2017}
}
@inproceedings{isola2017image,
title={Image-to-Image Translation with Conditional Adversarial Networks},
author={Isola, Phillip and Zhu, Jun-Yan and Zhou, Tinghui and Efros, Alexei A},
booktitle={Computer Vision and Pattern Recognition (CVPR), 2017 IEEE Conference on},
year={2017}
}
関連プロジェクト
CycleGAN :Cycle-Consistent Adversarial Networksを使用した画像対画像変換のアンペア
pix2pix :条件付き対立ネットによる画像から画像への変換
iGAN :生成的な対立ネットワークを介したインタラクティブなイメージ生成
キャットペーパーコレクション
あなたが猫を愛し、クールなグラフィックス、ビジョン、および学習論文を読むことを愛するなら、Cat Paper Collectionをチェックしてください:
[Github] [ウェブページ]
謝辞
コードはpytorch-DCGANに触発されています。