Diffusers documentation
Stable Video Diffusion
Stable Video Diffusion
قُدم Stable Video Diffusion في Stable Video Diffusion: Scaling Latent Video Diffusion Models to Large Datasets بواسطة Andreas Blattmann وTim Dockhorn وSumith Kulal وDaniel Mendelevitch وMaciej Kilian وDominik Lorenz وYam Levi وZion English وVikram Voleti وAdam Letts وVarun Jampani وRobin Rombach.
ملخص الورقة البحثية هو:
نقدّم Stable Video Diffusion - وهو نموذج انتشار فيديو كامن لتوليد فيديو عالي الدقة من نص إلى فيديو ومن صورة إلى فيديو بأداء متقدم. مؤخراً، تم تحويل نماذج الانتشار الكامنة المدرّبة على تركيب الصور ثنائية الأبعاد إلى نماذج فيديو توليدية عن طريق إدراج طبقات زمنية وضبطها الدقيق على مجموعات بيانات فيديو صغيرة عالية الجودة. ومع ذلك، تتفاوت طرق التدريب في الأدبيات بشكل كبير، ولم يتفق المجال بعد على استراتيجية موحدة لتجهيز بيانات الفيديو. في هذه الورقة، نحدد ونقيّم ثلاث مراحل مختلفة للتدريب الناجح لنماذج LDM للفيديو: التدريب المسبق من نص إلى صورة، والتدريب المسبق للفيديو، والضبط الدقيق على فيديو عالي الجودة. علاوة على ذلك، نوضح ضرورة وجود مجموعة بيانات تدريب مسبق مُجهزة جيداً لتوليد فيديوهات عالية الجودة، ونقدّم عملية تجهيز منهجية لتدريب نموذج أساسي قوي، تشمل استراتيجيات التسمية والتصفية. ثم نستكشف تأثير الضبط الدقيق لنموذجنا الأساسي على بيانات عالية الجودة، وندرّب نموذجاً لتوليد الفيديو من نص يكون تنافسياً مع توليد الفيديو المغلق المصدر. كما نوضح أن نموذجنا الأساسي يوفر تمثيلاً حركياً قوياً للمهام اللاحقة مثل توليد الفيديو من صورة، وقابلية للتكيف مع وحدات LoRA المحددة لحركة الكاميرا. أخيراً، نثبت أن نموذجنا يوفر مسبقاً ثلاثي الأبعاد متعدد الزوايا قوياً، ويمكن أن يعمل كقاعدة لضبط نموذج انتشار متعدد الزوايا بدقة، يولّد عدة زوايا للكائنات بشكل متقدم، متفوقاً على الطرق القائمة على الصور بميزانية حسابية أقل بكثير. ننشر الكود وأوزان النموذج في هذا الرابط.
اطّلع على منظمة Stability AI على Hub للحصول على نقاط التفتيش base وextended frame!
تأكد من تثبيت المكتبات التالية.
# Uncomment to install the necessary libraries in Colab
!pip install -q -U diffusers transformers accelerateيوجد نوعان من هذا النموذج، هما SVD وSVD-XT. تم تدريب نقطة التفتيش SVD لتوليد 14 إطارًا، بينما خضعت نقطة التفتيش SVD-XT لضبط إضافي لتوليد 25 إطارًا.
ستستخدم نقطة التفتيش SVD-XT لهذا الدليل.
import torch
from diffusers import StableVideoDiffusionPipeline
from diffusers.utils import load_image, export_to_video
pipe = StableVideoDiffusionPipeline.from_pretrained(
"stabilityai/stable-video-diffusion-img2vid-xt", dtype=torch.float16, variant="fp16"
)
pipe.enable_model_cpu_offload()
# Load the conditioning image
image = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/svd/rocket.png")
image = image.resize((1024, 576))
generator = torch.manual_seed(42)
frames = pipe(image, decode_chunk_size=8, generator=generator).frames[0]
export_to_video(frames, "generated.mp4", fps=7)
torch.compile
يمكنك تحقيق تسريع بنسبة 20-25% مقابل زيادة طفيفة في الذاكرة من خلال تجميع UNet.
- pipe.enable_model_cpu_offload()
+ pipe.to("cuda") # or "mps", "xpu", "cpu"
+ pipe.unet = torch.compile(pipe.unet, mode="reduce-overhead", fullgraph=True)تقليل استهلاك الذاكرة
تتطلب توليد الفيديو ذاكرة كبيرة جداً لأنك في الأساس تولّد num_frames دفعة واحدة، على غرار توليد الصور من النص مع حجم دفعة عالٍ. لتقليل متطلبات الذاكرة، هناك عدة خيارات تقوم بتضحية بسرعة الاستدلال مقابل تقليل متطلبات الذاكرة:
- تفعيل نقل النموذج: يتم نقل كل مكوّن من مكوّنات خط المعالجة إلى وحدة المعالجة المركزية (CPU) بمجرد انتهاء الحاجة إليه.
- تفعيل تقطيع الطبقة الأمامية: تعمل طبقة الأمامية في حلقة بدلاً من تنفيذ عملية أمامية واحدة بحجم دفعة ضخم.
- تقليل
decode_chunk_size: يقوم VAE بفك ترميز الإطارات على شكل مجموعات بدلاً من فك ترميزها جميعاً معاً. عند ضبطdecode_chunk_size=1يتم فك ترميز إطار واحد في كل مرة ويستخدم أقل قدر من الذاكرة (ننصح بضبط هذه القيمة بناءً على ذاكرة وحدة معالجة الرسوميات لديك) لكن قد يعاني الفيديو من بعض الوميض.
- pipe.enable_model_cpu_offload()
- frames = pipe(image, decode_chunk_size=8, generator=generator).frames[0]
+ pipe.enable_model_cpu_offload()
+ pipe.unet.enable_forward_chunking()
+ frames = pipe(image, decode_chunk_size=2, generator=generator, num_frames=25).frames[0]يجب أن يؤدي استخدام جميع هذه الحيل معًا إلى خفض متطلبات الذاكرة إلى أقل من 8 جيجابايت من ذاكرة الفيديو (VRAM).
التكييف الدقيق
يقبل Stable Diffusion Video أيضًا التكييف الدقيق (micro-conditioning)، بالإضافة إلى صورة التكييف، مما يتيح مزيدًا من التحكم في الفيديو المولّد:
fps: عدد الإطارات في الثانية للفيديو المولّد.motion_bucket_id: معرّف دلو الحركة الذي سيُستخدم للفيديو المولّد. يمكن استخدام هذا المعرّف للتحكم في حركة الفيديو المولّد. فزيادة معرّف دلو الحركة تزيد من حركة الفيديو المولّد.noise_aug_strength: مقدار الضوضاء المضافة إلى صورة التكييف. كلما ارتفعت القيم قلّت تشابه الصورة الناتجة مع صورة التكييف. كما يؤدي رفع هذه القيمة إلى زيادة الحركة في الفيديو المولّد.
على سبيل المثال، لتوليد فيديو يحتوي على حركة أكثر، استخدم معاملات التكييف الدقيق motion_bucket_id وnoise_aug_strength:
import torch
from diffusers import StableVideoDiffusionPipeline
from diffusers.utils import load_image, export_to_video
pipe = StableVideoDiffusionPipeline.from_pretrained(
"stabilityai/stable-video-diffusion-img2vid-xt", dtype=torch.float16, variant="fp16"
)
pipe.enable_model_cpu_offload()
# Load the conditioning image
image = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/svd/rocket.png")
image = image.resize((1024, 576))
generator = torch.manual_seed(42)
frames = pipe(image, decode_chunk_size=8, generator=generator, motion_bucket_id=180, noise_aug_strength=0.1).frames[0]
export_to_video(frames, "generated.mp4", fps=7)
StableVideoDiffusionPipeline
فئة diffusers.StableVideoDiffusionPipeline
< source >( vae: AutoencoderKLTemporalDecoderimage_encoder: CLIPVisionModelWithProjectionunet: UNetSpatioTemporalConditionModelscheduler: EulerDiscreteSchedulerfeature_extractor: CLIPImageProcessorPil )
المعاملات
- vae (
AutoencoderKLTemporalDecoder) — نموذج الترميز التحويلي التلقائي (VAE) لتشفير الصور وفك تشفيرها إلى التمثيلات الكامنة ومنها. - image_encoder (CLIPVisionModelWithProjection) — مُشفِّر صور CLIP مجمّد (laion/CLIP-ViT-H-14-laion2B-s32B-b79K).
- unet (
UNetSpatioTemporalConditionModel) — نموذجUNetSpatioTemporalConditionModelلإزالة الضوضاء من كامنات الصورة المُرمّزة. - scheduler (EulerDiscreteScheduler) —
جدول زمني يُستخدم بالاقتران مع
unetلإزالة الضوضاء من الكامنات المُرمّزة للصورة. - feature_extractor (CLIPImageProcessor) —
معالج
CLIPImageProcessorلاستخراج الميزات من الصور المولّدة.
خط أنابيب لتوليد فيديو من صورة مدخلة باستخدام Stable Video Diffusion.
يرث هذا النموذج من DiffusionPipeline. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة المُنفَّذة لجميع خطوط الأنابيب (التنزيل، الحفظ، التشغيل على جهاز معين، إلخ).
StableVideoDiffusionPipelineOutput
فئة diffusers.pipelines.stable_video_diffusion.StableVideoDiffusionPipelineOutput
< source >( frames: typing.Union[list[list[PIL.Image.Image]], numpy.ndarray, torch.Tensor] )
فئة الإخراج لخط أنابيب Stable Video Diffusion.