newsmode
search
Меню
arrow_back Назад

Text-to-Image: Diffusion, Text Conditioning, Guidance, Latent Space

auto_awesomeКраткое саммари

Статья разбирает ключевые концепции генерации изображений по тексту. Диффузия — процесс постепенного зашумления данных и обучения модели восстанавливать исходное изображение из шума, как реализовано в DDPM. Текстовое кондиционирование позволяет направлять генерацию с помощью текстовых промптов — через конкатенацию эмбеддингов (DALL·E) или кросс-внимание (Imagen), причём Imagen показал, что даже текстовый энкодер, не обученный на парах изображение-текст, может давать хорошие результаты. Управление классификатором (classifier guidance) и безклассификаторное управление (classifier-free guidance) усиливают соответствие генерируемого изображения текстовому промпту за счёт параметра guidance scale. Наконец, Stable Diffusion переносит диффузию из пиксельного пространства в латентное, сжимая изображения через VAE в 64 раза, что радикально снижает требования к памяти и позволяет запускать генерацию на обычных ноутбуках.

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

[ deeplearning llm survey ] · 19 мин. чтения

Генерация изображений по тексту стремительно развивалась в 2021–2022 годах, начиная с DALL·E, затем DALL·E 2, Imagen и, наконец, Stable Diffusion. Я изучил ряд статей, чтобы глубже разобраться в этой области, и структурировал своё понимание в несколько ключевых концепций:

Диффузия: Постепенное добавление шума к данным и последующее обучение генерации данных из шума Текстовое кондиционирование: Генерация изображений на основе (т.е. обусловленных) текстового промпта Управление классификатором: Использование градиентов классификатора для усиления соответствия текста и изображения Латентное пространство: Применение диффузии к эмбеддингам изображений вместо пикселей

Промпт для OG-изображения: «робот, держащий кисть и рисующий на мольберте»

Диффузия: от данных к шуму и обратно

Начнём с самой ранней известной мне статьи о диффузии, загадочно озаглавленной «Deep Unsupervised Learning using Nonequilibrium Thermodynamics», авторства Sohl-Dickstein, 2015 года. В ней авторы объяснили, что идея диффузии была вдохновлена неравновесной статистической физикой (возможно, одноимённой концепцией из физики частиц?).

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

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

Для обратной диффузии они обучают диффузионную вероятностную модель (DPM), преобразующую зашумлённые изображения в менее зашумлённые. Обратная диффузия выполняется за множество маленьких шагов шумоподавления, а не одним большим шагом от чистого шума к чистому изображению — интуиция в том, что множество маленьких шагов более осуществимы, чем один большой.

Авторы привели пример диффузии на двумерных данных «швейцарский рулет». Прямая диффузия (сверху, синим, слева направо) постепенно добавляет гауссов шум, пока данные не превратятся в чистый шум. Обратная диффузия (посередине, красным, справа налево) постепенно убирает шум, восстанавливая двумерный швейцарский рулет.

Прямой (синий) и обратный (красный) процессы диффузии (источник)

Denoising Diffusion Probabilistic Models (DDPM; 2020) даёт более доступное объяснение процесса диффузии: прямая диффузия (\(q\)) — это заранее определённый процесс, который постепенно добавляет гауссов шум к изображению, пока оно не превратится в чистый шум. Обратная диффузия (\(p\)) — это обучаемый процесс, который постепенно убирает шум из изображения, начиная с чистого шума, пока не получится реальное изображение.

Прямой (q) и обратный (p) процессы диффузии (источник)

Если бы мы знали условное распределение \(p(x_{t-1}\vert x_{t})\), мы могли бы просто запустить прямую диффузию в обратном направлении: взять случайный гауссов шум (\(x_{t}\)) и убрать из него шум, чтобы получить сэмпл из реального распределения.

К сожалению, мы не знаем \(p(x_{t-1}\vert x_{t})\), так как его вычисление невозможно напрямую — для этого потребовалось бы знать распределение всех возможных изображений для расчёта условной вероятности. Поэтому мы обучаем модель (то есть нейронную сеть), которая учится аппроксимировать условное распределение вероятностей \(p_{\theta}(x_{t-1}\vert x_{t})\), где \(\theta\) — параметры модели.

