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
(Baris Perintah)StableV2V
StableV2V
StableV2V
(Demo Gradio)DAVIS-Edit
Jika Anda memiliki pertanyaan tentang karya ini, silakan memulai terbitan baru atau mengusulkan PR.
StableV2V
StableV2V
menghadirkan paradigma baru untuk melakukan pengeditan video dengan cara yang konsisten, terutama menangani skenario pengeditan ketika perintah pengguna menyebabkan perubahan bentuk yang signifikan pada konten yang diedit. Selain itu, StableV2V
menunjukkan fleksibilitas unggul dalam menangani serangkaian aplikasi hilir, dengan mempertimbangkan berbagai permintaan pengguna dari modalitas berbeda.
<Kembali ke Daftar Isi>
DAVIS-Edit
ke ModelScope.StableV2V
, dengan ilustrasi mendetail disajikan di bagian ini.DAVIS-Edit
ke wisemodel.cn.DAVIS-Edit
ke repo kumpulan data HuggingFace kami, dan mengunggah semua bobot model StableV2V
yang diperlukan ke repo model HuggingFace kami.StableV2V
DAVIS-Edit
ke repo HuggingFace kami StableV2V
yang diperlukan ke repo HuggingFace kami <Kembali ke Daftar Isi>
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
<Kembali ke Daftar Isi>
Kami menawarkan baris perintah sekali klik untuk menginstal semua dependensi yang diperlukan kode. Pertama, buat lingkungan virtual dengan conda
:
conda create -n stablev2v python=3.10
Kemudian, Anda dapat menjalankan baris berikut untuk menginstal dependensi dengan pip
:
bash install_pip.sh
Anda juga dapat menginstal dependensi dengan conda
, dengan mengikuti baris perintah di bawah ini:
bash install_conda.sh
Kemudian, Anda siap menggunakan conda activate stablev2v
.
Sebelum memulai proses inferensi, Anda perlu menyiapkan bobot model yang diperlukan StableV2V
.
Model | Komponen | Link |
---|---|---|
Cat-demi-Contoh | PFE | Fantasy-Studio/Paint-by-Example |
InstruksikanPix2Pix | PFE | timbrooks/instruct-pix2pix |
SD Inpaint | PFE | botp/stable-diffusion-v1-5-inpainting |
ControlNet + SD Inpaint | PFE | Model ControlNet di lllyasviel |
Pintu Mana Saja | PFE | xichenhku/AnyDoor |
RAKIT | adalah | Google Drive |
MiDaS | adalah | Link |
U2-Net | adalah | Link |
Jaringan Penyempurnaan Kedalaman | adalah | Link |
SD v1.5 | CIG | stable-diffusion-v1-5/stable-diffusion-v1-5 |
ControlNet (kedalaman) | CIG | lllyasviel/control_v11f1p_sd15_depth |
Ctrl-Adaptor | CIG | hanlincs/Ctrl-Adapter ( i2vgenxl_depth ) |
I2VGen-XL | CIG | ali-vilab/i2vgen-xl |
Setelah Anda mengunduh semua bobot model, letakkan di folder checkpoints
.
Catatan
Jika lingkungan jaringan Anda bisa mendapatkan akses ke HuggingFace, Anda dapat langsung menggunakan ID repo HuggingFace untuk mengunduh model. Jika tidak, kami sangat menyarankan Anda menyiapkan anak timbangan model secara lokal.
Secara khusus, pastikan Anda memodifikasi file konfigurasi AnyDoor
di models/anydoor/configs/anydoor.yaml
dengan jalur bobot terlatih DINO-v2:
(at line 83)
cond_stage_config:
target: models.anydoor.ldm.modules.encoders.modules.FrozenDinoV2Encoder
weight: /path/to/dinov2_vitg14_pretrain.pth
<Kembali ke Daftar Isi>
StableV2V
(Baris Perintah) Anda dapat merujuk ke baris perintah berikut untuk menjalankan 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
Argumen | Pengaturan Bawaan | Wajib atau Tidak | Penjelasan |
---|---|---|---|
Argumen model | - | - | - |
--image-editor-type | - | Ya | Argumen untuk menentukan jenis editor gambar. |
--image-editor-checkpoint-path | - | Ya | Jalur bobot model untuk editor gambar, yang dibutuhkan oleh PFE. |
--raft-checkpoint-path | checkpoints/raft-things.pth | Ya | Jalur bobot model untuk RAFT, yang disyaratkan oleh ISA. |
--midas-checkpoint-path | checkpoints/dpt_swin2_large_382.pt | Ya | Jalur bobot model untuk MiDaS, yang diwajibkan oleh ISA. |
--u2net-checkpoint-path | checkpoints/u2net.pth | Ya | Jalur bobot model untuk U2-Net, yang diperlukan oleh ISA untuk mendapatkan masker segmentasi frame video (akan digantikan oleh SAM dalam waktu dekat) |
--stable-diffusion-checkpoint-path | stable-diffusion-v1-5/stable-diffusion-v1-5 | Ya | Jalur bobot model untuk SD v1.5, yang diwajibkan oleh CIG. |
--controlnet-checkpoint-path | lllyasviel/control_v11f1p_sd15_depth | Ya | Jalur bobot model untuk ControlNet (kedalaman) yang dibutuhkan oleh CIG. |
--ctrl-adapter-checkpoint-path | hanlincs/Ctrl-Adapter | Ya | Jalur bobot model untuk Ctrl-Adapter, yang dibutuhkan oleh CIG. |
--i2vgenxl-checkpoint-path | ali-vilab/i2vgen-xl | Ya | Jalur bobot model untuk I2VGen-XL, yang dibutuhkan oleh CIG. |
--completion-checkpoint-path | checkpoints/depth-refinement/50000.ckpt | Ya | Jalur bobot model untuk I2VGen-XL, yang dibutuhkan oleh CIG. |
Argumen Masukan | - | - | - |
--source-video-frames | - | Ya | Jalur bingkai video masukan. |
--prompt | - | Ya | Perintah teks dari video yang diedit. |
--external-guidance | - | Ya | Masukan eksternal untuk editor gambar jika Anda menggunakan Paint-by-Example , InstructPix2Pix , dan AnyDoor . |
--outdir | results | Ya | Jalur direktori keluaran. |
--edited-first-frame | - | TIDAK | Jalur bingkai yang disesuaikan dan diedit pertama kali, tempat editor gambar tidak akan digunakan jika argumen ini dikonfigurasi. |
--input-condition | - | TIDAK | Jalur peta kedalaman yang disesuaikan. Kami langsung mengekstrak peta kedalaman dari frame video sumber dengan MiDaS jika argumen ini tidak dikonfigurasi |
--input-condition | - | TIDAK | Jalur peta kedalaman yang disesuaikan. Kami langsung mengekstrak peta kedalaman dari frame video sumber dengan MiDaS jika argumen ini tidak dikonfigurasi. |
--reference-masks | - | TIDAK | Jalur topeng segmentasi dari gambar referensi, dibutuhkan oleh AnyDoor . Kami akan secara otomatis mengekstrak masker segmentasi dari gambar referensi jika argumen ini tidak dikonfigurasi. |
--image-guidance-scale | 1.0 | TIDAK | Hyper-parameter diperlukan oleh InstructPix2Pix. |
--kernel-size | 9 | TIDAK | Ukuran kernel dari operasi dilatasi biner, untuk memastikan bahwa proses penempelan mencakup wilayah konten yang diedit. |
--dilation-iteration | 1 | TIDAK | Iterasi untuk operasi dilatasi biner. |
--guidance-scale | 9.0 | TIDAK | Skala panduan bebas pengklasifikasi. |
--mixed-precision | bf16 | TIDAK | Presisi model di StableV2V. |
--n-sample-frames | 16 | TIDAK | Jumlah bingkai video dari video yang diedit. |
--seed | 42 | TIDAK | Benih acak. |
Catatan
Beberapa poin spesifik yang mungkin perlu Anda perhatikan saat membuat kesimpulan:
--image-editor-checkpoint-path
, jalur akan secara otomatis dikirimkan ke editor yang sesuai sesuai dengan --image-editor-type
Anda. Jadi mohon jangan khawatir tentang beberapa argumen tambahan dalam basis kode.Paint-by-Example
, InstructPix2Pix
, AnyDoor
, Anda harus mengonfigurasi argumen --external-guidance
, yang sesuai dengan gambar referensi dan instruksi pengguna.xformers
, yang mungkin menyebabkan artefak pada hasil yang dihasilkan. Masalah tersebut mungkin dapat diperbaiki di masa mendatang jika memungkinkan. StableV2V
Untuk mendapatkan sketsa yang digambar manusia, Anda perlu menggambarnya secara manual di perangkat eksternal seperti tablet, lalu mengekspor hasilnya untuk digunakan nanti. Khususnya, kami memperoleh sketsa gambar tangan di aplikasi iPad Sketchbook
. Contoh sketsa yang digambar tangan mungkin terlihat seperti ini:
ControlNet (scribble)
untuk Menghasilkan Bingkai yang Diedit Pertama Setelah Anda mendapatkan sketsa gambar tangan, langkah selanjutnya adalah mendapatkan bingkai pertama yang diedit. Untuk melakukannya, kami menggunakan ControlNet (scribble)
, di mana Anda perlu menyiapkan bobot model ControlNet (scribble)
dan SD Inpaint
terlebih dahulu. Misalkan kita meletakkan sketsa yang digambar tangan sebelumnya di inputs/hand-drawn-sketches
, Anda dapat menjalankan baris perintah berikut dengan menjalankan 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
Hasilnya mungkin tampak seperti:
Terakhir, Anda siap membuat seluruh video yang telah diedit. Kami menawarkan contoh baris perintah sebagai berikut:
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
Dengan mengonfigurasi --edited-first-frame
, basis kode akan secara otomatis melewati proses pengeditan frame pertama, di mana kita memvisualisasikan video sumber dan video yang diedit di bawah:
<Kembali ke Daftar Isi>
StableV2V
Sebelum Anda melukis bingkai video pertama, sebaiknya Anda melebarkan masker segmentasi beranotasi (jika ada) menggunakan skrip berikut:
python scripts/run_dilate_mask.py --input-folder inputs/masks/car-turn.png --output-folder inputs/dilated-masks --kernel-size 15 --iterations 1
Masker asli (kiri) dan masker melebar (kanan) mungkin terlihat seperti:
IOPaint
untuk Menghasilkan Bingkai yang Dicat Pertama Kami menyarankan Anda untuk menggunakan perpustakaan IOPaint
agar mudah digunakan. Untuk menginstalnya, Anda cukup menjalankan:
pip install iopaint
Kemudian, Anda dapat menjalankan LaMa
melalui perpustakaan:
iopaint run --model=lama --image inputs/frames/car-turn/00000.jpg --mask inputs/dilated-masks/car-turn.png --output inputs/edited-first-frames/
Bingkai pertama yang asli dan dicat mungkin terlihat seperti:
Terakhir, Anda siap membuat seluruh video yang telah diedit. Kami menawarkan contoh baris perintah sebagai berikut:
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
Dengan mengonfigurasi --edited-first-frame
, basis kode akan secara otomatis melewati proses pengeditan frame pertama, di mana kita memvisualisasikan video sumber dan video yang diedit di bawah:
<Kembali ke Daftar Isi>
StableV2V
(Gradio Demo) Kami juga menawarkan demo gradio untuk mencoba StableV2V
melalui UI interaktif. Sebelum melanjutkan, kami menyarankan Anda untuk mengikuti petunjuk di bagian ini untuk menyiapkan semua bobot model yang diperlukan secara lokal (di folder ./checkpoints
). Kemudian, silakan mengujinya hanya dengan menjalankan:
python app.py
Pada gambar berikut, kami mengilustrasikan fungsi berbagai modul di demo Gradio kami:
Jangan ragu untuk memulai terbitan baru atau mengusulkan PR jika ada pertanyaan lebih lanjut tentang demo.
<Kembali ke Daftar Isi>
DAVIS-Edit
Kami membuat DAVIS-Edit
mengikuti struktur data yang sama dengan DAVIS
, seperti yang ditunjukkan di bawah ini:
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
Secara khusus, edited_video_caption_dict_image.json
dan edited_video_caption_dict_text.json
dibuat sebagai kamus Python, dengan kuncinya sebagai nama folder video di JPEGImages
. Misalnya di 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 "
},
# ...
}
Anotasi gambar referensi berisi dua sub-folder, yaitu, similar
dan changing
, sesuai dengan anotasi untuk DAVIS-Edit-S
dan DAVIS-Edit-C
, masing-masing, di mana strukturnya dibuat dalam nama folder yang sama dengan yang ada di JPEGImages
.
Kami sangat menyarankan Anda untuk mengindeks elemen yang berbeda di DAVIS-Edit
melalui file anotasi . Khususnya, Anda dapat merujuk ke skrip di bawah ini:
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)
<Kembali ke Daftar Isi>
YouTube-VOS
Kami menggunakan YouTube-VOS
untuk melakukan proses pelatihan jaringan penyempurnaan kedalaman yang dipandu bentuk. Sebelum memulai proses pelatihan, Anda perlu mengunduh video sumber dan anotasinya terlebih dahulu dari tautan ini. Setelah diunduh, data mengikuti struktur di bawah ini:
youtube-vos
├── JPEGImages <----- Path of source video frames
├── Annotations <----- Path of segmentation masks
└── meta.json <----- Annotation file for the segmentation masks
MiDaS
untuk Memberi Anotasi pada Peta Kedalaman Setelah bingkai video siap, langkah selanjutnya adalah memberi anotasi pada peta kedalaman yang sesuai. Secara khusus, pastikan Anda mengunduh bobot model MiDaS
dari tautan ini. Kemudian, Anda dapat menjalankan baris perintah berikut dengan skrip otomatis kami:
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
untuk Memberi Anotasi pada Shape Mask Bingkai Pertama Jaringan penyempurnaan kedalaman kami menggunakan saluran jaringan tambahan untuk menggunakan masker bentuk bingkai pertama sebagai panduan, sehingga Anda perlu memberi anotasi pada saluran tersebut untuk kumpulan data YouTube-VOS
. Pertama, pastikan Anda mendownload bobot model U2-Net
dari link ini. Kemudian, Anda menjalankan baris perintah berikut dengan skrip otomatis kami:
python scripts/extract_youtube_vos_shapes.py --video-root data/youtube-vos/JPEGImages --model-dir checkpoints/u2net.pth --outdir data/youtube-vos/FirstFrameMasks
Terakhir, Anda siap menjalankan proses pelatihan dengan baris perintah berikut:
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
Bobot model yang dilatih akan disimpan di results/checkpoints
, dan visualisasi hasil antara dapat diperiksa melalui tensorboard
, dengan log disimpan di results/tensorboard
.
<Kembali ke Daftar Isi>
Silakan merujuk ke halaman proyek kami untuk hasil lebih lanjut dan perbandingan yang dilakukan oleh StableV2V
.
<Kembali ke Daftar Isi>
Jika Anda merasa karya ini berguna untuk penelitian Anda, atau menggunakan patokan pengujian kami DAVIS-Edit
, silakan kutip makalah kami:
@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},
}
<Kembali ke Daftar Isi>
<Kembali ke Daftar Isi>
Repo ini banyak dimodifikasi berdasarkan Diffusers, Ctrl-Adapter, AnyDoor, dan RAFT. Kami dengan tulus berterima kasih kepada penulis atas implementasi fantasi mereka.
<Kembali ke Daftar Isi>