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
추론(명령줄)StableV2V
사용한 스케치 기반 편집StableV2V
를 사용한 비디오 인페인팅StableV2V
추론(Gradio Demo)DAVIS-Edit
의 세부사항본 작업에 대해 궁금한 점이 있으시면 언제든지 새로운 이슈를 시작하시거나 PR을 제안해 주세요.
StableV2V
개요 StableV2V
모양이 일관된 방식으로 비디오 편집을 수행하는 새로운 패러다임을 제시합니다. 특히 사용자 프롬프트로 인해 편집된 내용에 상당한 모양 변경이 발생할 때 편집 시나리오를 처리합니다. 게다가 StableV2V
다양한 양식의 다양한 사용자 프롬프트를 고려하여 광범위한 다운스트림 애플리케이션을 처리하는 데 뛰어난 유연성을 보여줍니다.
<목차로 돌아가기>
DAVIS-Edit
ModelScope에 업로드했습니다.StableV2V
의 대화형 사용을 위한 Gradio 데모를 이 섹션에 제시된 자세한 그림과 함께 업데이트했습니다.DAVIS-Edit
wisemodel.cn에 업로드했습니다.DAVIS-Edit
업데이트하고 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 |
지시Pix2Pix | 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-Net | 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를 사용하여 모델을 직접 다운로드할 수 있습니다. 그렇지 않으면 모델 가중치를 로컬로 준비하는 것이 좋습니다.
구체적으로, DINO-v2 사전 훈련된 가중치 경로를 사용하여 models/anydoor/configs/anydoor.yaml
에서 AnyDoor
의 구성 파일을 수정했는지 확인하세요.
(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 | 예 | 비디오 프레임의 분할 마스크를 얻기 위해 ISA에서 요구하는 U2-Net의 모델 가중치 경로(가까운 미래에 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
사용하여 스케치 기반 편집 수행 사람이 그린 스케치를 얻으려면 태블릿과 같은 외부 장치에서 수동으로 그린 다음 나중에 사용할 수 있도록 결과를 내보내야 합니다. 특히 아이패드 애플리케이션인 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 데모) 또한 대화형 UI를 통해 StableV2V
사용해 볼 수 있는 그라디오 데모도 제공합니다. 시작하기 전에 이 섹션의 지침에 따라 필요한 모든 모델 가중치를 로컬( ./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
에 대한 주석에 해당하는 두 개의 하위 폴더, 즉 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
에 저장되며 중간 결과의 시각화는 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를 기반으로 크게 수정되었습니다. 환상적인 구현을 해주신 저자들에게 진심으로 감사드립니다.
<목차로 돌아가기>