Учитывая, что прямой диффузионный процесс является гауссовым (поскольку добавляемый шум гауссов), можно предположить, что обратный процесс тоже будет гауссовым. Если так, обратную диффузию можно представить через среднее (\(\mu_{\theta}\)) и дисперсию (\(\Sigma_{\theta}\)) и параметризовать следующим образом:

Простым языком: вероятность менее зашумлённого изображения (\(x_{t-1}\)) при данном более зашумлённом изображении (\(x_{t}\)) с предыдущего временного шага (\(t\)) берётся из гауссова распределения (\(\mathcal{N}\)), где среднее — это среднее \(x_{t}\) на шаге \(t\), а дисперсия — это дисперсия \(x_{t}\) на шаге \(t\). Таким образом, нейросети нужно обучиться предсказывать среднее (\(\mu_{\theta}\)) и дисперсию (\(\Sigma_{\theta}\)). Однако в DDPM дисперсия задана заранее, и сеть обучается предсказывать только среднее.

Алгоритм обучения DDPM (источник)

Вот пошаговое описание алгоритма обучения:

Строка 1: Начало цикла while Строка 2: Берём случайное чистое изображение (\(x_{0}\)) из набора изображений Строка 3: Равномерно выбираем уровень шума (\(t\)) от 1 до максимального \(T\) Строка 4: Генерируем шум (\(\epsilon\)) из гауссова распределения и зашумляем изображение Строка 5: Обучаем нейросеть предсказывать шум по зашумлённому изображению Строка 6: Конец цикла while при сходимости модели

Алгоритм сэмплирования DDPM (источник)

Когда модель обучена, вот как генерировать новые изображения из шума:

Строка 1: Берём случайное зашумлённое изображение (\(x_{T}\)) из гауссова распределения Строка 2: Итерируем от временного шага \(T\) до шага 1 Строка 3: Генерируем дополнительный гауссов шум (\(z\), если шаг > 1, иначе ноль, потому что на шаге 1 мы просто возвращаем чистое изображение) Строка 4: Получаем слегка очищенное изображение (\(x_{t-1}\)), вычитая шум (\(\epsilon_{\theta}(x_{t}, t)\)) из зашумлённого изображения (\(x_{t}\)), а затем добавляя обратно немного шума (\(z\)) Строка 5: Конец итерации Строка 6: Возвращаем чистое изображение с шага 1

Обратите внимание: модель предсказывает весь шум в зашумлённом изображении (\(\epsilon_{\theta}(x_{t}, t)\)). Однако мы вычитаем лишь его долю, взвешенную коэффициентом \(\frac{1-\sigma_{t}}{\sqrt{}1-\bar{\sigma_{t}}}\), а затем добавляем обратно шум (\(z\)), взвешенный коэффициентом \(\sigma_{t}\).

Мне стало интересно разобраться с этими весами удаления и добавления шума, и я написал реализацию DDPM, чтобы поэкспериментировать. К моему удивлению, веса удаления шума оказались всего 0,01–0,02, тогда как веса добавления шума достигают 0,14. Помните интуицию о том, что оценивать малые порции шума на множестве временных шагов проще, чем оценивать весь шум за один шаг? Именно так это реализовано в алгоритме и коде.

t = 799 - Latent weight: 1.010, Removed noise weight: 0.020, Added noise weight: 0.141 t = 640 - Latent weight: 1.008, Removed noise weight: 0.016, Added noise weight: 0.127 t = 480 - Latent weight: 1.006, Removed noise weight: 0.012, Added noise weight: 0.110 t = 320 - Latent weight: 1.004, Removed noise weight: 0.009, Added noise weight: 0.090 t = 160 - Latent weight: 1.002, Removed noise weight: 0.008, Added noise weight: 0.064 t = 0 - Latent weight: 1.000, Removed noise weight: 0.010, Added noise weight: 0.000

Веса для латента, удаления шума и добавления шума при t = 799, 640, 480, 320, 160, 0 (источник)

Экспериментируя с DDPM, я обнаружил, что увеличение числа временных шагов положительно влияло на качество сэмплов, хотя требовало большего числа эпох и крупного эмбеддинга временного шага. Увеличение размерности эмбеддинга временного шага также улучшало функцию потерь и качество сэмплов. С другой стороны, большее число эпох, разные функции потерь и размер батча не помогали. (Хотите лучше понять диффузию? Склонируйте этот GitHub-репозиторий и поэкспериментируйте с кодом!)

