Интерактивный курс · генерация изображений

Как нейросети рисуют

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

Все демо на странице — симуляция: реальной генерации нет, результаты заложены заранее.

t = 1000 · чистый шум
01 Основная идея

Прямой процесс портит, обратный — создаёт

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

Картинка Расписание шума
t = 0 · исходная картинка x₀
время t t = 0
→ прямой: добавляем шум ← обратный: убираем шум
Зачем портить картинки? Так создаётся обучающая выборка. Для любой картинки и любого t мы точно знаем, какой шум был добавлен. Нейросеть учится предсказывать и вычитать этот шум (постановка).
02 Обратный процесс

Генерация — это денойзинг в цикле

Стартуем с чистого шума. На каждом шаге сеть вычитает его кусочек, ориентируясь на текстовый промпт, и картинка постепенно проявляется. Каждый запуск начинается с нового случайного шума — поэтому результаты всегда разные. Сравните количество шагов: это главный размен «скорость ↔ качество».

Шагов
xT · текущее состояние
ε̂ · шум, предсказанный сетью
Нажмите «Сгенерировать»…
Что видно: при малом числе шагов остаются артефакты — сеть не успевает всё вычесть. При большом числе — получаем хороший результат, но это дольше. Продвинутые сэмплеры и дистилляция позволяют получать хорошие картинки за 4–8 шагов — так работают «турбо»-модели.
03 Обусловливание текстом

Промпт — это компас для денойзинга

Сам по себе обратный процесс рисует «что-нибудь». Чтобы рисовал по запросу, эмбеддинг текста подмешивают в сеть на каждом шаге. Classifier-Free Guidance (CFG) усиливает эффект: сеть считает два предсказания — с промптом и без — и «дотягивает» результат в сторону промпта. Покрутите параметр.

Промпт
guidance g g = 7.0
результат при g = 7.0
Типичные значения: g = 0 — промпт выключен полностью (безусловная генерация); g = 1 — промпт уже работает, но без усиления, связь с текстом слабая; g ≈ 5–9 — рабочая зона; g > 12 — пережжённые цвета, ломаная композиция: модель слишком буквально гонится за текстом. Отрицательный промпт — тот же приём, только учитываем теперь то, чего не хотим видеть. Сам метод — из работы «Classifier-Free Diffusion Guidance».
04 Латентная диффузия

Шумим не пиксели, а сжатый код

Гонять диффузию по мегапиксельным картинкам безумно дорого. Трюк Stable Diffusion: автоэнкодер (VAE) сжимает картинку в маленький «латент», вся диффузия происходит в нём, а декодер в конце разворачивает результат обратно в пиксели. Нажмите — и проследите за размерами.

Диффузия работает в пространстве в ~48 раз меньшем.
🖼 Пиксели
512 × 512 × 3
786 432
VAE-энкодер
сжатие ×48
⇘
🌀 Диффузия
в латенте 64 × 64 × 4
16 384
VAE-декодер
разворачивает ×48
⇗
Почему это работает: латент хранит «суть» картинки (композицию, объекты, свет), отбрасывая мелкую фактуру — её дорисует декодер. Меньше измерений → меньше вычислений на каждом шаге денойзинга → генерация за секунды вместо минут. Тот же приём используют видео- и аудио-диффузии. Идея — из статьи «Latent Diffusion Models», из которой и вырос Stable Diffusion.
05 Редактирование диффузией

Не только рисовать, но и переделывать

Раз генерация — это денойзинг, то редактирование — это частичный денойзинг. Для img2img стартуем не с чистого шума, а с зашумлённой версии готовой картинки — композиция выживает, содержание меняется. Для inpainting шумим и перерисовываем только область под маской, остальные пиксели не трогаем.

img2img частичное зашумление
Ползунок «сила» решает, до какого значения зашумить исходник перед обратным ходом. Малая сила — лёгкий рестайлинг, большая — от исходника остаётся только общая композиция.
Исходник Промпт
Сила 0.55
исходник x₀
→
результат
Выберите силу и нажмите «Перерисовать».
Чем больше шума добавили, тем меньше модель «обязана» исходнику — и тем свободнее следует промпту.
Inpainting шум только под маской
Выберите маску и чем её заполнить: на каждом шаге денойзинга пиксели вне маски принудительно возвращаются к оригиналу, а внутри — генерируются заново.
Маска Заполнить
маска подсвечена
Область под маской будет сгенерирована заново, остальное — заморожено.
Внутри маски картинка проходит весь путь «шум → изображение», а снаружи не шелохнётся. Так работают «умные ластики», расширение кадра (outpainting) и замена объектов в фоторедакторах.
06 Генерация по токенам

Картинку можно написать, как текст

