Buckets:
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]]
diffusers.UNet2DConditionModel[[diffusers.UNet2DConditionModel]]
diffusers.UNet2DConditionModel(sample_size: int | tuple[int, int] | None = None, in_channels: int = 4, out_channels: int = 4, center_input_sample: bool = False, flip_sin_to_cos: bool = True, freq_shift: int = 0, down_block_types: tuple[str, ...] = ('CrossAttnDownBlock2D', 'CrossAttnDownBlock2D', 'CrossAttnDownBlock2D', 'DownBlock2D'), mid_block_type: str | None = 'UNetMidBlock2DCrossAttn', up_block_types: tuple[str, ...] = ('UpBlock2D', 'CrossAttnUpBlock2D', 'CrossAttnUpBlock2D', 'CrossAttnUpBlock2D'), only_cross_attention: bool | tuple[bool] = False, block_out_channels: tuple[int, ...] = (320, 640, 1280, 1280), layers_per_block: int | tuple[int] = 2, downsample_padding: int = 1, mid_block_scale_factor: float = 1, dropout: float = 0.0, act_fn: str = 'silu', norm_num_groups: int | None = 32, norm_eps: float = 1e-05, cross_attention_dim: int | tuple[int] = 1280, transformer_layers_per_block: int | tuple[int] | tuple[tuple] = 1, reverse_transformer_layers_per_block: tuple[tuple[int]] | None = None, encoder_hid_dim: int | None = None, encoder_hid_dim_type: str | None = None, attention_head_dim: int | tuple[int] = 8, num_attention_heads: int | tuple[int] | None = None, dual_cross_attention: bool = False, use_linear_projection: bool = False, class_embed_type: str | None = None, addition_embed_type: str | None = None, addition_time_embed_dim: int | None = None, num_class_embeds: int | None = None, upcast_attention: bool = False, resnet_time_scale_shift: str = 'default', resnet_skip_time_act: bool = False, resnet_out_scale_factor: float = 1.0, time_embedding_type: str = 'positional', time_embedding_dim: int | None = None, time_embedding_act_fn: str | None = None, timestep_post_act: str | None = None, time_cond_proj_dim: int | None = None, conv_in_kernel: int = 3, conv_out_kernel: int = 3, projection_class_embeddings_input_dim: int | None = None, attention_type: str = 'default', class_embeddings_concat: bool = False, mid_block_only_cross_attention: bool | None = None, cross_attention_norm: str | None = None, addition_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 blocks) التي سيتم استخدامها.
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(bool or tuple[bool], اختياري, الافتراضي False) : ما إذا كان يجب تضمين الانتباه الذاتي في كتل التحوّل الأساسية، راجع BasicTransformerBlock.
block_out_channels (tuple[int]، اختياري، القيمة الافتراضية هي (320, 640, 1280, 1280)) : مجموعة من القيم تمثل عدد قنوات الإخراج لكل كتلة.
layers_per_block (int، اختياري، القيمة الافتراضية 2) : عدد الطبقات في كل كتلة.
downsample_padding (int، اختياري، القيمة الافتراضية 1) : الحشو المستخدم لفولتير التجميع (downsampling convolution).
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): عدد كتل التحويل من النوع 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. راجع توثيق الفئة الأصلية لمعرفة طرقه العامة المُنفَّذة لجميع النماذج (مثل التنزيل أو الحفظ).
disable_freeu[[diffusers.UNet2DConditionModel.disable_freeu]]
disable_freeu()
يعطّل آلية FreeU.
enable_freeu[[diffusers.UNet2DConditionModel.enable_freeu]]
enable_freeu(s1: float, s2: float, b1: float, b2: 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[[diffusers.UNet2DConditionModel.forward]]
forward(sample: Tensor, timestep: typing.Union[torch.Tensor, float, int], encoder_hidden_states: Tensor, class_labels: typing.Optional[torch.Tensor] = None, timestep_cond: typing.Optional[torch.Tensor] = None, attention_mask: typing.Optional[torch.Tensor] = None, cross_attention_kwargs: dict[str, typing.Any] | None = None, added_cond_kwargs: dict[str, torch.Tensor] | None = None, down_block_additional_residuals: tuple[torch.Tensor] | None = None, mid_block_additional_residual: typing.Optional[torch.Tensor] = None, down_intrablock_additional_residuals: tuple[torch.Tensor] | None = None, encoder_attention_mask: typing.Optional[torch.Tensor] = None, return_dict: bool = True)
المعاملات:
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، اختياري): مجموعة من الموترات التي إذا تم تحديدها تُضاف إلى بقايا كتل down 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 صحيحًا، يُعاد UNet2DConditionOutput، وإلا يُعاد tuple يكون عنصره الأول هو متجه العينة.
طريقة UNet2DConditionModel الأمامية.
fuse_qkv_projections[[diffusers.UNet2DConditionModel.fuse_qkv_projections]]
fuse_qkv_projections()
…
> هذه الواجهة البرمجية 🧪 تجريبية.
set_attention_slice[[diffusers.UNet2DConditionModel.set_attention_slice]]
set_attention_slice(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) المصفوفة المدخلة إلى شرائح لحساب الانتباه على عدة خطوات. وهذا مفيد لتوفير بعض الذاكرة مقابل انخفاض طفيف في السرعة.
set_default_attn_processor[[diffusers.UNet2DConditionModel.set_default_attn_processor]]
set_default_attn_processor()
يعطّل معالجات الانتباه المخصصة ويضبط تطبيق الانتباه الافتراضي.
unfuse_qkv_projections[[diffusers.UNet2DConditionModel.unfuse_qkv_projections]]
unfuse_qkv_projections()
يعطّل إسقاط QKV المدمج إذا كان مفعّلًا.
> هذه الواجهة البرمجية 🧪 تجريبية.
UNet2DConditionOutput[[diffusers.models.unets.unet_2d_condition.UNet2DConditionOutput]]
diffusers.models.unets.unet_2d_condition.UNet2DConditionOutput[[diffusers.models.unets.unet_2d_condition.UNet2DConditionOutput]]
diffusers.models.unets.unet_2d_condition.UNet2DConditionOutput(sample: Tensor = None)
المعاملات:
sample (torch.Tensor من الشكل (batch_size, num_channels, height, width)) : مخرجات الحالات المخفية المشروطة على مدخل encoder_hidden_states. مخرجات الطبقة الأخيرة من النموذج.
مخرجات UNet2DConditionModel.
Xet Storage Details
- Size:
- 23.9 kB
- Xet hash:
- 458f1f33da56850f7028de7a5d61160dd349b0479b9a62ed9dd378ac1a828ef8
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.