GitHubじゃ!Pythonじゃ!

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

NVIDIA

vid2vid – 高解像度(例:2048×1024)のフォトリアリスティックなビデオ – ビデオ変換のための私たちの方法のPytorch実装

投稿日:

高解像度(例:2048×1024)のフォトリアリスティックなビデオ – ビデオ変換のための私たちの方法のPytorch実装。

vid2vid

プロジェクト | YouTube | | arXiv

高解像度(例:2048×1024)のフォトリアリスティックなビデオ – ビデオ変換用のPytorch実装。 セマンティックラベルマップをフォトリアリスティックビデオに変換したり、エッジマップから話をする人を合成したり、ポーズから人間の動きを生成するのに使用できます。

ビデオ – ビデオ合成
Ting-Chun Wang 1Ming-Yu Liu 1Jun-Yan Zhu 2Guilin Liu 1 、Andrew Tao 1Jan Kautz 1Bryan Catanzaro 1
1 NVIDIA Corporation、 2 MIT CSAIL arXiv、2018年。

ビデオからビデオへの翻訳

  • ラベルからストリートビューまでの結果

  • エッジツーフェイスの結果

  • ポーズとボディの結果

前提条件

  • LinuxまたはmacOS
  • Python 3
  • NVIDIA GPU + CUDA cuDNN

入門

インストール

  • PyTorchとその依存関係をhttp://pytorch.orgからインストールする
  • Pythonライブラリをインストール 、要求を支配します。
pip install dominate requests
  • このレポをクローン:
git clone https://github.com/NVIDIA/vid2vid
cd vid2vid

