Назад
248

Диффузия на трансформерах

248

Введение

Недавно OpenAI представили миру диффузионную модель SORA. Она способна генерировать видео потрясающего качества на основе картинки, текстового промпта или даже видео.

Рисунок 1. Схема видео-диффузионной модели SORA (источник: https://arxiv.org/pdf/2402.17177v1.pdf)

Конечно, деталей, архитектуру, процесс обучения нам открывать не стали. Зато сослались на некоторые полезные работы. В этом обзоре мы и поговорим о трансформерной архитектуре, которую применили в SORA (кстати, Stability выложили статью по StableDiffusion 3, которая тоже будет трансформерной).

Наш обзор скорее верхнеуровневый и без страшной математики 🙂

Сначала мы вспомним, что такое Vision Transformer и как он работает, поговорим о Masked Autoencoders для маскированных данных. А затем перейдем к статьям, где было предложено поменять стандартную архитектуру UNet на трансформерную, и узнаем, к какому результату это все привело.

Transformers for images

Для начала вспомним идею трансформерной архитектуры для задачи компьютерного зрения (CV). Она пришла в CV из NLP, оказалась очень полезной и часто используемой в самых различных задачах.

ViT

📄 Paper

📎 GitHub

Первая ключевая работа, на основе которой было построено множество других — это ViT, или Visual Transformer.

Visual Transformer — трансформерная модель, которая работает с изображениями.

Рисунок 2. Схема работы Vision Transfromer (источник: ViT)

Авторы статьи постарались как можно точнее сохранить идею NLP transformers, применив ее к изображениям. Обычно трансформеры принимают на вход последовательность токенов (векторов). Но у нас есть картинка размером \( W \times H \times C \). Что можно сделать, чтобы превратить наше изображение в такую последовательность?

Давайте возьмем картинку и разрежем ее на одинаковые патчи меньшего размера — \( x^p_i \in \mathbb{R}^{P \times P \times C} \), затем проведем операцию Flatten и превратим патч в вектор размером \( P^2 \cdot C \). Тогда количество патчей будет равно \( N = \frac{HW}{P^2} \). Далее при помощи линейного преобразования проецируем это в некоторый вектор эмбеддинга \( z_i = x_i^p\mathbf{E} \), где \( E \in \mathbb{R}^{(P^2C) \times D} \)— матрица преобразования.

Еще нам нужно передать информацию о структуре изображения. Также, как и в задачах NLP, кодируем позиции токенов (positional embeddings), которые складываются с эмбеддингами патчей и подаются в финальный трансформер. Для более подробного ознакомления с ViT рекомендуем вам почитать этот пост 🙂

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

BEiT: BERT Pre-Training of Image Transformers

📄 Paper

📎 GitHub

Рисунок 3. Схема работы BEiT (источник: BEiT)

Трансформерная архитектура часто используется для дополнительного предобучения в различных задачах. Например, работа BEiT предлагает способ предобучения без учителя ViT с помощью masked image modeling (MIM).

Изображение разбивается на патчи — \( x \in \mathbb{R}^{H \times W \times C} \rightarrow x^p \in \mathbb{R}^{N \times P^2C}, N=HW / P^2 \), некоторые из них маскируются. Затем каждый патч токенизируется — ставится в соответствие некоторому вектору из словаря:

\( x \in \mathbb{R}^{H \times W \times C} \rightarrow z=[z_1, …z_N] \in \mathcal{V}^{h \times w} \),

где \( \mathcal{V} = \{1, …, |\mathcal{V}|\} \) — словарь размером 8192 (размер из статьи). Такой токенайзер можно выучить, используя дискретный вариационный автокодировщик dVAE. Подробнее об этом можно почитать в статье Dalle.

Обучение BEiT аналогично обучению вариационного автокодировщика, а именно — с помощью минимизации ELBO (Evidence lower bound). Она, в свою очередь, раскладывается на две составляющие:

  • реконструкционная часть показывает качество реконструированного изображения
    • прогоняем изображение через токенайзер и получаем условное распределение на токены изображения \( q_{\phi}(z|x) \)
    • \( p_{\psi}(x|z) \) : декодируем изображение на основе входных токенов изображения
  • KL-дивергенция
    • сравниваем распределение, полученное из токенайзера \( q_{\phi}(z|x) \) и нашего энкодера \( p_{\theta}(z|\hat{x}_i) \)

Таким образом, имеем следующее выражение для функции потерь:

\( \sum_{(x_i, \tilde{x}_i) \in \mathcal{D}} \geq \sum_{(x_i, \tilde{x}_i) \in \mathcal{D}} \Big(\mathbb{E}_{z_i \sim q_{\phi}(z|x_i)}[\log p_{\psi}(x_i|z_i)] — D_{KL}[q_{\psi}(z|x_i), p_{\theta}(z|\tilde{x}_i)]\Big) \)

Обучение проходит в два этапа: сначала минимизируем реконструкционную часть \( \mathbb{E}_{z_i \sim q_{\phi}(z|x_i)}\Big[\log p_{\psi}(x_i|z_i)\Big] \), а затем фиксируем токенайзер и декодер и обучаем только часть BEiT Encoder.

\( \sum_{(x_i, \tilde{x}i) \in \mathcal{D}} \Big(\underbrace{\mathbb{E}{z_i \sim q_{\phi}(z|x_i)}[\log p_{\psi}(x_i|z_i)]}_{\text{Stage 1: Visual Token Reconstruction}} + \underbrace{\log p_{\theta}(\hat{z}_i|\tilde{x}_i)}_{\text{Stage 2: Masked Image Modeling}} \Big) \)

Результаты

Итак, авторы предложили способ предобучения для дальнейшего решения разных задач.

Рисунок 4. Результаты задачи классификации на ImageNet-1K (источник: BEiT)

Они показали: такое предобучение может заметно улучшить качество в различных задачах, например, в задаче классификации.

Это не последняя работа об эффективном предобучении на трасформерах (можно также почитать статью DINO или DINOV2). Но она наглядно показывает пользу такого предобучения.

ViTMAE

📄 Paper

📎 GitHub

Рисунок 5. Основная схема работы VitMae (источник: ViTMAE)

А что делать, если наши данные “дырявые”? Пусть у нас есть патчи изображения, но они “повреждены”. Можно ли выучить модель так, чтобы она исправила “проблемные” части и восстановила полную картинку?

Именно эту задачу решает Masked Autoencoders (MAE). Он восстанавливает изображение на основе частично предоставленных данных, сначала кодируя его в некоторый латентный вектор, а затем декодируя обратно. В отличие от BEiT, здесь используется непрерывное латентное представление, полученное с помощью энкодера.

Обычно автокодировщики имеют симметричную структуру: архитектура декодера полностью повторяет архитектуру энкодера, за исключением UpSampling и DownSampling операций.

Авторы данной работы, наоборот, предлагают сделать ее ассиметричной. Это и помогает энкодеру работать с неполными данными (с некоторой маской) и декодировать полное изображение.

Поскольку мы работаем с трансформером для изображений, картинка разбивается на определенный набор патчей. Однако часть из них удаляется по некоторой маске.

MAE Encoder

В качестве энкодера берется обычный ViT, однако применяется он только по отношению к видимым патчам — кодируются только неудаленные части изображения.

MAE Decoder

В декодер же подаются не только закодированные патчи из энкодера, но и маскированные патчи. Каждый маскированный токен — общий для всех изображений обучаемый вектор, который указывает на наличие пропущенного патча (его и нужно предсказать). Еще ко всем токенам добавляются эмбеддинги расположения — теперь становится понятным, где именно находятся эти маскированные токены.

В качестве функции потерь авторы предлагают использовать MSE, но при этом дополнительно проводить нормализацию пикселей в патче.

Результаты

Авторы показали: даже при сильном маскировании возможно восстановить изображение. Но стоит отметить: чем больше маска, тем хуже результат, картинки получаются слишком замыленными.

Рисунок 6. Результат реконструкции на датасете ImageNet с различной степенью маскрирования: 75%, 85%, 95% (источник: ViTMAE)

Еще они проверили, как влияет расположение маски (ее тип). Авторы использовали задачу классификации:

  • сначала предобучали нейронную сеть методом ViTMAE, описанным выше;
  • затем решали задачу классификации с помощью:
    • дообучения (fine-tuning)
    • linear probing

Для двух сценариев качество предсказания задачи классификации для различных типов маски приведено ниже. Можно заметить: при большой степени маскированности (75%) качество сильно падает, особенно на методе linear-probing.

Случайная маска при этом дает максимально качество при данных условиях.

Рисунок 7. Различные стратегии сэмплирования маски, метрики на задаче классификации (источник: ViTMAE)
Рисунок 8. Различные стратегии сэмплирования маски (источник: ViTMAE)

Таким образом, ViTMAE может активно применяться в задачах предобучения.

Transformers for diffusion models

Итак, трансформерная архитектура показала свое качество и результативность даже на “неплотных” данных, где часть информации является утерянной.

Тем не менее долгое время у диффузионных моделей оставалась архитектура UNeT. Лишь позже появилось несколько работ, использующих трансформерную архитектуру. Появилось и снова забылось… до тех пор, пока на сцену не вышли SORA и Stable Diffusion3. Давайте же рассмотрим эти работы 🙂

Scalable Diffusion Models with Transformers

📄 Paper

📎 GitHub

Здесь авторы предлагают модель DiT, или Diffusion Transformers. Она базируется в первую очередь на архитектуре ViT.

Рисунок 9. Основная схема архитектуры DiT (источник: Scalable Diffusion Models with Transformers)

На вход в DiT подается картинка / латент в случае латентной диффузии, которые затем перегоняются в последовательность токенов и кодируются с помощью positional encoding:

Рисунок 10. Деление изображения на патчи для подачи в трансформерный блок (источник: Scalable Diffusion Models with Transformers)

Важный вопрос — вопрос кондишнинга. Авторы рассматривают несколько возможных вариантов:

In-context conditioning

Просто суммируем эмбеддинг времени и кондишнинг, а затем добавляем к последовательности токенов картинки, как и cls token.

Cross-attention block

Конкатенируем эмбеддинг времени и кондишнинг, а затем добавляем дополнительный блок в трансформер — cross-attention, работающий аналогично трансформерному блоку в UNet архитектуре диффузионной модели.

Adaptive layer norm (adaLN) block

Вспоминаем ганы и используем вместо обычных нормализующих слоев — adaptive layer norm (adaLN), следовательно, получаем shift и scale из кондишнинга.

adaLN-Zero block

Финальный вариант происходящего (= adaLN block, но с хорошей инициализацией) 🙂

Авторы вводят дополнительный scaling параметр \( \alpha \), который используется для residual connections (суммирование входа и выхода трансформерного блока). Основное отличие от adaLN — специальная начальная инициализация residial blocks, чтобы на первом шаге они выполняли роль identity функции. Такая инициализация способствует более стабильному обучению, что было показано, например, тут.

Код инициализации слоев adaLN
# Zero-out adaLN modulation layers in DiT blocks:
  for block in self.blocks:
      nn.init.constant_(block.adaLN_modulation[-1].weight, 0)
      nn.init.constant_(block.adaLN_modulation[-1].bias, 0)

  # Zero-out output layers:
  nn.init.constant_(self.final_layer.adaLN_modulation[-1].weight, 0)
  nn.init.constant_(self.final_layer.adaLN_modulation[-1].bias, 0)
  nn.init.constant_(self.final_layer.linear.weight, 0)
  nn.init.constant_(self.final_layer.linear.bias, 0)
class DiTBlock(nn.Module):
    """
    A DiT block with adaptive layer norm zero (adaLN-Zero) conditioning.
    """
    def __init__(self, hidden_size, num_heads, mlp_ratio=4.0, **block_kwargs):
        super().__init__()
        self.norm1 = nn.LayerNorm(hidden_size, elementwise_affine=False, eps=1e-6)
        self.attn = Attention(hidden_size, num_heads=num_heads, qkv_bias=True, **block_kwargs)
        self.norm2 = nn.LayerNorm(hidden_size, elementwise_affine=False, eps=1e-6)
        mlp_hidden_dim = int(hidden_size * mlp_ratio)
        approx_gelu = lambda: nn.GELU(approximate="tanh")
        self.mlp = Mlp(in_features=hidden_size, hidden_features=mlp_hidden_dim, act_layer=approx_gelu, drop=0)
        self.adaLN_modulation = nn.Sequential(
            nn.SiLU(),
            nn.Linear(hidden_size, 6 * hidden_size, bias=True)
        )

    def forward(self, x, c):
        shift_msa, scale_msa, gate_msa, shift_mlp, scale_mlp, gate_mlp = self.adaLN_modulation(c).chunk(6, dim=1)
        x = x + gate_msa.unsqueeze(1) * self.attn(modulate(self.norm1(x), shift_msa, scale_msa))
        x = x + gate_mlp.unsqueeze(1) * self.mlp(modulate(self.norm2(x), shift_mlp, scale_mlp))
        return x
class FinalLayer(nn.Module):
    """
    The final layer of DiT.
    """
    def __init__(self, hidden_size, patch_size, out_channels):
        super().__init__()
        self.norm_final = nn.LayerNorm(hidden_size, elementwise_affine=False, eps=1e-6)
        self.linear = nn.Linear(hidden_size, patch_size * patch_size * out_channels, bias=True)
        self.adaLN_modulation = nn.Sequential(
            nn.SiLU(),
            nn.Linear(hidden_size, 2 * hidden_size, bias=True)
        )

    def forward(self, x, c):
        shift, scale = self.adaLN_modulation(c).chunk(2, dim=1)
        x = modulate(self.norm_final(x), shift, scale)
        x = self.linear(x)
        return x

Авторы дополнительно сравнивают качество различных способов кондишнинга и представляют график, показывающий, что adaLN-Zero сходится быстрее и лучше всех остальных вариантов.

Рисунок 11. Сравнение различных архитектур трансформерного блока (источник: Scalable Diffusion Models with Transformers)

Результаты

Авторы проводят ряд экспериментов на class-conditional генерации, изменяя размер трансформерной модели и патча. Ниже представлено изображение, где заметно улучшение качества генерации при увеличении размера модели и уменьшение размера патча:

Рисунок 12. Результаты генерации, а также сравнение ее качества при увеличении размера трансформера и/или уменьшении размера патча (источник: Scalable Diffusion Models with Transformers)

Также отдельно показаны результаты генерации трансформерной диффузионной модели, обученной на ImageNet на различных разрешениях: \( 512 \times 5 \) и \( 256 \times 256 \).

Рисунок 13. Результаты задачи class-conditional генерации на разрешении 256×256 и 512×512 (источник: Scalable Diffusion Models with Transformers)

Что при этом происходит с метриками?

Рисунок 14. Сравнение метрики FID, где область круга обозначает flops диффузионной модели (больше flops — качество растет). На правой картинке сравниваются модели ADM, LDM и DiT (источник: Scalable Diffusion Models with Transformers)

Ниже представлено сравнение по нескольким метрикам:

  • FID
  • sFID
  • IS
  • Precision и Recall (задачи генерации по классу)

С чем сравнивается модель:

Рисунок 15. Сравнение метрик class-conditional генерации изображений с разрешением 256х256 различных моделей, см. выше (источник: Scalable Diffusion Models with Transformers)
Рисунок 16. Сравнение метрик class-conditional генерации изображений с разрешением 512х512 различных моделей, см. выше (источник: Scalable Diffusion Models with Transformers)

Стоит отметить: предложенная авторами модель выигрывает по метрикам практически все модели со стандартной архитектурой UNet. Значит, архитектура трансформера действительно вносит заметный вклад в качество генерации модели 🙂.

All are Worth Words: A ViT Backbone for Diffusion Models

📄 Paper

📎 GitHub

Еще одна работа с идеей использования трансформерной архитектуры для диффузии (латентной диффузии). Авторы, как и в предыдущей статье, предлагают архитектуру трансформера, но добавляют при этом ряд важных изменений.

Основная идея: добавление long skip connections. Она заимствована из UNet архитектуры, которая позволяет передать знания об изображениях на более низкие уровни, а значит, облегчить и ускорить процесс обучения.

Таким образом, в этой работе используется важная особенность UNet, но без Upsampling и Downsampling операторов.

Рисунок 17. Основная схема U-ViT (источник: U-ViT)

Результаты

В первую очередь авторы проводят эксперименты на нескольких датасетах с безусловной генерацией (CIFAR10. Celeba \( 64 \times 64 \)), а также class-conditional генерацию на ImageNet с различными разрешениями: \( 64 \times 64 \), \( 256 \times 256 \), \( 512 \times 512 \).

Рисунок 18. Результаты class-conditional генерации на датасетах ImageNet (256×256, 512×512) и unconditional генерации на CIFAR10, CelebA 64×64, ImageNet 64×64 (источник: U-ViT)

Помимо class-conditional генерации, авторы экспериментируют на text-to-image генерации:

Рисунок 19. Результаты генерации text2image на MS-COCO (источник: U-ViT)

Если посмотреть на метрики — нельзя сказать, что архитектура значительно улучшает генерацию. С предыдущей работой авторы никак не сравниваются, поэтому нельзя точно утверждать, что данная архитектура дает какое-то значительное улучшение по сравнению с предложенным DiT.

Рисунок 20. FID метрика на задачах class-conditional генерации на ImageNet 256×256, 512×512 и unconditional генерации на CIFAR10 и CelebA 64×64 (источник: U-ViT)
Рисунок 21. Сравнение различных подходов, размеров модели, обучающих датасетов для txt2image генерации (источник: U-ViT)

Diffusion Models as Masked Autoencoders

📄 Paper

Рисунок 22. Диффузионная модель с Masked autoencoder, результаты генерации (источник: DiffMAE)

Давайте перейдем к статье, где есть объединение двух основных идей: диффузионных моделей и ViTMAE. Теперь мы можем работать с пропуском данных в диффузионных моделях, что может помочь нам в различных задачах с “проблемными” данными.

Рисунок 23. Pipeline DIffMAE модели, которая постепенно расшумляет маскированные патчи для получения итогового изображения (источник: Diffusion Models as Masked Autoencoders)

Пусть у нас есть исходное изображение с некоторой наложенной маской (случайно вырезанные патчи пикселей). Мы хотим научиться моделировать распределение маскированных регионов при условии немаскированных (задача похожа на inpainting).

На прямом процессе диффузии в данном случае зашумляется только маскированная часть.

Энкодер, аналогично ViTMAE, работает только с немаскированными патчами. Декодер, в свою очередь, пытается предсказывать зашумленные маскированные патчи на основе немаскированных. Авторы рассматривают три разных конфигурации такого декодера:

  • Joint decoder

Конкатенируем последовательность выхода энкодера и зашумленные токены, а затем пропускаем через self-attention слой трансформера.

  • Cross-self decoder

Имеем cross-attention блоки для обработки маскированных патчей и выход из энкодера, а затем self-attention блоки.

Рисунок 24. Схема cross-self и cross декодеров (источник: Diffusion Models as Masked Autoencoders)
  • Cross decoder

Работает почти так же, как и декодер выше, только без self-attention блоков: не добавляет связь между различными зашумленными токенами. Поскольку мы убираем довольно большую часть, эта архитектура становится более эффективной в вычислительном плане.

Авторы исследуют также влияние архитектуры декодера на качество inpainting и fine-tuned задачи классификации.

Можно заметить: есть заметный прирост качества cross-декодера на более шумных этапах.

Рисунок 25. Сравнение качества генерации на fine-tune classification task различных схем декодера (источник: Diffusion Models as Masked Autoencoders)

Для задачи inpainting используется cross-self декодер, который показывает максимальное качество на метрике LPIPS.

Рисунок 26. Сравнение качества inpainting различных схем декодера (источник: Diffusion Models as Masked Autoencoders)

Результаты

Такую модель можно использовать для различных задач, в частности для Inpainting, где вырезаны квадратные патчи.

Рисунок 27. Качество inpainting с квадратной центральной маской (источник: Diffusion Models as Masked Autoencoders)

А еще для генерации изображений, где маскировано 75% картинки:

Рисунок 28. Качество генерации при 75% рандомном маскировании изображения (источник: Diffusion Models as Masked Autoencoders)

и 90% картинки:

Рисунок 29. Качество генерации при 90% рандомном маскировании изображения (источник: Diffusion Models as Masked Autoencoders)

MDTv2: Masked Diffusion Transformer is a Strong Image Synthesizer

📄 Paper

📎 GitHub

Рисунок 30. Схема обучения MDTv2 (источник: MDTv2)

Здесь идея использовать маскирование применилась для ускорения обучения. Авторы показали: если предоставить диффузионной модели не все данные, она сможет лучше изучить контекст изображения.

Процесс обучения состоит из двух основных частей:

  • latent masking operation — маскирование части изображения;
  • ассиметричный диффузионный трансформер, который работает как обычная диффузионная модель, но на вход может принимать sparse данные.

Важная особенность архитектуры — Side-interpolater. Во время обучения энкодер работает с немаскированными токенами \( \hat{u} \), однако при инференсе ему приходится взаимодействовать со всеми токенами \( u \), ведь на этом этапе у нас нет маски. Таким образом, на выходе энкодера (входе декодера) у нас есть разная информация на этапе обучения и инференса. А с этим нужно что-то делать. Поэтому авторы предлагают небольшую сеточку, которая предскажет замаскированные токены на выходе энкодера в процессе обучения и исчезнет при инференсе.

Рисунок 31. Схема Side-interpolater для MDTv2 (источник: MDTv2)

На этапе инференса Side-interpolater заменяется position embedding оператором. Мы не будем здесь подробно останавливаться на архитектуре (но вы всегда можете обратиться к первоисточнику 🙂).

Рисунок 32. Основная схема Side-interpolater: a) асимметричный диффузионный трансформер; b) основные элементы трансформерного блока; c) Side-interpolater как часть архитектуры; d) улучшение стандартной архитектуры с помощью передачи информации с более поверхностных уровней энкодера на глубокие слои декодера (источник: MDTv2)

