Назад
671

Персонализированная генерация: Textual Inversion и DreamBooth

671

Введение

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

Рисунок 1. Основная идея персонализированной генерации [источник]

Проблемы наивных подходов к персонализированной генерации:

  1. Обучение диффузионной модели с нуля для каждого нового концепта, например, для одного объекта или стиля — это вычислительно дорого.
  2. Наивное дообучение существующей модели на новый концепт может привести к проблеме «забывания» ранее полученных знаний. То есть модель, обученная рисовать животных и пейзажи, может после дообучения на один конкретный объект перестать адекватно генерировать другие объекты.
Рисунок 2. Примеры работы неуспешной персонализированной генерации [источник]

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

В обзоре рассмотрим два последовательно появившихся подхода для решения этой задачи — Textual Inversion и Dreambooth.

Textual Inversion

Основная идея

Рисунок 3. Примеры работы модели Textual Inversion [источник]

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

Рисунок 4. Токенизация текста [источник]

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

Рисунок 5. Текстовые эмбеддинги [источник]

Для обозначения нового, уникального концепта (например, конкретного объекта, домашнего животного или художественного стиля), который отсутствует в словаре модели, вводится специальное псевдослово, обозначаемое как \(S^*\). Например, псевдослово, иллюстрирующее кота на рисунке ниже:

Рисунок 6. Пример пользовательского концепта

В дальнейшем для генерации данное псевдослово трактуется как обычное слово и может комбинироваться с другими для text-to-image генерации. Важно отметить: этот процесс не затрагивает саму генеративную модель, её веса остаются замороженными.

Поиск эмбеддинга для псевдослова

Обычно для элементов из словаря (токенов) уже есть соответствующий эмбеддинг. Теперь без замены текстового энкодера мы должны научить его новому концепту, то есть добавить в словарь ещё один токен \(S^*\).

Для этого решается оптимизационная задача:

  1. Сначала эмбеддинг инициализируется либо случайно, либо эмбеддингом близкого слова (например, для картинки выше — «кот»).
  2. Затем берётся небольшой датасет из 3-5 изображений концепта, который нужно закодировать, и каждому изображению ставится шаблонный промпт, например, «A photo of \(S^*\)».
  3. Текстовый энкодер преобразует этот промпт в последовательность эмбеддингов, где новому токену \(S^*\) соответствует эмбеддинг \(v^*\). В последовательности все эмбеддинги, кроме \(v^*\), фиксированы, а \(v^*\) будет обучаться.
  4. Пара из зашумлённого изображения \(z_t\) и эмбеддинг текста \(c_{\theta}(y)\) передаются в замороженную диффузионную модель, а затем минимизируется стандартный диффузионный лосс для поиска оптимального \(v^*\):

\(v_* = \arg\min_{v} \mathbb{E}{z,\, y,\, \epsilon,\, t} \left[ \left\| \epsilon — \epsilon\theta(z_t, t, c_\theta(y)) \right\|_2^2 \right]\)

где \(z \sim \mathcal{E}(x)\) — латент, получаемый путём кодирования входного изображения \(x\), \(\epsilon \sim \mathcal{N}(0,1)\) — шум, \(\epsilon_\theta(z_t, t, c_\theta(y))\) — предсказание диффузионной модели на основе зашумлённого латента \(z_t\), шага зашумления t и закодированного промпта \(c_\theta(y)\).

Важно отметить: в этом сетапе обучаетcя только векторный эмбеддинг \(v^*\), а дифузионная модель и текстовый энкодер заморожены. Обученный эмбеддинг \(v^*\) сохраняется и используется в процессе инференса.

Весь пайплайн представлен на рисунке ниже:

Рисунок 7. Пайплайн оптимизации эмбеддинга для выбранного псевдослова [источник]

Метрики

В качестве основных метрик авторы приводят результаты оценки CLIP и user study. CLIP оценивает косинусное расстояние с таргетным концептом (Image similarity) и с желаемым промптом (text similarity).

Участникам user study задавали два вопроса:

  1. Оценка Визуальной Точности. Пользователям показывали четыре изображения, использованных для обучения конкретного концепта. Им нужно было ранжировать результаты пяти различных моделей по тому, насколько они похожи на исходные обучающие изображения.
  2. Оценка Соответствия Тексту. Пользователям представляли текстовый запрос, задающий контекст (например, «Фотография на пляже»), и просили ранжировать результаты тех же моделей по степени соответствия заданному текстовому описанию.

Результаты приведены на рисунке ниже:

