Diffusers documentation
UNetMotionModel
UNetMotionModel
Модель 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.
UNetMotionModel
класс diffusers.UNetMotionModel
< source >( sample_size: int | None = Nonein_channels: int = 4out_channels: int = 4down_block_types: tuple[str, ...] = ('CrossAttnDownBlockMotion', 'CrossAttnDownBlockMotion', 'CrossAttnDownBlockMotion', 'DownBlockMotion')up_block_types: tuple[str, ...] = ('UpBlockMotion', 'CrossAttnUpBlockMotion', 'CrossAttnUpBlockMotion', 'CrossAttnUpBlockMotion')block_out_channels: tuple[int, ...] = (320, 640, 1280, 1280)layers_per_block: int | tuple[int] = 2downsample_padding: int = 1mid_block_scale_factor: float = 1act_fn: str = 'silu'norm_num_groups: int = 32norm_eps: float = 1e-05cross_attention_dim: int = 1280transformer_layers_per_block: int | tuple[int] | tuple[tuple] = 1reverse_transformer_layers_per_block: int | tuple[int] | tuple[tuple] | None = Nonetemporal_transformer_layers_per_block: int | tuple[int] | tuple[tuple] = 1reverse_temporal_transformer_layers_per_block: int | tuple[int] | tuple[tuple] | None = Nonetransformer_layers_per_mid_block: int | tuple[int] | None = Nonetemporal_transformer_layers_per_mid_block: int | tuple[int] | None = 1use_linear_projection: bool = Falsenum_attention_heads: int | tuple[int, ...] = 8motion_max_seq_length: int = 32motion_num_attention_heads: int | tuple[int, ...] = 8reverse_motion_num_attention_heads: int | tuple[int, ...] | tuple[tuple[int, ...], ...] | None = Noneuse_motion_mid_block: bool = Truemid_block_layers: int = 1encoder_hid_dim: int | None = Noneencoder_hid_dim_type: str | None = Noneaddition_embed_type: str | None = Noneaddition_time_embed_dim: int | None = Noneprojection_class_embeddings_input_dim: int | None = Nonetime_cond_proj_dim: int | None = None )
Модифицированная условная 2D UNet-модель, которая принимает зашумленный образец, условное состояние и шаг времени и возвращает вывод с формой образца.
Эта модель наследуется от ModelMixin. См. документацию суперкласса для его универсальных методов, реализованных для всех моделей (например, загрузка или сохранение).
Отключает механизм FreeU.
enable_forward_chunking
< source >( chunk_size: int | None = Nonedim: int = 0 )
Параметры
- chunk_size (
int, необязательный) — Размер блока для полносвязных слоёв. Если не указан, полносвязный слой будет выполняться отдельно для каждого тензора с dim=dim. - dim (
int, необязательный, по умолчанию0) — Размерность, по которой вычисления в блоке прямой передачи (feed-forward) должны быть разбиты на части. Выберите dim=0 (размер батча) или dim=1 (длина последовательности).
Устанавливает процессор внимания для использования feed forward chunking.
enable_freeu
< source >( s1: floats2: floatb1: floatb2: 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
< source >( sample: Tensortimestep: typing.Union[torch.Tensor, float, int]encoder_hidden_states: Tensortimestep_cond: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Nonecross_attention_kwargs: dict[str, typing.Any] | None = Noneadded_cond_kwargs: dict[str, torch.Tensor] | None = Nonedown_block_additional_residuals: tuple[torch.Tensor] | None = Nonemid_block_additional_residual: typing.Optional[torch.Tensor] = Nonereturn_dict: bool = True ) → UNetMotionOutput or tuple
Параметры
- sample (
torch.Tensor) — Шумовой входной тензор со следующей формой(batch, num_frames, channel, height, width. - timestep (
torch.Tensorилиfloatилиint) — Количество шагов для денойзинга входных данных. - encoder_hidden_states (
torch.Tensor) — Скрытые состояния энкодера с формой(batch, sequence_length, feature_dim). - 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, необязательный) — Словарь дополнительных эмбеддингов (например, текстовых и временных), используемых для обусловливания модели. - down_block_additional_residuals — (
tupleизtorch.Tensor, необязательный): Кортеж тензоров, которые при указании добавляются к остаточным связям блоков down в U-Net. - mid_block_additional_residual — (
torch.Tensor, необязательный): Тензор, который при указании добавляется к остаточному соединению среднего блока unet. - return_dict (
bool, необязательный, по умолчаниюTrue) — Определяет, возвращать лиUNetMotionOutputвместо обычного кортежа.
Возвращает
UNetMotionOutput или tuple
Если return_dict равно True, возвращается UNetMotionOutput,
иначе возвращается tuple, где первый элемент — это тензор сэмпла.
Метод forward модели UNetMotionModel.
Заморозьте веса только UNet2DConditionModel, оставив модули движения незамороженными для дообучения.
Включает объединённые проекции QKV. Для модулей само-внимания все матрицы проекций (т. е. запрос, ключ, значение) объединяются. Для модулей кросс-внимания объединяются матрицы проекций ключа и значения.
> Этот API 🧪 экспериментальный.
Отключает пользовательские обработчики внимания и устанавливает реализацию внимания по умолчанию.
Отключает объединенную проекцию QKV, если она включена.
> Этот API 🧪 экспериментальный.
UNet3DConditionOutput
класс diffusers.models.unets.unet_3d_condition.UNet3DConditionOutput
< source >( sample: Tensor )
Вывод UNet3DConditionModel.