Чанг Лю, Руй Ли, Кайдун Чжан, Юнвэй Лан, Донг Лю
[ 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
с подробными иллюстрациями, представленными в этом разделе.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 |
ИнструктПикс2Пикс | ПФЭ | timbrooks/instruct-pix2pix |
SD Inpaint | ПФЭ | botp/stable-diffusion-v1-5-inpainting |
ControlNet + SD Inpaint | ПФЭ | Модели ControlNet в lllyasviel |
AnyDoor | ПФЭ | xichenhku/AnyDoor |
РАФТ | ИСА | Google Drive |
МиДаС | ИСА | Link |
U2-Net | ИСА | Link |
Сеть глубокой доработки | ИСА | Link |
СД v1.5 | КИГ | stable-diffusion-v1-5/stable-diffusion-v1-5 |
ControlNet (глубина) | КИГ | lllyasviel/control_v11f1p_sd15_depth |
Ctrl-Адаптер | КИГ | hanlincs/Ctrl-Adapter ( i2vgenxl_depth ) |
I2VGen-XL | КИГ | ali-vilab/i2vgen-xl |
После того, как вы загрузили все веса модели, поместите их в папку checkpoints
.
Примечание
Если ваша сетевая среда имеет доступ к HuggingFace, вы можете напрямую использовать идентификатор репозитория HuggingFace для загрузки моделей. В противном случае мы настоятельно рекомендуем вам подготовить веса модели локально.
В частности, обязательно измените файл конфигурации AnyDoor
по адресу models/anydoor/configs/anydoor.yaml
указав путь к предварительно обученным весам 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 | Да | Путь весов модели для RAFT, требуемый ISA. |
--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 | Да | Путь весов модели для SD v1.5, требуемый CIG. |
--controlnet-checkpoint-path | lllyasviel/control_v11f1p_sd15_depth | Да | Путь весов модели для ControlNet (глубина), требуемый CIG. |
--ctrl-adapter-checkpoint-path | hanlincs/Ctrl-Adapter | Да | Путь весов модели для Ctrl-Adapter, требуемый CIG. |
--i2vgenxl-checkpoint-path | ali-vilab/i2vgen-xl | Да | Путь весов модели для I2VGen-XL, требуемый CIG. |
--completion-checkpoint-path | checkpoints/depth-refinement/50000.ckpt | Да | Путь весов модели для I2VGen-XL, требуемый CIG. |
Входные аргументы | - | - | - |
--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 | бф16 | Нет | Точность моделей в StableV2V. |
--n-sample-frames | 16 | Нет | Количество видеокадров монтируемого видео. |
--seed | 42 | Нет | Случайное семя. |
Примечание
Некоторые конкретные моменты, на которые вы можете обратить дополнительное внимание при выводе:
--image-editor-checkpoint-path
путь будет автоматически передан в соответствующий редактор в соответствии с вашим --image-editor-type
. Поэтому, пожалуйста, не беспокойтесь о дополнительных аргументах в кодовой базе.Paint-by-Example
, InstructPix2Pix
, AnyDoor
, вам необходимо настроить аргумент --external-guidance
, который соответствует эталонному изображению и инструкциям пользователя соответственно.xformers
, что может привести к появлению артефактов в полученных результатах. Подобная проблема может быть решена в будущем, если это возможно. StableV2V
Чтобы получить эскизы, нарисованные человеком, вам необходимо вручную нарисовать их на внешних устройствах, таких как планшет, а затем экспортировать результат для дальнейшего использования. В частности, мы получаем нарисованные от руки эскизы в приложении Sketchbook
для iPad. Пример эскиза, нарисованного от руки, может выглядеть так:
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) Мы также предлагаем демонстрационную версию StableV2V
с помощью интерактивного пользовательского интерфейса. Прежде чем приступить к работе, мы рекомендуем вам следовать инструкциям в этом разделе, чтобы подготовить все необходимые веса модели локально (в папке ./checkpoints
). Затем не стесняйтесь протестировать это, просто запустив:
python app.py
На следующем рисунке мы иллюстрируем функции различных модулей в нашей демонстрации Gradio:
Пожалуйста, не стесняйтесь начать новый выпуск или предложить PR, если у вас возникнут дополнительные вопросы по поводу демо-версии.
<Вернуться к оглавлению>
DAVIS-Edit
Мы создаем DAVIS-Edit
следуя той же структуре данных, что и DAVIS
, как показано ниже:
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. Мы искренне благодарим авторов за их фантастические реализации.
<Вернуться к оглавлению>