Diffusers documentation
UNet2DModel
UNet2DModel
تم تقديم نموذج UNet في الأصل بواسطة Ronneberger وآخره لتجزئة الصور الطبية الحيوية، لكنه يُستخدم أيضاً بشكل شائع في 🤗 Diffusers لأنه يُخرج صوراً بنفس حجم المدخلات. وهو أحد أهم مكونات نظام الانتشار لأنه ييسّر عملية الانتشار الفعلية. توجد عدة متغيرات لنموذج UNet في 🤗 Diffusers، اعتماداً على عدد أبعاده وعلى ما إذا كان نموذجاً شرطياً أم لا. هذا نموذج UNet ثنائي الأبعاد.
ملخص الورقة البحثية هو:
يوجد إجماع واسع على أن التدريب الناجح للشبكات العميقة يتطلب آلاف الأمثلة التدريبية المُعلَّمة. في هذه الورقة، نعرض شبكة واستراتيجية تدريب تعتمدان على الاستخدام القوي لزيادة البيانات لاستخدام الأمثلة المُعلَّمة المتاحة بكفاءة أكبر. تتكون البنية من مسار انكماشي لالتقاط السياق ومسار متوسع متماثل يمكّن من تحديد دقيق للمواقع. نُظهر أن مثل هذه الشبكة يمكن تدريبها من البداية إلى النهاية من عدد قليل جداً من الصور، وتتفوق على أفضل طريقة سابقة (شبكة تلافيفية بنافذة منزلقة) في تحدي ISBI لتجزئة الهياكل العصبية في المكدسات المجهرية الإلكترونية. وباستخدام نفس الشبكة المدرَّبة على صور المجهر الضوئي المنقول (تباين الطور وDIC)، فزنا بتحدي ISBI لتتبع الخلايا 2015 في هذه الفئات بفارق كبير. علاوة على ذلك، الشبكة سريعة. تستغرق تجزئة صورة 512x512 أقل من ثانية على وحدة معالجة رسومية حديثة. تتوفر التنفيذ الكامل (المبني على Caffe) والشبكات المدرَّبة على http://lmb.informatik.uni-freiburg.de/people/ronneber/u-net.
UNet2DModel
فئة diffusers.UNet2DModel
< source >( sample_size: int | tuple[int, int] | None = Nonein_channels: int = 3out_channels: int = 3center_input_sample: bool = Falsetime_embedding_type: str = 'positional'time_embedding_dim: int | None = Nonefreq_shift: int = 0flip_sin_to_cos: bool = Truedown_block_types: tuple[str, ...] = ('DownBlock2D', 'AttnDownBlock2D', 'AttnDownBlock2D', 'AttnDownBlock2D')mid_block_type: str | None = 'UNetMidBlock2D'up_block_types: tuple[str, ...] = ('AttnUpBlock2D', 'AttnUpBlock2D', 'AttnUpBlock2D', 'UpBlock2D')block_out_channels: tuple[int, ...] = (224, 448, 672, 896)layers_per_block: int = 2mid_block_scale_factor: float = 1downsample_padding: int = 1downsample_type: str = 'conv'upsample_type: str = 'conv'dropout: float = 0.0act_fn: str = 'silu'attention_head_dim: int | None = 8norm_num_groups: int = 32attn_norm_num_groups: int | None = Nonenorm_eps: float = 1e-05resnet_time_scale_shift: str = 'default'add_attention: bool = Trueclass_embed_type: str | None = Nonenum_class_embeds: int | None = Nonenum_train_timesteps: int | None = None )
المعاملات
- sample_size (
intأوtuple[int, int]، اختياري، القيمة الافتراضيةNone) — الارتفاع والعرض لعينة الإدخال/الإخراج. يجب أن تكون الأبعاد مضاعفًا لـ2 ** (len(block_out_channels) - 1). - in_channels (
int، اختياري، القيمة الافتراضية 3) — عدد القنوات في العينة المدخلة. - out_channels (
int، اختياري، القيمة الافتراضية 3) — عدد القنوات في المخرجات. - center_input_sample (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كان سيتم توسيط العينة المدخلة. - time_embedding_type (
str، اختياري، الافتراضي"positional") — نوع تضمين الوقت المستخدم. - freq_shift (
int، اختياري، القيمة الافتراضية 0) — إزاحة التردد للتضمين الزمني لـ Fourier. - flip_sin_to_cos (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان يجب عكس sin إلى cos لتضمين الوقت باستخدام تحويل فورييه. - down_block_types (
tuple[str]، اختياري، الافتراضي("DownBlock2D", "AttnDownBlock2D", "AttnDownBlock2D", "AttnDownBlock2D")) — مجموعة من أنواع كتل التقليل (downsample). - mid_block_type (
str، اختياري، القيمة الافتراضية"UNetMidBlock2D") — نوع الكتلة في منتصف UNet، يمكن أن يكون إماUNetMidBlock2DأوNone. - up_block_types (
tuple[str]، اختياري، الافتراضي("AttnUpBlock2D", "AttnUpBlock2D", "AttnUpBlock2D", "UpBlock2D")) — مجموعة من أنواع كتل التوسيع (upsample). - block_out_channels (
tuple[int]، اختياري، القيمة الافتراضية(224, 448, 672, 896)) — مجموعة من قنوات مخرجات الكتل. - layers_per_block (
int، اختياري، القيمة الافتراضية2) — عدد الطبقات في كل كتلة. - mid_block_scale_factor (
float، اختياري، القيمة الافتراضية1) — معامل المقياس للكتلة الوسطى. - downsample_padding (
int، اختياري، القيمة الافتراضية1) — الحشو الخاص بتمرير التقليل. - downsample_type (
str، اختياري، الافتراضيconv) — نوع التصفية (downsample) لطبقات التصفية. اختر بين “conv” و “resnet” - upsample_type (
str، اختياري، القيمة الافتراضيةconv) — نوع التوسيع لطبقات التوسيع. اختر بين “conv” و “resnet” - dropout (
float, اختياري، القيمة الافتراضية 0.0) — احتمال dropout المستخدم. - act_fn (
str، اختياري، الافتراضي"silu") — دالة التنشيط المستخدمة. - attention_head_dim (
int، اختياري، القيمة الافتراضية8) — بُعد رأس الانتباه. - norm_num_groups (
int، اختياري، القيمة الافتراضية32) — عدد المجموعات للتطبيع. - attn_norm_num_groups (
int, اختياري، القيمة الافتراضيةNone) — إذا تم تعيينه إلى عدد صحيح، فسيتم إنشاء طبقة group norm في طبقةAttentionداخل الكتلة الوسطى مع العدد المحدد من المجموعات. إذا تُركت القيمةNone، فلن يتم إنشاء طبقة group norm إلا إذا كانresnet_time_scale_shiftمضبوطًا علىdefault، وإذا تم إنشاؤها فستحتوي علىnorm_num_groupsمجموعات. - norm_eps (
float، اختياري، القيمة الافتراضية1e-5) — قيمة إبسيلون (epsilon) المستخدمة في عملية التطبيع. - resnet_time_scale_shift (
str، اختياري، القيمة الافتراضية"default") — إعداد إزاحة مقياس الوقت لكتل ResNet (انظرResnetBlock2D). اختر من بينdefaultأوscale_shift. - class_embed_type (
str، اختياري، القيمة الافتراضيةNone) — نوع تضمين الفئة المستخدم، والذي يُجمع في النهاية مع تضمينات الوقت. اختر من بينNone،"timestep"، أو"identity". - num_class_embeds (
int، اختياري، القيمة الافتراضيةNone) — بعد المدخلات لمصفوفة التضمين القابلة للتعلم التي سيتم إسقاطها إلىtime_embed_dimعند تنفيذ التكييف الشرطي حسب الفئة عندما تكونclass_embed_typeمساوية لـNone.
نموذج UNet ثنائي الأبعاد يستقبل عينة ضجيج وخطوة زمنية ويعيد إخراجًا على شكل العينة.
يرث هذا النموذج من ModelMixin. راجع توثيق الفئة الأصلية لمعرفة طرقه العامة المُنفَّذة لجميع النماذج (مثل التنزيل أو الحفظ).
forward
< source >( sample: Tensortimestep: typing.Union[torch.Tensor, float, int]class_labels: typing.Optional[torch.Tensor] = Nonereturn_dict: bool = True ) → UNet2DOutput or tuple
المعاملات
- sample (
torch.Tensor) — مصفوفة الإدخال الضوضائية ذات الشكل التالي(batch, channel, height, width). - timestep (
torch.Tensorأوfloatأوint) — عدد خطوات الزمن لإزالة الضوضاء من مدخل. - class_labels (
torch.Tensor، اختياري، القيمة الافتراضيةNone) — تسميات فئات اختيارية للشروط. سيتم جمع تمثيلاتها مع تمثيلات خطوة الزمن. - return_dict (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان يجب إرجاع UNet2DOutput بدلاً من tuple عادي.
يعيد
UNet2DOutput أو tuple
إذا كان return_dict صحيحًا، يُعاد UNet2DOutput، وإلا يُعاد tuple يكون عنصره الأول هو متجه العينة.
طريقة UNet2DModel الأمامية.
UNet2DOutput
فئة diffusers.models.unets.unet_2d.UNet2DOutput
< source >( sample: Tensor )
مخرجات UNet2DModel.