Второй путь — без всякого шума. VQ-автоэнкодер выучивает «словарь» из тысяч визуальных токенов (кодов). Теперь любая картинка превращается в сетку таких кодов. Дальше работает обычный трансформер из демо про LLM: предсказывает следующий визуальный токен, слева направо, сверху вниз — а в конце декодер разворачивает коды в пиксели. Так устроены DALL·E 1, Parti и генерация картинок в современных мультимодальных LLM.

Промпт
сетка 12 × 12 = 144 визуальных токена
→ VQ-декодер →
пиксели с деталями
Нажмите кнопку — трансформер начнёт «печатать» картинку токен за токеном.
словарь визуальных токенов (фрагмент кодбука, всего ~8192)
Происходит тот же цикл, что и в тексте: контекст → вероятности следующего токена → выбор → дописали. Только словами служат не куски слов, а кусочки картинок. Промпт стоит в начале последовательности, поэтому каждый следующий код согласован и с текстом, и с уже «написанной» частью изображения.
Редактирование через токены а правда ли точнее?
Раз картинку можно написать токенами, её можно и переписать — так редактируют изображения мультимодальные LLM: картинка лежит в контексте как токены, модель читает инструкцию и генерирует всю последовательность заново. Маски нет — модель сама понимает из текста, что менять. Запустите и следите за нетронутой областью.
Инструкция
до · токены исходника
→
после · переписано заново
токен «поплыл» сам по себе
Модель перепишет все 144 токена — даже те, которые инструкция не трогала.
Так точнее или нет? Смотря в чём. Токенный редактор — это LLM, поэтому он семантически точнее: понимает сложные инструкции («поменяй надпись», «в стиле оригинала»), правит без маски и помнит контекст диалога. Но попиксельно он менее точен: вся картинка проходит через процесс заново, и нетронутые области слегка «плывут» — например,«то же фото, но чуть другое лицо». Диффузионный inpainting — противоположность: пиксели вне маски заморожены идеально, зато инструкцию он понимает хуже.
07 Два способа творить

Авторегрессия против диффузии

Одна и та же сцена. Токенная модель строит картинку последовательно патч за патчем. Диффузия строит параллельно, уточняет всю картинку целиком.

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

Диффузия — вся картинка сразу, всё чётче

Авторегрессия: низ картинки не существует, пока не «написан» верх. Порядок фиксирован, нарисованный патч не исправить — он уже в контексте. Зато токены дискретны и живут в одном ряду с текстом.
Диффузия: композиция целиком видна с первых шагов, любой пиксель можно «передумать» позже — отсюда глобальная согласованность. Кроме картинок так генерируют видео, звук и молекулы.
Граница размывается: появляются диффузионные языковые модели, уточняющие весь текст сразу («Large Language Diffusion Models»), а токенная генерация — это и есть авторегрессия для картинок. Мультимодальные LLM из прошлого демо используют оба пути: одни пишут картинку токенами сами, другие вызывают диффузию как «руку», которой рисуют.
08 Кто есть кто

Известные модели — и когда какую брать

Одни модели — диффузия, другие — «токенный» путь через мультимодальную LLM, и у каждого пути свои сильные стороны. Выберите задачу — подсветится подходящий инструмент. Названия устаревают за год, критерии выбора — нет.

Задача

🎨 Midjourney

диффузия · закрытая
  • лучшая «врождённая» эстетика: арт-дирекшн, свет, композиция
  • мудборды и концепты за минуты
  • хуже слушается точных инструкций
  • текст на картинке и правки по шагам — не его жанр

🔓 FLUX / Stable Diffusion

диффузия · открытые веса
  • свои серверы: данные не уходят наружу
  • дообучение на стиль бренда (LoRA), ControlNet, полный контроль
  • копеечная цена на больших объёмах
  • нужны инженеры и GPU — это конструктор, а не сервис

🍌 Nano Banana (Google)

LLM-токены · раздел 06
  • редактирование текстовой инструкцией, без масок
  • консистентность: то же лицо/персонаж из сцены в сцену
  • «знает мир» — понимает, что просят, как собеседник
  • нетронутые области могут «поплыть» (раздел 06)

💬 GPT Image (OpenAI)

LLM-токены · раздел 06
  • точное следование длинным сложным промптам
  • читаемый текст на картинке: постеры, схемы, UI
  • правки в диалоге, с памятью контекста
  • медленнее диффузионных сервисов
Выберите задачу выше — и посмотрите, почему для неё подходит именно этот класс моделей.
Ландшафт, на самом деле, ещё шире: Seedream силён в текстах на картинке и товарной съёмке, Imagen — диффузия Google, Ideogram и Recraft — надписи и векторный дизайн. Модели сменяются каждые полгода, поэтому запоминайте не названия, а вопросы: диффузия или LLM-токены? открытые веса или сервис? нужна эстетика или послушность? Ответы на них — это и есть выбор модели.