تشانغ ليو، روي لي، كايدونغ تشانغ، يونوي لان، دونغ ليو
[ 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
إذا كانت لديك أي أسئلة حول هذا العمل، فلا تتردد في بدء إصدار جديد أو اقتراح علاقات عامة.
StableV2V
يقدم StableV2V
نموذجًا جديدًا لإجراء تحرير الفيديو بطريقة متسقة مع الشكل، وخاصة التعامل مع سيناريوهات التحرير عندما تتسبب مطالبات المستخدم في حدوث تغييرات كبيرة في الشكل للمحتويات المحررة. علاوة على ذلك، يُظهر StableV2V
مرونة فائقة في التعامل مع سلسلة واسعة من التطبيقات النهائية، مع الأخذ في الاعتبار مطالبات المستخدم المختلفة من طرائق مختلفة.
<العودة إلى جدول المحتويات>
DAVIS-Edit
إلى ModelScope.StableV2V
، مع الرسوم التوضيحية التفصيلية المقدمة في هذا القسم.DAVIS-Edit
إلى موقع Wisemodel.cn.DAVIS-Edit
إلى مستودع مجموعة بيانات HuggingFace الخاص بنا، وقمنا بتحميل جميع أوزان النماذج المطلوبة لـ StableV2V
إلى مستودع نموذج HuggingFace الخاص بنا.StableV2V
DAVIS-Edit
إلى HuggingFace repo الخاص بنا StableV2V
إلى HuggingFace repo الخاص بنا <العودة إلى جدول المحتويات>
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 |
InstructPix2Pix | PFE | timbrooks/instruct-pix2pix |
إس دي إنبينت | PFE | botp/stable-diffusion-v1-5-inpainting |
كونترول نت + إس دي إنباينت | PFE | نماذج ControlNet في lllyasviel |
AnyDoor | PFE | xichenhku/AnyDoor |
طوف | عيسى | Google Drive |
MiDaS | عيسى | Link |
U2-نت | عيسى | Link |
شبكة تحسين العمق | عيسى | Link |
SD v1.5 | سيج | stable-diffusion-v1-5/stable-diffusion-v1-5 |
شبكة التحكم (العمق) | سيج | lllyasviel/control_v11f1p_sd15_depth |
السيطرة على محول | سيج | hanlincs/Ctrl-Adapter ( i2vgenxl_depth ) |
I2VGen-XL | سيج | ali-vilab/i2vgen-xl |
بعد تنزيل كافة أوزان النماذج، قم بوضعها في مجلد checkpoints
.
ملحوظة
إذا كان بإمكان بيئة شبكتك الوصول إلى HuggingFace، فيمكنك استخدام معرف HuggingFace repo مباشرةً لتنزيل النماذج. بخلاف ذلك، ننصحك بشدة بتحضير أوزان النموذج محليًا.
على وجه التحديد، تأكد من تعديل ملف التكوين الخاص بـ 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، المطلوب بواسطة 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 | 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) نقدم أيضًا عرضًا تجريبيًا متدرجًا لتجربة StableV2V
من خلال واجهة المستخدم التفاعلية. قبل أن تذهب، ننصحك باتباع الإرشادات الواردة في هذا القسم لإعداد جميع أوزان النماذج المطلوبة محليًا (في المجلد ./checkpoints
). وبعد ذلك، لا تتردد في اختباره بمجرد تشغيل:
python app.py
في الشكل التالي، نوضح وظائف الوحدات المختلفة في عرض Gradio الخاص بنا:
من فضلك لا تتردد في بدء إصدار جديد أو اقتراح علاقات عامة إذا كان لديك أي أسئلة أخرى حول العرض التوضيحي.
<العودة إلى جدول المحتويات>
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. ونحن نشكر المؤلفين بصدق على تطبيقاتهم الخيالية.
<العودة إلى جدول المحتويات>