Diffusers documentation
UNet2DConditionModel
UNet2DConditionModel
تم تقديم نموذج UNet في الأصل بواسطة Ronneberger et al. لتجزئة الصور الطبية الحيوية، لكنه يُستخدم أيضاً بشكل شائع في 🤗 Diffusers لأنه يُخرج صوراً بنفس حجم المدخلات. وهو أحد أهم مكونات نظام الانتشار لأنه ييسّر عملية الانتشار الفعلية. توجد عدة متغيرات لنموذج UNet في 🤗 Diffusers، اعتماداً على عدد أبعاده وعلى ما إذا كان نموذجاً شرطياً أم لا. هذا نموذج UNet شرطي ثنائي الأبعاد.
ملخص الورقة البحثية هو:
يوجد إجماع واسع على أن التدريب الناجح للشبكات العميقة يتطلب آلاف الأمثلة التدريبية المُعلَّمة. في هذه الورقة، نعرض شبكة واستراتيجية تدريب تعتمدان على الاستخدام القوي لزيادة البيانات لاستخدام الأمثلة المُعلَّمة المتاحة بكفاءة أكبر. تتكون البنية من مسار انكماشي لالتقاط السياق ومسار متوسع متماثل يمكّن من تحديد دقيق للمواقع. نُظهر أن مثل هذه الشبكة يمكن تدريبها من البداية إلى النهاية من عدد قليل جداً من الصور، وتتفوق على أفضل طريقة سابقة (شبكة تلافيفية بنافذة منزلقة) في تحدي ISBI لتجزئة الهياكل العصبية في المكدسات المجهرية الإلكترونية. وباستخدام نفس الشبكة المدرَّبة على صور المجهر الضوئي المنقول (تباين الطور وDIC)، فزنا بتحدي ISBI لتتبع الخلايا 2015 في هذه الفئات بفارق كبير. علاوة على ذلك، الشبكة سريعة. تستغرق تجزئة صورة 512x512 أقل من ثانية على وحدة معالجة رسومية حديثة. تتوفر التنفيذ الكامل (المبني على Caffe) والشبكات المدرَّبة على http://lmb.informatik.uni-freiburg.de/people/ronneber/u-net.
UNet2DConditionModel
فئة diffusers.UNet2DConditionModel
< source >( sample_size: int | tuple[int, int] | None = Nonein_channels: int = 4out_channels: int = 4center_input_sample: bool = Falseflip_sin_to_cos: bool = Truefreq_shift: int = 0down_block_types: tuple = ('CrossAttnDownBlock2D', 'CrossAttnDownBlock2D', 'CrossAttnDownBlock2D', 'DownBlock2D')mid_block_type: str | None = 'UNetMidBlock2DCrossAttn'up_block_types: tuple = ('UpBlock2D', 'CrossAttnUpBlock2D', 'CrossAttnUpBlock2D', 'CrossAttnUpBlock2D')only_cross_attention: bool | tuple[bool] = Falseblock_out_channels: tuple = (320, 640, 1280, 1280)layers_per_block: int | tuple[int] = 2downsample_padding: int = 1mid_block_scale_factor: float = 1dropout: float = 0.0act_fn: str = 'silu'norm_num_groups: int | None = 32norm_eps: float = 1e-05cross_attention_dim: int | tuple[int] = 1280transformer_layers_per_block: int | tuple[int] | tuple[tuple] = 1reverse_transformer_layers_per_block: tuple[tuple[int]] | None = Noneencoder_hid_dim: int | None = Noneencoder_hid_dim_type: str | None = Noneattention_head_dim: int | tuple[int] = 8num_attention_heads: int | tuple[int] | None = Nonedual_cross_attention: bool = Falseuse_linear_projection: bool = Falseclass_embed_type: str | None = Noneaddition_embed_type: str | None = Noneaddition_time_embed_dim: int | None = Nonenum_class_embeds: int | None = Noneupcast_attention: bool = Falseresnet_time_scale_shift: str = 'default'resnet_skip_time_act: bool = Falseresnet_out_scale_factor: float = 1.0time_embedding_type: str = 'positional'time_embedding_dim: int | None = Nonetime_embedding_act_fn: str | None = Nonetimestep_post_act: str | None = Nonetime_cond_proj_dim: int | None = Noneconv_in_kernel: int = 3conv_out_kernel: int = 3projection_class_embeddings_input_dim: int | None = Noneattention_type: str = 'default'class_embeddings_concat: bool = Falsemid_block_only_cross_attention: bool | None = Nonecross_attention_norm: str | None = Noneaddition_embed_type_num_heads: int = 64 )
المعاملات
- sample_size (
intأوtuple[int, int]، اختياري، القيمة الافتراضيةNone) — الارتفاع والعرض لعينة الإدخال/الإخراج. - in_channels (
int، اختياري، القيمة الافتراضية 4) — عدد القنوات في العينة المدخلة. - out_channels (
int، اختياري، القيمة الافتراضية 4) — عدد القنوات في المخرجات. - center_input_sample (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كان سيتم توسيط العينة المدخلة. - flip_sin_to_cos (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان يجب عكس sin إلى cos في تضمين الوقت. - freq_shift (
int، اختياري، القيمة الافتراضية 0) — إزاحة التردد التي تُطبَّق على تضمين الوقت. - down_block_types (
tuple[str]، اختياري، الافتراضي("CrossAttnDownBlock2D", "CrossAttnDownBlock2D", "CrossAttnDownBlock2D", "DownBlock2D")) — المجموعة المرتبة (tuple) من كتل التقليل (downsample) المراد استخدامها. - mid_block_type (
str، اختياري، القيمة الافتراضية"UNetMidBlock2DCrossAttn") — نوع الكتلة في منتصف UNet، يمكن أن يكون أحدUNetMidBlock2DCrossAttnأوUNetMidBlock2DأوUNetMidBlock2DSimpleCrossAttn. إذا كانتNone، يتم تجاوز طبقة الكتلة الوسطى. - up_block_types (
tuple[str]، اختياري، القيمة الافتراضية("UpBlock2D", "CrossAttnUpBlock2D", "CrossAttnUpBlock2D", "CrossAttnUpBlock2D")) — المجموعة المرتبة (tuple) من كتل إعادة التجميع (upsample blocks) التي سيتم استخدامها. - only_cross_attention(
boolortuple[bool], اختياري, الافتراضيFalse) — ما إذا كان يجب تضمين الانتباه الذاتي في كتل التحوّل الأساسية، راجعBasicTransformerBlock. - block_out_channels (
tuple[int]، اختياري، القيمة الافتراضية(320, 640, 1280, 1280)) — مجموعة قنوات الإخراج لكل كتلة. - layers_per_block (
int، اختياري، القيمة الافتراضية 2) — عدد الطبقات في كل كتلة. - downsample_padding (
int، اختياري، القيمة الافتراضية 1) — الحشو المستخدم لتحويل الاستيفاء النازل. - mid_block_scale_factor (
float، اختياري، القيمة الافتراضية 1.0) — معامل المقياس المستخدم للكتلة الوسطى. - dropout (
float, اختياري، القيمة الافتراضية 0.0) — احتمال dropout المستخدم. - act_fn (
str، اختياري، الافتراضي"silu") — دالة التنشيط المستخدمة. - norm_num_groups (
int، اختياري، القيمة الافتراضية 32) — عدد المجموعات المستخدمة للتطبيع. إذا كانتNone، يتم تجاوز طبقات التطبيع والتفعيل في المعالجة اللاحقة. - norm_eps (
float، اختياري، القيمة الافتراضية 1e-5) — قيمة الإيبسلون المستخدمة في عملية التطبيع. - cross_attention_dim (
intأوtuple[int]، اختياري، القيمة الافتراضية 1280) — بعد ميزات الانتباه المتقاطع. - transformer_layers_per_block (
int،tuple[int]، أوtuple[tuple]، اختياري، القيمة الافتراضية 1) — عدد كتل التحويل من نوعBasicTransformerBlock. لا ينطبق إلا علىCrossAttnDownBlock2D،CrossAttnUpBlock2D،UNetMidBlock2DCrossAttn. - reverse_transformer_layers_per_block — (
tuple[tuple]، اختياري، القيمة الافتراضية None): عدد كتل transformer من النوعBasicTransformerBlockفي كتل رفع العينات (upsampling) داخل U-Net. لا ينطبق إلا إذا كانtransformer_layers_per_blockمن النوعtuple[tuple]ولمكوناتCrossAttnDownBlock2D،CrossAttnUpBlock2D،UNetMidBlock2DCrossAttn. - encoder_hid_dim (
int، اختياري، القيمة الافتراضية None) — إذا تم تعريفencoder_hid_dim_type، فسيتم إسقاطencoder_hidden_statesمن بُعدencoder_hid_dimإلىcross_attention_dim. - encoder_hid_dim_type (
str، اختياري، القيمة الافتراضيةNone) — إذا تم تقديمه، تُخفَّض أبعادencoder_hidden_statesوالتضمينات الأخرى المحتملة إلى تضمينات نصية بأبعادcross_attentionوفقاً لـencoder_hid_dim_type. - attention_head_dim (
int، اختياري، القيمة الافتراضية 8) — بُعد رؤوس الانتباه. - num_attention_heads (
int، اختياري) — عدد رؤوس الانتباه. إذا لم يُعرَّف، يكون الافتراضيattention_head_dim - resnet_time_scale_shift (
str، اختياري، القيمة الافتراضية"default") — إعداد إزاحة مقياس الوقت لكتل ResNet (انظرResnetBlock2D). اختر من بينdefaultأوscale_shift. - class_embed_type (
str، اختياري، القيمة الافتراضيةNone) — نوع تضمين الفئة المستخدم، والذي يُجمع في النهاية مع تضمينات الوقت. اختر من بينNone،"timestep"،"identity"،"projection"، أو"simple_projection". - addition_embed_type (
str، اختياري، القيمة الافتراضيةNone) — يُهيّئ تضمينًا اختياريًا سيُجمع مع تضمينات الوقت. اختر من بينNoneأو “text”. سيستخدم “text” طبقةTextTimeEmbedding. - addition_time_embed_dim — (
int، اختياري، القيمة الافتراضيةNone): البُعد الخاص بتضمينات خطوة الزمن. - num_class_embeds (
int، اختياري، القيمة الافتراضيةNone) — بعد الإدخال لمصفوفة التضمين القابلة للتعلم التي سيتم إسقاطها إلىtime_embed_dim، عند تنفيذ التكييف حسب الفئة مع أنclass_embed_typeيساويNone. - time_embedding_type (
str، اختياري، الافتراضيpositional) — نوع تضمين الموضع المستخدم لخطوات الزمن. اختر من بينpositionalأوfourier. - time_embedding_dim (
int، اختياري، القيمة الافتراضيةNone) — قيمة اختيارية لتجاوز بُعد تضمين الوقت المُسقط. - time_embedding_act_fn (
str، اختياري، القيمة الافتراضيةNone) — دالة تفعيل اختيارية تُستخدم مرة واحدة فقط على تمثيلات الوقت قبل تمريرها إلى بقية UNet. اختر من بينsilu،mish،gelu، وswish. - timestep_post_act (
str، اختياري، القيمة الافتراضيةNone) — دالة التنشيط الثانية المستخدمة في تضمين خطوة الزمن. اختر من بينsiluوmishوgelu. - time_cond_proj_dim (
int، اختياري، القيمة الافتراضيةNone) — بعد طبقةcond_projفي تضمين خطوة الزمن. - conv_in_kernel (
int، اختياري، الافتراضي3) — حجم النواة لطبقةconv_in. - conv_out_kernel (
int، اختياري، الافتراضي3) — حجم النواة لطبقةconv_out. - projection_class_embeddings_input_dim (
int, اختياري) — بُعد مدخلclass_labelsعندما يكونclass_embed_type="projection". مطلوب عندما يكونclass_embed_type="projection". - class_embeddings_concat (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كان يجب دمج تمثيلات الوقت مع تمثيلات الفئة. - mid_block_only_cross_attention (
bool، اختياري، القيمة الافتراضيةNone) — ما إذا كان سيتم استخدام الانتباه المتقاطع مع الكتلة الوسطى عند استخدامUNetMidBlock2DSimpleCrossAttn. إذا تم تقديمonly_cross_attentionكقيمة منطقية واحدة وmid_block_only_cross_attentionهيNone، فسيتم استخدام قيمةonly_cross_attentionكقيمة لـmid_block_only_cross_attention. وإلا فستكون القيمة الافتراضيةFalse.
نموذج UNet ثنائي الأبعاد مشروط يستقبل عينة ضجيجية، وحالة شرطية، وخطوة زمنية، ويعيد مخرجات على شكل العينة.
يرث هذا النموذج من ModelMixin. راجع توثيق الفئة الأصلية لمعرفة طرقه العامة المُنفَّذة لجميع النماذج (مثل التنزيل أو الحفظ).
يعطّل آلية FreeU.
enable_freeu
< source >( s1: floats2: floatb1: floatb2: float )
المعاملات
- s1 (
float) — معامل التوسيع للمرحلة 1 لتخفيف مساهمات ميزات التخطي. يتم ذلك للتخفيف من “تأثير الإفراط في التنعيم” في عملية إزالة الضوضاء المعززة. - s2 (
float) — معامل التوسيع للمرحلة 2 لتخفيف مساهمات ميزات التخطي. يتم ذلك للتخفيف من “تأثير الإفراط في التنعيم” في عملية إزالة الضوضاء المعززة. - b1 (
float) — معامل التوسيع للمرحلة 1 لتضخيم مساهمات ميزات الهيكل الأساسي. - b2 (
float) — معامل التوسيع للمرحلة 2 لتضخيم مساهمات ميزات الهيكل الأساسي.
يُفعّل آلية FreeU من https://huggingface.co/papers/2309.11497.
تمثل البادئات التي تلي معاملات التوسيع كتل المراحل التي تُطبَّق فيها.
يرجى الرجوع إلى المستودع الرسمي للاطلاع على مجموعات القيم التي يُعرف أنها تعمل بشكل جيد مع خطوط أنابيب مختلفة مثل Stable Diffusion v1 وv2 وStable Diffusion XL.
forward
< source >( sample: Tensortimestep: typing.Union[torch.Tensor, float, int]encoder_hidden_states: Tensorclass_labels: typing.Optional[torch.Tensor] = Nonetimestep_cond: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Nonecross_attention_kwargs: dict[str, typing.Any] | None = Noneadded_cond_kwargs: dict[str, torch.Tensor] | None = Nonedown_block_additional_residuals: tuple[torch.Tensor] | None = Nonemid_block_additional_residual: typing.Optional[torch.Tensor] = Nonedown_intrablock_additional_residuals: tuple[torch.Tensor] | None = Noneencoder_attention_mask: typing.Optional[torch.Tensor] = Nonereturn_dict: bool = True ) → UNet2DConditionOutput or tuple
المعاملات
- sample (
torch.Tensor) — مصفوفة الإدخال الضوضائية ذات الشكل التالي(batch, channel, height, width). - timestep (
torch.Tensorأوfloatأوint) — عدد خطوات الزمن لإزالة الضوضاء من مدخل. - encoder_hidden_states (
torch.Tensor) — حالات المُشفِّر المخفية (encoder hidden states) ذات الشكل(batch, sequence_length, feature_dim). - class_labels (
torch.Tensor، اختياري، القيمة الافتراضيةNone) — تسميات فئات اختيارية للشروط. سيتم جمع تمثيلاتها مع تمثيلات خطوة الزمن. - timestep_cond — (
torch.Tensor، اختياري، القيمة الافتراضيةNone): تضمينات شرطية لخطوة الزمن. إذا تم توفيرها، سيتم جمع التضمينات مع العينات المارة عبر طبقةself.time_embeddingللحصول على تضمينات خطوة الزمن. - attention_mask (
torch.Tensor، اختياري، القيمة الافتراضيةNone) — يُطبَّق قناع انتباه (attention mask) بأبعاد(batch, key_tokens)علىencoder_hidden_states. إذا كانت القيمة1يُحفظ القناع، وإلا إذا كانت0يُستبعد. يُحوَّل القناع إلى انحياز (bias) يضيف قيمًا سالبة كبيرة إلى درجات الانتباه المقابلة لرموز “الاستبعاد”. - cross_attention_kwargs (
dict، اختياري) — قاموس kwargs يُمرَّر إلىAttentionProcessorكما هو معرَّف تحتself.processorفي diffusers.models.attention_processor إذا تمَّ تحديده. - added_cond_kwargs — (
dict، اختياري): قاموس kwargs يحتوي على تضمينات إضافية، وإذا تم تحديدها تُضاف إلى التضمينات التي تُمرَّر إلى كتل UNet. - down_block_additional_residuals — (
tupleمنtorch.Tensor، اختياري): مجموعة من المصفوفات (tensors) التي إذا تم تحديدها، تُضاف إلى بقايا (residuals) كتل unet السفلية. - mid_block_additional_residual — (
torch.Tensor, اختياري): متجه يُضاف إلى الباقي (residual) في كتلة unet الوسطى إذا تم تحديده. - down_intrablock_additional_residuals (
tupleمنtorch.Tensor، اختياري) — بقايا إضافية تُضاف داخل كتل UNet السفلية، على سبيل المثال من نموذج أو نماذج جانبية لـ T2I-Adapter - encoder_attention_mask (
torch.Tensor) — قناع انتباه متقاطع (cross-attention mask) بأبعاد(batch, sequence_length)يُطبَّق علىencoder_hidden_states. إذا كانTrueيُحافظ على القناع، أما إذا كانFalseفيُستبعد. يُحوَّل القناع إلى انحياز (bias) يضيف قيمًا سالبة كبيرة إلى درجات الانتباه المقابلة لرموز “الاستبعاد”. - return_dict (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان يجب إرجاع UNet2DConditionOutput بدلاً من tuple عادي.
يعيد
UNet2DConditionOutput أو tuple
إذا كان return_dict هو True، يُعاد UNet2DConditionOutput،
وإلا يُعاد tuple يكون عنصره الأول هو متجه العينة.
طريقة UNet2DConditionModel الأمامية.
set_attention_slice
< source >( slice_size: str | int | list[int] = 'auto' )
المعاملات
- slice_size (
strأوintأوlist(int)، اختياري، القيمة الافتراضية"auto") — عندما تكون القيمة"auto"، يتم تقسيم مدخلات رؤوس الانتباه إلى نصفين، بحيث يُحسب الانتباه في خطوتين. أما إذا كانت"max"، فيتم توفير أقصى قدر من الذاكرة من خلال تشغيل شريحة واحدة في كل مرة. وإذا تم تقديم رقم، يتم استخدام عدد من الشرائح يساويattention_head_dim // slice_size. في هذه الحالة، يجب أن يكونattention_head_dimمضاعفًا لـslice_size.
تفعيل حساب الانتباه المقطّع.
عند تمكين هذا الخيار، يقسم وحدة الانتباه (attention module) المصفوفة المدخلة إلى شرائح لحساب الانتباه على عدة خطوات. وهذا مفيد لتوفير بعض الذاكرة مقابل انخفاض طفيف في السرعة.
يعطّل معالجات الانتباه المخصصة ويضبط تطبيق الانتباه الافتراضي.
يعطّل إسقاط QKV المدمج إذا كان مفعّلًا.
> هذه الواجهة البرمجية 🧪 تجريبية.
UNet2DConditionOutput
فئة diffusers.models.unets.unet_2d_condition.UNet2DConditionOutput
< source >( sample: Tensor = None )
مخرجات UNet2DConditionModel.