Интуитивное понимание того, как создается искусственный интеллект с помощью Stable Diffusion, Midjourney или DALL-E.

В последнее время возрос интерес к OpenAI DALL-E, Stable Diffusion (бесплатная альтернатива DALL-E) и Midjourney (размещенному на сервере Discord). Хотя искусство, созданное ИИ, очень крутое, еще более увлекательным является то, как оно работает. В последнем разделе я также включу некоторые ресурсы для всех, кто может начать работу в этом художественном пространстве ИИ.

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

Что такое диффузионные модели?

По сути, это двухэтапный процесс.

Во-первых, он уничтожает ввод до тех пор, пока не останется только шум.

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

Имея в виду вышеупомянутую основную идею, давайте посмотрим на архитектуру (полный документ см. по этой ссылке).

В этой архитектуре есть определенные разделы, которые важно знать. Символов довольно много, поэтому позвольте мне начать с их разбора.

Мы начинаем с x, который является исходным изображением. Мы передаем его в сеть кодировщику, где он будет закодирован в информационно плотное пространство, называемое Z.

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

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

Наконец, шум реконструируется с помощью декодера для получения нужного изображения.

Здесь я хочу выделить то, что я считаю тремя наиболее важными частями этой архитектуры:

  1. Поступательный процесс диффузии
  2. Сама нейронная сеть
  3. Аспект кондиционирования

Переслать процесс

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

Представление цепи Маркова

Поскольку процесс добавления шума представляет собой последовательность событий, в которой каждый временной шаг зависит от предыдущего, мы можем использовать цепь Маркова.

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

Гауссовский шум

Способ дискретизации шума на самом деле описывается следующей формулой:

Это условное распределение Гаусса, которое зависит от предыдущего изображения и конкретной дисперсии. Среднее значение и дисперсия распределения описаны здесь.

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

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

Бета

Так что же такое бета? Чтобы понять бета-версию, давайте сначала начнем с краткого обзора того, как работают изображения. Мы знаем, что изображения состоят из пикселей, и у каждого пикселя есть 3 канала — (R)ed, (G)reen и (B)lue.

Скажем, у нас есть пиксель чисто зеленого цвета (-1,1,-1) [R,G,B]. Мы берем этот конкретный канал (зеленый) и применяем уравнение на рис. 2.

Оглядываясь назад, мы замечаем, что выбор большей беты будет означать, что распределение пикселей будет шире из-за большей дисперсии. Однако это также означало бы, что нормальная кривая смещается дальше к 0, поскольку это влияет на средний член.

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

Планирование шума

На каждом конкретном временном шаге t будет применяться определенное значение бета. Эта последовательность Бета известна как график шума.

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

Существует множество стратегий планирования шума, включая, помимо прочего:

  • Линейный
  • сигмоидальный
  • квадратичный

Нейронная сеть

Теперь, когда мы рассмотрели прямой процесс, давайте обсудим, как мы можем «обратить» всю последовательность и предсказывать изображения только с шумом.

Здесь на помощь приходит нейронная сеть. Думайте об этом как о шумоподавлении и удалении «примесей» изображения шаг за шагом, пока оно не восстановится или не создаст очень хорошее изображение. Нейронная сеть обучается на парах изображений и подписей, взятых из LAION-5B, общедоступного набора данных, полученного из данных Common Crawl, взятых из Интернета.

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

Рассмотрим пример, показанный на рис. 3. Здесь у нас есть очень зашумленное изображение на временном шаге 200, которое должно показать крупье, если вы полностью уберете шум с изображения. Нейронная сеть предсказывает шум на изображении, которое мы видим в (1), и создает шум в виде вывода, показанного в (2).

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

Мы продолжаем делать это в цикле for, пока не достигнем исходного изображения.

Последняя часть головоломки — создать определенные изображения с текстом. Это можно сделать с помощью последнего механизма — кондиционирования.

Кондиционирование

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

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

По сути, он имеет приблизительное представление о шуме, создаваемом смайликом, и включает его в прогноз.

Мы еще раз вычтем шум, чтобы перейти от временного шага 200 к 199. Мы делаем то же самое, что и раньше, итеративно повторяя процесс, но на этот раз снова снабжая его текстовой подсказкой, чтобы сфокусироваться и увеличить масштаб на нужном объекте, который является улыбающееся лицо.

Дополнительные приемы

Чтобы еще лучше получить то, что мы хотим, мы можем использовать некоторые дополнительные приемы. Мы можем использовать Classifier Free Guidance (CFG), чтобы сделать вывод более привязанным к подсказке.

Когда вы играете со стабильной диффузией самостоятельно, вы можете увидеть ползунок под названием CFG — чем выше значение, тем ближе оно к вашим описаниям.

Мы делаем это, отправляя входные данные в нейронную сеть дважды, один раз с встраиванием текста, а другой без, как показано на рис. 6.

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

Собираем все вместе

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

Типичная подсказка имеет следующую структуру:

«[тип изображения] [основного объекта], [стиль]»

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

Благодаря этому мы лучше поняли, как работает технология. Если вы хотите попробовать это сами, ознакомьтесь с этими ресурсами:

Спасибо, что прочитали еще одно Руководство для начинающих. Если вам интересно, например, как работают сверточные сети, посмотрите мой другой пост, написанный здесь, который все объясняет просто.