劉暢、李銳、張凱東、蘭雲偉、劉東
[ Paper
] / [ Project
] / [ Models (Huggingface)
] / [ DAVIS-Edit (HuggingFace)
] / [ Models (wisemodel)
] / [ DAVIS-Edit (wisemodel) ] / [模型 (ModelScope) ] / [ DAVIS-Edit (ModelScope)
DAVIS-Edit (wisemodel)
]/ [ Models (ModelScope)
] DAVIS-Edit (ModelScope)
]
StableV2V
概述StableV2V
的推論(命令列)StableV2V
進行基於草圖的編輯StableV2V
進行視訊修復StableV2V
的推理(Gradio Demo)DAVIS-Edit
如果您對這項工作有任何疑問,請隨時開始新問題或提出 PR。
StableV2V
概述StableV2V
提出了一種以形狀一致的方式執行影片編輯的新穎範例,特別是在使用者提示導致編輯內容發生重大形狀變化時處理編輯場景。此外,考慮到不同模式的各種使用者提示, StableV2V
在處理各種下游應用程式時表現出卓越的靈活性。
<返回目錄>
DAVIS-Edit
上傳到 ModelScope。StableV2V
的互動使用,本節提供了詳細的插圖。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
所需的模型權重。
模型 | 成分 | 關聯 |
---|---|---|
舉例繪製 | 聚四氟乙烯 | Fantasy-Studio/Paint-by-Example |
指導Pix2Pix | 聚四氟乙烯 | timbrooks/instruct-pix2pix |
SD 修補 | 聚四氟乙烯 | botp/stable-diffusion-v1-5-inpainting |
ControlNet + SD Inpaint | 聚四氟乙烯 | lllyasviel 的 ControlNet 模型 |
任意門 | 聚四氟乙烯 | xichenhku/AnyDoor |
筏 | ISA | Google Drive |
米達斯 | ISA | Link |
U2網 | ISA | Link |
深度細化網絡 | ISA | Link |
標清v1.5 | 化學工業協會 | stable-diffusion-v1-5/stable-diffusion-v1-5 |
控製網路(深度) | 化學工業協會 | lllyasviel/control_v11f1p_sd15_depth |
Ctrl-轉接器 | 化學工業協會 | hanlincs/Ctrl-Adapter ( i2vgenxl_depth ) |
I2VGen-XL | 化學工業協會 | ali-vilab/i2vgen-xl |
下載所有模型權重後,將它們放入checkpoints
資料夾中。
筆記
如果您的網路環境可以存取HuggingFace,則可以直接使用HuggingFace repo ID下載模型。否則,我們強烈建議您在本地準備模型權重。
具體來說,請確保使用 DINO-v2 預訓練權重的路徑修改AnyDoor
的設定檔models/anydoor/configs/anydoor.yaml
:
(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 | 是的 | ISA 要求的 MiDaS 模型權重路徑。 |
--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 (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 Demo)我們還提供了一個 gradio 演示,透過互動式 UI 嘗試StableV2V
。在開始之前,我們建議您按照本節中的說明在本地準備所有所需的模型權重(在./checkpoints
資料夾中)。然後,您可以透過簡單地運行來測試它:
python app.py
下圖我們展示了Gradio demo中不同模組的功能:
如果對演示有任何其他疑問,請隨時開始新問題或提出 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 "
},
# ...
}
參考影像的註釋包含兩個子資料夾,即similar
和changing
,分別對應DAVIS-Edit-S
和DAVIS-Edit-C
的註釋,其中結構的構造與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
,中間結果的視覺化可以透過tensorboard
檢查,日誌保存在results/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},
}
<返回目錄>
<返回目錄>
此儲存庫基於 Diffusers、Ctrl-Adapter、AnyDoor 和 RAFT 進行了大量修改。我們衷心感謝作者的出色實現。
<返回目錄>