Stable Diffusion
August 19, 2023

Что такое Embeddings? Как использовать текстовые инверсии (embeddings) в Stable Diffusion. Подробный разбор

Если вы посещаете сайт civitai.com, то наверняка, заметили в настройках сортировки пункт "embeddings", в этой статье мы разберем, что такое эмбеддинги или, как их еще называют, текстовые инверсии.

Embeddings (текстовые инверсии на сайте civitai.com)

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

Сложно звучит? Сейчас разберемся, не беспокойтесь.

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

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

🚀 Интересуетесь искусственным интеллектом? Пройдите наш бесплатный курс по нейросетям, включая ChatGPT, Stable Diffusion и Dalle-3.
Информация здесь: КУРС ПО НЕЙРОСЕТЯМ

Как авторы создают эмбеддинги?

Чтобы создать текстовую инверсию, которая (в физическом смысле) является файлом в формате .pt или .safetensors, автор задает нейронке следующие входные данные:

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

В результате такого "инвертированного" обучения автор получает файл, например, name.pt, где "name" — это имя нашего эмбеддинга, которое теперь можно использовать в генерациях.

Давайте предположим, что наш эмбеддинг обучен рисовать Анджелину Джоли (разберем пример https://civitai.com/models/99201). Все, что нам нужно для получения в генерациях Анджелины Джоли — это указать в промпте триггерное слово (название эмбеддинга), которое определил автор, в нашем случае "4nj0lie".

Триггерные слова для текстовых инверсий (Embeddings)

Зачем использовать текстовую инверсию, если можно просто написать в промпте Анджелина Джоли?

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

Как использовать текстовые инверсии?

На сайте civitai.com вы найдете множество текстовых инверсий, а мы заблаговременно установили большинство из них в нашего бота в Телеграм @yes_ai_bot.

Что нужно делать:

  1. Найти на сайте civitai.com нужную инверсию
  2. Скопировать триггерное слово
  3. Зайти в бота @yes_ai_bot в мессенджере Телеграм
  4. Ввести промпт, в котором будет присутствовать скопированное ранее триггерное слово, например, 4nj0lie.

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

  • более высокая точность при передаче образов, лиц, стилей, окружении и т.д.
  • небольшой вес файлов (но для пользователей @yes_ai_bot это не так важно, т.к. все работает без установки на компьютер)
  • триггерное слово является обычным токеном, значит, к нему можно применять весовые коэффициенты и иные манипуляции (мутации и пр.) — все это описано в видео: https://youtu.be/gL9TVTae0dI
  • простота в использовании и ведении личного "словаря лайвхаков": одно слово заменяет целый промпт
  • возможность использовать эмбеддинг в "negative prompt"
Последний пункт из списка разберем отдельно.

Как и зачем использовать эмбеддинг в Negative Prompt?

Так как по своей сути эмбеддинг является токеном (если совсем честно говорить, то он является группой токенов, но не будем забивать голову этими тонкостями), то его можно засунуть в любое место, где предполагается наличие текстового описания, значит его можно вставить и в Negative Prompt.

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

А зачем это нужно?

Все просто: можно перечислить в негативе все то, чего вы не хотели бы видеть в своих генерациях, например:

(deformed, distorted, disfigured:1.3), poorly drawn, bad anatomy, wrong anatomy, extra limb, missing limb, floating limbs, (mutated hands and fingers:1.4), (text, watermark:1.1), disconnected limbs, mutation, mutated, ugly, disgusting, blurry, amputation

Но есть и другой путь — вместо длинного текста вставить одно слово "easynegative". Кстати, EasyNegative — это эмбеддинг с сайта civitai.com (https://civitai.com/models/99201), автор уже учел множество мутаций, которые вы явно не хотели бы видеть на своих генерациях.

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

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

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

Важные тезисы про эмбеддинги:

  • текстовая инверсия и эмбеддинг — это одно и то же
  • недостатком эмбеддингов является то, что они не позволят нейросети сгенерировать то, чего она еще не знает. Эмбеддинги указывают нейросети на конкретные объекты в имеющейся базе данных, но не расширяют эту базу. Если необходимо именно расширение базы знаний ИИ, то следует использовать LoRA
  • если вы хотите заменить что-то фундаментальное в существующем эмбеддинге, например, оригинальный цвет волос персонажа, то нужный цвет прописывайте перед эмбеддингом в промпте, например: белые волосы, 4nj0lie
  • если способ, описанный в предыдущем пункте, не помог, то повысьте весовой коэффициент того, что хотите изменить, например: ((белые волосы)), 4nj0lie
  • если и это не помогло, значит автор эмбеддинга не предусмотрел такого развития событий, вам придется описать имя человека, образа, стиля и пр. вручную (без использования эмбеддинга)
  • текстовая инверсия (или эмбеддинг) является точным текстом для промпта, подсказывающим нейросети, что нужно нарисовать
  • эмбеддинг включает в себя промпт, то есть он уже содержит токены, на основе которых будут происходить генерации. Кроме токенов текстовые инверсии содержат информацию об изображениях, которые мы хотели бы получить при их использовании
  • эмбеддинг может использоваться, как и любое другое слово в промптах, в негативных промптах, то есть очень удобно добавлять, например, текстовую инверсию "EasyNegative", чтобы исключить множество нежелательных вещей из генераций. Да, можно "по-старинке" использовать перечисление негативных промптов, но инверсии справляются не хуже
  • текстовые инверсии поддерживают весовые коэффициенты, как и обычные токены в промптах

Было сложно понять этот материал?


Если ваш ответ "ДА", то задайте свои вопросы в нашем сообществе в Телеграм https://t.me/yes_ai_chat

Заходите на наш веб-ресурс, где вы найдете дополнительные сведения о нейронных сетях.

Адрес нашего сайта: https://yesai.su

Полный список статей о боте @yes_ai_bot находится по этой ссылке

Подробнее о сервисе Yes Ai рассказываем в этом коротком видео