Текстовые инверсии в Stable Diffusion или как создаются эмбеддинги

Лого investbro.ru

Всем привет. Продолжаем говорить о YES Ai Bot и изучать его возможности. В статье про галерею стилей LoRA я показывал, как «обучать» бота рисовать новых персонажей, незнакомых ему объектов, а также дополнительно стилизовать свои изображения.

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

Сегодня как раз и поговорим о том, что такое эмбеддинги, или, как их еще называют, текстовые инверсии.

Что это такое эмбеддинг

Если по «умному», то текстовые инверсии (embeddings) – это токены, т.е. ключевые слова в промпте, которые являются точным математическим определением того, что нейросеть Stable Diffusion должна изобразить.

Сейчас поясню, чтобы было максимально понятно.

Классическим способом «объяснения» нейросети того, что от нее требуется нарисовать, является прописывание подробного промпта, т. е. текстового запроса. А если мы хотим, чтобы нейросеть изобразила какого-то, к примеру, известного актера, мы просто пишем его имя.

Но есть еще один способ.

Это то же самое, только наоборот. Вместо того чтобы обучать нейросеть по нужным картинкам, мы «выпытываем» у нее специальный математический ключ, с помощью которого можно получить нужный нам результат. Это и есть текстовые инверсии.

Читайте также:

В физическом смысле текстовая инверсия представляет собой файл в формате .pt или .safetensors.

Как создаются эмбеддинги

Для того чтобы создать текстовую инверсию, автор задает нейронной сети следующие входные данные:

  • Несколько фотографий или изображений того, что он хотел бы стабильно получать при использовании создаваемого embeddings.
  • Текстовое описание (промпт), которое отражает то, что изображено на картинках или фотографиях, перечисленных автором.
  • Имя, с помощью которого можно будет вызывать этот эмбеддинг для будущих генераций.

В результате такого обратного или «инвертированного» обучения автор получает на выходе файл, к примеру, name.pt, где «name» – это имя эмбеддинга, которое теперь можно применять в будущих генерациях.

Давайте на примере.

