Синтаксис Stable Diffusion в Automatic1111 и NMKD
Самое время рассказать про синтаксис Prompt-инжиниринга, с помощью которого вы сможете улучшить генерацию изображений в Stable Diffusion и контролировать то, как именно алгоритмы нейросети обрабатывают текстовые подсказки.
Это далеко не уникальный и не всеобъемлющий пост - гораздо больше подробностей вы узнаете, изучив официальную документацию webui или NMKD. Я лишь хочу поделиться основами, чтобы вам было легче вкатиться в изучение нейронных сетей.
Приятного просмотра!

Синтаксис Stable Diffusion для начинающих
Синтаксис Stаbale Diffusion, который вам нужно изучить в первую очередь — скобки. Для генерации изображений используются три вида скобок — (), [], {}.
Круглые скобки — самые простые в применении. Их добавляют, чтобы изменить вес выбранного токена, иначе говоря, усилить воздействие выделенного слова (фразы) на генерируемые изображения, либо смешать воедино несколько образов.
Например, написав (colored hair) без каких-либо коэффициентов, вы усилите эффект "цветных волос" в 1.1 раза. Если добавить больше скобок, сила воздействия дополнительно увеличится. Поэтому запись (((colored hair))) с значительной вероятностью поможет изменить цвет волос персонажа.

Подобным образом можно акцентировать внимание нейросети на необходимости нейросети перекрасить фон или одежду в определённый цвет, если другие токены мешают вашей задумке.
Квадратные скобки — [] — полная противоположность круглым. Они используются для ослабления воздействия ключевых слов или удаления нежелательных объектов, появляющихся во время генерации изображений.
Добавив [fern], вы уменьшите вероятность появления папоротника на картинке в 0.9 раз. Добавив больше квадратных скобок, можно полностью избавиться от папоротника.

Есть ещё один способ использовать скобки в Stable Diffusion — указав коэффициент воздействия внутри или снаружи них.
Например, (white silk shirt:1.5) или (wreath on head:1.5) в полтора раза усилят вес фраз «белая шёлковая рубашка» («венок на голове»), чтобы выбранные элементы гарантированно появлялись на каждой генерируемой картинке. И наоборот, [white silk shirt:0.8] или [wreath on head:0.8] помогут удалить их с тела модели.

Воздействие коэффициентов снаружи скобок немного отличается от множителей внутри.
Во-первых, в NMKD они действуют сильнее, чем в Stable Diffusion webui.
Во-вторых, они отлично смешивают токены, позволяя тонко настраивать генерируемые изображения.
Как эту особенность можно использовать?
Установить коэффициент воздействия после круглых скобок в Stable Diffusion и использовать значения от 0.1 до 1.7, чтобы сместить вес токенов в ту или иную сторону. Если один токен преобладает над другим, можно использовать десятые, сотые и тысячные значения после точки, чтобы сгладить результат.
Учитывайте, что чем больше цифра, тем контрастней финальное изображение, тем больше появляется артефактов и искажений. И наоборот, маленькие значения дают слишком слабый результат, чтобы часто их использовать.

Если вы хотите смешать два образа (например, девушку из компьютерной игры и известную актрису), попробуйте экспериментировать со значениями после точки. Десятые доли лучше сохраняют черты, сотые лучше сглаживают разницу, а тысячные могут пригодиться для создания миксов, слабо напоминающих оригинальные концепты.
В формате текстовой подсказки это выглядит следующим образом — (Triss Merigold)1.57, (Daisy Ridley)0.83.
Коэффициенты для смешивания можно помещать и внутрь скобок, но образы будет сложнее сбалансировать, поскольку нейросеть сильнее воспринимает подобные команды.

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

Ещё один способ изменить силу воздействия отдельных слов или фраз в вашем промпте — использовать плюсы и минусы.
Добавив плюс после слова (фразы), можно усилить воздействие токена, добавив минус — ослабить его. Заключив часть промпта в круглые скобки, воздействовать плюсами или минусами можно сразу на несколько слов.
Пример использования: blue eyes + beauty eyes усиливает влияние двух соседних фраз, blue+ усиливает воздействие голубого цвета, (blue eyes)+ добавляет вес сразу всей фразе, (blue eyes)+++ значительно увеличивает вес токена.

