Buckets:

hf-doc-build/doc / diffusers /main /ru /api /models /unet2d-cond.md
mishig's picture
|
download
raw
27.8 kB

UNet2DConditionModel

Модель 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.

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, optional, по умолчанию 0) : Сдвиг частоты, применяемый к временному эмбеддингу.

down_block_types (tuple[str], optional, по умолчанию ("CrossAttnDownBlock2D", "CrossAttnDownBlock2D", "CrossAttnDownBlock2D", "DownBlock2D")) : Кортеж блоков понижения разрешения, которые следует использовать.

mid_block_type (str, необязательный, по умолчанию "UNetMidBlock2DCrossAttn") : Тип блока для средней части UNet. Может быть одним из UNetMidBlock2DCrossAttn, UNetMidBlock2D или UNetMidBlock2DSimpleCrossAttn. Если указано None, слой среднего блока пропускается.

up_block_types (tuple[str], необязательный, по умолчанию ("UpBlock2D", "CrossAttnUpBlock2D", "CrossAttnUpBlock2D", "CrossAttnUpBlock2D")) : Кортеж блоков апсемплинга, которые следует использовать.

only_cross_attention(bool or tuple[bool], необязательный, по умолчанию False) : Включать ли self-attention в базовых блоках трансформера, см. BasicTransformerBlock.

block_out_channels (tuple[int], optional, по умолчанию (320, 640, 1280, 1280)) : Кортеж количества выходных каналов для каждого блока.

layers_per_block (int, необязательный, по умолчанию 2) : Количество слоёв в каждом блоке.

downsample_padding (int, optional, по умолчанию 1) : Отступ, используемый для свёртки при уменьшении разрешения.

mid_block_scale_factor (float, необязательный, по умолчанию 1.0) : Коэффициент масштабирования для среднего блока.

dropout (float, необязательный, по умолчанию 0.0) : Вероятность dropout, которую следует использовать.

act_fn (str, необязательный, по умолчанию "silu") : Функция активации, которую следует использовать.

norm_num_groups (int, optional, по умолчанию 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], optional, по умолчанию None): количество блоков трансформера типа BasicTransformerBlock в блоках апсемплинга U-Net. Актуально только если transformer_layers_per_block имеет тип tuple[tuple] и для CrossAttnDownBlock2D, CrossAttnUpBlock2D, UNetMidBlock2DCrossAttn.

encoder_hid_dim (int, optional, по умолчанию 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, optional, по умолчанию 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, optional, по умолчанию 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, optional, по умолчанию 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.

Условная 2D-модель 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) : Скрытые состояния энкодера с формой (batch, sequence_length, feature_dim).

class_labels (torch.Tensor, необязательный, по умолчанию None) : Необязательные классы меток для условного формирования. Их эмбеддинги будут сложены с эмбеддингами временного шага.

timestep_cond : (torch.Tensor, необязательный, по умолчанию None): Условные эмбеддинги для временного шага. Если переданы, эмбеддинги будут сложены с сэмплами, прошедшими через слой self.time_embedding, чтобы получить эмбеддинги временного шага.

attention_mask (torch.Tensor, необязательный, по умолчанию None) : маска внимания формы (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, необязательный): Кортеж тензоров, которые при указании добавляются к остаткам (residuals) блоков down unet.

mid_block_additional_residual : (torch.Tensor, необязательный): тензор, который при указании добавляется к остаточному соединению среднего блока unet.

down_intrablock_additional_residuals (tuple из torch.Tensor, необязательный) : дополнительные остаточные сигналы, которые добавляются внутри блоков понижения разрешения UNet, например, из боковых моделей T2I-Adapter

encoder_attention_mask (torch.Tensor) : Маска кросс-внимания формы (batch, sequence_length) применяется к encoder_hidden_states. Если True, маска сохраняется, иначе, если False, она отбрасывается. Маска преобразуется в смещение (bias), которое добавляет большие отрицательные значения к оценкам внимания, соответствующим токенам «отбрасывания».

return_dict (bool, необязательный, по умолчанию True) : Возвращать ли UNet2DConditionOutput вместо обычного кортежа.

Возвращает: UNet2DConditionOutput или tuple

Если return_dict равно True, возвращается UNet2DConditionOutput, иначе возвращается tuple, где первый элемент — это тензор выборки.

Метод forward модели UNet2DConditionModel.

fuse_qkv_projections[[diffusers.UNet2DConditionModel.fuse_qkv_projections]]

fuse_qkv_projections()

Источник

Включает объединённые проекции QKV. Для модулей само-внимания все матрицы проекций (т. е. запрос, ключ, значение) объединяются. Для модулей кросс-внимания объединяются матрицы проекций ключа и значения.

> Этот API 🧪 экспериментальный.

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.

Включить вычисление внимания с нарезкой.

Когда эта опция включена, модуль внимания разбивает входной тензор на фрагменты, чтобы вычислять внимание в несколько шагов. Это полезно для экономии памяти ценой небольшого снижения скорости.

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, если она включена.

> Этот API 🧪 экспериментальный.

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:
27.8 kB
·
Xet hash:
f0915a4a701266108b6a6795e0b44f9fae2450e3a13d2891f89dcf37ef52087d

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.