Сегодня генерация изображений с помощью искусственного интеллекта становится невероятно доступной и всё более востребованной. Теперь для создания уникальных иллюстраций не нужно обладать художественными навыками или годами изучать программы для дизайна. Достаточно лишь вообразить идею, а современные технологии, такие как Midjourney, DALL-E, Stable Diffusion, или Flux сделают её реальностью. С их помощью каждый может воплотить свои мысли в жизнь — будь то реалистичный портрет, красивый пейзаж или же захватывающий мир фантастической вселенной.

Мудрец в черной струящейся мантии с замысловатой вышивкой, держащий древний деревянный посох, светящийся рунами, стоит на скале, возвышаясь над мистической долиной в стиле Теда Несмита

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

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


Если хочется сразу перейти к практической информации, то вам сюда!


Приятного прочтения!

Как создать промпт

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

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

Например, если вы хотите создать изображение, стоит указать стиль, цветовую палитру, ракурс, атмосферу и другие важные детали. 

Важно учесть, что большинство моделей ИИ понимают лучше запрос на английском, чем на русском, так как, большинство моделей ИИ, особенно крупные модели, обучались на огромных объемах текста, в основном на английском языке. Английский язык представлен с более высоким качеством по сравнению с другими языками.

В результате, чтобы получить более точный и развернутый ответ от ИИ, рекомендуется использовать английский язык для формулировки промптов.
Давайте для начала рассмотрим самое основное в создании промптов, а затем перейдём к более сложным примерам и попробуем сгенерировать изображения сами.

Базовые принципы написания промпта

Базовые принципы написания промпта помогают создать четкий и эффективный запрос, который позволит ИИ сгенерировать именно то, что вы хотите. Вот некоторые из них:

  • Четкость

ИИ лучше понимает конкретные, чем размытые запросы. Например, есть запрос: “Средневековый город”, лучше заменить его на такой: “Средневековый город стоит на горе, деревянные дома с остроконечными крышами

  • Детализация

Чем больше деталей, тем точнее будет результат. Можно описать ракурс, освещение или стиль.

Например, вот так: “Серый кот с пушистой шерстью лежит на мягкой белой подушке, на него из окна падают лучи солнца”

  • Структурированность

Запрос должен быть логичным и последовательным, чтобы ИИ мог правильно вас понять. Можно применять к своим промптам формулу 3 вопроса: “Что + где + как”.
Допустим, я хочу сгенерировать картинку с лесом, написал такой вот промпт: "Мистический лес с высокими деревьями, расположенный среди гор под покровом ночи, деревья светятся мягким голубым светом, туман стелется по земле" 

Здесь как раз используется 3 вопроса:

  1. Что? Мистический лес с высокими деревьями

  2. Где? среди гор под покровом ночи

  3. Как? деревья светятся мягким голубым светом, туман стелется по земле

  • Стиль и атмосфера

Можно указать художественный стиль, будь то манга, реализм или мультяшность. Я попробую сгенерировать картинку в стиле игры Don't Starve.

Мрачный, ручной рисованный стиль игры Don't Starve, главный герой - худощавый персонаж с длинным носом и угловатыми чертами лица, одетый в потрепанную одежду, стоит на фоне жуткого леса, держит в руках лампу, от которой идёт мягкий свет, искаженные деревья с длинными ветвями, похожими на скрюченные пальцы, темное небо с мрачными облаками, контрастные цвета, вокруг летают силуэты странных насекомых, эффект карандашного рисунка, мистическая атмосфера

Если у вас что-то не получается, то вы можете поискать ответ на волнующий вас вопрос в центре знаний о нейросетях — BotHub Academy. Здесь есть примеры работы с Midjourney и другими нейросетями. 

Техническая часть

Сейчас мы рассмотрим, что под капотом у нейросетей для генерации изображений: от базовых принципов их работы и архитектуры до ключевых алгоритмов, таких как GANs, Diffusion Models и GPT, а также разберём, как данные технологии превращают текстовые запросы в детализированные и реалистичные изображения, и поймём, какие параметры и настройки влияют на финальный результат.

Токенизация текста

Перед тем как текстовый запрос будет преобразован в числовое представление, он проходит через процесс токенизации. Токенизация разбивает текст на более мелкие единицы, называемые токенами:

  • Словами (например, "груша", "город"),

  • Частью слов (например, "яблок" + "о"),

  • Символами (например, "!", ",", ".").

Запрос: “Красивый грушевый сад”

Пример токенизации: ["Красивый", "грушевый", "сад"]

Давайте разберёмся, что такое эмбеддинг:

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

Каждый токен преобразуется в числовое представление с помощью эмбеддинг-слоя:

  • "Красивый" → [0.1, -0.3, 0.5, ..., 0.2]

  • "грушевый" → [-0.2, 0.4, 0.1, ..., -0.1]

  • "сад" → [0.3, 0.2, -0.4, ..., 0.5]

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

Ключевые слова

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

Запрос: "Ancient city at sunset"

Ключевые слова: "Ancient", "city", "sunset"

Нейросеть определит основные элементы изображения: древний городской стиль, закат. ИИ будет опираться именно на данные детали. Если бы был запрос "A city", то модель сгенерировала бы более общий результат.

Давайте разберём отличия архитектур вышеприведённых нейросетей:

Stable Diffusion

Архитектура: Модель скрытой диффузии (Latent Diffusion Model, LDM)

современный подход к генерации изображений, который сочетает в себе несколько ключевых компонентов: UNet-архитектуру, вариационные автокодировщики (VAE) и нейросеть для обработки текста (например, CLIP).

Latent Diffusion Models работают в латентном пространстве, что значительно снижает вычислительную сложность по сравнению с традиционными диффузионными моделями, которые оперируют напрямую с пикселями изображения. 

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

Латентное пространство — математическая модель, в которой все возможные образы представлены в виде координат или точек

Процесс диффузии:

  1. Добавление шума:

    • Изображение xt постепенно "разрушается" путем добавления шума на каждом шаге t:

q(xt|xt-1) = N(xt; 1-βtxt-1, βtI)

  • xt — состояние изображения на шаге t

  • βt — параметр, определяющий величину шума на шаге t

  • N(μ,σ2) — нормальное распределение с математическим ожиданием μ и дисперсией σ2

  1. Удаление шума:

    • Модель обучается восстанавливать изображение из шумового состояния, предсказывая шум на каждом шаге:

p0(xt-1|xt)=N(xt-1;μ0(xt,t),∑0(xt,t))

  • μ0(xt,t) — предсказанное среднее значение.

  • ∑0(xt,t) — предсказанная дисперсия.

UNet архитектура

UNet — это сверточная нейронная сеть, которая используется для предсказания шума на каждом шаге диффузии. Она состоит из двух частей: энкодера и декодера.

Описание архитектуры UNet класса сверточных нейронных сетей

Данная архитектура относится к классу сверточных нейронных сетей из-за своей структуры и применяемых в ней методов. В классической нейронной сети, называемой полносвязной или регрессивной, имеются входной, выходной и скрытые слои, которые представляют собой набор нейронов, связанных друг с другом. В свою очередь, архитектура UNet не содержит полносвязных слоев, а имеет только карты признаков между входным и выходным слоями, а также ядра свертки для получения и укрепления признаков искомых объектов.

Реализация модели нейронной сети на основе архитектуры UNet класса сверточных нейронных сетей

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

Формула для предсказания шума:

UNet предсказывает шум на каждом шаге:

∊0(xt,t)=UNet(xt,t)

xt — текущее состояние изображения,

t — временной шаг.

Variational Autoencoders (VAE)

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

Базовая архитектура вариационного автоэнкодера (VAE)
  1. Энкодер:

    • Энкодер преобразует изображение x в латентное представление z:

q(z|x)=N(z;μ(x),σ2(x))

μ(x) — среднее значение латентного представления,

σ2(x) — дисперсия латентного представления.

  1. Декодер:

    • Декодер восстанавливает изображение из латентного представления:

p(x|z)=N(x;μ(z),σ2(z))

μ(z) и σ2(z) — параметры распределения восстановленного   изображения.

  1. Оптимизация VAE:

Цель VAE — минимизировать расхождение между реальным распределением данных и реконструированным распределением. Для этого используется функция потерь:

LVAE=Eq(z|x)[log p(x|z)]-KL(q(z|x)||p(z))

KL — расстояние Кульбака-Лейблера,

p(z) — априорное распределение латентного пространства (обычно стандартное нормальное).

Обработка текста (CLIP)

CLIP (Contrastive Language-Image Pre-training) — это мультимодальная модель, которая связывает текстовые запросы с изображениями. Она используется для создания семантического эмбеддинга текста, который направляется в LDM.

Обработка текста в CLIP

  1. Текстовый энкодер

Преобразует текстовый запрос text в векторное представление etextetext=TextEncoder(text)

  1. Энкодер изображений

Преобразует изображение x в векторное представление eimage:eimage=ImageEncoder(x)

  1. Сравнение текста и изображения:

CLIP обучается максимизировать сходство между etext и eimage для соответствующих пар "текст-изображение".

  1. Использование в LDM:

Вложение текста etext подается в UNet как дополнительный вход:∊0(xt,t,etext)=UNet(xt,t,etext)

Общая схема работы LDM:

  1. Кодирование изображения:

Изображение x0 кодируется в латентное представление z0 с помощью VAE:

z0=VAEEncoder(x0)

  1. Добавление шума

Латентное представление z0 постепенно зашумляется:q(zt|zt-1)=N(zt;1-βtzt-1,βtI)

  1. Удаление шума

UNet предсказывает шум ∈0(zt,t,etext):

∊0(zt,t,etext)=UNet(zt,t,etext)

  1. Декодирование изображения:

После завершения процесса диффузии латентное представление zT декодируется обратно в изображение:

xT=VAEDecoder(zT)

  • Принцип работы: Модель обучается на большом количестве пар «текст-изображение». Из случайного шума шаг за шагом «очищает» изображение, добавляя детали, направляемая текстовым описанием.

  • Преимущества: 

    1. Открытый исходный код (можно запускать локально).

    2. Гибкость: поддержка дообучения, кастомизации, редакторов.

    3. Большое сообщество и множество расширений.

    4. Высокое качество генерации.

DALL-E

  • Архитектура: Использует Generative Pre-trained Transformer – GPT в сочетании с диффузионными моделями и моделями автокодировщиков.

DALL-E решает задачу генерации изображений как задачу автозавершения последовательности. Она принимает текстовый запрос (например, "A red apple on a wooden table") и генерирует соответствующее изображение. Ключевая особенность DALL-E — использование одного общего трансформера для обработки как текста, так и изображений.

Представление данных:

DALL-E работает с дискретными представлениями данных:

  • Текст: Текст преобразуется в последовательность токенов (слов или частей слов).

  • Изображения: Изображения разделяются на патчи (маленькие фрагменты), которые затем кодируются в дискретные токены с помощью модели VQ-VAE (Vector Quantized Variational Autoencoder).

VQ-VAE используется для кодирования изображений в латентное пространство:

  1. Энкодер:

    • Преобразует изображение x в латентное представление ze:

ze=Encoder(x)

  1. Квантизация:

    • Латентное представление ze квантизируется в дискретные токены zq:

zq=arg min||ze-zk||2 

  1. Декодер:

    • Восстанавливает изображение из дискретных токенов:/x=Decoder(zq)

Трансформер

DALL-E использует модифицированную версию архитектуры трансформера для работы с объединённой последовательностью текстовых и визуальных токенов.

Структура трансформера:

  1. Входная последовательность:

    • Текстовые токены: T = [t1,t2, ...,tn],

    • Токены изображения: I = [i1,i2, ...,im].

Объединённая последовательность:X=[T;I]=[t1,t2, ...,tn,i1,i2, ...,im]

  1. Позиционное кодирование:

    • Добавляется позиционное кодирование для учёта порядка токенов:

Xpos=X+PositionalEncoding(X)

  1. Многослойный трансформер:

Применяются несколько слоёв трансформера, каждый из которых состоит из:

  • Самовнимание (Self-Attention):Attention(Q,K,V)=softmax(QKTdk)V

Q,K,V — матрицы запросов, ключей и значений,

dk — размерность ключей.

  1. Выход трансформера:

На выходе получается последовательность предсказанных токенов изображения:

Î=Transformer(Xpos)

Генерация изображений

Генерация изображений происходит в два этапа:

  1. Трансформер предсказывает токены изображения:

    • Трансформер генерирует последовательность токенов Î, которая представляет собой дискретное латентное представление изображения.

  2. Декодирование изображения: 

    • Дискретные токены Î декодируются в пиксельное представление с помощью декодера VQ-VAE:

x=Decoder(Î)

Обучение модели

DALL-E обучается минимизировать следующую функцию потерь:

  1. Перекрёстная энтропия:

    • Для предсказания правильных токенов изображения:Lcross-entropy= -i=1mlog P(it|i<t,T)

it — истинный токен изображения

i<t — предыдущие токены.

  1. Реконструкция изображения:

    • Для восстановления изображений с помощью VQ-VAE:Lreconstruction=||x-x1||2

  2. Комбинированная функция потерь:

L=Lcross-entropy+λLreconstruction

где λ — весовой коэффициент.

  • Принцип работы: Модель получает текстовое описание и по нему генерирует изображение. Использует методы CLIP для связывания текста и изображения и diffusion-метод для синтеза картинки.

  • Преимущества:

    1. Глубокая интеграция с экосистемой OpenAI.

    2. Высокое качество и разнообразие изображений.

    3. Поддержка сложных текстовых запросов.

    4. Простота использования через веб-интерфейс.

Midjourney

Midjourney — это коммерческий продукт с закрытым кодом, и точные детали его архитектуры не раскрываются. Однако известно, что он основан на современных генеративных моделях, сочетающих diffusion-механизмы и методы глубокого обучения. 

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

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

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

Вот таблица для наглядности:

Также имеется вариант GANs (Generative Adversarial Networks):

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

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

Принцип работы

Генеративно-состязательные сети работают на принципе состязания двух компонентов: генератора и дискриминатора. 

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

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

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

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

Этапы генерации изображений:

  1. Подготовка данных

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

  • COCO (Common Objects in Context) — датасет с размеченными объектами.

  • LAION (Large-scale Artificial Intelligence Open Network) — огромный открытый датасет изображений с текстовыми описаниями.

Качество и размер датасета напрямую влияют на способности модели генерировать детализированные и реалистичные изображения.

  1. Обучение модели

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

Например, при получении запроса "закат над горами", модель учится ассоциировать такие слова, как "закат", "горы", "небо", "свет" с соответствующими визуальными паттернами.

  1. Генерация изображения

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

Модель использует данный embedding для создания изображения поэтапно:

В случае GANs: генератор создаёт изображение, а дискриминатор проверяет его реалистичность.

В случае diffusion models: модель постепенно "очищает" зашумлённое изображение, шаг за шагом улучшая его качество.

Из шума получается изображение по заданному промпту

В контексте генерации изображений модели, подобные GPT, используют подход, основанный на autoregressive моделировании, где изображение рассматривается как последовательность токенов (например, пикселей или их абстрактных представлений)

После генерации изображение может быть улучшено с помощью дополнительных алгоритмов, таких как повышение резкости, коррекция цвета или увеличение разрешения (например, через Hires.fix в Stable Diffusion).

Особенности работы нейросетей

Учтите, что разные нейросети будут давать вам разные результаты на один и тот же промпт. Например, посмотрим на работу Stable Diffusion, Midjourney и DALL-E, задавая им один и тот же промпт.

Промпт: “Величественный средневековый каменный замок, возвышающийся на вершине крутой горы, окруженный обрывами с острыми краями, древние стены покрыты мхом и плющом, высокие башни и стены четко выделяются на фоне бурного неба, темные тучи озаряются вспышками молний, узкая извилистая тропа ведет к воротам замка, у подножия горы густой лес, туман, стиль фэнтези”

Stable Diffusion:

Midjourney:

DALL-E:

Как можете видеть, генерируют они по-разному, каждая нейросеть в своём стиле. Так будет и с другими моделями ИИ, такими, как:

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

Итог

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

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

А что добавили бы вы в теорию о создании промптов? Может я что-то упустил? Пишите об этом в комментариях.

Спасибо за прочтение!