Такой подход помогает модели дополнительно изучать некоторую контекстную информацию из патчей и восстанавливать ее.

В итоге можно заметить, что обучение происходит быстрее, и алгоритм сходится лучше.

Рисунок 33. Сравнение скорости сходимости при добавлении маски (источник: MDTv2)

Еще авторы провели ряд экспериментов и проверили, какой уровень маскирования улучшает сходимость качественнее остальных:

Рисунок 34. Качество class-conditional генерации MDT-S/2 при различных процентах маскирования (источник: MDTv2)

DiffiT: Diffusion Vision Transformers for Image Generation

📄 Paper

📎 GitHub

Последняя работа, которую мы разберем — недавняя работа от NVIDIA. В ней авторы предлагают улучшенную архитектуру:

  • новый self-attention модуль, который также зависит от времени;
  • улучшенную transformer-based архитектуру;

Time-dependent Self-Attention

Трансформер на каждом шаге получает набор токенов изображения (латента) \( \{x_s\} \) и \( x_t \) — токен шага по времени. Авторы предлагают следующую cross-attention схему, где queries, keys и values зависят не только от токенов изображения, но и от токена времени:

\( q_s = x_s W_{qs} + x_t W_{qt} \)

\( k_s = x_s W_{ks} + x_t W_{kt} \)