Увеличивать вес слова (фразы) имеет смысл, если вы написали в текстовой подсказке green dress или orange dress, из-за чего у вас поменялся цвет глаз, но вы очень сильно хотите вернуть его обратно. Подобным образом можно написать (blue eyes)---, если написали blue dress и хотите задать другой цвет глаз.
Синтаксис Stable Diffusion в Automatic1111 и NMKD не ограничивается обычными скобками, плюсами и минусами.
Если сочетать слова подобным образом — {words|different words|more words}, SD сделает случайный выбор между словами, разделёнными символом | и заключёнными в {}. Это удобно, если вы хотите разнообразить результат. Использование сочетания [wordA:wordB:0.5] сделает так, что половину шагов будет генерироваться слово A, а во второй половине — слово B.
Учитывайте, что рандомизация с помощью синтаксиса {} не всегда работает корректно, а с некоторыми моделями нейросетей и вовсе бесполезна. Поэтому в первую очередь стоит использовать другие способы контроля над генерацией изображений.
Синтаксис <> используется со специальными моделями нейросетей — LoRa — и применяется с целью активировать модель и задать степень её воздействия.

Например, если создать LoRa с кометой Neowise, обучая её на основе качественных астрофотографий и назвать модель zelyonaya_kometa, с её помощью можно сгенерировать комету, задействовав низкоранговую адаптацию поверх используемой модели SD.
Для активации модели достаточно прописать используемые ключевые слова (в упоминаемом примере это будут zelyonaya_kometa, comet, green comet и так далее), а также использовать специальный синтаксис — <lora:zelyonaya_kometa:1>.
Регулируя коэффициент после двоеточия (0.3, 0.5, 0.75, 1 и так далее), вы ослабите или усилите влияние модели, смешаете генерируемый результат со стилем выбранной версии SD или другими LoRa.
Синтаксис LoRa в Stable Diffusion можно использовать для передачи стиля, добавления образа или элементов окружения. Название, заключённое в <>, зависит от выбранной модели нейронной сети, как и типичные токены для её активации.
Чтобы научить модель передавать нужные детали, перед тренировкой в документе формата .txt нужно описать характерные ключевые слова и токены для быстрой имитации совокупного образа (стиля). В одной модели можно использовать как один, так и несколько особенных токенов (вроде ledivbelom или zelyonaya_kometa).

Другие интересные варианты синтаксиса Stable Diffusion:
1) [to:when] — добавляет токен к подсказке после фиксированного количества шагов;
2) [from::when] — удаляет токен из подсказки после фиксированного количества шагов.
Пример: [fantasy:cyberpunk:16] landscape.
Сначала Stable Diffusion будет рисовать пейзаж в стиле фэнтези, но после 16 шагов нейросеть переключится на рисование киберпанк-ландшафта, продолжая с того места, где остановилась до этого.
Вот вам пример посложнее — fantasy landscape with a [mountain:lake:0.25] and [an oak:a christmas tree:0.75][ in foreground::0.6][ in background:0.25] [shoddy:masterful:0.5] (настройка сэмплера — 100 шагов).
Сначала нейросеть будет генерировать фэнтезийный пейзаж с горой и дубом на переднем плане, после 25 шагов переключится на пейзаж с озером и дубом, затем начнёт создавать новые сцены после 50, 60 и 75 шагов. Использование подобного синтаксиса будет полезно для получения разнообразных результатов и усложнения генерации.
Стоит учитывать, что синтаксис для генерации изображений может меняться в зависимости от GUI и используемой модели. Старые версии нейронных сетей могут не поддерживать часть новых функций, либо очень специфично интерпретировать команды, а отдельные популярные решения использовать нетипичный синтаксис вроде таких ~~~ символов.
Подробнее о синтаксисе Automatic можно прочитать здесь, о возможностях настройки промптов в NMKD — тут.
Как использовать синтаксис Stable Diffusion?
Чтобы использовать синтаксис Stable Diffusion, сначала вам необходимо установить программу с графическим интерфейсом, поддерживающую текстовый ввод с расширенными параметрами. Например, Automatic1111 или NMKD. После установки софта останется лишь ввести управляющие символы в поле Prompt (зону для добавления текстовых подсказок) и настроить их под собственные нужды.
Образцы настроек я уже приводил на странице выше.
Удачных экспериментов!
Понравилась статья? Поддержите автора комментарием, донатом, подпиской на Telegram и другие страницы!

