Как на самом деле работает Устойчивая диффузия? Интуитивное объяснение

Устойчивая диффузия объяснение работы.

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

Рисунок 1 (изображение, созданное Midjourney)

Мотивация

Существует несколько подходов к синтезу изображений (создание новых изображений с нуля), и они включают Генеративно-состязательные сети (GAN), которые плохо справляются с разнообразными данными; Авторегрессионные трансформеры, которые медленно обучаются и выполняются (подобно трансформерам LLM, генерирующим текст токен за токеном, они генерируют изображения патч за патчем), и модели диффузии, которые сами по себе противодействуют некоторым из этих проблем, но остаются вычислительно затратными. Для обучения таких моделей все еще требуется сотни дней CPU, и фактическое использование модели включает выполнение ее шаг за шагом для создания конечного изображения, что также требует значительного времени и вычислительных ресурсов.

Краткий обзор моделей диффузии

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

Затем наша модель учится предсказывать точный шум, который был применен в определенный момент времени, и мы можем использовать ее вывод для «очистки» изображения в этот момент времени. Это позволяет нам эффективно перейти от изображения T к изображению T-1. Для повторения: модель обучается, предоставляя ей изображение с примененным шумом в некоторый момент времени T, а также сам момент времени T, и вывод представляет собой шум, который применялся, чтобы перейти от момента времени T-1 к T!

Рисунок 2 (источник)

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

Модель UNet

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

Проблемы

Вот где возникают проблемы с традиционными моделями диффузии. Первая проблема – это время обучения. Предположим, у нас есть N изображений, и мы применяем шум к изображению T раз, то есть N*T возможных входов в нашу модель. И часто это высокоразрешенные изображения, и каждый вход будет включать большие размеры изображения. В конце концов, мы не хотим, чтобы Midjourney создавала пиксельное искусство…

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

Другая проблема заключается в полезности такой модели. Если вы заметили, ввод текста еще не упоминался; однако мы все привыкли к реализациям, преобразующим текст в изображения, а не случайный шум в изображения. Так как и где именно вступает в действие этот функционал?

Латентные модели диффузии

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

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

Вторая модель – это фактический Диффузер, который может преобразовывать эту латентную представление в изображение. Однако у этого Диффузера есть особая модификация, которая позволяет ему “понимать” и быть направляемым входами из других областей, таких как текст.

Восприимчивое сжатие изображений

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

Эта модель сжатия на самом деле называется “автокодировщиком”, и снова эта модель учится кодировать данные в сжатое латентное пространство, а затем декодировать их обратно в исходную форму. Цель такой модели – минимизировать разницу между входом и восстановленным выходом. Для нашей функции потерь мы используем два компонента.

  1. Восприимчивая потеря – наша цель – минимизировать различия в особенностях изображения (таких как грани или текстуры), а не различия пикселей между исходной и декодированной версиями. Существуют существующие инструменты, которые могут экстраполировать их изображений, и мы можем использовать их.
  2. Объектив на основе патчей-адверсарии – ГАН (посмотрите мою предыдущую статью о различных типах моделей), цель которого – обеспечить местный реализм, анализируя патч изображения патча за патчем и классифицируя, является ли определенный патч реальным или фейковым.

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

Текст

Так где и как текст учитывается в этом?

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

Рисунок 3 (источник)

Через отдельный кодировщик текст преобразуется в “промежуточное представление” (представление, в котором более важные части текста имеют больший вес), и эти веса влияют на слои UNet, направляя окончательное изображение, которое будет создано. Это происходит потому, что модель имеет встроенный компонент “кросс-внимания”, который, подобно трансформаторам, позволяет различным частям промежуточного представления влиять на определенные части изображения меньше и на другие – больше. Это, конечно, обучается через стандартную схему прямого и обратного распространения. Наш Denoising UNet получает текст и некоторый случайный шум (оба закодированы), и его окончательный вывод сравнивается с исходным изображением. Модель одновременно учится эффективно использовать текст и эффективно устранять шум. Если вы не знакомы с прямым и обратным распространением, я настоятельно рекомендую изучить эти темы, так как они являются фундаментальными для машинного обучения.

Вывод

LDM-модели хорошо справляются с различными задачами, включая заполнение пропусков, супер-разрешение и генерацию изображений. Эта мощная модель стала неотъемлемой частью мира ИИ-графики, и мы все еще открываем новые случаи использования. И хотя этот статья должна дать вам концептуальное понимание, есть еще много деталей. Если вы хотите узнать больше, ознакомьтесь с этой статьей под названием “High-Resolution Image Synthesis with Latent Diffusion Models”, которая описывает математику за большинством вещей, о которых я упоминал.

Источники

  1. https://openaccess.thecvf.com/content/CVPR2022/papers/Rombach_High-Resolution_Image_Synthesis_With_Latent_Diffusion_Models_CVPR_2022_paper.pdf
  2. https://medium.com/@steinsfu/diffusion-model-clearly-explained-cd331bd41166
  3. https://medium.com/analytics-vidhya/creating-a-very-simple-u-net-model-with-pytorch-for-semantic-segmentation-of-satellite-images-223aa216e705