Пока что эти модели способны лишь на базовую диффузию (то есть генерацию изображений из шума, ограниченную датасетом, на котором они обучены). Они не могут генерировать изображения по текстовым промптам (в отличие от DALL·E и Stable Diffusion) — для этого необходимо текстовое кондиционирование.

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

Текстовое кондиционирование: управление генерацией изображений через текст

Чтобы понять текстовое кондиционирование, полезно начать с Contrastive Language-Image Pre-training (CLIP; 2021). CLIP проецирует текст и изображение в единое пространство через проекционный слой. Это позволяет эффективно обучаться визуальным концепциям в форме текста через обучение на естественном языке и выполнять классификацию без обучения (zero-shot).

Предобучение CLIP и zero-shot классификация (источник)

На этапе предобучения энкодеры изображений и текста обучаются предсказывать, какие изображения соответствуют каким текстам в датасете из 400 миллионов пар «изображение — подпись». CLIP обучается максимизировать косинусное сходство эмбеддингов изображения и текста для соответствующих пар через мультимодальное пространство эмбеддингов.

Это реализуется через линейную проекцию, отображающую представления каждого энкодера в мультимодальное пространство эмбеддингов (строки 13–15 ниже). В результате эмбеддинги текста и изображения оказываются в одном пространстве. Таким образом, имея текстовый эмбеддинг, можно применить метод k ближайших соседей для поиска похожих изображений.

# image_encoder - ResNet or Vision Transformer # text_encoder - CBOW or Text Transformer # I[n, h, w, c] - minibatch of aligned images # T[n, l] - minibatch of aligned texts # W_i[d_i, d_e] - learned projection of image to embed # W_t[d_t, d_e] - learned projection of text to embed # t - learned temperature parameter # extract feature representations of each modality I_f = image_encoder(I) #[n, d_i] T_f = text_encoder(T) #[n, d_t] # joint multimodal embedding [n, d_e] I_e = l2_normalize(np.dot(I_f, W_i), axis=1) T_e = l2_normalize(np.dot(T_f, W_t), axis=1) # scaled pairwise cosine similarities [n, n] logits = np.dot(I_e, T_e.T) * np.exp(t) # symmetric loss function labels = np.arange(n) loss_i = cross_entropy_loss(logits, labels, axis=0) loss_t = cross_entropy_loss(logits, labels, axis=1) loss = (loss_i + loss_t) / 2

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

Для zero-shot классификации все классы датасета преобразуются в подписи вида «a photo of a <класс>». Затем CLIP предсказывает класс, наилучшим образом соответствующий изображению.

Вскоре после CLIP появился DALL·E (2021), одна из первых моделей генерации изображений по тексту, доступных широкой публике — это наш первый пример текстового кондиционирования.

Помните кресло-авокадо из DALL·E? (источник)

На высоком уровне DALL·E сначала сжимает изображения в 8 192 дискретных токена визуального кодбука (\(\mathcal{Z}\) на изображении ниже). Эти токены изображений затем конкатенируются с текстовыми эмбеддингами. Объединённый эмбеддинг подаётся в трансформер, который учится предсказывать токены изображения по текстовому эмбеддингу.

Пример визуального кодбука из статьи VQGAN (Примечание: это не DALL·E; источник)

Зачем сжимать изображения в токены кодбука? Авторы объяснили, что использование пикселей напрямую в качестве токенов изображения потребовало бы слишком много памяти для изображений высокого разрешения. В результате ресурсы модели тратились бы на высокочастотные детали (пиксели) вместо низкочастотной структуры (линии), которая делает изображения визуально узнаваемыми. (По той же причине Stable Diffusion кодирует изображения в латентное пространство перед запуском диффузии.)

Сначала DALL·E обучает дискретный вариационный энкодер (dVAE) для сжатия изображений 256 × 256 в 32 × 32 токена изображения (размер словаря = 8 192). Затем параметры dVAE замораживаются на этапе обучения трансформера.

Далее подписи к изображениям приводятся к нижнему регистру и обрезаются до максимальной длины 256 токенов перед кодированием (размер словаря = 16 384). Токены изображения затем конкатенируются после текстовых токенов (пример ниже).

