Chang Liu, Rui Li, Kaidong Zhang, Yunwei Lan, Dong Liu
[ Paper
] / [ Project
] / [ Models (Huggingface)
] / [ DAVIS-Edit (HuggingFace)
] / [ Models (wisemodel)
] / [ DAVIS-Edit (wisemodel)
] / [ Models (ModelScope)
] / [ DAVIS-Edit (ModelScope)
]
StableV2V
StableV2V
(Befehlszeilen)StableV2V
StableV2V
StableV2V
(Gradio Demo)DAVIS-Edit
Wenn Sie Fragen zu dieser Arbeit haben, können Sie gerne eine neue Ausgabe starten oder eine PR vorschlagen.
StableV2V
StableV2V
stellt ein neuartiges Paradigma für die formkonsistente Durchführung der Videobearbeitung dar, insbesondere für die Bearbeitung von Bearbeitungsszenarien, bei denen Benutzeraufforderungen zu erheblichen Formänderungen der bearbeiteten Inhalte führen. Darüber hinaus zeigt StableV2V
eine überlegene Flexibilität bei der Handhabung einer Vielzahl von Downstream-Anwendungen und berücksichtigt dabei verschiedene Benutzeraufforderungen aus unterschiedlichen Modalitäten.
<Zurück zum Inhaltsverzeichnis>
DAVIS-Edit
auf ModelScope hochgeladen.StableV2V
aktualisiert, mit detaillierten Abbildungen in diesem Abschnitt.DAVIS-Edit
auf wisemodel.cn hochgeladen.DAVIS-Edit
auf unser HuggingFace-Datensatz-Repository aktualisiert und alle erforderlichen Modellgewichte von StableV2V
in unser HuggingFace-Modell-Repository hochgeladen.StableV2V
DAVIS-Edit
in unser HuggingFace-Repo hoch StableV2V
in unser HuggingFace-Repo hoch <Zurück zum Inhaltsverzeichnis>
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
<Zurück zum Inhaltsverzeichnis>
Wir bieten eine Ein-Klick-Befehlszeile, um alle für den Code erforderlichen Abhängigkeiten zu installieren. Erstellen Sie zunächst die virtuelle Umgebung mit conda
:
conda create -n stablev2v python=3.10
Anschließend können Sie die folgenden Zeilen ausführen, um die Abhängigkeiten mit pip
zu installieren:
bash install_pip.sh
Sie können die Abhängigkeiten auch mit conda
installieren, indem Sie der folgenden Befehlszeile folgen:
bash install_conda.sh
Dann können Sie mit conda activate stablev2v
loslegen.
Bevor Sie mit dem Inferenzprozess beginnen, müssen Sie die Modellgewichte vorbereiten, die StableV2V
benötigt.
Modell | Komponente | Link |
---|---|---|
Malen nach Beispiel | PFE | Fantasy-Studio/Paint-by-Example |
InstructPix2Pix | PFE | timbrooks/instruct-pix2pix |
SD Inpaint | PFE | botp/stable-diffusion-v1-5-inpainting |
ControlNet + SD Inpaint | PFE | ControlNet-Modelle bei lllyasviel |
AnyDoor | PFE | xichenhku/AnyDoor |
FLOSS | ISA | Google Drive |
Midas | ISA | Link |
U2-Net | ISA | Link |
Netzwerk zur Tiefenverfeinerung | ISA | Link |
SD v1.5 | CIG | stable-diffusion-v1-5/stable-diffusion-v1-5 |
ControlNet (Tiefe) | CIG | lllyasviel/control_v11f1p_sd15_depth |
Strg-Adapter | CIG | hanlincs/Ctrl-Adapter ( i2vgenxl_depth ) |
I2VGen-XL | CIG | ali-vilab/i2vgen-xl |
Nachdem Sie alle Modellgewichte heruntergeladen haben, legen Sie sie im checkpoints
Ordner ab.
Notiz
Wenn Ihre Netzwerkumgebung Zugriff auf HuggingFace hat, können Sie die HuggingFace-Repo-ID direkt zum Herunterladen der Modelle verwenden. Ansonsten empfehlen wir Ihnen dringend, die Modellgewichte vor Ort vorzubereiten.
Stellen Sie insbesondere sicher, dass Sie die Konfigurationsdatei von AnyDoor
unter models/anydoor/configs/anydoor.yaml
mit dem Pfad der vorab trainierten DINO-v2-Gewichte ändern:
(at line 83)
cond_stage_config:
target: models.anydoor.ldm.modules.encoders.modules.FrozenDinoV2Encoder
weight: /path/to/dinov2_vitg14_pretrain.pth
<Zurück zum Inhaltsverzeichnis>
StableV2V
(Befehlszeilen) Sie können die folgende Befehlszeile verwenden, um StableV2V
auszuführen:
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
Argument | Standardeinstellung | Erforderlich oder nicht | Erläuterung |
---|---|---|---|
Modellargumente | - | - | - |
--image-editor-type | - | Ja | Argument zum Definieren des Bildeditortyps. |
--image-editor-checkpoint-path | - | Ja | Pfad der Modellgewichte für den Bildeditor, erforderlich für PFE. |
--raft-checkpoint-path | checkpoints/raft-things.pth | Ja | Pfad der Modellgewichte für RAFT, erforderlich von ISA. |
--midas-checkpoint-path | checkpoints/dpt_swin2_large_382.pt | Ja | Pfad der Modellgewichte für MiDaS, erforderlich von ISA. |
--u2net-checkpoint-path | checkpoints/u2net.pth | Ja | Pfad der Modellgewichte für U2-Net, von ISA benötigt, um die Segmentierungsmasken von Videobildern zu erhalten (wird in naher Zukunft durch SAM ersetzt) |
--stable-diffusion-checkpoint-path | stable-diffusion-v1-5/stable-diffusion-v1-5 | Ja | Pfad der Modellgewichte für SD v1.5, erforderlich von CIG. |
--controlnet-checkpoint-path | lllyasviel/control_v11f1p_sd15_depth | Ja | Pfad der von CIG benötigten Modellgewichte für ControlNet (Tiefe). |
--ctrl-adapter-checkpoint-path | hanlincs/Ctrl-Adapter | Ja | Pfad der Modellgewichte für Strg-Adapter, erforderlich für CIG. |
--i2vgenxl-checkpoint-path | ali-vilab/i2vgen-xl | Ja | Pfad der Modellgewichte für I2VGen-XL, erforderlich von CIG. |
--completion-checkpoint-path | checkpoints/depth-refinement/50000.ckpt | Ja | Pfad der Modellgewichte für I2VGen-XL, erforderlich von CIG. |
Eingabeargumente | - | - | - |
--source-video-frames | - | Ja | Pfad der Eingabevideobilder. |
--prompt | - | Ja | Textaufforderung des bearbeiteten Videos. |
--external-guidance | - | Ja | Externe Eingaben für die Bildeditoren, wenn Sie Paint-by-Example , InstructPix2Pix und AnyDoor verwenden. |
--outdir | results | Ja | Pfad des Ausgabeverzeichnisses. |
--edited-first-frame | - | NEIN | Pfad des benutzerdefinierten ersten bearbeiteten Frames, in dem der Bildeditor nicht verwendet wird, wenn dieses Argument konfiguriert ist. |
--input-condition | - | NEIN | Pfad benutzerdefinierter Tiefenkarten. Wenn dieses Argument nicht konfiguriert ist, extrahieren wir mit MiDaS direkt Tiefenkarten aus den Quellvideobildern |
--input-condition | - | NEIN | Pfad benutzerdefinierter Tiefenkarten. Wenn dieses Argument nicht konfiguriert ist, extrahieren wir mit MiDaS direkt Tiefenkarten aus den Quellvideobildern. |
--reference-masks | - | NEIN | Pfad der Segmentierungsmasken des Referenzbildes, erforderlich für AnyDoor . Wir extrahieren die Segmentierungsmaske automatisch aus dem Referenzbild, wenn dieses Argument nicht konfiguriert ist. |
--image-guidance-scale | 1,0 | NEIN | Für InstructPix2Pix erforderlicher Hyperparameter. |
--kernel-size | 9 | NEIN | Kernelgröße der binären Erweiterungsoperation, um sicherzustellen, dass die Einfügevorgänge die Bereiche des bearbeiteten Inhalts abdecken. |
--dilation-iteration | 1 | NEIN | Iteration für die binäre Dilatationsoperation. |
--guidance-scale | 9.0 | NEIN | Klassifizierungsfreie Leitskala. |
--mixed-precision | bf16 | NEIN | Präzision der Modelle in StableV2V. |
--n-sample-frames | 16 | NEIN | Anzahl der Videobilder des bearbeiteten Videos. |
--seed | 42 | NEIN | Zufälliger Samen. |
Notiz
Einige spezifische Punkte, denen Sie bei der Schlussfolgerung möglicherweise zusätzliche Aufmerksamkeit schenken sollten:
--image-editor-checkpoint-path
wird der Pfad entsprechend Ihrem --image-editor-type
automatisch an den entsprechenden Editor übermittelt. Machen Sie sich also bitte keine Sorgen über einige zusätzliche Argumente in der Codebasis.Paint-by-Example
, InstructPix2Pix
oder AnyDoor
verwenden, müssen Sie das Argument --external-guidance
konfigurieren, das dem Referenzbild und den Benutzeranweisungen entsprechend entspricht.xformers
, was zu Artefakten in den erzeugten Ergebnissen führen kann. Dieses Problem könnte, wenn möglich, in Zukunft behoben werden. StableV2V
Um die von Menschenhand gezeichneten Skizzen zu erhalten, müssen Sie sie manuell auf externen Geräten wie einem Tablet zeichnen und das Ergebnis dann für spätere Verwendungen exportieren. Insbesondere erhalten wir die handgezeichneten Skizzen über die iPad-App Sketchbook
. Eine beispielhafte handgezeichnete Skizze könnte so aussehen:
ControlNet (scribble)
um den ersten bearbeiteten Frame zu generieren Sobald Sie die handgezeichnete Skizze erhalten haben, besteht der nächste Schritt darin, den ersten bearbeiteten Rahmen zu erhalten. Dabei verwenden wir ControlNet (scribble)
, wobei Sie die Modellgewichte von ControlNet (scribble)
und SD Inpaint
im Voraus vorbereiten müssen. Angenommen, wir legen die zuvor handgezeichneten Skizzen unter inputs/hand-drawn-sketches
ab. Sie können die folgende Befehlszeile ausführen, indem Sie ControlNet (scribble)
ausführen:
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
Das Ergebnis könnte wie folgt aussehen:
Schließlich sind Sie bereit, das gesamte bearbeitete Video zu generieren. Wir bieten eine Beispiel-Befehlszeile wie folgt an:
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
Durch die Konfiguration von --edited-first-frame
überspringt die Codebasis automatisch den Bearbeitungsprozess des ersten Frames, in dem wir das Quellvideo und das bearbeitete Video unten visualisieren:
<Zurück zum Inhaltsverzeichnis>
StableV2V
Bevor Sie das erste Videobild einzeichnen, empfehlen wir Ihnen, die mit Anmerkungen versehene Segmentierungsmaske (falls vorhanden) mithilfe des folgenden Skripts zu erweitern:
python scripts/run_dilate_mask.py --input-folder inputs/masks/car-turn.png --output-folder inputs/dilated-masks --kernel-size 15 --iterations 1
Die Originalmaske (links) und die erweiterte Maske (rechts) könnten wie folgt aussehen:
IOPaint
um den ersten Inpaint-Frame zu generieren Zur komfortablen Nutzung empfehlen wir Ihnen die Verwendung der Bibliothek IOPaint
. Um es zu installieren, können Sie einfach Folgendes ausführen:
pip install iopaint
Anschließend können Sie LaMa
über die Bibliothek ausführen:
iopaint run --model=lama --image inputs/frames/car-turn/00000.jpg --mask inputs/dilated-masks/car-turn.png --output inputs/edited-first-frames/
Die originalen und unbemalten ersten Rahmen könnten so aussehen:
Schließlich sind Sie bereit, das gesamte bearbeitete Video zu generieren. Wir bieten eine Beispiel-Befehlszeile wie folgt an:
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
Durch die Konfiguration von --edited-first-frame
überspringt die Codebasis automatisch den Bearbeitungsprozess des ersten Frames, in dem wir das Quellvideo und das bearbeitete Video unten visualisieren:
<Zurück zum Inhaltsverzeichnis>
StableV2V
(Gradio-Demo) Wir bieten auch eine Gradio-Demo an, um StableV2V
über die interaktive Benutzeroberfläche auszuprobieren. Bevor Sie beginnen, empfehlen wir Ihnen, die Anweisungen in diesem Abschnitt zu befolgen, um alle erforderlichen Modellgewichte lokal (im Ordner ./checkpoints
) vorzubereiten. Dann können Sie es gerne testen, indem Sie einfach Folgendes ausführen:
python app.py
In der folgenden Abbildung veranschaulichen wir die Funktionen verschiedener Module in unserer Gradio-Demo:
Bitte zögern Sie nicht, eine neue Ausgabe zu starten oder eine PR vorzuschlagen, wenn Sie weitere Fragen zur Demo haben.
<Zurück zum Inhaltsverzeichnis>
DAVIS-Edit
Wir erstellen DAVIS-Edit
nach der gleichen Datenstruktur wie DAVIS
, wie unten gezeigt:
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
Insbesondere sind edited_video_caption_dict_image.json
und edited_video_caption_dict_text.json
als Python-Wörterbuch aufgebaut, dessen Schlüssel die Namen der Videoordner in JPEGImages
sind. Zum Beispiel in 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 "
},
# ...
}
Die Anmerkungen von Referenzbildern enthalten zwei Unterordner, nämlich similar
und changing
, entsprechend den Anmerkungen für DAVIS-Edit-S
bzw. DAVIS-Edit-C
, wobei die Struktur im gleichen Ordnernamen wie in JPEGImages
aufgebaut ist .
Wir empfehlen Ihnen dringend, verschiedene Elemente in DAVIS-Edit
über die Annotationsdateien zu indizieren. Insbesondere können Sie sich auf das folgende Skript beziehen:
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)
<Zurück zum Inhaltsverzeichnis>
YouTube-VOS
-Datensatz herunter Wir verwenden YouTube-VOS
um den Trainingsprozess unseres formgesteuerten Tiefenverfeinerungsnetzwerks durchzuführen. Bevor Sie mit dem Schulungsprozess beginnen, müssen Sie zunächst die Quellvideos und Anmerkungen über diesen Link herunterladen. Nach dem Herunterladen folgen die Daten der folgenden Struktur:
youtube-vos
├── JPEGImages <----- Path of source video frames
├── Annotations <----- Path of segmentation masks
└── meta.json <----- Annotation file for the segmentation masks
MiDaS
, um die Tiefenkarten zu kommentieren Sobald die Videobilder fertig sind, besteht der nächste Schritt darin, die entsprechenden Tiefenkarten mit Anmerkungen zu versehen. Stellen Sie insbesondere sicher, dass Sie die MiDaS
-Modellgewichte über diesen Link herunterladen. Anschließend können Sie mit unserem automatischen Skript die folgenden Befehlszeilen ausführen:
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
um die Formmasken des ersten Frames mit Anmerkungen zu versehen Unser Tiefenverfeinerungsnetzwerk verwendet einen zusätzlichen Netzwerkkanal, um die Formmaske des ersten Frames als Orientierung zu verwenden. Daher müssen Sie sie für den YouTube-VOS
-Datensatz mit Anmerkungen versehen. Stellen Sie zunächst sicher, dass Sie die U2-Net
-Modellgewichte über diesen Link herunterladen. Anschließend führen Sie mit unserem automatischen Skript die folgenden Befehlszeilen aus:
python scripts/extract_youtube_vos_shapes.py --video-root data/youtube-vos/JPEGImages --model-dir checkpoints/u2net.pth --outdir data/youtube-vos/FirstFrameMasks
Schließlich können Sie den Trainingsprozess mit der folgenden Befehlszeile ausführen:
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
Die trainierten Modellgewichte werden unter results/checkpoints
gespeichert und die Visualisierungen von Zwischenergebnissen können über tensorboard
überprüft werden, wobei die Protokolle unter results/tensorboard
gespeichert werden.
<Zurück zum Inhaltsverzeichnis>
Weitere Ergebnisse und Vergleiche von StableV2V
finden Sie auf unserer Projektseite.
<Zurück zum Inhaltsverzeichnis>
Wenn Sie diese Arbeit für Ihre Forschung hilfreich finden oder unseren Test-Benchmark DAVIS-Edit
verwenden, zitieren Sie bitte unseren Artikel:
@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},
}
<Zurück zum Inhaltsverzeichnis>
<Zurück zum Inhaltsverzeichnis>
Dieses Repo wurde stark modifiziert und basiert auf Diffusers, Ctrl-Adapter, AnyDoor und RAFT. Wir danken den Autoren herzlich für ihre fantasievollen Umsetzungen.
<Zurück zum Inhaltsverzeichnis>