Всем привет. При работе с нейросетью Stable Diffusion используют два вида промптов. Первый – обычный, т.е. такой, где пользователь описывает все, что хочет видеть на новом изображении. Второй – негативный, в нем перечисляются элементы, которые нежелательны для генераций, т.е. которые нужно исключить.
Сегодня я расскажу о том, как правильно писать негативные промпты.
Итак, негативный промпт (Negative Prompt) – это текст, в котором мы перечисляем все стоп-слова или стоп-фразы, которые будут являться фильтром для нейросети Stable Diffusion при создании новых изображений.
Проще говоря, это все то, что мы не хотим видеть на своих картинках.
Например, если нам нужно изобразить обычного человека, то логично предполагать, что мы хотим исключить всякого рода искажения и патологии вроде 7 пальцев на руках, трех ног, раздвоения голов и т.п.
Например, нейросеть может выдать вот такие деформации:
Читайте также:
Как раз для того чтобы снизить вероятность таких результатов и нужен негативный промпт.
Почему Stable Diffusion рисует искажения
Прежде чем мы с приступим непосредственно к теме и узнаем, как применять Negative Prompt, предлагаю разобрать, почему вообще нейросеть допускает такие деформации – почему она дорисовывает конечности людям и животным, либо каким-то иным способом превращает нормальность в нечто специфическое.
Все дело в том, что Stable Diffusion, как и другие нейронные сети, которые работают с изображениями, обучена на множестве картинок. Среди них были самые разные – с людьми в разных позах, с разными частями тела, цветом кожи и т.д.
И когда нейросеть пытается из всей этой базы сгенерировать что-то новое по нашему заданию, иногда возникают такие спорные моменты – несколько пальцев, несколько рук и пр. Ведь у нейронной сети нет четкого понимания того, что максимальное число рук и ног у человека – это два.
Как вы поняли, все эти деформации Stable Diffusion создает не специально. Это следствие обучения и некоторой путаницы.
Что стоит указать в негативном промпте при ручном способе
Есть два способа составить negative prompt:
- Вручную прописать все слова и фразы.
- Воспользоваться текстовыми инверсиями, которые уже были придуманы другими пользователями.
Но для начала я бы рекомендовал ознакомиться с тем, как писать промпты для Stable Diffusion. Я писал об этом в отдельной публикации.
Итак, какие самые популярные стоп-слова и стоп-фразы, которые используются в негативных промптах:
- ugly (уродливый) – это слово следует использовать, если мы не хотим на своих изображениях видеть всякого рода уродливые искажения;
- amputation (ампутация) – это стоп-слово исключает появление отсутствующих конечностей на картинках и фотографиях;
- missing limb (отсутствующая конечность) – альтернативный промпт;
- bad anatomy (плохая анатомия) – сюда можно отнести непропорциональные части тела, вытянутые головы и т.п.;
- wrong anatomy (неправильная анатомия) – аналогичный смысл;
- text, watermark (текст, водяной знак) – поскольку нейронная сеть очень часто добавляет к генерируемым изображениям всякие надписи на вымышленных языках, этот негатив может очень пригодиться;
- extra limb (дополнительная конечность) – ну тут тоже все понятно, лишние конечности нам тоже не очень нужны;
- disconnected limbs (разъединенные конечности) – еще один вариант искажений;
- mutated hands and fingers (мутировавшие руки и пальцы) – тоже полезная стоп-фраза, но тут стоит иметь ввиду, что она не всегда работает так, как нужно;
- mutation (мутация);
- distorted (искаженный);
- mutated (мутировавший);
- poorly drawn (плохо нарисованный);
- disfigured (изуродованный);
- disgusting (отвратительный);
- deformed (деформированный);
- blurry (размытый) – речь о некачественной картинке;
- nsfw, nude – эти слова можно добавить в случаях, если вы не хотите видеть в генерациях обнаженных людей или любые проявления из категории 18+.
Все эти стоп-слова и фразы можно добавлять одновременно в один негативный промпт:
(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
Посмотрите на этот пример. Некоторые слова и фразы добавлены с повышенным весовым коэффициентом. Это поможет еще больше увеличить вероятность того, что нейронка действительно исключит указанные дефекты.
Тут можно регулировать по ситуации: если вы видите, что какой-то признак так или иначе стремится выделиться на изображении, ставьте на него все больший и больший коэффициент.
Так, например, если вы повышаете коэффициент водяным знакам, а они все равно продолжают появляться на изображениях, ставьте максимальный вес – 1.1.
На заметку! Не стоит прописывать слишком длинный негативный промпт и указывать в нем чересчур много стоп-слов и стоп-фраз. Из-за этого результат может получиться испорченным – например, будет страдать качество новых изображений.
Второй способ – текстовые инверсии, или эмбеддинги
Про текстовые инверсии я тоже уже писал большую отдельную статью, где подробно рассказывал о том, что такое embeddings, как они создаются и зачем их использовать. Поэтому для начала очень рекомендую ознакомиться с ней. А здесь я лишь дам небольшую выжимку на эту тему.
Итак, вместо того чтобы вручную перечислять все стоп-слова и фразы, в промпте можно указать всего одно слово – «EasyNegative», либо триггерное имя какого-нибудь другого эбеддинга, который предназначен для использования в негативных промптах.
Для справки! В одном негативном промпте можно использовать и обычные токены, и эмбеддинги. Например, вот так: EasyNegative, gems. В этом случае на новых изображениях маловероятно появятся какие-либо мутации у людей и животных, кроме того будут исключены драгоценные камни.
Как установить негативный промпт в настройках Stable Diffusion
Переходим к практике. Если вы пользуетесь стандартным Ui, например, от автоматика, то вам нужно просто ввести негативный промпт в одноименное поле на странице генерации изображений txt2img.
Перед этим еще нужно будет установить эмбеддинги в одноименную папку (если хотите их использовать).
Если же вы работаете с нейросетью Stable Diffusion через Телеграм-бота @yes_ai_bot, то тут возможностей становится больше.
Разберем три варианта:
- Можно совсем ничего не делать в настройках. Дело в том, что разработчики уже позаботились и установили стандартный negative prompt, который учитывает потребности большинства начинающих пользователей. Т.е. вы по умолчанию не должны получить никаких сильных искажений, мутаций и т.д.
- Можно поставить собственный негативный промпт. В этом случае нужно будет отправить боту команду /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
- Можно прописать временный негативный промпт. В предыдущем варианте мы создавали постоянный NP. Но если вы не хотите использовать стандартный негативный промпт только в какой-то конкретной генерации, можно сделать так: пропишите промпт в следующем формате «zzz /np xxx». Здесь zzz – это ваше текстовое описание для генерации картинки, а xxx – это негативный промпт.
Пример использования временного негативного промпта:
золотое кольцо /np gems
В этом случае на изображении мы получим золотое кольцо, но при этом вероятность появления любых инкрустаций камнями будет исключена или как минимум существенно снижена.
Главное, не перепутать местами промпт и негативный промпт, иначе получим не кольцо без камней, а камни без кольца.
А вы уже пользуетесь системой Yes Ai Bot? Как вам? В моем блоге уже собрана целая серия образовательных публикаций по работе с этим уникальным ботом. А если у вас есть вопросы – комментарии для вас всегда открыты.
До скорого!