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

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

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

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

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

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

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

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

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

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

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

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

  • Четкость

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

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

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

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

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

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

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

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

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

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

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

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

 

Мрачный, ручной рисованный стиль игры 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 не содержит полносвязных слоев, а имеет только карты признаков между входным и выходным слоями, а также ядра свертки для получения и укрепления признаков искомых объектов.

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

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

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

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

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

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

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

Variational Autoencoders (VAE)

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 и т.д., ведь каждая из них имеет свои уникальные особенности в обработке запросов, интерпретации промптов и генерации изображений.

Итог

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

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

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

Продолжение находится здесь.

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

Комментарии (3)


  1. Robic
    16.05.2025 21:57

    Спасибо! Новые знания получил. Весьма существенная часть текста представляет для меня тот самый "шум") Сомневаюсь, что хоть сколь нибудь широкая аудитория в состоянии его "очистить". Вам ведь нужна эта хоть сколь нибудь широкая аудитория?


  1. IZh
    16.05.2025 21:57

    Интересно, что на приведённых примерах ИИ успешно проигнорировал половину деталей промптов (например, светящиеся руны оказались на плаще, а не на посохе, у замка большинство домиков таки каменные, а не деревянные, а кот лежит не то что бы на белой подушке). Личный опыт обращения с ИИ примерно такой же — очень долго приходится вдалбливать, что же требуется.


  1. pnmv
    16.05.2025 21:57

    замечательная статья (поставил плюс).

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

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