Всем привет.
Синтаксис в контексте написания промптов для моделей генерации изображений вк Stable Diffusion играет ключевую роль в том, как модель интерпретирует введенные данные и какой результат она производит. Правильное использование синтаксиса помогает точно и ясно передать намерения пользователя, увеличивая шансы на получение желаемого изображения. Возможно сейчас такой синтаксис не так актуален, но при рассмотрении чужого промта знать его не помешает уж точно.
Ниже будет рассказано про ключевые аспекты синтаксиса промптов, которые при этом следует учитывать.
1. Квадратные скобки [ ]
Квадратные скобки могут использоваться для чередования токенов в промте.
Пример: Against the background of landscape [sun | rain], the character a leather armor [blue | red|
Здесь при каждом шаге генерации " sun " сменяет " rain ", а " blue " чередуется с " red ", в результате чего получаются более сложные композиции.
А еще при смешивании стилей можно использовать специальный синтаксис, который позволяет указать два разных ключевых слова (или стиля) и "фактор", который определяет момент перехода от одного стиля к другому.
Это осуществляется через формат [ключевое слово 1 : ключевое слово 2 : фактор]. Ключевое слово 1 и Ключевое слово 2 - это стили или темы, между которыми происходит переход. Фактор — это десятичное число от 0 до 1, которое указывает, на каком этапе процесса должен произойти переход.
Число 0.5 означает, что переход произойдет на полпути процесса.
Пример: Landscape [summer : winter : 0.7]
В этом случае модель начнет с создания летнего пейзажа, а затем на 70% пути процесса перейдет к зимнему пейзажу. Это позволит наблюдать интересный переход от теплых летних тонов на переднем плане к виднеющимся на заднем плане горам со снежными склонами.
2. Фигурные скобки { }
Фигурные скобки так же могут использоваться для генерации для указания альтернативных вариантов или возможных выборов внутри промпта. Этот механизм позволяет вам задать несколько возможных вариантов для одного элемента, из которых система выберет один при генерации.
Пример: Against the background of landscape {day | night}, the character a leather armor {blue|red}
Как это работает: выбор между "day" и "night": Фигурные скобки {day | night} означают, что система должна выбрать между "днем" и "ночью" для фона изображения. Это предложение системе два варианта для фона ландшафта, и она случайным образом выберет один из них.
Выбор цвета брони: Аналогично, {blue | red} указывает, что броня персонажа может быть либо синей, либо красной. Модель выберет один из этих цветов для элемента брони на персонаже.
Внимание - фигурные скобки правильно работают при активном расширении Dynamic Prompts в Automatic/Forge.
3. Круглые скобки ()
Скобки могут быть использованы для добавления дополнительных пояснений или для указания альтернативных или дополнительных деталей, которые могут быть включены в изображение по усмотрению модели. Здесь я не касаюсь увеличения веса токена про который итак всем известно.
Например: "портрет женщины (в возрасте около 30 лет, смеющейся)".
4. Запятые (,)
Запятые используются для разделения токенов или для введения паузы между различными аспектами промта, что позволяет уточнить и разделить разные характеристики. Например, в промте "собака на лугу, ясный день, стиль винтаж" каждый элемент после запятой рассматривается как отдельный токен, что помогает модели точно идентифицировать и интегрировать каждый элемент в изображение.
5. Точки с запятой (;)
Точка с запятой может использоваться для разделения сложных идей или элементов, которые тесно связаны, но являются отдельными частями запроса. Это помогает создать более сложные и многоуровневые изображения. Например: "лесной пейзаж; туманный утренний свет" может указывать на то, что эти два элемента должны быть объединены, но обработаны как отдельные визуальные темы.
6. Точки (.)
Точка может сигнализировать о завершении одной полной мысли или указания и начале другого. В контексте промтов это может помочь модели понять, что следует переход к новому аспекту или изменению сцены.
7. Восклицательный знак '!'
Восклицательные знаки могут использоваться для добавления влияния на определенные элементы запроса или для придания драматичности изображению. Они могут указывать на то, что определенная часть промта должна быть выражена более ярко или интенсивно.
8. Вопросительный знак '?'
Хотя вопросительные знаки редко используются в промптах для создания изображений, они могут вносить некоторую неопределенность или предположение, которое может быть интерпретировано по-разному моделью. Однако, обычно их использование не рекомендуется, так как это может привести к неоднозначным или нежелательным результатам. Помимо уже упомянутых знаков препинания, в промптах для и подобных систем могут использоваться и другие знаки и символы для различных целей. Вот некоторые из них и примеры их использования:
9. Знак плюс +
Используется для явного указания на комбинацию характеристик или стилей, которые должны быть объединены в одном изображении. Пример: "футуристический городской пейзаж + неоновое освещение + атмосфера киберпанка."
10. Знак минус -
Может использоваться для краткого указания на нежелательные элементы в негативном промпте, аналогично использованию скобок для негативных инструкций. Пример: "переполненные детали - карикатурные пропорции."
11. Подчеркивание _
В некоторых контекстах может использоваться для объединения слов или фраз, когда пробелы могут быть неправильно интерпретированы системой или для выделения ключевых терминов. Пример: "старинный_замок_на_закате."
12. Звездочка *
Иногда используется для указания на важность или для выделения ключевых слов, хотя это менее распространено и зависит от контекста использования. Пример: "осенний лес золотой час мягкое освещение."
13. Вертикальная черта |
Вертикальная черта без применения фигурных и квадратных скобок может смешивать разные токены в единую концепцию. Пример: "средневековый рыцарь | футуристический боец в полном обмундировании."
Значения символов, таких как %, #, &, в контексте промптов могут зависеть от конкретной реализации и интерпретации модели. Вот общий обзор их потенциального использования:
14. Процент %
Редко используется в промптах, кроме как в контексте, где нужно указать буквальное значение, например, "изображение заполнено на 70% светом".
15. # (решётка)
в промтах для генерации изображений его применением нестандартно и может привести к непредсказуемым результатам.
16. & (амперсанд)
Обычно означает "и", так же приводит к смешению объектов, при этом чаще всего первый токен будет доминировать над следующим после знака &.
В процессе экспериментов со знаками пунктуации я заметил, что большинство знаков пунктуации, поставленных в конце промта ведут к незначительным изменениям в изображениях, так например если поставить в конце любого токена поставить “::”, либо любое числовое значение например 10, персонаж может незначительно изменить позу, при этом основная концепция изображения не изменится, это может быть полезно когда на картинке появились незначительные дефекты, типа кривых пальцев или скошенных глаз, если с первой генерации проблема не ушла, просто добавляйте следующие “::” либо повышайте или понижайте число и генерируйте снова.
Использование специальных ключевых слов
В промптах для Stable Diffusion, применение таких токенов как "BREAK", "AND", "STOP", "NOT или OR", значительно улучшает гибкость и контроль над, результатом генерации изображений. Эти ключевые слова действуют как логические операторы, позволяя точно структурировать запросы и уточнять желаемые или нежелаемые элементы в изображении. Вот как они могут быть использованы:
1. BREAK
Назначение: ключевое слово BREAK используется для разделения промпта на различные части, каждая из которых описывает определенные аспекты или элементы изображения. Это позволяет уточнить, к каким конкретным элементам применимы определенные описательные характеристики.
Пример использования: "Portrait of a woman BREAK in the style of impressionism." Здесь BREAK помогает четко отделить описание персонажа от стиля изображения.
2. AND
Назначение: AND используется для объединения нескольких элементов или атрибутов в одном промпте, указывая на то, что все они должны быть представлены вместе в одном изображении.
Пример использования: "Forest path AND misty morning light." Это указание создать изображение, включающее и лесную тропу, и туманный свет утром.
3. NOT
Назначение: NOT служит для исключения определенных элементов или атрибутов из изображения. Это полезно, когда нужно ясно указать, чего не должно быть в конечном результате. Пример использования: "A kitten with a smooth coat is NOT black." Это указание создать изображение котенка с гладкой шерстью, который не должен быть черного цвета.
4. STOP
Ключевое слово STOP в контексте промптов для моделей генерации изображений, как Stable Diffusion, может использоваться для разных целей, в зависимости от контекста и точной спецификации модели. Вот несколько возможных применений этого слова:
4.1. Разграничение областей обработки.
STOP может быть использовано как сигнал для модели остановить внимание или обработку на определённой точке промта. Это особенно актуально, если промт содержит несколько инструкций или элементов, и нужно чётко разделить, какие из них должны быть применены или проигнорированы.
Например, если вы хотите, чтобы модель сосредоточилась только на первой части промта, а остальное проигнорировала.
4.2. Остановка процесса на определённом этапе.
Если модель поддерживает поэтапную обработку промптов, STOP может быть использовано для инструкции модели прекратить дальнейшую обработку после достижения определённого этапа. Это может быть полезно для экспериментов с различными стадиями генерации изображения.
4.3. Как условие ограничения.
В более сложных системах STOP может быть использовано для условного прекращения включения определенных типов контента или стилей, аналогично использованию NOT, но с более сильным акцентом на полное прекращение стилевых элементов после указанной точки.
5. OR
Использование OR в промпте помогает указать модели, что следует рассмотреть несколько возможных элементов или характеристик и выбрать один из них для включения в результат. Это может быть применено как к конкретным объектам, так и к атрибутам или стилям.
Пример: "Create an image of a dog OR cat in the park". Здесь модель может выбрать, изобразить ли собаку или кошку.
Использование "BREAK", "AND", “STOP”, "NOT" и "OR" в промптах является мощным способом уточнения запросов, что особенно важно в сложных и детализированных изображениях. Эти инструменты помогают управлять композицией изображения, делая процесс более предсказуемым и контролируемым. Однако то, что многие люди используют определённое ключевое слово, не гарантирует его эффективность, очень многое зависит от самой модели и о том какие команды были в нее интегрированы.
Информация для этого поста была взята с блога Дмитрия Невского. От себя могу добавить что сейчас любители GenAI в массе своей так свои промпты не пишут, поскольку надо либо помнить большое количество нюансов которые приведены выше, либо учитывать что не все генераторы одинаково их толкуют. Более того, с появлением Flux моделей ударение делается на длинный повествовательный промпт, который пользователи часто создают (а не пишут сами) в моделях типа Florence2 или в ChatGPT.
Пример современного промта:
A highly detailed futuristic oracle sits atop a throne made of liquid-like metal, surrounded by floating crystal shards that pulse with soft, multicolored light. Her appearance is an intricate mix of cybernetic enhancements and ethereal beauty, her metallic arms are covered in glowing inscriptions, and a translucent veil hovers around her head, faintly glowing with shifting energy. The floor beneath her throne reflects a pool of stars and galaxies, as if she exists in a dimension between worlds. The scene is filled with intricate detail, blending a mystical atmosphere with futuristic, cutting-edge technology.
Прям картина маслом, но тем не менее такой промпт выдаст на одной и той же Flux-модели разный результат в Comfy и в Forge. Так что "точка, точка, запятая, вышла рожица кривая" наше всьо.)
Удачи.
No comments:
Post a Comment
А что вы думаете по этому поводу?