UNet 2D 模型
UNet 模型最初由 Ronneberger 等人提出,用于生物医学图像分割,但它在 🤗 Diffusers 中也很常用,因为它输出的图像与输入图像大小相同。它是扩散系统中最重要的组件之一,因为它促进了实际的扩散过程。🤗 Diffusers 中有几种 UNet 模型变体,具体取决于维度数以及它是不是条件模型。这是一个 2D UNet 模型。
该论文的摘要如下:
众所周知,对深度神经网络进行成功的训练需要数千个标注文本样本。在本文中,我们将介绍一个网络和训练策略,依靠大幅使用数据扩充功能来更高效地利用可用的标注样本。此架构由用于获取环境的收缩路径和用于实现精确本地化的对称扩展路径组成。我们证明了即使只有数量极少的图像,此类网络也能从头到尾接受训练,并且在用于分割电子显微镜堆叠中的神经元结构的 ISBI 挑战中超越了之前的最佳方法(滑动窗口卷积神经网络)。使用同样在透射光显微镜图像(相衬和 DIC)上接受训练的网络,我们在这些类别中以较大优势赢得了 2015 年的 ISBI 细胞追踪挑战。此外,此网络运算速度非常快。在最新款 GPU 上,分割一张 512x512 像素的图像用时不到一秒。完整实现(基于 Caffe)和已接受训练的网络可在 http://lmb.informatik.uni-freiburg.de/people/ronneber/u-net 获取。
UNet2DModel
class diffusers.UNet2DModel
< 源代码 >( sample_size: Union = None in_channels: int = 3 out_channels: int = 3 center_input_sample: bool = False time_embedding_type: str = 'positional' freq_shift: int = 0 flip_sin_to_cos: bool = True down_block_types: Tuple = ('DownBlock2D', 'AttnDownBlock2D', 'AttnDownBlock2D', 'AttnDownBlock2D') up_block_types: Tuple = ('AttnUpBlock2D', 'AttnUpBlock2D', 'AttnUpBlock2D', 'UpBlock2D') block_out_channels: Tuple = (224, 448, 672, 896) layers_per_block: int = 2 mid_block_scale_factor: float = 1 downsample_padding: int = 1 downsample_type: str = 'conv' upsample_type: str = 'conv' dropout: float = 0.0 act_fn: str = 'silu' attention_head_dim: Optional = 8 norm_num_groups: int = 32 attn_norm_num_groups: Optional = None norm_eps: float = 1e-05 resnet_time_scale_shift: str = 'default' add_attention: bool = True class_embed_type: Optional = None num_class_embeds: Optional = None num_train_timesteps: Optional = None )
参数
- sample_size (
int
或Tuple[int, int]
,可选,默认为None
) — 输入/输出样本的高度和宽度。维度必须是2 ** (len(block_out_channels) - 1)
的倍数。 - 居中输入样本 (
bool
, 可选,默认为False
) — 是否将输入样本居中。 - flip_sin_to_cos (
bool
, 可选, 默认为True
) — 是否为傅立叶时间嵌入翻转正弦到余弦。 - up_block_types (
tuple[str]
, 可选, 默认为("AttnUpBlock2D", "AttnUpBlock2D", "AttnUpBlock2D", "UpBlock2D")
) — 上采样块类型的元组。 - block_out_channels (
Tuple[int]
,可选,默认为(224, 448, 672, 896)
) — 块输出通道的元组。 - layers_per_block (
int
,可选,默认为2
) — 每个块的层数。 - downsample_type (
str
, 可选,默认为conv
) — 下采样层的下采样类型。在 “conv” 和 “resnet” 之间选择 - act_fn (
str
, 可选,默认为"silu"
) — 要使用的激活函数。 - attn_norm_num_groups (
int
, 可选,默认为None
) — 如果设置为整数,则在中间块的Attention
层中创建一个组归一化层,其中具有给定的组数。如果保留为None
,则仅当resnet_time_scale_shift
设置为default
时才会创建组归一化层,且如果创建,则具有norm_num_groups
个组。 - class_embed_type (
str
,可选,默认为None
) — 要使用的类嵌入类型,它最终会与时间嵌入求和。从None
、"timestep"
或"identity"
中选择。
UNet2DOutput
class diffusers.models.unets.unet_2d.UNet2DOutput
< 源代码 >( sample: 张量 )
UNet2DModel的输出。