\( v_s = x_s W_{vs} + x_t W_{vt} \)

\( \text{Attention}(Q,K,V) = \text{Softmax}\Big(\frac{QK^T}{\sqrt{d}} + B\Big)V \)

где \( Q:=\{q_s\}, K:=\{k_s\}, V:=\{v_s\} \), d — scaling фактор.

DiffiT Block

Сам трансформерный блок, в свою очередь, состоит из двух частей:

\( \hat{x}_s = \text{TMSA}(\text{LN}(x_s), x_t) + x_s \)

\( x_s = \text{MLP}(\text{LN}(\hat{x}_s)) + \hat{x}_s \)

где TMSA — Time-dependent Multi-head Self-Attention.

Рисунок 35. Схема одного трансформерного блока DiffiT (источник: DiffiT)

Итоговая архитектура — архитектура U-shaped encoder-decoder:

Рисунок 36. Архитектура модели DiffiT (источник: MDTv2)

Она может использоваться как для пиксельного пространства, так и для латентного:

Рисунок 37. Схема работы DiffiT (источник: DiffiT)

Для более подробного ознакомления с архитектурой рекомендуем также обратиться к первоисточнику.

Результаты

В итоге авторы получили SOTA результаты по генерации на нескольких различных датасетах. Они сравнивались в частности с архитектурами, которые мы упоминали выше (DiT и U-Vit) и обеспечили прирост на различных метриках.

