Stable Diffusion
September 21, 2023

Как правильно писать Negative Prompt (негативный промпт) в Stable Diffusion

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

Существует два типа промптов для Stable Diffusion:

  • стандартный, в котором вы описываете то, что нейросеть должна нарисовать
  • негативный, в котором вы перечисляете объекты и/или их качества, которые нейросеть должна исключать при генерациях

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

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

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

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

🚀 Хотите освоить нейросети? Участвуйте в нашем бесплатном обучении, в том числе по ChatGPT и Stable Diffusion.
Подробности по ссылке: ОПИСАНИЕ ШКОЛЫ

Какие слова и фразы стоит перечислить в негативном промпте (negative prompt)?

Существует два способа написать негативный промпт:

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

Если вы не понимаете, как писать промпты в Stable Diffusion, то для начала следует прочитать эту статью или посмотреть это видео, а еще лучше сделать и то и другое.

Самые популярные стоп-слова и стоп-фразы, используемые в negative prompt:

  • ugly (уродливый) - используем это слово, если хотим снизить вероятность появления уродств разного вида
  • bad anatomy (плохая анатомия)
  • amputation (ампутация) - не хотелось бы видеть отсутствующие конечности на изображениях
  • text, watermark (текст, водяной знак) - нейронка любит добавлять к изображениям надписи на несуществующих языках, этот негатив почти наверняка избавит нас от этого
  • mutation (мутация)
  • distorted (искаженный)
  • extra limb (дополнительная конечность) - лишние конечности нам тоже не особо пригодятся
  • disconnected limbs (разъединенные конечности)
  • mutated (мутировавший)
  • poorly drawn (плохо нарисованный)
  • disfigured (изуродованный)
  • disgusting (отвратительный)
  • deformed (деформированный)
  • mutated hands and fingers (мутировавшие руки и пальцы) - эту штуку мы обязательно пропишем в негатив промпте, но не ждите, что она будет помогать в 100% случаев
  • missing limb (отсутствующая конечность)
  • wrong anatomy (неправильная анатомия)
  • blurry (размытый)

Все перечисленные слова и фразы можно добавить в негативный промпт вместе:

(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

Обратите внимание, что некоторые токены добавлены в список с повышающим весовым коэффициентом, это нужно для увеличения вероятности исключения того или иного признака. Чем сильнее какое-либо свойство пытается пролезть на ваши изображения, тем более высокий весовой коэффициент ему можно присвоить. Например, тексты и водяные знаки "text, watermark" без повышающего весового коэффициента упорно продолжали появляться на генерациях, поэтому пришлось повысить вес до 1.1, в итоге получилось "(text, watermark:1.1)".

Если вы хотите исключить из своих генераций обнаженных людей и прочие материалы категории 🔞 и 🍓, то добавьте к негативному промпту эти слова:

nsfw, nude

ВАЖНО! Старайтесь не писать слишком много слов и фраз в негативном промпте, это может привести к тому, что генерации начнут становиться испорченными. Если вы будете использовать слишком длинный NP, то качество ваших изображений упадет.

Разберем второй способ применения негативных промптов — текстовые инверсии (embeddings)

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

Вместо длинного списка стоп-слов вы можете записать в негатив промпт всего одну фразу "EasyNegative" или триггерное имя какого-то другого эбеддинга, предназначенного для использования в негативном промпте.

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

Вот мы и подобрались к самому важному.

Как установить негативный промпт в настройках Stable Diffusion?

Если вы используете стандартный Ui, например, от автоматика, то просто вводите негативный промпт в одноименное поле на странице генерации изображений txt2img. Предварительно установив эмбеддинги в одноименную папку (если планируете их использовать).

Если вы работаете с нейросетью Stable Diffusion через бота в Телеграм @yes_ai_bot, то ваши возможности становятся чуть шире, разберем по порядку.

1. Первый вариант — ничего не трогайте в настройках, ведь разработчики уже установили для вас стандартный negative prompt, который учитывает потребности большинства начинающих пользователей.

2. Хотите поставить собственный NP?
Тогда отправьте боту команду:
/np хххххх
...где хххххх — это список стоп-слов или стоп-фраз, которые нужно добавить в негативный промпт. В этом случае все последующие генерации будут работать с учетом указанного NP.

Пример запроса на установку постоянного негативного промпта:

/np (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

3. Если вы не хотите использовать стандартный негативный промпт только в определенной генерации, но вместо него хотите использовать какой-то временный NP, то пишите свой запрос на генерацию следующим образом:
zzzzzzz /np xxxxxx
...где zzzzzzz — это текст вашего промпта, а xxxxxx — это негативный промпт

В этом случае @yes_ai_bot поймет, что нужно использовать текст из xxxxxx в качестве негативного промпта при генерации изображения по тексту из основного промпта zzzzzzz.

Пример использования временного негативного промпта:
золотое кольцо /np gems


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

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

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


Ссылка - https://yesai.su

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

По всем вопросам обращайся в техническую поддержку в Телеграм: @yes_ai_support

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

Как пользоваться нейросетями в Телеграм боте Yes Ai

Обсуждайте передовые технологии Ai на 👉 Форуме о нейросетях