このリポジトリは、次のペーパーの正式な PyTorch 実装を提供します。
VToonify:制御可能な高解像度ポートレートビデオスタイルの転送
シュアイヤン、リミンジャン、ツィウェイリウ、チェンチェンジ
ロイACM TOG(シーグラフアジアの議事録)、2022年。
プロジェクトページ|紙|補足ビデオ|入力データとビデオの結果
要約:高品質の芸術的ポートレートビデオを生成することは、コンピュータグラフィックスとビジョンにおいて重要かつ望ましいタスクです。 強力なStyleGAN上に構築された一連の成功したポートレート画像トゥーニフィケーションモデルが提案されていますが、 これらの画像指向の方法は、固定フレームサイズ、顔の位置合わせの要件、顔以外の詳細の欠落、時間的不一致など、ビデオに適用すると明らかな制限があります。 本研究では、新しいVToonifyフレームワークを導入することにより、制御可能な高解像度ポートレートビデオスタイルの転送を困難に調査します。 具体的には、VToonifyはStyleGANの中解像度および高解像度レイヤーを活用して、エンコーダーによって抽出されたマルチスケールコンテンツ機能に基づいて高品質の芸術的なポートレートをレンダリングし、フレームの詳細をより適切に保持します。結果として得られる完全畳み込みアーキテクチャは、可変サイズのビデオ内の整列されていない顔を入力として受け入れ、出力に自然な動きを持つ完全な顔領域に貢献します。 私たちのフレームワークは、既存のStyleGANベースの画像トゥーニフィケーションモデルと互換性があり、それらをビデオトゥーニフィケーションに拡張し、色と強度の柔軟なスタイル制御のためにこれらのモデルの魅力的な機能を継承しています。 この作品では、コレクションベースと模範ベースのポートレートビデオスタイル転送のために、それぞれToonifyとDualStyleGANに基づいて構築されたVToonifyの2つのインスタンス化を提示します。 広範な実験結果は、柔軟なスタイルコントロールを備えた高品質で時間的に一貫性のある芸術的なポートレートビデオを生成する上で、既存の方法に対する提案されたVToonifyフレームワークの有効性を示しています。
特徴:
高解像度ビデオ(>1024、整列していない面をサポート)|データフレンドリー(実際のトレーニングデータなし)|スタイル コントロール
グラジオを使用してハギングフェイススペース
このリポジトリを複製します。
git clone https://github.com/williamyang1991/VToonify.git
cd VToonify
依存 関係:
以下でテストしました。
環境を定義するためのすべての依存関係については、 を参照してください。 このリポジトリは Anaconda を使用して実行することをお勧めします (https://pytorch.org/ に続いて、独自の CUDA バージョンに一致する PyTorch をインストールするには、変更が必要になる場合があります)。
environment/vtoonify_env.yaml
vtoonify_env.yaml
conda env create -f ./environment/vtoonify_env.yaml
☞ cpp拡張(fusedおよびupfirdn2d)に問題がある場合、またはGPUが利用できない場合は、CPU互換バージョンを参照してください。
ユーザーが使い始めるのを助けるために、VToonifyのパフォーマンスを視覚化できるJupyterノートブックを提供しています。
ノートブックは、必要な事前トレーニング済みモデルをダウンロードし、 で見つかった画像に対して推論を実行します。
./notebooks/inference_playground.ipynb
./data/
事前トレーニング済みのモデルは、Google ドライブ、Baidu Cloud(アクセス コード: sigg)、または Hugging Face からダウンロードできます。
背骨 | モデル | 形容 |
---|---|---|
デュアルスタイルガン | カートゥーン | 事前トレーニング済みのVToonify-Dモデルと317の漫画スタイルコード |
戯画 | 事前トレーニング済みのVToonify-Dモデルと199の似顔絵スタイルコード | |
秘儀 | 事前トレーニング済みのVToonify-Dモデルと100の難解なスタイルコード | |
漫画 | 事前トレーニング済みのVToonify-Dモデルと101のコミックスタイルコード | |
ピクサー | 事前トレーニング済みのVToonify-Dモデルと122のピクサースタイルコード | |
図 | 事前トレーニング済みのVToonify-Dモデルと156のイラストスタイルコード | |
トゥーニファイ | カートゥーン | 事前トレーニング済みの VToonify-T モデル |
戯画 | 事前トレーニング済みの VToonify-T モデル | |
秘儀 | 事前トレーニング済みの VToonify-T モデル | |
漫画 | 事前トレーニング済みの VToonify-T モデル | |
ピクサー | 事前トレーニング済みの VToonify-T モデル | |
サポートモデル | ||
encoder.pt | Pixel2style2ピクセルエンコーダーは、実際の顔をスタイルGANのZ +空間にマッピングします | |
フェイスパーシング.pth | 顔解析から顔解析のためのBiSeNet。パイトーチ |
ダウンロードしたモデルは、このフォルダ構造に配置することをお勧めします。
VToonify-D モデルには、設定を示すサフィックスが付いた名前が付けられています。
_sXXX: このスタイルのインデックスを持つ固定スタイルを 1 つだけサポートします。
XXX
_s手段がない場合、モデルはサンプルベースのスタイル転送をサポートします
XXX
_dXXX: の固定スタイル次数のみをサポートします。
XXX
_d手段がない場合、モデルは 0 から 1 の範囲のスタイル角度をサポートします
XXX
_c:カラー転送をサポートします。
デフォルトの漫画スタイルをデフォルトの顔画像に転送する:
./data/077436.jpg
python style_transfer.py --scale_image
結果はフォルダに保存されます ここで、 は VToonify に合わせて再スケーリングされた入力イメージです (このイメージは なしで入力として使用できます ) であり、 は結果です。
./output/
077436_input.jpg
--scale_image
077436_vtoonify_d.jpg
コンテンツ画像とモデルを指定し、次のオプションでスタイルを制御します。
--content:ターゲット顔の画像またはビデオへのパス
--style_id:スタイル画像のインデックス(インデックスとスタイルイメージのマッピングはここで見つけてください)。
--style_degree(デフォルト: 0.5): スタイルの次数を調整します。
--color_transfer(デフォルト: False): VToonify-Dsdc モデルをロードする場合にカラー転送を実行します。
--ckpt: VToonify-D モデルのパス。デフォルトでは、漫画スタイルでトレーニングされたVToonify-Dsdがロードされます。
--exstyle_path: 外部スタイルコードのパス。デフォルトでは、と同じディレクトリ内のコードがロードされます。
--ckpt
--scale_image:VToonifyに合わせて入力画像/ビデオを再スケーリングします(強くお勧めします)。
--padding(デフォルト:200、200、200、200):目の中心への左、右、上、下のパディング。
難解なスタイルの転送の例を次に示します。
python style_transfer.py --content ./data/038648.jpg \
--scale_image --style_id 77 --style_degree 0.5 \
--ckpt ./checkpoint/vtoonify_d_arcane/vtoonify_s_d.pt \
--padding 600 600 600 600 # use large padding to avoid cropping the image
ビデオのトゥーニフィケーションを実行するように指定します。
--video
python style_transfer.py --scale_image --content ./data/YOUR_VIDEO.mp4 --video
上記のスタイルコントロールオプション(、、)はビデオでも機能します。
--style_id
--style_degree
--color_transfer
VToonify-T モデルをロードして使用するには、''toonify'' を指定します。
--backbone
python style_transfer.py --content ./data/038648.jpg \
--scale_image --backbone toonify \
--ckpt ./checkpoint/vtoonify_t_arcane/vtoonify.pt \
--padding 600 600 600 600 # use large padding to avoid cropping the image
VToonify-T では、、、 は使用されません。
--style_id
--style_degree
--color_transfer
--exstyle_path
VToonify-D と同様に、ビデオのトゥーニフィケーションを実行するように指定します。
--video
サポート モデルをフォルダーにダウンロードし、次のフォルダー構造に配置します。
./checkpoint/
モデル | 形容 |
---|---|
stylegan2-ffhq-config-f.pt | ロジナリティから取得したFFHQでトレーニングされたスタイルGANモデル |
encoder.pt | Pixel2style2ピクセルエンコーダーは、FFHQ画像をStyleGAN2 Z+潜在コードに埋め込む |
フェイスパーシング.pth | 顔解析から顔解析のためのBiSeNet。パイトーチ |
道順.npy | 顔属性を編集するためのLowRankGANから取得したベクターの編集 |
|をトゥーニファイデュアルスタイルガン | 事前トレーニング済みの StyleGAN ベースのトゥーニフィケーションモデル |
独自のスタイルをカスタマイズするには、ここに続いて新しいToonify/DualStyleGANモデルをトレーニングする必要がある場合があります。
デフォルトのフォルダ構造に配置されたサポートモデルを考えると、エンコーダーを事前にトレーニングし、VToonify-D全体をトレーニングするだけで済みます。
# for pre-training the encoder
python -m torch.distributed.launch --nproc_per_node=N_GPU --master_port=PORT train_vtoonify_d.py \
--iter ITERATIONS --stylegan_path DUALSTYLEGAN_PATH --exstyle_path EXSTYLE_CODE_PATH \
--batch BATCH_SIZE --name SAVE_NAME --pretrain
# for training VToonify-D given the pre-trained encoder
python -m torch.distributed.launch --nproc_per_node=N_GPU --master_port=PORT train_vtoonify_d.py \
--iter ITERATIONS --stylegan_path DUALSTYLEGAN_PATH --exstyle_path EXSTYLE_CODE_PATH \
--batch BATCH_SIZE --name SAVE_NAME # + ADDITIONAL STYLE CONTROL OPTIONS
モデルと中間結果は、それぞれ と に保存されます。
./checkpoint/SAVE_NAME/
./log/SAVE_NAME/
VToonify-D には、以下のスタイル制御オプションがあります。
--fix_degree: 指定した場合、モデルは固定スタイルの次数でトレーニングされます (次数調整なし)。
--fix_style: 指定した場合、モデルは固定スタイル イメージでトレーニングされます (例ベースのスタイル転送なし)
--fix_color: 指定した場合、モデルは色保持 (色転送なし) でトレーニングされます。
--style_id:スタイル画像のインデックス(インデックスとスタイルイメージのマッピングはここで見つけてください)。
--style_degree(デフォルト: 0.5): スタイルの度合い。
以下は、漫画スタイルでVToonify-Dsdを再現し、26番目の漫画スタイルで穏やかなトゥーニフィケーションに特化したVToonify-Dを再現する例です。
python -m torch.distributed.launch --nproc_per_node=8 --master_port=8765 train_vtoonify_d.py \
--iter 30000 --stylegan_path ./checkpoint/cartoon/generator.pt --exstyle_path ./checkpoint/cartoon/refined_exstyle_code.npy \
--batch 1 --name vtoonify_d_cartoon --pretrain
python -m torch.distributed.launch --nproc_per_node=8 --master_port=8765 train_vtoonify_d.py \
--iter 2000 --stylegan_path ./checkpoint/cartoon/generator.pt --exstyle_path ./checkpoint/cartoon/refined_exstyle_code.npy \
--batch 4 --name vtoonify_d_cartoon --fix_color
python -m torch.distributed.launch --nproc_per_node=8 --master_port=8765 train_vtoonify_d.py \
--iter 2000 --stylegan_path ./checkpoint/cartoon/generator.pt --exstyle_path ./checkpoint/cartoon/refined_exstyle_code.npy \
--batch 4 --name vtoonify_d_cartoon --fix_color --fix_degree --style_degree 0.5 --fix_style --style_id 26
Note that the pre-trained encoder is shared by different STYLE CONTROL OPTIONS. VToonify-D only needs to pre-train the encoder once for each DualStyleGAN model. Eight GPUs are not necessary, one can train the model with a single GPU with larger .
--iter
Tips: [how to find an ideal model] we can first train a versatile model VToonify-Dsd, and navigate around different styles and degrees. After finding the ideal setting, we can then train the model specialized in that setting for high-quality stylization.
The training of VToonify-T is similar to VToonify-D,
# for pre-training the encoder
python -m torch.distributed.launch --nproc_per_node=N_GPU --master_port=PORT train_vtoonify_t.py \
--iter ITERATIONS --finetunegan_path FINETUNED_MODEL_PATH \
--batch BATCH_SIZE --name SAVE_NAME --pretrain # + ADDITIONAL STYLE CONTROL OPTION
# for training VToonify-T given the pre-trained encoder
python -m torch.distributed.launch --nproc_per_node=N_GPU --master_port=PORT train_vtoonify_t.py \
--iter ITERATIONS --finetunegan_path FINETUNED_MODEL_PATH \
--batch BATCH_SIZE --name SAVE_NAME # + ADDITIONAL STYLE CONTROL OPTION
VToonify-T only has one STYLE CONTROL OPTION:
--weight(default: 1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0): 18 numbers indicate how the 18 layers of the ffhq stylegan model and the finetuned model are blended to obtain the final Toonify model. Here is the we use in the paper for different styles. Please refer to toonify for the details.
--weight
Here is an example to reproduce the VToonify-T model on Arcane style:
python -m torch.distributed.launch --nproc_per_node=8 --master_port=8765 train_vtoonify_t.py \
--iter 30000 --finetunegan_path ./checkpoint/arcane/finetune-000600.pt \
--batch 1 --name vtoonify_t_arcane --pretrain --weight 0.5 0.5 0.5 0.5 0.5 0.5 0.5 1 1 1 1 1 1 1 1 1 1 1
python -m torch.distributed.launch --nproc_per_node=8 --master_port=8765 train_vtoonify_t.py \
--iter 2000 --finetunegan_path ./checkpoint/arcane/finetune-000600.pt \
--batch 4 --name vtoonify_t_arcane --weight 0.5 0.5 0.5 0.5 0.5 0.5 0.5 1 1 1 1 1 1 1 1 1 1 1
私たちのフレームワークは、既存のStyleGANベースの画像トゥーニフィケーションモデルと互換性があり、それらをビデオトゥーニフィケーションに拡張し、柔軟なスタイル制御のための魅力的な機能を継承しています。デュアルスタイルGANをバックボーンとして、当社のVToonifyは、さまざまな参照画像のスタイルを転送し、1つのモデルでスタイルの程度を調整することができます。
これは、アーケイン、ピクサー、コミックスタイルでのVToonify-DとVToonify-Dcの色補間結果です。
この研究があなたの研究に役立つと思うなら、私たちの論文を引用することを検討してください:
@article{yang2022Vtoonify,
title={VToonify: Controllable High-Resolution Portrait Video Style Transfer},
author={Yang, Shuai and Jiang, Liming and Liu, Ziwei and Loy, Chen Change},
journal={ACM Transactions on Graphics (TOG)},
volume={41},
number={6},
articleno={203},
pages={1--15},
year={2022},
publisher={ACM New York, NY, USA},
doi={10.1145/3550454.3555437},
}
このコードは主にstylegan2-pytorch、pixel2style2pixel、DualStyleGANに基づいて開発されています。