テスト

  • サンプルのCityscapesビデオをdatasetsフォルダに含めます。

  • まず、 python scripts/download_flownet2.py実行して、 https: //github.com/NVIDIA/flownet2-pytorchからFlowNet2レポのスナップショットをダウンロードしてコンパイルしpython scripts/download_flownet2.py

  • 事前に訓練されたCityscapesモデルをダウンロードしてください:

    python scripts/download_models.py
  • モデルをテストするには( bash ./scripts/test_2048.sh ):

    #!./scripts/test_2048.sh
    python test.py --name label2city_2048 --loadSize 2048 --n_scales_spatial 3 --use_instance --fg --use_single_G

    テスト結果は、HTMLファイル( ./results/label2city_2048/test_latest/index.html保存されます。

  • 我々はまた、単一のGPUで訓練されたより小さいモデルを提供します。これは、1024 x 512の解像度でわずかに悪いパフォーマンスを生成します。

    • モデルをダウンロードしてください
    python scripts/download_models_g1.py
    • モデルをテストするには( bash ./scripts/test_1024_g1.sh ):
    #!./scripts/test_1024_g1.sh
    python test.py --name label2city_1024_g1 --loadSize 1024 --n_scales_spatial 3 --use_instance --fg --n_downsample_G 2 --use_single_G
  • より多くのサンプルスクリプトはscriptsディレクトリにあります。

データセット

  • Cityscapesデータセットを例として使用します。 完全なデータセットでモデルをトレーニングするには、 公式サイトからダウンロードしてください(登録が必要です)。
  • 対応するセマンティックマップ(train_A)とインスタンスマップ(train_inst)を得るために、事前に訓練されたセグメンテーションアルゴリズムを適用します。
  • サンプル画像と同じ方法で、取得した画像をdatasetsフォルダに追加してください。

トレーニング

  • まず、 python scripts/download_models_flownet2.py実行してFlowNet2チェックポイントファイルをpython scripts/download_models_flownet2.py

  • 8つのGPUによるトレーニング:

    • 私たちは、解像度を512 x 256、1024 x 512から2048 x 1024に順次増加させながら、粗いものから細かいものへのアプローチを採用しています。
    • モデルを512 x 256の解像度でbash ./scripts/train_512.shbash ./scripts/train_512.sh
    #!./scripts/train_512.sh
    python train.py --name label2city_512 --gpu_ids 0,1,2,3,4,5,6,7 --n_gpus_gen 6 --n_frames_total 6 --use_instance --fg
    • モデルを1024 x 512の解像度でトレーニングする(最初に512 x 256をトレーニングする必要がある)( bash ./scripts/train_1024.sh ):
    #!./scripts/train_1024.sh
    python train.py --name label2city_1024 --loadSize 1024 --n_scales_spatial 2 --num_D 3 --gpu_ids 0,1,2,3,4,5,6,7 --n_gpus_gen 4 --use_instance --fg --niter_step 2 --niter_fix_global 10 --load_pretrain checkpoints/label2city_512
  • トレーニング結果を表示するには、中間結果を./checkpoints/label2city_1024/web/index.html./checkpoints/label2city_1024/web/index.htmlして./checkpoints/label2city_1024/web/index.html TensorFlowをインストールしている場合は、トレーニングスクリプトに--tf_logを追加することで、 ./checkpoints/label2city_1024/logs ./checkpoints/label2city_1024/logsにログインすることがわかります。

  • 1つのGPUでのトレーニング:

    • 複数のGPUを使用してモデルを訓練しました。 便宜上、単一のGPUユーザー向けに最大1024 x 512解像度のサンプルトレーニングスクリプト(XXX_g1.sh)を提供しています。 ここでも、粗いから細かいアプローチが採用されています(256 x 128、512 x 256、1024 x 512)。 これらのスクリプトを使用しても、パフォーマンスは保証されません。
    • たとえば、1つのGPU( bash ./scripts/train_256_g1.sh )で256 x 128ビデオをトレーニングするには、
    #!./scripts/train_256_g1.sh
    python train.py --name label2city_256_g1 --loadSize 256 --use_instance --fg --n_downsample_G 2 --num_D 1 --max_frames_per_gpu 6 --n_frames_total 6

フル(2k x 1k)解像度でのトレーニング

  • フル解像度(2048 x 1024)で画像をトレーニングするには、少なくとも24Gのメモリを持つ8つのGPUが必要です( bash ./scripts/train_2048.sh )。 12G / 16GメモリのGPUしか使用できない場合は、トレーニング中に画像をトリミングするスクリプト./scripts/train_2048_crop.shを使用してください。 パフォーマンスはこのスクリプトでは保証されません。

独自のデータセットを使用したトレーニング

  • あなたの入力がラベルマップの場合は、ピクセル値がオブジェクトラベル(すなわち、0,1、…、N-1、Nはラベルの数)に対応する1チャンネルのラベルマップを生成してください。 これは、ラベルマップからワンホットベクトルを生成する必要があるためです。 トレーニングとテストの両方で--label_nc N使用してください。
  • あなたの入力がラベルマップでない場合は、– --label_nc 0--input_nc Nを指定して--label_nc 0ここで、Nは入力チャンネルの数です(デフォルトはRGB画像の場合3です)。
  • 前処理のデフォルト設定はscaleWidth 。これにより、アスペクト比を維持しながら、すべてのトレーニング画像の幅をopt.loadSize (1024)にopt.loadSizeます。 別の設定が必要な場合は、– --resize_or_cropオプションを使用して設定を変更してください。 たとえば、 scaleWidth_and_cropはイメージのサイズを最初に変更してイメージの幅をopt.loadSize変更した後、サイズをランダムにトリミングします(opt.fineSize, opt.fineSize) cropはサイズ変更のステップをスキップし、ランダムなトリミングのみを実行します。 scaledCropは元の縦横比を再scaledCropながらイメージをscaledCropます。 前処理を行わない場合は、 noneを指定してください。画像が32で割り切れるかどうかを確認する以外は何もしません。

その他のトレーニング/テストの詳細

  • モデルを訓練する方法は、GPUが8個、発電機が4個、弁別器が4個と仮定し、28個のフレームを訓練したいとします。 また、各GPUが1つのフレームのみを生成できると仮定します。 最初のGPUは最初のフレームを生成し、それを次のGPUに渡します。 4つのフレームが生成された後、それらは4つの弁別器GPUに渡されて損失を計算する。 次に、最後に生成されたフレームが次のバッチに入力され、トレーニングシーケンスの次の4つのフレームがGPUにロードされます。 これは7回繰り返され(4×7 = 28)、28フレームすべてを訓練する。
  • いくつかの重要なフラグ:
    • n_gpus_gen :ジェネレータに使用するGPUの数(他は識別器に使用されます)。 高解像度を扱う場合、1つのフレームでさえGPUに収まらないので、ジェネレータとディスクリミネータを別々のGPUに分けます。 数値が-1に設定されている場合、分離はなく、すべてのGPUはジェネレータとディスクリミネータの両方に使用されます(低解像度の画像でのみ動作します)。
    • n_frames_G :発電機ネットワークに供給される入力フレームの数。 すなわち、 n_frames_G - 1は、過去に見たフレーム数です。 既定値は3です(前の2つのフレームで調整されます)。
    • n_frames_D :時間弁別器に供給されるフレームの数。 デフォルトは3です。
    • n_scales_spatial :空間領域のスケールの数。 私たちは、最も粗いスケールから最善のスケールまで訓練します。 デフォルトは3です。
    • n_scales_temporal :時間的弁別子のためのスケールの数。 最も細かいスケールは、元のフレームレートのシーケンスを取ります。 より粗いスケールは、フレームをn_frames_Dに供給する前に、フレームをn_frames_D係数でサブサンプルする。 例えば、 n_frames_D = 3およびn_scales_temporal = 3場合、識別器は実質的に27個のフレームを見る。 デフォルトは3です。
    • max_frames_per_gpu :トレーニング中の1つのGPU内のフレーム数。 GPUメモリがより多くのフレームに収まる場合は、この番号を大きくするようにしてください。 デフォルトは1です。
    • max_frames_backpropagate :損失が前のフレームに逆伝播するフレーム数。 例えば、この数が4である場合、フレームnの損失は、フレームn-3に逆伝播する。 この数値を増やすと、パフォーマンスは若干向上しますが、トレーニングの安定性が低下します。 デフォルトは1です。
    • n_frames_total :訓練したいシーケンス内のフレームの総数。 トレーニング中にこの数字を徐々に増やしていきます。
    • niter_stepniter_step何倍にするかをn_frames_totalます。 デフォルトは5です。
    • niter_fix_global :この数値が0ではない場合は、すべてのスケールを微調整する前に、この数のエポックの最高の空間スケールをトレーニングします。
    • batchSizebatchSizeに訓練するシーケンスの数。 私たちは通常、batchSizeを1に設定します。なぜなら、1つのシーケンスですべてのGPUを占有することができるからです。 batchSize> 1を実行したい場合、現在はbatchSize == n_gpus_genだけがサポートされています。
    • no_first_img :指定されていない場合、モデルは最初のフレームが与えられたものとみなし、連続するフレームを合成します。 指定した場合、モデルは最初のフレームを合成します。
    • fg :指定されている場合は、フォアグラウンド – バックグラウンド分離モデルを使用します。
  • 他のフラグについては、 options/train_options.pyoptions/base_options.pyを参照してください。 options/test_options.pyoptions/base_options.pyoptions/base_options.pyしてすべてのテストフラグを確認してください。

引用

これがあなたの研究に有益だと分かったら、以下の論文を引用してください。

@article{wang2018vid2vid,
  title={Video-to-Video Synthesis},
  author={Ting-Chun Wang and Ming-Yu Liu and Jun-Yan Zhu and Guilin Liu and Andrew Tao and Jan Kautz and Bryan Catanzaro},  
  journal={arXiv preprint arXiv:1808.06601},
  year={2018}
}

謝辞

われわれのセグメンテーションマップを作成してくれたKaran Sapra、Fitsum Reda、Matthieu Leに感謝します。 私たちはダンスのビデオをトレーニングに使用できるようにしてくれたLisa Rheeにも感謝しています。 私たちは、この論文を校正したWilliam S. Peeblesに感謝します。
このコードはPytorch-CycleGAN-and-pix2pixpix2pixHDから大きく借りています。







-NVIDIA

執筆者: