Найти в Дзене

Seed, sampler и другие непонятные слова: краткий курс по управлению графическими нейросетями

Оглавление

С картинками, само собой

"У камелька", Leonardo AI, экран, пиксели, 2023. Фрагмент.
"У камелька", Leonardo AI, экран, пиксели, 2023. Фрагмент.

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

Но начну с короткого вступления.

Возможно, вы об этом не очень-то и задумывались, но все многочисленные графические нейросети, приложения и сайты для генерации картинок работают на основе небольшого ограниченного числа базовых моделей. Разработчики нейросетей берут такие модели за основу, а затем через дополнительное обучение развивают и превращают в нечто относительно оригинальное: например, в "Кандинского" или Leonardo Diffusion.

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

  • сверхпопулярная Stable Diffusion и Deep Floyd от StabilityAI;
  • Imagen, Muse и Parti, разработанные Google;
  • e-Diff-I от Nvidia;
  • DALL-E от OpenAI

и другие, менее известные. Не все нейросети предоставляют пользователю возможность влиять на процесс генерации. Во многих случаях всё, что вы можете сделать, — это ввести запрос, нажать на кнопку и ждать результатов. Но некоторые нейросети, например, Stable Diffusion и большинство моделей на её основе, такую возможность предлагают. Настройки, которые позволяют до определённой степени управлять генерацией, на первый взгляд могут показаться сложными и непонятными. На самом деле, если не вдаваться в технические подробности, они довольно просто объясняются.

Здесь я постараюсь простыми словами рассказать, как работают параметры

  • Negative prompt
  • Seed
  • Guidance scale
  • Steps
  • Sampler

и как вы можете влиять на результат генерации, изменяя их значения.

Negative prompt (минус-слова)

Где используется: Kandinsky (в телеграм-боте), Leonardo AI, Getimg, TurboText, Playgroundai, Openart, Deep Dream Generator, Prodia, Leap, Civitai, Starry AI и другие.

Если вы когда-либо имели дело с контекстной рекламой в Интернете не как потребитель, а как её создатель, вы знаете, что такое минус-слова. Это список слов, которых не должно быть в запросе пользователя, чтобы система показала ему рекламное объявление. Отсюда и эта аналогия, хотя перевод не дословный.

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

Правда, с развитием графических нейросетей такая необходимость постепенно отпадает: всё больше моделей создают анатомически правильные портреты без особых указаний. Но это не означает, что Negative prompt больше не нужен. С его помощью можно избавиться от нежелательных деталей в сцене или скорректировать ход мыслей ИИ.

Лучше показать наглядно. Первая картинка сгенерирована на платформе Leonardo AI по запросу Dark knight sitting in a steel chair by a fireplace (Тёмный рыцарь, сидящий в стальном кресле у камина). Вторая — по тому же запросу, но с добавлением в поле Negative prompt слов comic, Batman, comic character, illustration, vector, 2d (комикс, Бэтмен, персонаж комикса, иллюстрация, вектор, 2D), чтобы не изображать персонажа комиксов о Бэтмене и избежать соответствующего художественного стиля. В результате от ушастого шлема полностью избавиться не получилось, но в целом сработало.

Leonardo AI, модель SDXL 0.9
Leonardo AI, модель SDXL 0.9
Leonardo AI, модель SDXL 0.9
Leonardo AI, модель SDXL 0.9

Полезное

Сохраните себе базовые списки минус-слов на английском языке для разных случаев, пригодится:

  • общие: lowres, error, cropped, worst quality, low quality, jpeg artifacts, out of frame, watermark, signature
  • для генерации портретов людей: deformed, ugly, mutilated, disfigured, text, extra limbs, face cut, head cut, extra fingers, extra arms, poorly drawn face, mutation, bad proportions, cropped head, malformed limbs, mutated hands, fused fingers, long neck, malformed, mutated limbs, ugly hands, ugly feet
  • для генерации фотореалистичных изображений: illustration, painting, drawing, art, sketch, comic, 2D, flat, vector

Seed (семя/зерно)

Где используется: Leonardo AI, Getimg, TurboText, Starry AI, Playgroundai, Openart, DreamStudio, Prodia, Civitai, Leap и другие.

Любой процесс с чего-то начинается. Для алгоритмов графических нейросетей генерация начинается со случайного числа, которое и называется "зерном". Представьте себе белый шум на экране телевизора: множество светлых и тёмных точек, которые покрывают его в случайном порядке. Похожим образом начинается и генерация изображения, а значение Seed описывает конкретную комбинацию точек в самом начале процесса.

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

Если комбинировать одно то же "зерно" с одинаковым запросом (совсем ничего не меняя), вы будете снова и снова получать одно и то же изображение. На платформах, которые могут генерировать сразу несколько вариантов картинки, вы будете получать один и тот же набор вариантов.

Важно: все остальные параметры — модели, надстройки, стили и прочие — тоже должны оставаться такими же.

Если при этом вносить в запрос небольшие некритичные изменения, сохраняя основной объект на изображении, вы сможете точечно корректировать результат. Следующие два примера созданы нейросетью TurboText по запросу "Милая девочка с голубыми волосами обнимает плюшевого медведя", но во втором случае к нему были добавлены слова "широко улыбаясь":

TurboText v3, стиль: реализм
TurboText v3, стиль: реализм
TurboText v3, стиль: реализм
TurboText v3, стиль: реализм

Кроме этого, в обоих запросах содержалась вся необходимая для нейросети техническая информация: версия модели, стиль, размеры изображения, "зерно" и количество шагов (об этом параметре чуть ниже).

Маленькие погрешности будут всегда. Например, одежде в запросе не уделялось никакого внимания, и нейросеть решила, что эта деталь не важна. В результате на втором изображении изменилась длина рукава. Но основной объект — девочка — определённо та же самая.

Если вы пользуетесь сервисом TurboText, можете проверить. Скопируйте запрос, и на выходе у вас должна получиться такая же картинка:

Милая девочка с голубыми волосами обнимает плюшевого медведя, seed: 2870693719, steps: 40, width: 768, height: 768, style: realism, scale: 7.2, v_model: v3

Guidance scale (шкала соответствия)

Где используется: Leonardo AI, Getimg, Playgroundai, Openart, KREA, Civitai, Prodia, DreamStudio, Leap (в последних двух эта настройка используется под названием Prompt strength).

Иногда это параметр обозначается аббревиатурой CFG — classifier-free guidance. Он устанавливает степень, в которой нейросеть старается воспроизводить все детали, описанные в запросе. Чем ниже значение на шкале, тем меньше ИИ следует вашим инструкциям, и наоборот. Низкие значения дают нейросети больше свободы действий, и картинки могут получаться весьма нестандартными, наполненными неожиданными деталями — в общем, созданными с творческим подходом. Но при этом велика вероятность появления искажений, мутаций и вообще — нет гарантии, что вы получите то, на что надеялись.

Высокие значения CFG заставляют нейросеть в точности следовать запросу, но в этом случае необходимо, чтобы он был очень детальным и хорошо продуманным. Если вы чётко представляете себе, что хотите получить, и способны подробно это описать, тогда используйте более высокие значения Guidance scale.

По умолчанию обычно установлено рекомендованное значение 7. Оно обеспечивает разумный баланс между послушанием и креативностью нейросети.

В моём примере запрос не самый короткий, но и не слишком детальный: an old book on a desk, inkwell and quill, parchment, vase (старая книга на письменном столе, чернильница и перо, пергамент, ваза). Для наглядности все четыре варианта сгенерированы нейросетью на платформе OpenArt из одного "зерна" (Seed), но различаются величинами на шкале соответствия (Guidance scale): 4, 8, 15 и 25.

Полезное

Эта простая разбивка на диапазоны поможет вам сориентироваться в настройках Guidance scale.

  • 2 – 6: лучше всего подходит для коротких запросов, когда вы сами не очень хорошо представляете, что хотите получить. Возможны интересные результаты, но также очень заметные искажения и неточное соответствие.
  • 7 – 10: рекомендуемые значения для большинства запросов независимо от их длины.
  • 10 – 15: подходят для длинных, очень подробных и чётких описаний изображения, которое вы хотите сгенерировать.
  • 16 – 20: обычно не рекомендуются, но могут сработать, если ваш запрос сильно детализирован. Качество изображения может заметно ухудшаться.
  • >20: не рекомендуется использовать.

Steps (количество шагов)

Где используется: Getimg, TurboText, Playgroundai, Openart, DreamStudio, Prodia, Leap, Starry AI (под названием Iterations).

Как мы уже выяснили, в начале каждой генерации стоит шум — случайный набор пикселов. Чтобы выплавить из него узнаваемое изображение, нейросети поэтапно убирают оттуда всё ненужное и оставляют всё нужное. В сильно упрощённом виде за этим можно понаблюдать во время генерации картинок нейросетью Dream с использованием одной из её экспериментальных моделей. Скорее всего, на выходе ничего вменяемого вы не получите, зато точно получите общее представление о процессе.

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

Конкретное значение этого предела зависит от используемого сэмплера (Sampler) — параметра, речь о котором пойдёт далее. Но в общем случае 25 шагов должно быть достаточно для генерации любого изображения.

В примере ниже модель Stable Diffusion XL на платформе Getimg сгенерировала маленькую жёлтую птичку в гнезде — a small yellow bird in a nest — за 5, 10, 15, 25 и 40 шагов соответственно. Между двумя последними разница в целых 15 шагов, но детализация практически не изменилась:

Sampler (алгоритм образца)

Где используется: Playgroundai, Openart, Prodia, Civitai, Getimg и другие.

Когда нейросеть совершает пошаговую очистку шума, на каждом шаге ей необходимо остановиться и посмотреть, насколько она продвинулась к цели, соответствует ли изображение запросу, и если ещё нет, то внести необходимые изменения.

За эту часть работы отвечают алгоритмы, называемые samplers (сэмплерами). Разные алгоритмы могут давать на выходе визуально немного разнящиеся результаты: например, различную резкость или общий цветовой тон. А ещё, как уже сказано выше, разным сэмплерам для создания качественного изображения может потребоваться разное число шагов. На некоторых платформах пользователи могут выбирать, какие сэмплеры будут контролировать процесс создания картинки.

Здесь однозначных рекомендаций быть не может. Просто попробуйте разные алгоритмы и решите для себя, какой из них подходит для вашей цели. Эти мухоморные феи, созданные на платформе Playgroundai с использованием четырёх разных сэмплеров, в целом не сильно и различаются:

Вот почти и всё. Совсем не страшно оказалось, правда?

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

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