Buckets:

hf-doc-build/doc / diffusers /main /ru /api /models /unet2d-cond.md
mishig's picture
|
download
raw
27.8 kB
# UNet2DConditionModel
Модель [UNet](https://huggingface.co/papers/1505.04597) была первоначально представлена 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]]
```python
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)
```
[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/unets/unet_2d_condition.py#L76)
**Параметры:**
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](/docs/diffusers/main/ru/api/models/overview#diffusers.ModelMixin). См. документацию суперкласса для его универсальных методов, реализованных для всех моделей (например, загрузка или сохранение).
#### disable_freeu[[diffusers.UNet2DConditionModel.disable_freeu]]
```python
disable_freeu()
```
[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/unets/unet_2d_condition.py#L814)
Отключает механизм FreeU.
#### enable_freeu[[diffusers.UNet2DConditionModel.enable_freeu]]
```python
enable_freeu(s1: float, s2: float, b1: float, b2: float)
```
[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/unets/unet_2d_condition.py#L790)
**Параметры:**
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, приведены в [официальном репозитории](https://github.com/ChenyangSi/FreeU).
#### forward[[diffusers.UNet2DConditionModel.forward]]
```python
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)
```
[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/unets/unet_2d_condition.py#L978)
**Параметры:**
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](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/attention_processor.py).
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](/docs/diffusers/main/ru/api/models/unet2d-cond#diffusers.models.unets.unet_2d_condition.UNet2DConditionOutput) вместо обычного кортежа.
**Возвращает:** [UNet2DConditionOutput](/docs/diffusers/main/ru/api/models/unet2d-cond#diffusers.models.unets.unet_2d_condition.UNet2DConditionOutput) или `tuple`
Если `return_dict` равно True, возвращается [UNet2DConditionOutput](/docs/diffusers/main/ru/api/models/unet2d-cond#diffusers.models.unets.unet_2d_condition.UNet2DConditionOutput), иначе возвращается `tuple`, где первый элемент — это тензор выборки.
Метод forward модели [UNet2DConditionModel](/docs/diffusers/main/ru/api/models/unet2d-cond#diffusers.UNet2DConditionModel).
#### fuse_qkv_projections[[diffusers.UNet2DConditionModel.fuse_qkv_projections]]
```python
fuse_qkv_projections()
```
[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/unets/unet_2d_condition.py#L822)
Включает объединённые проекции QKV. Для модулей само-внимания все матрицы проекций (т. е. запрос, ключ, значение) объединяются. Для модулей кросс-внимания объединяются матрицы проекций ключа и значения.
> [!WARNING] > Этот API 🧪 экспериментальный.
#### set_attention_slice[[diffusers.UNet2DConditionModel.set_attention_slice]]
```python
set_attention_slice(slice_size: str | int | list[int] = 'auto')
```
[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/unets/unet_2d_condition.py#L725)
**Параметры:**
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]]
```python
set_default_attn_processor()
```
[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/unets/unet_2d_condition.py#L710)
Отключает пользовательские обработчики внимания и устанавливает реализацию внимания по умолчанию.
#### unfuse_qkv_projections[[diffusers.UNet2DConditionModel.unfuse_qkv_projections]]
```python
unfuse_qkv_projections()
```
[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/unets/unet_2d_condition.py#L843)
Отключает объединенную проекцию QKV, если она включена.
> [!WARNING] > Этот API 🧪 экспериментальный.
## UNet2DConditionOutput[[diffusers.models.unets.unet_2d_condition.UNet2DConditionOutput]]
#### diffusers.models.unets.unet_2d_condition.UNet2DConditionOutput[[diffusers.models.unets.unet_2d_condition.UNet2DConditionOutput]]
```python
diffusers.models.unets.unet_2d_condition.UNet2DConditionOutput(sample: Tensor = None)
```
[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/unets/unet_2d_condition.py#L64)
**Параметры:**
sample (`torch.Tensor` формы `(batch_size, num_channels, height, width)`) : Выходные скрытые состояния, обусловленные входом `encoder_hidden_states`. Выход последнего слоя модели.
Вывод [UNet2DConditionModel](/docs/diffusers/main/ru/api/models/unet2d-cond#diffusers.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.