Diffusers documentation
SparseControlNetModel
SparseControlNetModel
SparseControlNetModel هو تطبيق لـ ControlNet مخصص لـ AnimateDiff.
تم تقديم ControlNet في Adding Conditional Control to Text-to-Image Diffusion Models بواسطة Lvmin Zhang وAnyi Rao وManeesh Agrawala.
طُرِح إصدار SparseCtrl من ControlNet في SparseCtrl: Adding Sparse Controls to Text-to-Video Diffusion Models لتحقيق التوليد المُتحكَّم به في نماذج الانتشار من النص إلى الفيديو، وذلك من قِبل Yuwei Guo وCeyuan Yang وAnyi Rao وManeesh Agrawala وDahua Lin وBo Dai.
ملخص الورقة البحثية هو:
شهد تطوير النماذج التحويلية من النص إلى الفيديو (T2V)، أي توليد مقاطع فيديو بناءً على موجه نصي معيّن، تقدّمًا كبيرًا في السنوات الأخيرة. ومع ذلك، فإن الاعتماد حصريًا على الموجهات النصية غالبًا ما يؤدي إلى تكوين غامض للإطارات بسبب عدم اليقين المكاني. لذا، يستفيد مجتمع البحث من إشارات البنية الكثيفة، مثل تسلسلات العمق/الحواف لكل إطار، لتعزيز قابلية التحكم، مما يزيد بدوره من عبء الاستدلال. في هذا العمل، نقدّم SparseCtrl لتمكين التحكم المرن في البنية باستخدام إشارات متفرقة زمنيًا، حيث يتطلب الأمر إدخالًا واحدًا أو بضعة إدخالات فقط، كما هو موضح في الشكل 1. يتضمن هذا النموذج مشفّرًا إضافيًا للشروط لمعالجة هذه الإشارات المتفرقة مع إبقاء نموذج T2V المُدرَّب مسبقًا دون أي تعديل. يتوافق النهج المقترح مع أوضاع متعددة، بما في ذلك الرسومات التوضيحية، وخرائط العمق، والصور RGB، مما يوفر تحكمًا أكثر عملية في توليد الفيديو ويدفع تطبيقات مثل تخطيط اللوحات، وعرض العمق، وتحريك الإطارات المفتاحية، والاستيفاء. تُظهر التجارب الواسعة تعميم SparseCtrl على مولّدات T2V الأصلية والمخصصة على حد سواء. ستكون الأكواد والنماذج متاحة علنًا في هذا الرابط.
مثال على تحميل SparseControlNetModel
import torch
from diffusers import SparseControlNetModel
# fp32 variant in float16
# 1. Scribble checkpoint
controlnet = SparseControlNetModel.from_pretrained("guoyww/animatediff-sparsectrl-scribble", dtype=torch.float16)
# 2. RGB checkpoint
controlnet = SparseControlNetModel.from_pretrained("guoyww/animatediff-sparsectrl-rgb", dtype=torch.float16)
# For loading fp16 variant, pass `variant="fp16"` as an additional parameterSparseControlNetModel
فئة diffusers.SparseControlNetModel
< source >( in_channels: int = 4conditioning_channels: int = 4flip_sin_to_cos: bool = Truefreq_shift: int = 0down_block_types: tuple[str, ...] = ('CrossAttnDownBlockMotion', 'CrossAttnDownBlockMotion', 'CrossAttnDownBlockMotion', 'DownBlockMotion')only_cross_attention: bool | tuple[bool] = Falseblock_out_channels: tuple[int, ...] = (320, 640, 1280, 1280)layers_per_block: int = 2downsample_padding: int = 1mid_block_scale_factor: float = 1act_fn: str = 'silu'norm_num_groups: int | None = 32norm_eps: float = 1e-05cross_attention_dim: int = 768transformer_layers_per_block: int | tuple[int, ...] = 1transformer_layers_per_mid_block: int | tuple[int] | None = Nonetemporal_transformer_layers_per_block: int | tuple[int, ...] = 1attention_head_dim: int | tuple[int, ...] = 8num_attention_heads: int | tuple[int, ...] | None = Noneuse_linear_projection: bool = Falseupcast_attention: bool = Falseresnet_time_scale_shift: str = 'default'conditioning_embedding_out_channels: tuple[int, ...] | None = (16, 32, 96, 256)global_pool_conditions: bool = Falsecontrolnet_conditioning_channel_order: str = 'rgb'motion_max_seq_length: int = 32motion_num_attention_heads: int = 8concat_conditioning_mask: bool = Trueuse_simplified_condition_embedding: bool = True )
المعاملات
- in_channels (
int، القيمة الافتراضية 4) — عدد القنوات في العينة المدخلة. - conditioning_channels (
int، القيمة الافتراضية 4) — عدد قنوات الإدخال في وحدة التضمين الشرطي لـ controlnet. إذا كانت قيمةconcat_condition_embeddingهي True، فإن القيمة المُدخلة هنا تزداد بمقدار 1. - flip_sin_to_cos (
bool، القيمة الافتراضيةTrue) — ما إذا كان يجب عكس sin إلى cos في تضمين الوقت. - freq_shift (
int، القيمة الافتراضية 0) — إزاحة التردد التي تُطبَّق على تضمين الزمن. - down_block_types (
tuple[str]، الافتراضي("CrossAttnDownBlock2D", "CrossAttnDownBlock2D", "CrossAttnDownBlock2D", "DownBlock2D")) — المجموعة المرتبة (tuple) من كتل التقليل (downsample) المستخدمة. - only_cross_attention (
bool | tuple[bool]، القيمة الافتراضيةFalse) — - block_out_channels (
tuple[int]، القيمة الافتراضية(320, 640, 1280, 1280)) — مجموعة قنوات الإخراج لكل كتلة. - layers_per_block (
int، القيمة الافتراضية 2) — عدد الطبقات في كل كتلة. - downsample_padding (
int، القيمة الافتراضية 1) — الحشو المستخدم لتحويل الاستيفاء النازل. - mid_block_scale_factor (
float، القيمة الافتراضية 1) — معامل المقياس المستخدم للكتلة الوسطى. - act_fn (
str، القيمة الافتراضية “silu”) — دالة التنشيط المستخدمة. - norm_num_groups (
int, اختياري، القيمة الافتراضية 32) — عدد المجموعات المستخدمة للتطبيع. إذا كانت القيمة None، يتم تجاوز طبقات التطبيع والتفعيل في المعالجة اللاحقة. - norm_eps (
float، القيمة الافتراضية 1e-5) — قيمة الإيبسلون المستخدمة في عملية التطبيع. - cross_attention_dim (
int، القيمة الافتراضية 1280) — بعد ميزات الانتباه المتقاطع. - transformer_layers_per_block (
intأوtuple[int]، اختياري، القيمة الافتراضية 1) — عدد كتل الترانسفورمر من النوعBasicTransformerBlock. ذو صلة فقط بـ~models.unet_2d_blocks.CrossAttnDownBlock2D،~models.unet_2d_blocks.CrossAttnUpBlock2D،~models.unet_2d_blocks.UNetMidBlock2DCrossAttn. - transformer_layers_per_mid_block (
intأوtuple[int]، اختياري، القيمة الافتراضية 1) — عدد طبقات الترانسفورمر المستخدمة في كل طبقة داخل الكتلة الوسطى. - attention_head_dim (
intأوtuple[int]، القيمة الافتراضية 8) — بعد رؤوس الانتباه. - num_attention_heads (
intأوtuple[int]، اختياري) — عدد الرؤوس المستخدمة في الانتباه متعدد الرؤوس. - use_linear_projection (
bool، القيمة الافتراضيةFalse) — - upcast_attention (
bool، القيمة الافتراضيةFalse) — - resnet_time_scale_shift (
str) — إعدادات إزاحة مقياس الوقت لكتل ResNet (انظرResnetBlock2D). القيمة الافتراضية"default". اختر من بينdefaultأوscale_shift. - conditioning_embedding_out_channels (
tuple[int]، القيمة الافتراضية(16, 32, 96, 256)) — مجموعة قنوات الإخراج لكل كتلة في طبقةconditioning_embedding. - global_pool_conditions (
bool، القيمة الافتراضيةFalse) — TODO(Patrick) - معامل غير مستخدم - controlnet_conditioning_channel_order (
str، القيمة الافتراضيةrgb) — - motion_max_seq_length (
int، القيمة الافتراضية32) — أقصى طول تسلسل يُستخدم في وحدة الحركة. - motion_num_attention_heads (
intأوtuple[int]، القيمة الافتراضية8) — عدد الرؤوس المستخدمة في كل طبقة انتباه من طبقات وحدة الحركة. - concat_conditioning_mask (
bool، القيمة الافتراضيةTrue) — - use_simplified_condition_embedding (
bool، القيمة الافتراضيةTrue) —
نموذج SparseControlNet كما هو موصوف في SparseCtrl: Adding Sparse Controls to Text-to-Video Diffusion Models.
forward
< source >( sample: Tensortimestep: typing.Union[torch.Tensor, float, int]encoder_hidden_states: Tensorcontrolnet_cond: Tensorconditioning_scale: float = 1.0timestep_cond: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Nonecross_attention_kwargs: dict[str, typing.Any] | None = Noneconditioning_mask: typing.Optional[torch.Tensor] = Noneguess_mode: bool = Falsereturn_dict: bool = True ) → ~models.controlnet.ControlNetOutput or tuple
المعاملات
- sample (
torch.Tensor) — مصفوفة الإدخال الضجيج. - timestep (
torch.Tensor | float | int) — عدد خطوات الزمن (timesteps) لإزالة الضوضاء من مدخل. - encoder_hidden_states (
torch.Tensor) — حالات المُشفِّر المخفية. - controlnet_cond (
torch.Tensor) — مصفوفة الإدخال الشرطية ذات الشكل(batch_size, sequence_length, hidden_size). - conditioning_scale (
float، القيمة الافتراضية1.0) — معامل المقياس لمخرجات ControlNet. - timestep_cond (
torch.Tensor، اختياري، القيمة الافتراضيةNone) — تضمينات شرطية إضافية لخطوة الزمن. إذا تم توفيرها، سيتم جمع التضمينات مع timestep_embedding المُمررة عبر طبقةself.time_embeddingللحصول على تضمينات خطوة الزمن النهائية. - attention_mask (
torch.Tensor، اختياري، القيمة الافتراضيةNone) — يُطبَّق قناع انتباه (attention mask) بأبعاد(batch, key_tokens)علىencoder_hidden_states. إذا كانت القيمة1يُحفظ القناع، وإلا إذا كانت0يُستبعد. يُحوَّل القناع إلى انحياز (bias) يضيف قيمًا سالبة كبيرة إلى درجات الانتباه المقابلة لرموز “الاستبعاد”. - conditioning_mask (
torch.Tensor، اختياري، القيمة الافتراضيةNone) — قناع اختياري يحدد أي الإطارات فيcontrolnet_condهي إطارات تكييف صالحة. - cross_attention_kwargs (
dict[str]، اختياري، القيمة الافتراضيةNone) — قاموس kwargs يُمرَّر إلىAttnProcessorإذا تم تحديده. - guess_mode (
bool، القيمة الافتراضيةFalse) — في هذا الوضع، يحاول مُشفِّر ControlNet بأقصى قدراته التعرف على محتوى الإدخال حتى إذا قمت بإزالة جميع الأوامر النصية. يُوصى باستخدام قيمةguidance_scaleبين 3.0 و5.0. - return_dict (
bool، القيمة الافتراضيةTrue) — ما إذا كان يجب إرجاع~models.controlnet.ControlNetOutputبدلاً من tuple عادي.
يعيد
~models.controlnet.ControlNetOutput أو tuple
إذا كان return_dict هو True، يُعاد ~models.controlnet.ControlNetOutput، وإلا يُعاد tuple حيث يكون العنصر الأول هو tensor العينة.
طريقة SparseControlNetModel الأمامية.
from_unet
< source >( unet: UNet2DConditionModelcontrolnet_conditioning_channel_order: str = 'rgb'conditioning_embedding_out_channels: tuple[int, ...] | None = (16, 32, 96, 256)load_weights_from_unet: bool = Trueconditioning_channels: int = 3 )
المعاملات
- unet (
UNet2DConditionModel) — أوزان نموذج UNet التي سيتم نسخها إلى SparseControlNetModel. كما يتم نسخ جميع خيارات الإعداد حيثما كان ذلك ممكنًا.
أنشئ نموذج SparseControlNetModel من UNet2DConditionModel.
set_attention_slice
< source >( slice_size: str | int | list[int] )
المعاملات
- slice_size (
strأوintأوlist(int)، اختياري، القيمة الافتراضية"auto") — عندما تكون القيمة"auto"، يتم تقسيم مدخلات رؤوس الانتباه إلى نصفين، بحيث يُحسب الانتباه في خطوتين. أما إذا كانت"max"، فيتم توفير أقصى قدر من الذاكرة من خلال تشغيل شريحة واحدة في كل مرة. وإذا تم تقديم رقم، يتم استخدام عدد من الشرائح يساويattention_head_dim // slice_size. في هذه الحالة، يجب أن يكونattention_head_dimمضاعفًا لـslice_size.
تفعيل حساب الانتباه المقطّع.
عند تمكين هذا الخيار، يقسم وحدة الانتباه (attention module) المصفوفة المدخلة إلى شرائح لحساب الانتباه على عدة خطوات. وهذا مفيد لتوفير بعض الذاكرة مقابل انخفاض طفيف في السرعة.
يعطّل معالجات الانتباه المخصصة ويضبط تطبيق الانتباه الافتراضي.
SparseControlNetOutput
فئة diffusers.models.controlnets.SparseControlNetOutput
< source >( down_block_res_samples: tuple[torch.Tensor]mid_block_res_sample: Tensor )
المعاملات
- down_block_res_samples (
tuple[torch.Tensor]) — مجموعة (tuple) من تنشيطات التقليل (downsample) عند دقات مختلفة لكل كتلة تقليل. يجب أن يكون شكل كل متجه(batch_size, channel * resolution, height //resolution, width // resolution). يمكن استخدام المخرجات لتكييف تنشيطات التقليل الأصلية في UNet. - mid_down_block_re_sample (
torch.Tensor) — تفعيل الكتلة الوسطى (أدنى دقة عينة). يجب أن يكون شكل كل متجه(batch_size, channel * lowest_resolution, height // lowest_resolution, width // lowest_resolution). يمكن استخدام المخرجات لتكييف تفعيل الكتلة الوسطى في UNet الأصلية.
المخرجات الخاصة بـ SparseControlNetModel.