Рисунок 38. Сравнение качества unconditional генерации по различным метрикам DiffiT на CIFAR-10 и FFHQ (источник: DiffiT)
Рисунок 39. Сравнение качества class-conditional генерации по различным метрикам DiffiT на ImageNet-256 и ImageNet-512 (источник: DiffiT)

Выводы

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

Но все эти работы показывали эффективность на небольших разрешениях, чаще всего, на unconditional или class-conditional генерации, а все большие и часто используемые модели оставались на архитектуре UNet. Однако, как мы видим, крупные “игроки” OpenAI и Stability перешли к архитектуре на трансформерах и показали возможность очень хорошего качества. Кто знает, может, когда-нибудь мы посмотрим, что находится под капотом SORA (очень сомневаюсь) или Stable Diffusion 3 (очень надеюсь) 😊

Материалы

📄 Paper

📎 GitHub

📄 Paper

📎 GitHub

📄 Paper

📎 GitHub

📄 Paper

📎 GitHub

📄 Paper

📎 GitHub

  • Diffusion Models as Masked Autoencoders

📄 Paper

  • MDTv2: Masked Diffusion Transformer is a Strong Image Synthesizer

📄 Paper

📎 GitHub

  • DiffiT: Diffusion Vision Transformers for Image Generation

📄 Paper

📎 GitHub

Телеграм-канал

DeepSchool

Короткие посты по теории ML/DL, полезные
библиотеки и фреймворки, вопросы с собеседований
и советы, которые помогут в работе

Открыть Телеграм

Увидели ошибку?

Напишите нам в Telegram!