Глава 14a. Latent Diffusion и U-Net: почему шумят не в пикселях
Сжимать картинку в латент — не «уменьшить вход ради скорости».
Это смена пространства, в котором вообще существует процесс диффузии.
Глава 14 объяснила прямой и обратный шум.
Здесь разберём связку, которая сделала большие визуальные модели практичными:
автоэнкодер + denoiser с skip-связями + условие.
14a.1. Боль pixel-space диффузии
Диффузия в пикселях честна и прожорлива.
На каждом шаге сэмплинга сеть должна обработать тензор размера изображения (часто с ещё большим внутренним width).
Умножьте на десятки/сотни шагов — получите счёт, который убивает интерактивность.
Грубые гипотезы ускорения:
- Меньше шагов (лучше сэмплер / дистилляция).
- Меньше разрешение.
- Другое пространство признаков, где «картинка» уже сжата, но семантика жива.
Третий путь — latent diffusion.
14a.2. Автоэнкодер как договор о сжатии
Сначала учим (или берём готовый) автоэнкодер:
Требования к z жёстче, чем «просто меньше»:
- хорошо реконструирует визуально важные детали;
- достаточно непрерывный/регулярный, чтобы на нём жить гауссовскому шуму;
- компактный по H×W (часто ×8 down по пространству) и умеренный по каналам.
Обмен автоэнкодера:
| Получили | Чем заплатили |
|---|---|
| Диффузия считает на меньшем тензоре | Артефакты AE (лица, текст, тонкие линии) |
| Меньше VRAM/шаг | Ошибки AE нельзя «долечить» одним только denoiser’ом |
| Практичный high-res | Два модуля вместо одного, два режима поломок |
Важная тонкость:
Уменьшить картинку resize’ом до 64×64 ≠ получить латент AE.
Resize выбрасывает информацию необратимо и тупо.
AE учит какую информацию сохранить вz, чтобы decoder поднял её обратно.
Именно поэтому вопрос из конца главы 14 («почему не просто меньшая картинка?») имеет жёсткий ответ: другой обмен по потере деталей и семантике.
14a.3. Диффузия в z: тот же сюжет, дешевле сцена
Дальше почти дословно глава 14, но для z:
обучение: z0 → зашумить → zt → сеть(zt, t, condition) → оценить шум
инференс: zT ~ N(0,I) → … → z0 → decode → картинка
Условие (текст, класс, маска) подаётся в denoiser через cross-attention / AdaLN / concat — детали эволюционируют, идея одна:
Генерация = управляемая реставрация латента.
flowchart LR
T[Текст/условие] --> D[Denoiser]
N[Шум zT] --> D
D --> Z0[z0]
Z0 --> DEC[Decoder AE]
DEC --> X[Картинка]
14a.4. Почему denoiser так часто U-Net
U-Net здесь не ностальгия по сегментации.
Это снова глава про skip-connections — только в роли реставратора.
Зачем skip при денойзинге:
- низкие уровни помнят края и высокочастотный мусор/детали;
- bottleneck держит грубую структуру;
- склейки позволяют на поздних шагах вернуть текстуры, не восстанавливая их «из воздуха» только из маленькой карты.
Рифмы с книгой:
| Идея | Где уже была |
|---|---|
| Skip для деталей | ResNet / U-Net сегментации / FPN |
| Многомасштабность | Пирамиды детекции |
| Высокие частоты в конце | Частотный взгляд + поздние шаги диффузии |
Современные диффузионные трансформеры (DiT и компания) показывают: U-Net не священная корова.
Но причина его успеха остаётся учебной: реставрации нужна дорога для деталей между масштабами.
14a.5. Где система ломается: карта поломок
| Симптом | Куда смотреть сначала |
|---|---|
| Мыло / каша | AE reconstruction, слишком сильное сжатие |
| Текст кривой | AE + разрешение латента |
| Не слушает prompt | Conditioning / attention к тексту |
| Медленно | Число шагов, sampler, размер латента |
| Артефакты сетки | Decoder, VAE scaling, postprocess |
Урок архитектора генерации:
Не отлаживайте «диффузию вообще», отлаживайте звено цепи.
Иначе вы крутите шаги сэмплера, когда умер decoder.
14a.6. Ускорения поверх латента
Даже в латенте счётчик шагов кусается. Дальнейшие обмены:
- лучше ODE/SDE-сэмплеры (меньше шагов при том же качестве);
- дистилляция teacher→student (4 шага вместо 50);
- consistency-подходы;
- квантизация/TensorRT на denoiser;
- меньше латент / меньше условие (ценой контроля).
Снова таблица книги: качество × контроль × ms × VRAM.
Latent diffusion просто сдвигает парето-фронт ближе к продукту — не отменяет фронт.
Если бы вы были автором статьи…
-
Сравните pixel-diffusion на 128×128 vs latent-diffusion на 512×512 с AE ×8
при близком wall-clock. Кто победит визуально на мелком тексте? -
Абляции skip в U-Net denoiser: уберите половину skip-связей.
На каких шагахtкачество падает сильнее — ранних или поздних? -
Зафиксируйте denoiser, смените только AE (сильнее/слабее сжатие).
Какая метрика ловит «смерть латента» раньше FID?
После этой главы генерация должна читаться как знакомая инженерия масштабов и skip-путей — только loss учит реставрацию из шума, а не бокс вокруг кошки.