Представим, что наш эмбеддинг обучен рисовать Анджелину Джоли (можете посмотреть по ссылке civitai.com/models/99201.

Чтобы нам создать новое изображение и получить на нем лицо Анджелины Джоли, нам нужно всего лишь указать в своем промпте триггерное слово (название эмбеддинга), которое указал автор при его создании.

В табличке «Подробности» (Details) находим строчку «Триггерные слова» (или Trigger Words). В нашем случае это «aj0li3_JG-130».

Зачем использовать инверсию

Может возникнуть вполне логичный вопрос: зачем нам вообще использовать текстовые инверсии, если можно просто в промпте прописать «Анджелина Джоли»?

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

Порядок использования embeddings

Итак, как использовать текстовые инверсии:

  1. Переходим на сайт civitai.com и выбираем нужную библиотеку.
  2. Копируем триггерное слово.
  3. Далее заходим в бота @yes_ai_bot в мессенджере Телеграм.
  4. Вводим промпт, в тексте которого будет присутствовать скопированное нами триггерное слово.

Вот и все.

Преимущества эмбеддингов

Среди плюсов от использования текстовых инверсий можно выделить:

  • они создают более высокую точность передачи лиц, стилей, окружения и т.д.;
  • пользоваться ими просто – одно триггерное слово заменяет целый промпт (а как вы знаете из предыдущих моих публикаций, промпты могут быть очень объемными и сложными в написании);
  • небольшой вес файлов (хотя для пользователей @yes_ai_bot это не имеет значения, поскольку вся система работает без установки на компьютер);
  • триггерное слово является обычным токеном, а потому к нему можно применять весовые коэффициенты и иные манипуляции (например, мутации и т.д. – об этом я также уже писал в отдельной статье, где мы учились писать промпты для Stable Diffusion investbro.ru/kak-pisat-prompty-dlya-stable-diffusion);
  • эмбеддинг можно использовать в «negative prompt» — об этом сейчас поговорим более подробно.

Эмбеддинг в Negative Prompt

Поскольку embeddings по сути является токеном, то его можно разместить в любом месте, где может предполагаться наличие текстового описания. А значит его можно вставить и в Negative Prompt.

Напомню, что «negative prompt», или «отрицательный сигнал» — это такая функция, которая позволяет исключить из изображения какие-либо нежелательные объекты.

Negative prompt можно прописывать самостоятельно, но также он уже есть в настройках нейросети и установлен по умолчанию.

Итак, вернемся к эмбеддингам.

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

  • Можно перечислить в негативе все, что вы не хотите видеть на своем генерируемом изображении. Тогда запрос получится очень длинным.
  • А можно пойти другим путем: вместо объемного запроса вставить всего лишь одно слово-эмбеддинг. Как в нашем примере выше это слово «easynegative» (эмбеддинг с сайта civitai.com). Оно учитывает множество мутаций, которые точно нежелательно видеть на изображениях (например, искажение конечностей, их количества и т.д.).

В боте @yes_ai_bot установить NP можно двумя способами:

  1. Путем глобальной настройки – нужно прописать команду /np easynegative
  2. Путем индивидуального набора негативов для отдельных генераций – текст промпта /np easynegative

Еще раз напомню, что «easynegative» — это просто пример, который взял я. Вы можете выбрать любой эмбеддинг, который разработан специально для использования в negative prompt.

Что нужно запомнить

Обозначу важные тезисы касаемо эмбеддингов:

  • Эмбеддинг и текстовая инверсия – это одно и тоже.
  • Эмбеддинг является точным текстом для промпта, который подсказывает нейросети, что именно нужно изобразить.
  • Текстовая инверсия включает в себя промпт, т.е. он уже содержит токены, на основе которых будут осуществляться генерации. Помимо токенов эмбеддинги содержат информацию об изображениях, которые нам нужно получить при их использовании.
  • Эмбеддинг может использоваться также, как и любое другое слово в текстовых запросах, в негативных промптах. Благодаря этому очень удобно добавлять, например, текстовую инверсию «EasyNegative», чтобы исключить из своих изображений множество искажений и нежелательных объектов. Можно, конечно, обходиться без эмбеддингов и просто перечислять все негативные промпты, но инверсии сильно упрощают этот процесс.
  • Кроме того, текстовые инверсии, как и обычные токены в промптах, поддерживают весовые коэффициенты.
  • Если вам необходимо заменить что-то фундаментальное в уже существующем эмбеддинге (к примеру, цвет волос персонажа), то в этом случае желаемый цвет нужно прописать перед эмбеддингом в промпте. К примеру: рыжие волосы, 4nj0lie.
  • Если этот способ не помог (пример с волосами), то можно повысить весовой коэффициент того параметра, который вы хотите изменить. Например, так: (((рыжие волосы))), 4nj0lie. Если и этого оказалось недостаточно, это значит, что автор эмбеддинга не предусмотрел такой возможности и все условия придется прописывать вручную (имя известной личности, ее образ, стиль и прочее, т. е. без использования эмбеддинга.

Друзья, не забудьте подписаться на обновления блога, чтобы не пропустить выход новых образовательных статей о фишках и возможностях Yes Ai Bot.

Всем до скорого!

Читайте также: 
Комментарии к статье: 0
Добавить комментарий
:grinning: :grining-smiling: :tears-of-joy: :smile-open-mouth: :tall-eyes-open-mouth: :cold-sweat: :scrunched-closed-eyes: :halo: :winking: :rosy-cheeks: :slightly-smiling: :tongue: :relieved: :heart-eyes: :sunglasses:
* Нажимая на кнопку "Отправить", я даю согласие на рассылку, обработку персональных данных и принимаю политику конфиденциальности.