Модели глубокого обучения преобразования текста в изображение, такие как стабильная диффузия, используют передовые нейронные сети для создания высококачественного визуального контента из текстовых описаний, преобразуя творческий ландшафт. Пользователь может манипулировать многочисленными характеристиками сгенерированного изображения. Например, если человек хочет, чтобы модель изображала кошку, он может указать ее цвет, размеры и местонахождение, в помещении или на улице, среди других атрибутов. Однако, если кто-то хочет создать иллюстрацию своей конкретной кошки, а не общее представление кошки, тогда необходима тонкая настройка. Тонкая настройка, процесс дальнейшего обучения этих предварительно обученных моделей на определенных наборах данных, позволяет получать более точные и контекстно-зависимые выходные данные, повышая их эффективность в различных приложениях. Пользовательская диффузия — это эффективный метод точной настройки для быстрого обучения модели преобразования текста в изображение, такой как Стабильная диффузия, новым концепциям всего на нескольких примерах, а также позволяет совместно обучать и комбинировать несколько новых концепций с существующими. Этот метод превосходит несколько базовых показателей и параллельные работы, такие как Textual Inversion и Dreambooth, при этом он эффективен с точки зрения памяти и вычислений. Тем не менее, диффузия обычаев борется с составлением сложных комбинаций понятий, таких как собака и кошка, и борется с композициями из трех или более понятий. Настоящим мы предлагаем улучшение для решения проблемы с композицией собаки и кошки.

Фон

Авторы Custom Diffusion предлагают обновлять только параметры матрицы проекции ключа и значения (Wk и Wv) блока перекрестного внимания (attn2.to_k и attn2.to_v) в процессе тонкой настройки, поскольку эти параметры имеют относительно более высокое значение по сравнению с другими слоями и достаточны для обновления модели новой парной концепцией текст-изображение.

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

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

Первоначальная модель Custom Diffusion с незафиксированным ключом и значением слоев перекрестного внимания была оценена посредством тонкой настройки с использованием комбинации новых изображений кошек и новых собак. ‹https://www.cs.cmu.edu/~custom-diffusion/assets/data.zip›. Специальные словесные токены, такие как ‹new1› и ‹new2›, используются для обозначения конкретных кошек и собак, используемых для дрессировки.

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

Теперь мы проверяем, может ли он изобразить двух животных вместе, используя подсказку «новый2› кот и «новый1› собака». Ниже приведен пример шести выходных данных, которые будет генерировать эта модель, каждый с тем же приглашением, что и выше, но с разными начальными значениями случайных чисел:

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

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

Метод

Мы предположили, может ли точная настройка дополнительных терминов в блоках внимания помочь модели изолировать каждый предмет. Следовательно, весь блок само-внимания (attn1) был разморожен, чтобы позволить ему научиться само-вниманию, и получившаяся конфигурация называется self-crossattn-kv, что контрастирует с конфигурацией замороженной модели, где остальные компоненты модели остаются неизменными. Полученное выходное изображение похоже на исходную модель, но сам кот прорисован с большей точностью.

class CustomDiffusion(LatentDiffusion):
    def __init__(self,
                 freeze_model='crossattn-kv',
                 cond_stage_trainable=False,
                 add_token=False,
                 *args, **kwargs):

        self.freeze_model = freeze_model
        self.add_token = add_token
        self.cond_stage_trainable = cond_stage_trainable
        super().__init__(cond_stage_trainable=cond_stage_trainable, *args, **kwargs)

    self.layer_dict = {'crossattn-kv': ['attn2.to_k', 'attn2.to_v'], 'crossattn': ['attn2'], \
                          'self-crossattn-kv': ['attn2.to_k', 'attn2.to_v', 'attn1'], 'self-crossattn': ['attn2', 'attn1']}
    
            for x in self.model.diffusion_model.named_parameters():
                x[1].requires_grad = False
                if 'transformer_blocks' in x[0]:
                    for item in self.layer_dict[self.freeze_model]:
                        if item in x[0]:
                            x[1].requires_grad = True

  def configure_optimizers(self):
          lr = self.learning_rate
          params = []
          for x in self.model.diffusion_model.named_parameters():
              if 'transformer_blocks' in x[0]:
                  for item in self.layer_dict[self.freeze_model]:
                      if item in x[0]:
                          params += [x[1]]
                          print(x[0])
      # ......

Модифицированный фрагмент кода конструктора объекта CustomDiffusion, а также метода configure_optimizers() файла model.py Custom Diffusion, показывающий размораживание соответствующих слоев внимания. Моды crossattn-kv и crossattn написаны первоначальными авторами. self.layer_dict — это словарь, который устанавливает, какие слои, содержащие эти ключевые слова, будут разморожены во время тонкой настройки. Ссылка на код находится в конце этой статьи.

Изначально мы попытались разморозить блоки внутреннего внимания, обозначенные в исходном коде как self-crossattn-kv. После тонкой настройки результат для идентичной подсказки:

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

Слои перекрестного внимания attn2, включая параметры матрицы запроса (Wq) в блоке перекрестного внимания (attn2.to_q), были полностью разморожены. Это размораживающее действие в данном исследовании называется режимом self-crossattn. С нашим запросом из шести изображений мы получили один точно синтезированный образец, один образец, который почти точен, но фрагментирован, в то время как остальные образцы генерируют как минимум два отдельных экземпляра кошки.

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

Мы предоставили более сложную подсказку, подчеркнув требование сочетания двух разных животных: «1 кошка и 1 собака вместе, ‹new2› кошка и ‹new1› собака, два разных животных». Это дало один точный ответ, один был почти правильным, но разделенным, а остальные предлагали два разных типа кошек.

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

Рекомендации

[1] Кумари, Нупур и др. «Многоконцепционная настройка диффузии текста в изображение». препринт arXiv arXiv:2212.04488 (2022 г.).

[2] benkyoujouzu, stable-diffusion-webui-visualize-cross-attention-extension, репозиторий GitHub, 2023 г. [онлайн]. Доступно: https://github.com/benkyoujouzu/stable-diffusion-webui-visualize-cross-attention-extension

Код

Ссылка на код: https://github.com/lamwilton/custom-diffusion