Пример конкатенации текстовых и графических токенов в DALL·E (источник)

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

Для генерации изображений по тексту текстовый промпт кодируется и подаётся в трансформер. Трансформер генерирует последовательность токенов изображения. Затем dVAE декодирует токены изображения, возвращая изображение 256 × 256.

DALL·E 2 (он же unCLIP, 2022) развивает идеи двух предыдущих работ, используя текстовый и графический энкодеры из CLIP и авторегрессионный трансформер из DALL·E. Аналогично, unCLIP обучается на датасете пар «изображение — подпись», которые кодируются через текстовый и графический энкодеры CLIP в текстовые эмбеддинги (\(z_{t}\)) и графические эмбеддинги (\(z_{i}\)).

Как закодированный текст (синий) генерирует изображения через prior и декодер (источник)

На изображении выше prior (\(p(z_{i}\vert y)\)) обучается генерировать CLIP-эмбеддинги изображений (\(z_{i}\)), обусловленные текстовым промптом (\(y\)). Декодер (\(p(x\vert z_{i}, y)\)) затем создаёт изображение, обусловленное CLIP-эмбеддингом изображения (\(z_{i}\)) и опциональным текстовым промптом (\(y\)). Иными словами, для генерации изображений из текстовых промптов (\(p(x\vert y)\)) мы сначала сэмплируем CLIP-эмбеддинги изображений через prior, а затем декодируем их через декодер.

В статье описаны два подхода к обучению prior: авторегрессионный и диффузионный.

Авторегрессионный подход аналогичен DALL·E, где текстовое кондиционирование выполняется путём размещения текстового эмбеддинга в начале последовательности. Также перед эмбеддингом изображения добавляется токен скалярного произведения (текстового и графического эмбеддингов). Это позволяло авторегрессионному prior кондиционировать модель на более высоком скалярном произведении, поскольку более высокое значение указывает на изображения, лучше соответствующие подписи.

В диффузионном подходе обучается трансформер-декодер с каузальной маской внимания на последовательности из закодированного текста, текстового эмбеддинга, эмбеддинга временного шага, зашумлённого CLIP-эмбеддинга изображения и финального эмбеддинга. Выход финального эмбеддинга используется для предсказания незашумлённого CLIP-эмбеддинга изображения. Интересно, что в отличие от DDPM, авторы обнаружили, что лучше обучать модель напрямую предсказывать незашумлённое изображение, а не предсказывать шум и затем вычитать его.

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

Imagen (2022) идёт ещё дальше, используя текстовый энкодер, который даже не обучался на парах «изображение — подпись» (🤯). Он использует энкодерную часть T5. Это отход от подходов на основе CLIP, где текстовый энкодер специально обучается на парах «изображение — подпись», а текстовые эмбеддинги проецируются в мультимодальное пространство.

Это работает, потому что чрезвычайно большие языковые модели (LLM), благодаря самому своему масштабу, способны обучаться полезным представлениям, даже не будучи явно обученными на задачах «текст в изображение». Преимущество в том, что LLM могут обучаться на текстовом корпусе, который значительно больше датасетов «изображение — текст». Кроме того, авторы обнаружили, что масштабирование размера текстового энкодера влияет на соответствие «текст — изображение» и качество изображений сильнее, чем увеличение размера UNet.

Размер текстового энкодера > размера UNet; динамическое ограничение > статического ограничения (источник)

Imagen выполняет текстовое кондиционирование, сначала токенизируя входной текст и кодируя его через энкодер T5. Закодированный текст затем проходит через этап пулинга (изображение ниже).

Кодирование текста через трансформер T5 в Imagen (источник)

Текстовый эмбеддинг затем объединяется с эмбеддингом изображения и временного шага (изображение ниже). Модель кондиционируется через кросс-внимание по текстовому эмбеддингу. Это реализуется путём конкатенации текстового эмбеддинга с парами ключ-значение каждого слоя самовнимания в UNet. Кросс-внимание по текстовому эмбеддингу превосходило простой пулинг на основе среднего или внимания.

Кондиционирование на эмбеддингах времени и текста в Imagen (источник)

(Обратите внимание, как текстовое кондиционирование реализовано по-разному в вариантах DALL·E и Imagen. В DALL·E текстовое кондиционирование выполняется путём конкатенации текстового эмбеддинга с графическим и пропускания через трансформер. В Imagen текстовое кондиционирование реализуется через кросс-внимание в UNet.)

Текстовый эмбеддинг (зелёные и красные блоки ниже) используется на протяжении всего этапа генерации изображения. Сначала он применяется для создания начального изображения 64 × 64 из шума (синий блок). Затем используется для увеличения разрешения до 256 × 256 и далее до 1024 × 1024 (жёлтые блоки).

Общая схема текстового энкодера, диффузионного генератора и модели повышения разрешения Imagen (источник)

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

Управление классификатором: усиление влияния промптов

Управление (guidance) — это техника явного включения класса изображения — или текстового промпта — непосредственно в процесс диффузии. (Это тот самый часто настраиваемый гиперпараметр guidance_scale.)

В статье об управлении классификатором (2021) отмечается, что GAN сильно зависели от меток классов, часто через класс-обусловленную нормализацию или дискриминаторы с головами, работающими как классификаторы. Это говорит о том, что информация о классе критически важна для успешной генерации с помощью GAN. Поэтому, заимствуя идею у GAN, авторы используют классификатор \(p_\phi(y\vert x)\) для улучшения генерации изображений через диффузию.

В результате к функции оценки добавляется \(\nabla_{x} \log p_\phi(y\vert x)\), обновляя её с \(\nabla_{x} \log p_\theta(x)\) до \(\nabla_{x} \log p_\gamma (x\vert y) = \nabla_{x} \log p_\theta(x) + \gamma \nabla_{x} \log p_\phi(y\vert x)\), где \(\nabla_x \log p_\phi(y\vert x)\) — градиент классификатора, а \(\gamma\) — масштаб управления (guidance scale).

(Примечание: для простоты я опустил переменную \(t\) в уравнениях. На практике диффузия «текст в изображение» также обусловлена временным шагом, указывающим уровень шума во входных данных.)

Для этого они обучают классификатор (\(p_\phi(y \vert x)\)) на зашумлённых изображениях (\(x\)), а затем используют градиент (\(\nabla_{x} \log p_\phi(y \vert x)\)) для направления процесса сэмплирования к метке класса (\(y\)). Для получения зашумлённых изображений применяется прямая диффузия на ImageNet со случайным кадрированием для уменьшения переобучения. Классификатор использует архитектуру понижающей дискретизации UNet с пулингом на слое 8 × 8 для получения финального выхода.

Напомним, что функция оценки теперь выглядит как \(\nabla_x \log p_\gamma (x\vert y) = \nabla_x \log p_\theta(x) + \gamma \nabla_x \log p_\phi(y \vert x)\), где \(\gamma\) — масштаб управления. Авторы обнаружили, что увеличение масштаба управления свыше 1 усиливало сигнал кондиционирования (то есть текстовый промпт) и приводило к более качественным изображениям.

Со стандартным (слева; масштаб=1) и усиленным (справа; масштаб=10) управлением классификатором (источник)

При использовании масштаба 1, хотя классификатор присваивал разумные вероятности ~50% классам сгенерированных изображений, при визуальной проверке эти изображения не соответствовали классам. Увеличение масштаба градиентов классификатора (то есть guidance > 1) решило эту проблему, и вероятности классов по классификатору выросли почти до 100%.

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

Поэтому было предложено безклассификаторное управление (classifier-free guidance, 2021). Вместо обучения отдельного классификатора обучается условная диффузионная модель (\(p(x \vert y)\)) с дропаутом кондиционирования. В некоторой доле случаев информация о кондиционировании (подпись к изображению) заменяется пустым токеном. Это просто реализовать, и это не усложняет пайплайн обучения и не увеличивает число параметров модели.

В результате одна и та же нейросеть может работать как условная модель \(p(x|y)\) или безусловная модель \(p(x)\), в зависимости от масштаба управления:

\(\gamma = 0\): безусловная модель \(\gamma = 1\): стандартная условная модель \(\gamma > 1\): сильно обусловленная модель, которая точнее следует условию (то есть текстовому промпту) и возвращает изображения с лучшим соответствием тексту

GLIDE (2021) исследовал использование как CLIP-управления, так и безклассификаторного управления. CLIP-управление было реализовано путём замены классификатора на модель CLIP, обученную на зашумлённых изображениях. Авторы обнаружили, что пользователи предпочитают изображения, сгенерированные с безклассификаторным управлением.

«Витраж с пандой, поедающей бамбук»: без управления (слева) vs. CLIP-управление (посередине) vs. безклассификаторное управление (справа) в GLIDE (источник)

Уточним: DALL·E, DALL·E 2 и Imagen тоже применяют безклассификаторное управление. DALL·E случайно отбрасывает текстовое кондиционирование в 10% случаев, DALL·E 2 случайно обнуляет текстовые эмбеддинги и отбрасывает текстовые подписи в 10% и 50% случаев соответственно. Imagen случайно обнуляет текстовые эмбеддинги для 10% обучающих примеров. В области диффузии «текст в изображение» безклассификаторное управление (оно же дропаут кондиционирования) стало столь же необходимым, как дропаут для регуляризации.

Тем не менее именно другая разработка позволила обычным пользователям запускать диффузию «текст в изображение» на своих ноутбуках — переход в латентное пространство.

Латентное пространство: диффузия на латентах вместо пикселей

Stable Diffusion (2021) отличается от предыдущих диффузионных моделей тем, что работает в латентном пространстве, а не в пиксельном. Сначала изображения сжимаются через вариационный автоэнкодер (VAE) в более эффективное и низкоразмерное латентное представление. Затем диффузионная модель учится генерировать латентные (сжатые) представления изображений, которые потом декодируются в изображения через декодер VAE.

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

Использование VAE для кодирования изображений из пиксельного в латентное пространство (слева) (источник)

В Stable Diffusion VAE кодирует зашумлённые изображения (через \(\mathcal{E}\)) в низкоразмерное латентное представление, которое подаётся в UNet. Затем декодирует латентные представления, сгенерированные UNet (через \(\mathcal{D}\)), в понятные человеку изображения. VAE имеет коэффициент сжатия 8: исходное пиксельное пространство 3 × 512 × 512 кодируется в латентное пространство 6 × 64 × 64, требуя 1/8 × 1/8 = 1/64 объёма памяти. При сэмплировании нужен только декодер VAE.

Stable Diffusion использует текстовый энкодер CLIP. (Однако, как показал Imagen, вероятно, подойдёт любой достаточно большой текстовый LLM.)

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

• • •

Мы начали с того, как диффузия может генерировать изображения из шума. Затем увидели, как текстовое кондиционирование позволило генерировать изображения по промптам через авторегрессионные трансформеры и кросс-внимание, даже с текстовыми энкодерами, не обученными на задачах «текст в изображение». Наконец, мы узнали, как управление (guidance) помогает создавать изображения, лучше соответствующие текстовому промпту, хотя и ценой разнообразия изображений.

Область генерации «текст в изображение» стремительно развивалась с тех пор, как я начал целенаправленно её изучать. Две недели назад NVIDIA выпустила eDiff-I, использующий ансамбль диффузионных моделей. А мы ещё даже не касались «текст в видео» (например, Make-A-Video от Facebook, Imagen Video от Google) и «текст в 3D» (например, DreamFusion от Google, Magic3D от NVIDIA).

К сожалению, мы не можем обсудить здесь всё (в основном потому, что у меня не хватает свободного времени и энергии 😅). Тем не менее надеюсь, что эти основы помогут вам лучше понять генерацию медиа по тексту и её будущее развитие.

Я где-то неправильно понял или неточно изложил какие-то концепции или статьи? Если да, пожалуйста, свяжитесь со мной!

Список литературы

Если вы нашли это полезным, пожалуйста, цитируйте данный материал следующим образом:

Yan, Ziyou. (Nov 2022). Text-to-Image: Diffusion, Text Conditioning, Guidance, Latent Space. eugeneyan.com. https://eugeneyan.com/writing/text-to-image/.

или

@article{yan2022diffusion, title = {Text-to-Image: Diffusion, Text Conditioning, Guidance, Latent Space}, author = {Yan, Ziyou}, journal = {eugeneyan.com}, year = {2022}, month = {Nov}, url = {https://eugeneyan.com/writing/text-to-image/} }



Присоединяйтесь к 11 800+ читателям, получающим обновления о машинном обучении, рекомендательных системах, LLM и инженерии.