Diffusers documentation
UNet2DModel
UNet2DModel
Модель UNet была первоначально представлена Ronneberger et al. для сегментации биомедицинских изображений, однако она также широко используется в 🤗 Diffusers, поскольку на выходе она генерирует изображения того же размера, что и входные. Это один из ключевых компонентов диффузионной системы, так как именно он обеспечивает непосредственный процесс диффузии. В 🤗 Diffusers существует несколько вариантов модели UNet, которые различаются количеством измерений и тем, является ли модель условной. Здесь представлена 2D-модель UNet.
Аннотация из статьи:
Существует широкое согласие в том, что успешное обучение глубоких сетей требует тысяч размеченных обучающих примеров. В данной статье мы представляем сеть и стратегию обучения, которые опираются на активное использование аугментации данных для более эффективного использования доступных размеченных примеров. Архитектура состоит из сжимающего пути для захвата контекста и симметричного расширяющего пути, обеспечивающего точную локализацию. Мы показываем, что такая сеть может быть обучена end-to-end по очень малому количеству изображений и превосходит предыдущий лучший метод (сверточная сеть со скользящим окном) на конкурсе ISBI по сегментации нейронных структур в электронных микроскопических стопках. Используя ту же сеть, обученную на изображениях, полученные с помощью световой микроскопии (фазовый контраст и DIC), мы с большим отрывом выиграли конкурс ISBI по отслеживанию клеток 2015 года в этих категориях. Кроме того, сеть работает быстро. Сегментация изображения 512x512 занимает менее секунды на современном GPU. Полная реализация (на основе 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) — Сдвиг частоты для временного встраивания Фурье. - flip_sin_to_cos (
bool, необязательный, по умолчаниюTrue) — Определяет, следует ли заменять sin на cos в четырехмерном временном встраивании. - down_block_types (
tuple[str], необязательный, по умолчанию("DownBlock2D", "AttnDownBlock2D", "AttnDownBlock2D", "AttnDownBlock2D")) — кортеж типов блоков понижающего дискретизирования. - mid_block_type (
str, необязательный, по умолчанию"UNetMidBlock2D") — Тип блока для средней части UNet, может бытьUNetMidBlock2DилиNone. - up_block_types (
tuple[str], необязательный, по умолчанию("AttnUpBlock2D", "AttnUpBlock2D", "AttnUpBlock2D", "UpBlock2D")) — кортеж типов блоков апсемплинга. - block_out_channels (
tuple[int], необязательный, по умолчанию(224, 448, 672, 896)) — кортеж количества выходных каналов блоков. - layers_per_block (
int, необязательный, по умолчанию2) — Количество слоев в каждом блоке. - mid_block_scale_factor (
float, необязательный, по умолчанию1) — Коэффициент масштабирования для среднего блока. - downsample_padding (
int, необязательный, по умолчанию1) — Отступ для свёртки downsampling. - downsample_type (
str, необязательный, по умолчаниюconv) — Тип downsampling для слоёв downsampling. Выберите между «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) — Если задано целое число, в слоеAttentionсреднего блока будет создан слой group norm с указанным количеством групп. Если оставлено какNone, слой group norm будет создан только в том случае, еслиresnet_time_scale_shiftустановлено в значениеdefault, и при создании будет содержатьnorm_num_groupsгрупп. - norm_eps (
float, необязательный, по умолчанию1e-5) — Эпсилон для нормализации. - 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 вместо обычного кортежа.
Возвращает
UNet2DOutput или tuple
Если return_dict равно True, возвращается UNet2DOutput, иначе возвращается tuple, где первый элемент — это тензор выборки.
Метод forward модели UNet2DModel.
UNet2DOutput
класс diffusers.models.unets.unet_2d.UNet2DOutput
< source >( sample: Tensor )
Вывод UNet2DModel.