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 раза, что радикально снижает требования к памяти и позволяет запускать генерацию на обычных ноутбуках.

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

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

[ deeplearning llm survey ] · 19 min read

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

Text-to-image has advanced at a breathless pace in 2021 - 2022, starting with DALL·E, then DALL·E 2, Imagen, and now Stable Diffusion. I dug into a couple of papers to learn more about the space and organized my understanding into a few key concepts:

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

  • Diffusion: Gradually add noise to data and then learn to generate data from noise
  • Text conditioning: Generating images given (i.e., conditioned on) a text prompt
  • Classifier guidance: Using classifier gradients to text-increase image alignment
  • Latent space: Applying diffusion on image embeddings instead of image pixels
  • Диффузия: Постепенное добавление шума к данным и последующее обучение генерации данных из шума Текстовое кондиционирование: Генерация изображений на основе (т.е. обусловленных) текстового промпта Управление классификатором: Использование градиентов классификатора для усиления соответствия текста и изображения Латентное пространство: Применение диффузии к эмбеддингам изображений вместо пикселей

    OG image prompt: "a robot holding a paint brush painting on an art stand"

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

    Diffusion: From data to noise and back

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

    Let’s start with the earliest diffusion paper I know, cryptically titled Deep Unsupervised Learning using Nonequilibrium Thermodynamics, by Sohl-Dickstein in 2015. In it, the authors explained that the idea of diffusion was inspired by non-equilibrium statistical physics (perhaps the particle physics concept with the same name?)

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

    The key idea is to gradually destroy structure in a data distribution (e.g., image) via a forward diffusion process, and then learn a reverse diffusion process (via a model) to restore the structure in the data. And once we have a trained model, we can generate images by starting from pure noise and applying reverse diffusion (aka sampling).

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

    To implement forward diffusion, they apply a Markov chain that progressively adds Gaussian noise to the data until the signal is destroyed (i.e., complete noise).

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

    For reverse diffusion, they train a diffusion probabilistic model (DPM) to transform noised images to less noisy images. Reverse diffusion is done via many small denoising steps, instead of a single large step from pure noise to clean image—the intuition is that taking many small steps is more tractable than a single large step.

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

    They shared an example of diffusion on 2d Swiss roll data. Forward diffusion (top in blue, left to right) gradually adds Gaussian noise until the data is pure noise. Reverse diffusion (middle in red, right to left) gradually denoises the data to get back the 2d swiss roll.

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

    Forward (blue) and backward (red) diffusion process (source)

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

    Denoising Diffusion Probabilistic Models (DDPM; 2020) shares a gentler explanation of the diffusion process: Forward diffusion (\(q\)) is a predefined process that gradually adds Gaussian noise to the image until it’s pure noise. Reverse diffusion (\(p\)) is a learned process that gradually denoises an image starting from pure noise until we get an actual image.

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

    Forward (q) and backward (p) diffusion process (source)

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

    If we knew the conditional distribution of \(p(x_{t-1}\vert x_{t})\), we could just run the forward diffusion process in reverse: Sample random Gaussian noise (\(x_{t}\)) and denoise it to get a sample image from the real distribution.

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

    Unfortunately, we don’t know \(p(x_{t-1}\vert x_{t})\) as it’s intractable—it requires knowing the distribution of all possible images to compute the conditional probability. Thus, we train a model (i.e., neural network) to learn the conditional probability distribution \(p_{\theta}(x_{t-1}\vert x_{t})\), where \(\theta\) are the model parameters.

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

    Given that the forward diffusion process is Gaussian (since the added noise is Gaussian), perhaps we can assume the reverse process to be Gaussian too. If so, reverse diffusion can be represented via mean (\(\mu_{\theta}\)) and variance (\(\Sigma_{\theta}\)) and be parameterized as:

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

    In layman’s terms, the probability of the less noisy image (\(x_{t-1}\)) given a noisier image (\(x_{t}\)) from the previous timestep (\(t\)) is drawn from a Gaussian distribution (\(\mathcal{N}\)) where the mean is the mean of \(x_{t}\) at timestep \(t\) and the variance is the variance of \(x_{t}\) at timestep \(t\). Thus, the neural network needs to learn the mean (\(\mu_{\theta}\)) and variance (\(\Sigma_{\theta}\)). That said, in DDPM, the variance is predefined and the network only has to learn the mean.

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

    Training algorithm for DDPM (source)

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

    Here’s a step-by-step of the training algorithm:

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

  • Line 1: Start while loop
  • Line 2: Sample a random clean image (\(x_{0}\)) from the set of images
  • Line 3: Sample a noise level (\(t\)) uniformly from 1 to max \(T\)
  • Line 4: Sample some noise (\(\epsilon\)) from a Gaussian and corrupt image with the noise
  • Line 5: Train the neural network to predict the noise based on the corrupted image
  • Line 6: End while loop when model converges
  • Строка 1: Начало цикла while Строка 2: Берём случайное чистое изображение (\(x_{0}\)) из набора изображений Строка 3: Равномерно выбираем уровень шума (\(t\)) от 1 до максимального \(T\) Строка 4: Генерируем шум (\(\epsilon\)) из гауссова распределения и зашумляем изображение Строка 5: Обучаем нейросеть предсказывать шум по зашумлённому изображению Строка 6: Конец цикла while при сходимости модели

    Sampling algorithm for DDPM (source)

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

    When we have a trained model, here’s how to generate new images starting from noise:

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

  • Line 1: Get a sample noise image (\(x_{T}\)) from a Gaussian distribution
  • Line 2: Iterate from timestep \(T\) to timestep 1
  • Line 3: Sample additional Gaussian noise (\(z\) if timestep > 1 else zero, because we just return the clean image at timestep 1)
  • Line 4: Get the slightly denoised image (\(x_{t-1}\)) by subtracting the noise (\(\epsilon_{\theta}(x_{t}, t)\)) from the noisy image (\(x_{t}\)), and then adding back some noise (\(z\))
  • Line 5: End iteration
  • Line 6: Return clean image from timestep 1
  • Строка 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

    Notice the model predicts all the noise from a noisy image (\(\epsilon_{\theta}(x_{t}, t)\)). However, we only subtract a fraction of it, weighted by \(\frac{1-\sigma_{t}}{\sqrt{}1-\bar{\sigma_{t}}}\), and then add back noise (\(z\)) weighted by \(\sigma_{t}\).

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

    I was curious about these noise removal and addition weights and coded up a DDPM to tinker with it. To my surprise, the noise removal weights are as low as 0.01 to 0.02 while the noise addition weights go as high as 0.14. Remember the intuition that estimating small amounts of noise for multiple timesteps is more tractable than estimating all noise via a single timestep? This is how it’s implemented in the algorithm and code.

    Мне стало интересно разобраться с этими весами удаления и добавления шума, и я написал реализацию 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 - 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

    Weights for the latent, noise removal, and noise addition at t = 799, 640, 480, 320, 160, 0 (source)

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

    Via experimenting with the DDPM, I learned that more timesteps had a positive impact on sample quality though it also required more epochs and a large timestep embedding. Larger dimensions for the timestep embedding also improved loss and sample quality. On the other hand, more epochs, different loss functions, and batch size didn’t help. (Want to understand diffusion better? Clone this GitHub repo and play with the code!)

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

    So far, these models are only capable of basic diffusion (i.e., generating images from noise, limited by the dataset they’re trained on). They are unable to generate images from text prompts (unlike DALL·E and Stable Diffusion)—to do this, we need text conditioning.

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

    (Aside: I thought the approach of corrupting input with noise and learning to remove the noise was similar to denoising autoencoders and wrote a brief comparison.)

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

    Text conditioning: Influencing image output via text

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

    To understand text conditioning, I think it helps to start with Contrastive Language-Image Pre-training (CLIP; 2021). It embeds text and image in the same space via a projection layer. Thus, it can efficiently learn visual concepts, in the form of text, via natural language supervision and perform zero-shot classification.

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

    CLIP pre-training and zero-shot classification (source)

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

    In the pre-training stage, the image and text encoders are trained to predict which images are paired with which texts in a dataset of 400M image-caption pairs. CLIP is trained to maximize the cosine similarity of the image and text embeddings of image-caption pairs via a multi-modal embedding space.

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

    This is implemented via a linear projection to map each encoder’s representation to the multi-modal embedding space (lines 13 - 15 below). As a result, the text and image embeddings are now in the same space. Thus, given a text embedding, we can apply k-nearest neighbors to find similar images.

    Это реализуется через линейную проекцию, отображающую представления каждого энкодера в мультимодальное пространство эмбеддингов (строки 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

    # 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

    Pseudo-code to embed images and text via a multi-modal embedding (source)

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

    For zero-shot classification, all the dataset classes are converted into captions such as “a photo of a <class>”. Then, CLIP is used to predict the class that best matches the image.

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

    CLIP was quickly followed up by DALL·E (2021), one of the first text-to-image generation models open to the public—this is our first example of text conditioning.

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

    Remember the avocado chair from DALL·E? (source)

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

    At a high level, DALL·E starts by compressing images into 8,192 discrete tokens in a visual codebook (\(\mathcal{Z}\) in the image below). These image tokens can then be concatenated with text embeddings. The combined embedding is then fed into a transformer which learns how to predict the image tokens given a text embedding.

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

    Example of a visual codebook from the VQGAN paper (Note, this is not DALL·E; source)

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

    Why compress images into tokens in a codebook? The authors explained that using pixels directly as image tokens would require too much memory for high-resolution images. As a result, model capacity is spent on high-frequency details (i.e., pixels) instead of low-frequency structure (i.e., lines) that make images visually recognizable. (This is the same reason Stable diffusion encodes images into the latent space before running diffusion.)

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

    First, DALL·E trains a discrete variational encoder (dVAE) to compress 256 x 256 images into 32 x 32 image tokens (vocabulary size = 8,192). The parameters of the dVAE are then frozen when training the transformer.

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

    Next, image captions are lowercased and truncated to a max length of 256 tokens before being encoded (vocabulary size = 16,384). The image tokens are then concatenated after the text tokens (example below).

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

    Example of concatenated text and image tokens in DALL·E (source)

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

    Finally, an autoregressive transformer (i.e., predict the next item in a sequence) is trained to learn the joint distribution over the text and image tokens. The transformer is decoder-only, where each image token can attend to all text tokens earlier in the sequence.

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

    To generate images from text, the text prompt is embedded and fed into the transformer. The transformer then generates the sequence of image tokens. Finally, the dVAE decodes the image tokens to return a 256 x 256 image.

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

    DALL·E 2 (aka unCLIP, 2022) builds on the previous two papers by using the text and image encoder from CLIP and the autoregressive transformer from DALL·E. Similarly, unCLIP is trained on a dataset of image-caption pairs which are embedded via CLIP text and image encoders into text embeddings (\(z_{t}\)) and image embeddings (\(z_{i}\)).

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

    How the encoded text (blue) generates images via the prior and decoder (source)

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

    In the image above, the prior (\(p(z_{i}\vert y)\)) learns to produce CLIP image embeddings (\(z_{i}\)) conditioned on the text prompt (\(y\)). The decoder (\(p(x\vert z_{i}, y)\)) then produces the image conditioned on the CLIP image embedding (\(z_{i}\)) and optional text prompt (\(y\)). In other words, to generate images from text prompts (\(p(x\vert y)\)), we first sample CLIP image embeddings via the prior before decoding them via the decoder.

    На изображении выше 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, а затем декодируем их через декодер.

    The paper shared two approaches to learn the prior: autoregressive and diffusion.

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

    The autoregressive approach is similar to that of DALL·E where text conditioning is done by having the text embedding early in the sequence. They also prepend a dot product token (of text and image embedding) between the text and image embedding. This allowed the autoregressive prior to condition the model on the higher dot product since a higher text-image dot product indicates images that are more representative of the caption.

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

    For the diffusion approach, they trained a decoder-only transformer with a casual attention mask on a sequence of encoded text, text embedding, time step embedding, noised CLIP image embedding, and final embedding. The final embedding’s output is then used to predict the unnoised CLIP image embedding. Interestingly, in contrast to DDPM, they found it better to train the model to directly predict the unnoised image, instead of predicting the noise and then subtracting from the noisy image.

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

    The latter shows one way text conditioning can be applied to diffusion. The transformer attends to the text information in the sequence and uses it to predict the final output.

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

    Imagen (2022) takes it further by using a text encoder that wasn’t even trained on image-caption pairs (🤯). It uses the encoder network of the T5. This is a departure from CLIP-based approaches, where the text encoder is specifically trained on image-caption pairs and the text embeddings are projected into a multi-modal embedding space.

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

    It works because extremely large language models (LLMs), by virtue of sheer size, can still learn useful representations despite not being explicitly trained on text-to-image tasks. The benefit is that LLMs can learn on a text-only corpus which is easily larger than image-text datasets. Furthermore, they found that scaling the text encoder size is more impactful than UNet size in image-text alignment and image fidelity.

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

    Text encoder size > UNet size; dynamic thresholding > static thresholding (source)

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

    Imagen does text conditioning by first tokenizing the input text and encoding it via the T5 encoder. The encoded text then passes through a pooling step (image below).

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

    Encoding text via the T5 transformer in Imagen (source)

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

    The text embedding is then combined with the image and time step embedding (image below). The model is conditioned via cross-attention over the text embedding. This is implemented by concatenating the text embedding to the key-value pairs of each self-attention layer in the UNet. Cross-attention on the text embedding outperformed simple mean or attention-based pooling.

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

    Conditioning on time and text embeddings in Imagen (source)

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

    (Note how text is conditioned differently in DALL·E variants and Imagen. In DALL·E, text conditioning is done by concatenating the text embedding to the image embedding and then passing it through a transformer. In Imagen, text conditioning is done via cross-attention in the UNet.)

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

    The text embedding (green and red boxes below) is used throughout the image generation step. First, it’s used to generate the initial 64 x 64 image from noise (blue box). Then, it is used to increase the image resolution to 256 x 256 and then 1,024 x 1,024 (yellow boxes).

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

    High-level overview of Imagen's text encoder, diffusion generator, and resolution model (source)

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

    With text conditioning, we can now generate images based on text prompts. But text conditioning alone is insufficient to generate high-quality images that adhere to the text prompt—we also need guidance.

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

    Classifier guidance: Increasing the strength of prompts

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

    Guidance is a technique to explicitly incorporate image class—or text prompt—directly in the diffusion process. (This is the often tweaked guidance_scale hyperpameter.)

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

    The classifier-guidance paper (2021) noted that GANs relied heavily on class labels, often via class-conditioned normalization or discriminators with heads designed to behave like classifiers. This suggests that class information is crucial to the success of GANs for generation. So, to take a leaf from GANs, they use a classifier \(p_\phi(y\vert x)\) to improve image generation via diffusion.

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

    As a result, \(\nabla_{x} \log p_\phi(y\vert x)\) is added to the score function, updating it from \(\nabla_{x} \log p_\theta(x)\) to \(\nabla_{x} \log p_\gamma (x\vert y) = \nabla_{x} \log p_\theta(x) + \gamma \nabla_{x} \log p_\phi(y\vert x)\), where \(\nabla_x \log p_\phi(y\vert x)\) is the gradient of the classifier and \(\gamma\) is the guidance scale.

    В результате к функции оценки добавляется \(\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).

    (Note: For simplicity, I’ve dropped the \(t\) variable in the equations. In practice, text-to-image diffusion is also conditioned on time step which indicates the level of input noise.)

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

    To achieve this, they train a classifier (\(p_\phi(y \vert x)\)) on noised images (\(x\)) and then use the gradient (\(\nabla_{x} \log p_\phi(y \vert x)\)) to guide the sampling process towards the class label (\(y\)). To produce noised images, forward diffusion is applied on ImageNet with random crops to reduce overfitting. The classifier adopts the downsampling truck of the UNet, with pooling on the 8 x 8 layer to produce the final output.

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

    Recall that the score function is now \(\nabla_x \log p_\gamma (x\vert y) = \nabla_x \log p_\theta(x) + \gamma \nabla_x \log p_\phi(y \vert x)\) and \(\gamma\) is the guidance scale. The paper found that increasing the guidance scale beyond 1 had the effect of amplifying the conditioning signal (i.e., text prompt) and led to better images.

    Напомним, что функция оценки теперь выглядит как \(\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 усиливало сигнал кондиционирования (то есть текстовый промпт) и приводило к более качественным изображениям.

    With standard (left; scale=1) and stronger (right; scale=10) classifier-guidance (source)

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

    When using a scale of 1, while the classifier assigned reasonable probabilities of ~50% to the classes of the sampled images, upon visual inspection, these images did not match the classes. Scaling up the classifier gradients (i.e., guidance > 1) solved this issue and the class probabilities of the classifier increased to nearly 100%.

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

    However, classifier guidance is impractical as the classifier needs to be trained—from scratch—on noisy images. I.e., we can’t use a pre-trained classifier.

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

    Thus, classifier-free guidance (2021) was proposed. Instead of training a separate classifier, it trains a conditional diffusion model (\(p(x \vert y)\)) with conditioning dropout. Some proportion of the time, the conditioning information (i.e., image caption) is replaced with a null token. This is simple to implement and does not complicate the training pipeline or increase model parameters.

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

    As a result, the single neural network can function as either a conditional model \(p(x|y)\) or unconditional model \(p(x)\), depending on the guidance scale:

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

  • \(\gamma = 0\): unconditional model
  • \(\gamma = 1\): standard conditional model
  • \(\gamma > 1\): strongly conditional model that adheres more to the conditional (i.e., text prompt) and returns images with better text-alignment
  • \(\gamma = 0\): безусловная модель \(\gamma = 1\): стандартная условная модель \(\gamma > 1\): сильно обусловленная модель, которая точнее следует условию (то есть текстовому промпту) и возвращает изображения с лучшим соответствием тексту

    GLIDE (2021) explored using both CLIP-guidance and classifier-free guidance. CLIP guidance was implemented by replacing the classifier with a CLIP model trained on noised images. They found that users preferred images generated via classifier-free guidance.

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

    “A stained glass window of a panda eating bamboo”: No guidance (left) vs. CLIP-guidance (middle) vs. classifier-free guidance (right) in GLIDE (source)

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

    To be clear, DALL·E, DALL·E 2, and Imagen apply classifier-free guidance too. DALL·E randomly drops the text-conditioning 10% of the time while DALL·E 2 randomly sets the text embeddings to zero and randomly drops text captions 10% and 50% of the time. Imagen randomly sets text embeddings to zero for 10% of training instances. In the space of text-to-image diffusion, classifier-free guidance (aka conditioning dropout) is now as essential as dropout for regularization.

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

    That said, it was another development that allowed regular users to hack text-to-image diffusion on their laptops—departure to latent space.

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

    Latent space: Diffusion on latents instead of pixels

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

    Stable Diffusion (2021) differs from the previous diffusion models by working in the latent space instead of pixel space. It first compresses images via a variational autoencoder (VAE) into a more efficient and lower dimensional latent embedding. Next, the diffusion model learns to generate latent (i.e., compressed) representations of images which are then decoded into images via the VAE decoder.

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

    Similar to DALL·E and its visual codebook, latent space is motivated by the observation that most pixels in an image are imperceptible details that are semantically meaningless. However, because regular diffusion models are trained and evaluated in the pixel space, it leads to unnecessary computation and thus costly training and inference. Thus, the paper proposes diffusion on compressed images where the imperceptible details are excluded.

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

    Using a VAE to encode images from pixel space to latent space (left) (source)

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

    In Stable Diffusion, the VAE encodes noised images (via \(\mathcal{E}\)) into a low-dimensional latent representation which is fed into the UNet. It then decodes UNet-generated latent representations (via \(\mathcal{D}\)) into human-understandable images. The VAE has a reduction factor of 8, where the original image pixel space of 3 x 512 x 512 is encoded into latent space of 6 x 64 x 64, thus requiring 1/8 x 1/8 = 1/64 of the memory. During sampling, only the VAE decoder is needed.

    В 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 uses the CLIP text encoder. (But as Imagen has demonstrated, probably any sufficiently large text-only LLM can be used).

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

    Latent diffusion leads to faster training and sampling because we’re now working in the latent—instead of pixel—space. This leads to lower cost which leads to more experiments. The lower memory requirement also allows sampling run on consumer-grade laptops, putting text-to-image generation in the hands of regular hackers.

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

    • • •

    • • •

    We started with how diffusion can generate images from noise. Then, we saw how text conditioning enabled prompt-based image generation via autoregressive transformers and cross-attention, even using text encoders that weren’t trained on text-to-image tasks. Finally, we learned how guidance helps with generating images that are more aligned with the text prompt though at the cost of image diversity.

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

    The space of text-to-image has progressed rapidly since I started deliberately studying it. Two weeks ago, NVIDIA released eDiff-I which uses an ensemble of diffusion models. And we haven’t touched on text-to-video (e.g., Facebook’s Make-A-Video, Google’s Imagen Video) and text-to-3d (e.g., Google’s DreamFusion, NVIDIA’s Magic3D).

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

    Unfortunately, we can’t discuss all of them here (mostly because I don’t have the spare time and energy 😅). Nonetheless, I hope these fundamentals will help with your understanding of text-to-media generation and its future advances.

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

    Did I misunderstand or misrepresent any of the concepts or papers? If so, please reach out!

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

    References

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

  • Deep Unsupervised Learning using Nonequilibrium Thermodynamics
  • Generative Modeling by Estimating Gradients of the Data Distribution (NCSN)
  • Improved Techniques for Training Score-Based Generative Models
  • Denoising Diffusion Probabilistic Models (DDPM)
  • Denoising Diffusion Implicit Models (DDIM)
  • Improved Denoising Diffusion Probabilistic Models
  • Learning Transferable Visual Models From Natural Language Supervision (CLIP)
  • Zero-Shot Text-to-Image Generation (DALL·E)
  • Taming Transformers for High-Resolution Image Synthesis (VQGAN)
  • Hierarchical Text-Conditional Image Generation with CLIP Latents (DALL·E 2)
  • Photorealistic Text-to-Image Diffusion Models with Deep Language Understanding (Imagen)
  • How Imagen Actually Works
  • Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer (T5)
  • Diffusion Models Beat GANs on Image Synthesis (classifier-guidance)
  • Classifier-Free Diffusion Guidance
  • GLIDE: Towards Photorealistic Image Generation and Editing with Text-Guided Diffusion Models
  • High-Resolution Image Synthesis with Latent Diffusion Models (Stable Diffusion)
  • Deep Unsupervised Learning using Nonequilibrium Thermodynamics Generative Modeling by Estimating Gradients of the Data Distribution (NCSN) Improved Techniques for Training Score-Based Generative Models Denoising Diffusion Probabilistic Models (DDPM) Denoising Diffusion Implicit Models (DDIM) Improved Denoising Diffusion Probabilistic Models Learning Transferable Visual Models From Natural Language Supervision (CLIP) Zero-Shot Text-to-Image Generation (DALL·E) Taming Transformers for High-Resolution Image Synthesis (VQGAN) Hierarchical Text-Conditional Image Generation with CLIP Latents (DALL·E 2) Photorealistic Text-to-Image Diffusion Models with Deep Language Understanding (Imagen) How Imagen Actually Works Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer (T5) Diffusion Models Beat GANs on Image Synthesis (classifier-guidance) Classifier-Free Diffusion Guidance GLIDE: Towards Photorealistic Image Generation and Editing with Text-Guided Diffusion Models High-Resolution Image Synthesis with Latent Diffusion Models (Stable Diffusion)

    If you found this useful, please cite this write-up as:

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

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

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

    or

    или

    @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/} }

    @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/} }



    Join 11,800+ readers getting updates on machine learning, RecSys, LLMs, and engineering.

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