GitHubじゃ!Pythonじゃ!

GitHubからPython関係の優良リポジトリを探したかったのじゃー、でも英語は出来ないから日本語で読むのじゃー、英語社会世知辛いのじゃー

junyanz

pytorch-CycleGAN-and-pix2pix – PyTorchでの画像から画像への変換(例:horse2zebra、edges2catsなど)

投稿日:

PyTorchでの画像から画像への変換(例:horse2zebra、edges2catsなど)

PyTorchのCycleGANとpix2pix

これは、対になっていない画像対画像変換のためのPyTorchの現在の実装です。

コードはJun-Yan ZhuTaesung Parkによって書かれました。

論文とまったく同じ結果を再現したい場合は、オリジナルのCycleGAN TorchPix2pix Torchコードをチェックしてください。

CycleGAN: [プロジェクト] [ペーパー] [トーチ]

Pix2pix: [プロジェクト] [ペーパー] [トーチ]

[EdgesCatsデモ] [pix2pix-tensorflow]

クリストファー・ヘッセ

あなたの研究にこのコードを使用する場合は、引用してください:

Cycle-Consistent Adversarial Networksを用いた非対話型画像 – 画像変換
Jun-Jun Zhu *、 Taesung Park *、 Phillip IsolaAlexei 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
  • Pythonライブラリvisdomをインストールし、 支配します。
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.pyoptions/base_options.pyを参照してください。 options/test_options.pyoptions/base_options.pyoptions/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
  • facadesCMP Facadesデータセットからの400枚の画像。 [ 引用 ]
  • cityscapesCityscapesトレーニングセットからの2975の画像。 [ 引用 ]
  • maps :1096のGoogleマップからスクレイプされたトレーニング画像。
  • horse2zebra :キーワードを使用してImageNetからダウンロードした939の馬の画像と1177のゼブラの画像wild horse and zebra
  • apple2orange :996のリンゴイメージと1020のオレンジイメージがImageNetからダウンロードされました
  • summer2winter_yosemite :1273夏Flickr APIを使用してヨセミテ画像と854冬ヨセミテ画像をダウンロードしました。 我々の論文で詳細を参照してください。
  • monet2photovangogh2photoukiyoe2photocezanne2photo :アート画像はWikiartからダウンロードされました 実際の写真は、タグ風景風景写真の組み合わせを使用してFlickrからダウンロードされます。 各クラスの訓練セットのサイズは、モネ:1074、セザンヌ:584、ゴッホ:401、浮世絵:1433、写真:6853です。
  • iphone2dslr_flower :両方のクラスの画像がFlickrからダウンロードされました。 各クラスのトレーニングセットのサイズはiPhone:1813、DSLR:3316です。 我々の論文で詳細を参照してください。

独自のデータセットでモデルをトレーニングするには、ドメインAとBの画像を含む2つのサブディレクトリtrainAtrainBを持つデータフォルダを作成する必要があります。トレーニングセットでモデルをテストするには、 test.py テストデータがある場合は、サブディレクトリtestAtestB作成することもできます。

私たちのメソッドは、入力と出力のデータセットの任意の組み合わせ( 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

私たちは、画像のペア{A、B}の形でpix2pixトレーニングデータを生成するためのPythonスクリプトを提供します。ここで、AとBは、同じ基本シーンの2つの異なる描写です。 たとえば、これらは{ラベルマップ、写真}または{画像、カラー画像}のペアである可能性があります。 次に、AからBまたはBをAに変換する方法を学ぶことができます。

サブフォルダABフォルダ/path/to/dataを作成します。 ABはそれぞれ独自のサブフォルダtrainvaltestなどが必要ですval /path/to/data/A/trainにはトレーニングイメージをスタイルAに入れ/path/to/data/B/trainには、他のデータ分割( valtestなど)に対しても同じことを繰り返します。

ペア{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に触発されています。







-junyanz
-, , , , , , , , ,

執筆者: