Diffusers documentation
Управляемая генерация
Управляемая генерация
Управление выводами, генерируемыми диффузионными моделями, давно является целью сообщества и сейчас представляет собой активную область исследований. Во многих популярных диффузионных моделях незначительные изменения входных данных, как изображений, так и текстовых промптов, могут кардинально влиять на результат. В идеальном мире мы хотели бы иметь возможность контролировать, как семантика сохраняется и изменяется.
Большинство примеров сохранения семантики сводятся к возможности точно сопоставить изменение входных данных с изменением выходных. Например, добавление прилагательного к подлежащему в промпте сохраняет весь кадр, изменяя только соответствующий объект. Или же генерация вариаций конкретного объекта сохраняет его позу.
Кроме того, существуют характеристики сгенерированных изображений, на которые мы хотели бы влиять помимо сохранения семантики. То есть в целом мы хотим, чтобы наши результаты были высокого качества, соответствовали определённому стилю или выглядели реалистично.
Мы опишем некоторые из техник, которые поддерживает diffusers для управления генерацией в диффузионных моделях. Многие из них относятся к передовым исследованиям и могут быть достаточно тонкими. Если что-то требует уточнения или у вас есть предложение, не стесняйтесь открыть обсуждение на GitHub или проблему на GitHub.
Мы приводим высокоуровневое объяснение того, как можно управлять процессом генерации, а также краткий технический фрагмент. Для более глубокого понимания технических деталей лучшими источниками информации всегда являются оригинальные статьи, ссылки на которые даны в разделах о конвейерах.
В зависимости от задачи следует выбирать соответствующую технику. Во многих случаях эти техники можно комбинировать. Например, можно объединить Textual Inversion и SEGA, чтобы обеспечить более точное семантическое управление выводами, сгенерированными с помощью Textual Inversion.
Если не указано иное, это методы, которые работают с существующими моделями и не требуют собственных весов.
- InstructPix2Pix
- Внимание и возбуждение
- Семантическое управление
- Руководство по self-attention
- Depth2Image
- MultiDiffusion Panorama
- DreamBooth
- Textual Inversion
- ControlNet
- Взвешивание промптов
- Custom Diffusion
- DiffEdit
- T2I-Adapter
- FABRIC
Для удобства мы приводим таблицу, в которой указано, какие методы предназначены только для инференса, а какие требуют дообучения/обучения.
| Метод | Только вывод | Требуется обучение / дообучение | Комментарии |
|---|---|---|---|
| InstructPix2Pix | ✅ | ❌ | Также можно дообучить для лучшей работы с конкретными инструкциями по редактированию. |
| Внимание и возбуждение | ✅ | ❌ | |
| Семантическое управление | ✅ | ❌ | |
| Руководство по self-attention | ✅ | ❌ | |
| Depth2Image | ✅ | ❌ | |
| MultiDiffusion Panorama | ✅ | ❌ | |
| DreamBooth | ❌ | ✅ | |
| Textual Inversion | ❌ | ✅ | |
| ControlNet | ✅ | ❌ | ControlNet можно обучить/дообучить на собственном условии. |
| Взвешивание промптов | ✅ | ❌ | |
| Custom Diffusion | ❌ | ✅ | |
| DiffEdit | ✅ | ❌ | |
| T2I-Adapter | ✅ | ❌ | |
| Fabric | ✅ | ❌ |
InstructPix2Pix
InstructPix2Pix дообучен на основе Stable Diffusion для поддержки редактирования входных изображений. В качестве входных данных он принимает изображение и промпт, описывающий требуемое редактирование, а на выходе возвращает отредактированное изображение. InstructPix2Pix был явно обучен хорошо работать с промптами в стиле InstructGPT.
Внимание и возбуждение
Функция Attend and Excite позволяет объектам, указанным в промпте, быть достоверно представленными на итоговом изображении.
В качестве входных данных задаётся набор индексов токенов, соответствующих объектам в промпте, которые должны присутствовать на изображении. В процессе денойзинга для каждого индекса токена гарантируется, что минимальный порог внимания будет достигнут хотя бы для одного патча изображения. Промежуточные латенты итеративно оптимизируются в ходе денойзинга, чтобы усилить внимание к наиболее «забытому» токену объекта, пока порог внимания не будет пройден для всех токенов объектов.
Как и Pix2Pix Zero, Attend and Excite также включает мини-цикл оптимизации (без изменения предобученных весов) в своём конвейере и может требовать больше памяти, чем обычный StableDiffusionPipeline.
Семантическое руководство (SEGA)
SEGA позволяет добавлять или удалять один или несколько концептов с изображения. Также можно управлять силой концепта. Например, концепт улыбки можно использовать для постепенного усиления или ослабления улыбки на портрете.
Аналогично тому, как классификаторное свободное наведение (classifier free guidance) обеспечивает наведение через пустые входные промпты, SEGA обеспечивает наведение на концептуальные промпты. Несколько таких концептуальных промптов могут применяться одновременно. Каждый концептуальный промпт может добавлять или удалять свою концепцию в зависимости от того, применяется ли наведение положительно или отрицательно.
В отличие от Pix2Pix Zero или Attend and Excite, SEGA взаимодействует непосредственно с процессом диффузии, а не выполняет явную оптимизацию на основе градиентов.
Руководство по само-вниманию (SAG)
Руководство по само-вниманию (Self-attention Guidance) повышает общее качество изображений.
SAG предоставляет руководство от предсказаний, не обусловленных высокочастотными деталями, до полностью обусловленных изображений. Высокочастотные детали извлекаются из карт само-внимания UNet.
Depth2Image
Depth2Image дообучен на базе Stable Diffusion для более точного сохранения семантики при генерации вариаций изображений по текстовому описанию.
Она опирается на оценку монокулярной глубины исходного изображения.
MultiDiffusion Panorama
MultiDiffusion Panorama определяет новый процесс генерации на основе предобученной диффузионной модели. Этот процесс объединяет несколько методов диффузионной генерации, которые можно непосредственно применять для создания изображений высокого качества и разнообразия. Результаты соответствуют пользовательским параметрам управления, таким как желаемое соотношение сторон (например, панорама) и пространственные направляющие сигналы, от строгих масок сегментации до ограничивающих прямоугольников. MultiDiffusion Panorama позволяет генерировать изображения высокого качества с произвольным соотношением сторон (например, панорамы).
Доработка собственных моделей
Помимо предобученных моделей, Diffusers содержит скрипты обучения для дообучения моделей на данных, предоставленных пользователем.
DreamBooth
DreamBooth выполняет дообучение модели, чтобы научить её новому объекту. Например, несколько фотографий человека можно использовать для генерации изображений этого человека в разных стилях.
Textual Inversion
Textual Inversion выполняет дообучение модели, чтобы научить её новому понятию. Например, несколько изображений в определённом художественном стиле можно использовать для генерации картинок в этом же стиле.
ControlNet
ControlNet — это вспомогательная сеть, добавляющая дополнительное условие. Существует 8 канонических предобученных ControlNet, обученных на различных условиях, таких как обнаружение границ, каракули, карты глубины и семантическая сегментация.
Взвешивание промпта
Взвешивание промпта — это простой метод, который придаёт больший вес внимания определённым частям текстового входа.
Custom Diffusion
Custom Diffusion выполняет дообучение только карт кросс-внимания предобученной текстово-изображательной диффузионной модели. Также он позволяет дополнительно выполнять Textual Inversion. По своей архитектуре он поддерживает обучение на нескольких концепциях. Как и DreamBooth и Textual Inversion, Custom Diffusion используется для обучения предобученной текстово-изображательной диффузионной модели новым концепциям, чтобы генерировать выходные данные, включающие концепции интереса.
DiffEdit
DiffEdit позволяет выполнять семантическое редактирование входных изображений вместе с входными промптами, сохраняя исходные изображения в максимально возможной степени.
T2I-Adapter
T2I-Adapter — это вспомогательная сеть, добавляющая дополнительное условие. Существует 8 канонических предобученных адаптеров, обученных на различных условиях, таких как обнаружение границ, наброски, карты глубины и семантические сегментации.
Fabric
Fabric — это подход, не требующий обучения, применимый к широкому спектру популярных диффузионных моделей. Он использует слой само-внимания, присутствующий в наиболее распространённых архитектурах, для обусловливания процесса диффузии набором изображений обратной связи.
Update on GitHub