チャン・リウ、ルイ・リー、カイドン・チャン、ユンウェイ・ラン、ドン・リウ
[ Paper
] / [ Project
] / [ Models (Huggingface)
] / [ DAVIS-Edit (HuggingFace)
] / [ Models (wisemodel)
] / [ DAVIS-Edit (wisemodel)
] / [ Models (ModelScope)
] / [ DAVIS-Edit (ModelScope)
]
StableV2V
の概要StableV2V
の推論(コマンドライン)StableV2V
を使用したスケッチベースの編集StableV2V
を使用したビデオの修復StableV2V
の推論(Gradioデモ)DAVIS-Edit
の詳細この作品について質問がある場合は、お気軽に新しい問題を開始するか、PR を提案してください。
StableV2V
の概要StableV2V
形状一貫性のある方法でビデオ編集を実行するための新しいパラダイムを提供し、特にユーザー プロンプトによって編集されたコンテンツの形状が大幅に変更される場合の編集シナリオを処理します。さらに、 StableV2V
、さまざまなモダリティからのさまざまなユーザー プロンプトを考慮して、幅広い一連のダウンストリーム アプリケーションを処理する際に優れた柔軟性を示します。
<目次に戻る>
DAVIS-Edit
ModelScope にアップロードしました。StableV2V
をインタラクティブに使用するための Gradio デモを更新し、このセクションに詳細な図を示しました。DAVIS-Edit
wisemodel.cn にアップロードしました。DAVIS-Edit
HuggingFace データセット リポジトリに更新し、 StableV2V
の必要なモデルの重みをすべて HuggingFace モデル リポジトリにアップロードしました。StableV2V
のコードベースを更新するDAVIS-Edit
を HuggingFace リポジトリにアップロードしますStableV2V
の必要なモデル ウェイトをすべて HuggingFace リポジトリにアップロードします<目次に戻る>
StableV2V
├── LICENSE
├── README.md
├── assets
├── datasets <----- Code of datasets for training of the depth refinement network
├── models <----- Code of model definitions in different components
├── runners <----- Code of engines to run different components
├── inference.py <----- Script to inference StableV2V
├── train_completion_net.py <----- Script to train the shape-guided depth completion network
└── utils <----- Code of toolkit functions
<目次に戻る>
コードに必要なすべての依存関係をインストールするためのワンクリック コマンド ラインが提供されています。まず、 conda
を使用して仮想環境を作成します。
conda create -n stablev2v python=3.10
次に、次の行を実行して、 pip
を使用して依存関係をインストールします。
bash install_pip.sh
以下のコマンドラインに従って、 conda
を使用して依存関係をインストールすることもできます。
bash install_conda.sh
これで、 conda activate stablev2v
を使用する準備が整いました。
推論プロセスを開始する前に、 StableV2V
に必要なモデルの重みを準備する必要があります。
モデル | 成分 | リンク |
---|---|---|
ペイント・バイ・サンプル | PFE | Fantasy-Studio/Paint-by-Example |
InstructPix2Pix | PFE | timbrooks/instruct-pix2pix |
SD修復 | PFE | botp/stable-diffusion-v1-5-inpainting |
ControlNet + SD インペイント | PFE | lllyasviel の ControlNet モデル |
エニードア | PFE | xichenhku/AnyDoor |
ラフト | ISA | Google Drive |
ミダス | ISA | Link |
U2ネット | ISA | Link |
深度リファインメントネットワーク | ISA | Link |
SD v1.5 | CIG | stable-diffusion-v1-5/stable-diffusion-v1-5 |
ControlNet (深さ) | CIG | lllyasviel/control_v11f1p_sd15_depth |
Ctrl-アダプター | CIG | hanlincs/Ctrl-Adapter ( i2vgenxl_depth ) |
I2VGen-XL | CIG | ali-vilab/i2vgen-xl |
すべてのモデルの重みをダウンロードしたら、それらをcheckpoints
フォルダーに置きます。
注記
ネットワーク環境が HuggingFace にアクセスできる場合は、HuggingFace リポジトリ ID を直接使用してモデルをダウンロードできます。それ以外の場合は、モデルの重みをローカルで準備することを強くお勧めします。
具体的には、 models/anydoor/configs/anydoor.yaml
にあるAnyDoor
の構成ファイルを、DINO-v2 の事前トレーニングされた重みのパスを使用して変更していることを確認してください。
(at line 83)
cond_stage_config:
target: models.anydoor.ldm.modules.encoders.modules.FrozenDinoV2Encoder
weight: /path/to/dinov2_vitg14_pretrain.pth
<目次に戻る>
StableV2V
の推論(コマンドライン) StableV2V
実行するには、次のコマンド ラインを参照できます。
python inference.py --raft-checkpoint-path checkpoints/raft-things.pth --midas-checkpoint-path checkpoints/dpt_swin2_large_384.pt --u2net-checkpoint-path checkpoints/u2net.pth --stable-diffusion-checkpoint-path stable-diffusion-v1-5/stable-diffusion-v1-5 --controlnet-checkpoint-path lllyasviel/control_v11f1p_sd15_depth --i2vgenxl-checkpoint-path ali-vilab/i2vgen-xl --ctrl-adapter-checkpoint-path hanlincs/Ctrl-Adapter --completion-net-checkpoint-path checkpoints/depth-refinement/50000.ckpt --image-editor-type paint-by-example --image-editor-checkpoint-path /path/to/image/editor --source-video-frames examples/frames/bear --external-guidance examples/reference-images/raccoon.jpg --prompt " a raccoon " --outdir results
口論 | デフォルト設定 | 必須か否か | 説明 |
---|---|---|---|
モデル引数 | - | - | - |
--image-editor-type | - | はい | 画像エディタのタイプを定義する引数。 |
--image-editor-checkpoint-path | - | はい | PFE で必要な、イメージ エディターのモデル ウェイトのパス。 |
--raft-checkpoint-path | checkpoints/raft-things.pth | はい | ISA で要求される RAFT のモデル重みのパス。 |
--midas-checkpoint-path | checkpoints/dpt_swin2_large_382.pt | はい | MiDaS のモデル重みのパス。ISA によって要求されます。 |
--u2net-checkpoint-path | checkpoints/u2net.pth | はい | U2-Net のモデル重みのパス。ISA がビデオ フレームのセグメンテーション マスクを取得するために必要とします (近い将来、SAM に置き換えられる予定です)。 |
--stable-diffusion-checkpoint-path | stable-diffusion-v1-5/stable-diffusion-v1-5 | はい | CIG で必要な SD v1.5 のモデル重みのパス。 |
--controlnet-checkpoint-path | lllyasviel/control_v11f1p_sd15_depth | はい | CIG で必要な ControlNet のモデル重みのパス (深さ)。 |
--ctrl-adapter-checkpoint-path | hanlincs/Ctrl-Adapter | はい | CIG で必要な Ctrl-Adapter のモデル重みのパス。 |
--i2vgenxl-checkpoint-path | ali-vilab/i2vgen-xl | はい | CIG で必要な I2VGen-XL のモデル重みのパス。 |
--completion-checkpoint-path | checkpoints/depth-refinement/50000.ckpt | はい | CIG で必要な I2VGen-XL のモデル重みのパス。 |
入力引数 | - | - | - |
--source-video-frames | - | はい | 入力ビデオフレームのパス。 |
--prompt | - | はい | 編集されたビデオのテキストプロンプト。 |
--external-guidance | - | はい | Paint-by-Example 、 InstructPix2Pix 、およびAnyDoor 使用する場合のイメージ エディターの外部入力。 |
--outdir | results | はい | 出力ディレクトリのパス。 |
--edited-first-frame | - | いいえ | カスタマイズされた最初に編集されたフレームのパス。この引数が設定されている場合、イメージ エディタは使用されません。 |
--input-condition | - | いいえ | カスタマイズされた深度マップのパス。この引数が設定されていない場合、 MiDaS を使用してソース ビデオ フレームから深度マップを直接抽出します。 |
--input-condition | - | いいえ | カスタマイズされた深度マップのパス。この引数が設定されていない場合、 MiDaS を使用してソース ビデオ フレームから深度マップを直接抽出します。 |
--reference-masks | - | いいえ | AnyDoor で必要な、参照イメージのセグメンテーション マスクのパス。この引数が設定されていない場合、参照画像からセグメンテーション マスクが自動的に抽出されます。 |
--image-guidance-scale | 1.0 | いいえ | InstructPix2Pix に必要なハイパーパラメータ。 |
--kernel-size | 9 | いいえ | バイナリ拡張操作のカーネル サイズ。貼り付けプロセスが編集されたコンテンツの領域を確実にカバーするようにします。 |
--dilation-iteration | 1 | いいえ | バイナリ拡張操作の反復。 |
--guidance-scale | 9.0 | いいえ | 分類子を使用しないガイダンススケール。 |
--mixed-precision | BF16 | いいえ | StableV2V のモデルの精度。 |
--n-sample-frames | 16 | いいえ | 編集されたビデオのビデオ フレーム数。 |
--seed | 42 | いいえ | ランダムな種。 |
注記
推論中に追加の注意を払うことができるいくつかの具体的な点:
--image-editor-checkpoint-path
を構成すると、 --image-editor-type
に従って、対応するエディターにパスが自動的に配信されます。したがって、コードベース内の追加の引数については心配しないでください。Paint-by-Example
、 InstructPix2Pix
、 AnyDoor
を使用している場合は、 --external-guidance
引数を構成する必要があります。これは、参照画像とユーザー指示に応じて対応します。xformers
サポートしていないため、生成された結果にアーティファクトが発生する可能性があります。可能であれば、このような問題は将来修正される可能性があります。 StableV2V
を使用したスケッチベースの編集の実行人間が描いたスケッチを取得するには、タブレットなどの外部デバイスに手動でスケッチを描画し、後で使用できるように結果をエクスポートする必要があります。特に、iPad アプリケーションSketchbook
で手書きのスケッチを取得します。手書きのスケッチの例は次のようになります。
ControlNet (scribble)
を使用して最初の編集フレームを生成します手書きのスケッチを取得したら、次のステップは最初の編集フレームを取得することです。その際、 ControlNet (scribble)
を使用します。ControlNet ControlNet (scribble)
とSD Inpaint
のモデル ウェイトを事前に準備する必要があります。以前に手描きしたスケッチをinputs/hand-drawn-sketches
に配置すると、 ControlNet (scribble)
を実行して次のコマンド ラインを実行できます。
python scripts/inference_controlnet_inpaint.py --controlnet-checkpoint-path lllyasviel/control_v11p_sd15_scribble --stable-diffusion-checkpoint-path botp/stable-diffusion-v1-5-inpainting --prompt " an elephant " --input-mask inputs/masks/bear.png --controlnet-guidance inputs/hand-drawn-sketches/bear-elephant-sketch.png --outdir results/sketch-guided-result.png
結果は次のようになります。
最後に、編集したビデオ全体を生成する準備が整いました。次のようなコマンドラインの例を提供します。
python inference.py --raft-checkpoint-path checkpoints/raft-things.pth --midas-checkpoint-path checkpoints/dpt_swin2_large_384.pt --u2net-checkpoint-path checkpoints/u2net.pth --stable-diffusion-checkpoint-path stable-diffusion-v1-5/stable-diffusion-v1-5 --controlnet-checkpoint-path lllyasviel/control_v11f1p_sd15_depth --i2vgenxl-checkpoint-path ali-vilab/i2vgen-xl --ctrl-adapter-checkpoint-path hanlincs/Ctrl-Adapter --completion-net-checkpoint-path checkpoints/depth-refinement/50000.ckpt --source-video-frames examples/frames/bear --edited-first-frame inputs/edited-first-frames/bear-elephant.png --prompt " an elephant walking on the rocks in a zoo " --outdir results
--edited-first-frame
構成すると、コードベースは最初のフレームの編集プロセスを自動的にスキップし、ソース ビデオと編集されたビデオを以下のように視覚化します。
<目次に戻る>
StableV2V
を使用したビデオ インペインティングの実行最初のビデオ フレームを修復する前に、次のスクリプトを使用して、注釈付きセグメンテーション マスク (存在する場合) を拡張することをお勧めします。
python scripts/run_dilate_mask.py --input-folder inputs/masks/car-turn.png --output-folder inputs/dilated-masks --kernel-size 15 --iterations 1
元のマスク (左) と拡張されたマスク (右) は次のようになります。
IOPaint
使用して最初のペイントされたフレームを生成する便利に使用するには、ライブラリIOPaint
使用することをお勧めします。インストールするには、次のコマンドを実行するだけです。
pip install iopaint
その後、ライブラリを通じてLaMa
を実行できるようになります。
iopaint run --model=lama --image inputs/frames/car-turn/00000.jpg --mask inputs/dilated-masks/car-turn.png --output inputs/edited-first-frames/
オリジナルおよびペイントされた最初のフレームは次のようになります。
最後に、編集したビデオ全体を生成する準備が整いました。次のようなコマンドラインの例を提供します。
python inference.py --raft-checkpoint-path checkpoints/raft-things.pth --midas-checkpoint-path checkpoints/dpt_swin2_large_384.pt --u2net-checkpoint-path checkpoints/u2net.pth --stable-diffusion-checkpoint-path stable-diffusion-v1-5/stable-diffusion-v1-5 --controlnet-checkpoint-path lllyasviel/control_v11f1p_sd15_depth --i2vgenxl-checkpoint-path ali-vilab/i2vgen-xl --ctrl-adapter-checkpoint-path hanlincs/Ctrl-Adapter --completion-net-checkpoint-path checkpoints/depth-refinement/50000.ckpt --source-video-frames examples/frames/car-turn --edited-first-frame inputs/edited-first-frame/car-turn-inpainted.png --prompt " an elephant walking on the rocks in a zoo " --outdir results
--edited-first-frame
構成すると、コードベースは最初のフレームの編集プロセスを自動的にスキップし、ソース ビデオと編集されたビデオを以下のように視覚化します。
<目次に戻る>
StableV2V
の推論(Gradioデモ)インタラクティブ UI を通じてStableV2V
試すための gradio デモも提供しています。開始する前に、このセクションの手順に従って、必要なすべてのモデルの重みをローカル ( ./checkpoints
フォルダー内) に準備することをお勧めします。次に、以下を実行するだけで自由にテストできます。
python app.py
次の図では、Gradio デモのさまざまなモジュールの機能を示しています。
デモに関してさらに質問がある場合は、遠慮なく新しい問題を開始したり、PR を提案したりしてください。
<目次に戻る>
DAVIS-Edit
の詳細以下に示すように、 DAVIS
のデータ構造と同じデータ構造に従ってDAVIS-Edit
構築します。
DAVIS-Edit
├── Annotations <----- Official annotated masks of DAVIS
├── bear
├── blackswan
├── ...
└── train
├── JPEGImages <----- Official video frames of DAVIS
├── bear
├── blackswan
├── ...
└── train
├── ReferenceImages <----- Annotated reference images for image-based editing on DAVIS-Edit
├── bear.png
├── blackswan.png
├── ...
└── train.png
├── .gitattributes
├── README.md
├── edited_video_caption_dict_image.json <----- Annotated text descriptions for image-based editing on DAVIS-Edit
└── edited_video_caption_dict_text.json <----- Annotated text descriptions for text-based editing on DAVIS-Edit
具体的には、 edited_video_caption_dict_image.json
とedited_video_caption_dict_text.json
は Python 辞書として構築され、そのキーはJPEGImages
内のビデオ フォルダーの名前になります。たとえば、 edited_video_caption_dict_text.json
では次のようになります。
{
"bear" : {
"original" : " a bear walking on rocks in a zoo " ,
"similar" : " A panda walking on rocks in a zoo " ,
"changing" : " A rabbit walking on rocks in a zoo "
},
# ...
}
参照画像の注釈には、 DAVIS-Edit-S
およびDAVIS-Edit-C
の注釈にそれぞれ対応する 2 つのサブフォルダー ( l similar
とchanging
) が含まれており、その構造はJPEGImages
と同じフォルダー名で構築されます。 。
注釈ファイルを使用して、 DAVIS-Edit
のさまざまな要素にインデックスを付けることを強くお勧めします。特に、以下のスクリプトを参照してください。
import os
import json
from tqdm import tqdm
from PIL import Image
# TODO: Modify the configurations here to your local paths
frame_root = 'JPEGImages'
mask_root = 'Annotations'
reference_image_root = 'ReferenceImages/similar' # Or 'ReferenceImages/changing'
annotation_file_path = 'edited_video_caption_dict_text.json'
# Load the annotation file
with open ( annotation_file_path , 'r' ) as f :
annotations = json . load ( f )
# Iterate all data samples in DAVIS-Edit
for video_name in tqdm ( annotations . keys ()):
# Load text prompts
original_prompt = annotations [ video_name ][ 'original' ]
similar_prompt = annotations [ video_name ][ 'similar' ]
changing_prompt = annotations [ video_name ][ 'changing' ]
# Load reference images
reference_image = Image . open ( os . path . join ( reference_image_root , video_name + '.png' ))
# Load video frames
video_frames = []
for path in sorted ( os . listdir ( os . path . join ( frame_root , video_name ))):
if path != 'Thumbs.db' and path != '.DS_store' :
video_frames . append ( Image . open ( os . path . join ( frame_root , path )))
# Load masks
masks = []
for path in sorted ( os . listdir ( os . path . join ( mask_root , video_name ))):
if path != 'Thumbs.db' and path != '.DS_store' :
masks . append ( Image . open ( os . path . join ( frame_root , path )))
# (add further operations that you expect in the lines below)
<目次に戻る>
YouTube-VOS
データセットをダウンロードするYouTube-VOS
使用して、形状ガイド付き深度調整ネットワークのトレーニング プロセスを実行します。トレーニング プロセスを開始する前に、まずこのリンクからソース ビデオと注釈をダウンロードする必要があります。ダウンロードされると、データは以下の構造に従います。
youtube-vos
├── JPEGImages <----- Path of source video frames
├── Annotations <----- Path of segmentation masks
└── meta.json <----- Annotation file for the segmentation masks
MiDaS
使用して深度マップに注釈を付けるビデオ フレームの準備ができたら、次のステップは、対応する深度マップに注釈を付けることです。具体的には、このリンクからMiDaS
モデルの重みをダウンロードしてください。次に、自動スクリプトを使用して次のコマンド ラインを実行できます。
python scripts/extract_youtube_vos_depths.py --midas-path checkpoints/dpt_swin2_large_384.pt --dataset-path data/youtube-vos/JPEGImages --outdir data/youtube-vos/DepthMaps
U2-Net
使用して最初のフレームの形状マスクに注釈を付ける深度調整ネットワークは追加のネットワーク チャネルを使用して、最初のフレームの形状マスクをガイダンスとして取得するため、 YouTube-VOS
データセットのアノテーションを付ける必要があります。まず、このリンクからU2-Net
モデルの重みをダウンロードしてください。次に、自動スクリプトを使用して次のコマンド ラインを実行します。
python scripts/extract_youtube_vos_shapes.py --video-root data/youtube-vos/JPEGImages --model-dir checkpoints/u2net.pth --outdir data/youtube-vos/FirstFrameMasks
最後に、次のコマンド ラインを使用してトレーニング プロセスを実行する準備が整いました。
python train_completion_net.py --video-path data/youtube-vos/JPEGImages --shape-path data/youtube-vos/FirstFrameMasks --max-train-steps 50000 --outdir results/shape-guided-depth-refinement --checkpoint-freq 2000 --validation-freq 200
トレーニングされたモデルの重みはresults/checkpoints
に保存され、中間結果の視覚化は、 results/tensorboard
に保存されたログとともにtensorboard
を介してチェックできます。
<目次に戻る>
StableV2V
によって実行された詳細な結果と比較については、プロジェクト ページを参照してください。
<目次に戻る>
この成果があなたの研究に役立つと思われる場合、またはテスト ベンチマークDAVIS-Edit
使用している場合は、論文を引用してください。
@misc{liu-etal-2024-stablev2v,
title={StableV2V: Stablizing Shape Consistency in Video-to-Video Editing},
author={Chang Liu and Rui Li and Kaidong Zhang and Yunwei Lan and Dong Liu},
year={2024},
eprint={2411.11045},
archivePrefix={arXiv},
primaryClass={cs.CV},
}
<目次に戻る>
<目次に戻る>
このリポジトリは、Diffuser、Ctrl-Adapter、AnyDoor、および RAFT に基づいて大幅に変更されています。素晴らしい実装をしてくれた作者に心から感謝します。
<目次に戻る>