Рисунок 8. CLIP и user study результаты: (a) оценки на основе CLIP и (b) user-study показывают, что первые согласуются с оценкой пользователей [источник]

Визуализация результатов

Примеры работы подхода представлены авторами статьи на рисунке ниже. Хоть и не идеально, но подход сохраняет предложенный концепт.

Рисунок 9. Сравнение с baselines [источник]

Примеры работы метода для задач стилизации:

Рисунок 10. Использование для задачи стилизации [источник]

Также подход позволяет комбинировать несколько объектов вместе:

Рисунок 11. Объединение нескольких концептов [источник]

DreamBooth

DreamBooth является улучшением Textual Inversion и до сих пор активно используется в задачах.

Рисунок 12. Основной механизм работы DreamBooth: слева — fine-tuning, справа — генерация [источник]

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

Обучение

Как и в предыдущем сэтапе, у нас есть небольшой набор 3-5 изображений уникального концепта, и мы также хотим ввести в промт уникальное псевдослово, например, a photo of a [V] dog.

Авторы говорят внедрять знание о новом концепте через дообучение самой диффузионной модели, однако:

  • возможно забывание других объектов;
  • нужно много вычислительных ресурсов.

Для решения этих проблем они предлагают prior preservation loss.

В подходе используется два экземпляра одной диффузионной модели: первая дообучается на новый концепт, а другая замораживается. На каждой итерации с помощью замороженной предобученной модели генерируются примеры, соответствующие только классу (например, a dog), без уникального псевдослова. Обучаемая модель теперь одновременно учится генерировать изображения с заданным концептом, используя промпт с псевдословом (a [V] dog) и изображения из предобученной замороженной модели с обычным промптом (a dog).

На рисунке ниже представлен пайплайн обучения:

Рисунок 13. Основной принцип обучения — использование class-specific prior preservation loss [источник]

Обозначим предобученную диффузионную text-to-image модель как \(\hat{\mathbf{x}}_\theta\), которую будем дообучать, а \(\hat{x}\) — как её замороженную версию. Общий лосс состоит из двух частей.

  1. Лосс для обучения нового концепта

\(\mathbb{E}{\mathbf{x}, \mathbf{c}, \boldsymbol{\epsilon}, t} w_t \left\| \hat{\mathbf{x}}\theta(\alpha_t \mathbf{x} + \sigma_t \boldsymbol{\epsilon}, \mathbf{c}) — \mathbf{x} \right\|_2^2\),

где \(с\) — промпт с псевдословом, а \(x\) — изображение из обучающего датасета.

  1. Лосс для сохранения знаний исходной диффузионной модели

\(\mathbb{E}{\boldsymbol{\epsilon}’, t} w{t’} \left\| \hat{\mathbf{x}}\theta(\alpha{t’} \mathbf{x}{\mathrm{pr}} + \sigma{t’} \boldsymbol{\epsilon}’, \mathbf{c}{\mathrm{pr}}) — \mathbf{x}{\mathrm{pr}} \right\|_2^2\) ,

где \(x_{pr} = \hat{x}(z_{t_1}, x_{pr})\) — изображение исходной диффузионной модели из случайного шума \(z_{t_1} \sim \mathcal{N}(0,I)\) с использованием промпта без псевдослова \(c_{pr}\).

В качестве итогового лосса берётся взвешенная сумма.

\(\mathbb{E}{\mathbf{x}, \mathbf{c}, \boldsymbol{\epsilon}, \boldsymbol{\epsilon}’, t} \left[ w_t \left\| \hat{\mathbf{x}}\theta(\alpha_t \mathbf{x} + \sigma_t \boldsymbol{\epsilon}, \mathbf{c}) — \mathbf{x} \right\|2^2 + \lambda w{t’} \left\| \hat{\mathbf{x}}\theta(\alpha{t’} \mathbf{x}{\mathrm{pr}} + \sigma_{t’} \boldsymbol{\epsilon}’, \mathbf{c}{\mathrm{pr}}) — \mathbf{x}{\mathrm{pr}} \right\|_2^2 \right],\)

По словам авторов, достаточно всего 1000 итераций с \(\lambda = 1\), чтобы модель сошлась для Imagen и Stable Diffusion.

Метрики

Для валидации модели авторы собрали датасет из 30 объектов, разделив их на две категории: объекты (21) и живые существа, животные (9).

Примеры изображений из датасета:

Рисунок 14. Датасет для валидации в работе DreamBooth [источник]

Для валидации использовали несколько основных метрик:

  • CLIP-I и DINO — для сохранения деталей нового концепта. CLIP-I считает косинусное расстояние между эмбеддингами CLIP-сгенерированной и реальной картинками, DINO — тоже косинусное расстояние, но между фичами s/16 DINO-сгенерированной и реальной картинками.
  • CLIP-T — для проверки соответствия промпту, косинусное расстояние между эмбеддингами CLIP для картинки и текста.

Также авторы провели user-study. Каждому участнику показали набор реальных изображений (обучающий сет) для определённого объекта и два сгенерированных изображения — по одному от каждого метода (Textual Inversion и DreamBooth). Пользователи отвечали на два вопроса:

  • Точность воспроизведения объекта (Subject Fidelity): «Какое из двух изображений лучше воспроизводит идентичность объекта (например, тип предмета и детали) из исходных примеров?»;
  • Соответствие промпту (Prompt Fidelity): «Какое из двух изображений лучше всего описывается заданным текстовым запросом?».

Это соотносится с user-study, проводимым для работы Textual Inversion.

Основные метрики приведены на рисунке 15:

Рисунок 15. Основные метрики [источник]

Можно заметить, что метод DreamBooth значительно превосходит Textual Inversion как по метрикам, так и по предпочтениям пользователей, и лучше сохраняет соответствие заданному концепту и таргетному промпту.

Кроме того, авторы говорят, что использование prior preservation loss очень важно в контексте сохранения разнообразия генерации и избежания «забывания».

Для демонстрации авторы проводят обучение модели без лосса и с ним и сравнивают несколько основных метрик:

  • DINO, CLIP-I, CLIP-T;
  • PRES (prior preservation metric) — среднее попарное сходство DINO-эмбеддингов между двумя наборами изображений: изображения, сгенерированные по запросу класса (например, «собака»), и реальные изображения уникального объекта. Если среднее сходство оказывалось высоким, это сигнализировало о коллапсе: модель, потеряв общие знания, начинала генерировать случайные объекты класса, которые были слишком похожи на уникальный обучаемый объект. Чем выше значение этой метрики, тем сильнее языковой дрейф, что подтверждает необходимость введения Prior Preservation Loss для сохранения разнообразия и общих знаний модели о классе;
  • DIV (diversity metric) — среднее попарное LPIPS расстояние. Высокое значение DIV говорит о том, что модель генерирует визуально разнообразные изображения при одном и том же промпте.
Рисунок 16. Влияние prior preservation loss на разнообразие генерации в метриках [источник]

Также влияние этого лосса представлено на рисунке 17:

Рисунок 17. Влияние prior preservation loss на разнообразие генерации в картинках. Без использования предложенного лосса модель коллапсирует в генерацию объектов в одинаковой позе [источник]

Визуализация результатов

Также можно визуально оценить качество работы предложенной модели в различных задачах.

  1. Генерация объектов в разном окружении
Рисунок 18. Примеры DreamBooth-генерации таргетного концепта в различных окружениях [источник]
  1. Art Rendition
Рисунок 19. Примеры DreamBooth-генерации таргетного концепта в различной стилизации [источник]
  1. Property Modification
Рисунок 20. Примеры DreamBooth-генерации таргетного концепта с изменением отдельных свойств [источник]
  1. Accessorization
Рисунок 21. Примеры DreamBooth-генерации таргетного концепта с добавлением различных аксессуаров [источник]

И напоследок:

Рисунок 22. Примеры DreamBooth-генерации комикса 🙂 [источник]

Заключение

В статье мы рассмотрели два подхода для персонализированной генерации:

  • Textual Inversion — добавление нового концепта в словарь и обучение специального эмбеддинга для этого токена.
  • DreamBooth — дообучение самой диффузионной модели с помощью Prior Preservation Loss.

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

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

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

Более современные подходы можно найти в репозитории на гитхабе 🙂

Полезные ссылки

Generative Computer Vision

Записывайтесь на наш курс, чтобы разобраться в области генеративного CV. Вы узнаете, как устроены SOTA модели и подходы, научитесь тюнить генеративные модели; освоите super-resolution, image editing/inpainting, face restoration, text2image, а также более комплексные задачи.

0/0

Телеграм-канал

DeepSchool

Короткие посты по теории ML/DL, полезные
библиотеки и фреймворки, вопросы с собеседований
и советы, которые помогут в работе

Открыть Телеграм

Увидели ошибку?

Напишите нам в Telegram!