Concise Research
1.13K subscribers
242 photos
223 links
Исследования AI глазами исследователя
Автор: @snk4tr Сергей Кастрюлин
Download Telegram
Imagine Flash: Accelerating Emu Diffusion Models with Backward Distillation

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

В этой работе предлагают дистилляцию шагов для text-to-image модели Emu. Основной claim в уменьшении шагов до 3 с аж 50 (хотя в исходной работе про число шагов ни слова) с помощью трёх трюков:

1. Backward Distillation. В обычной, forward дистилляции по шагам модель учат предказывать x_0 по x_t минуя промежуточные шаги, а сам x_t получают прямым процессом. Вместо этого, авторы предлагают получать x_t семплированием из студента, начиная с x_T. Затем, студента учат имитировать предсказания x_0 учителя, но уже стартуя с нового, “синтетического” x_t. Таким образом, модель как бы учится нивелировать exposure bias, о котором мы говорили выше (раз, два, три).

2. Shifted Reconstruction Loss. Обычно для вычисления разницы предсказаний учителя и ученика используют один и тот же момент времени t. Авторы предлагают смещать t для учителя в меньшую сторону, то есть в качестве референсов брать менее шумные x_t. Таким образом, студент будет ориентироваться на более богатую контентом картинку. Утверждается, что это улучшает сигнал для ученика и положительно влияет на его качество.

3. Noise Correction. Авторы говорят о том что в точке T, то есть на первом шаге семплирования, модели трудно сделать предсказание из-за того что в латенте пока что нету сигнала, что верно. Утверждается, что рассмотрение этого случая как отдельного и отказ от использования предсказания шума от студента стабилизирует процесс семплирования. Тем не менее, оценка на x_0 все же используется. Более того, судя по ablation, этот пункт не сказывается на FID/CLIP score.

Модель сравнивают с ADD-LDMXL и Lightning-LDMXL, а так же с ADD версией Emu. Аблейтят, что Backward Distillation даёт наибольший профит, а в сапмате показывают, что модель не коллапсирует по разнообразию. Кода нет.
🔥5👍1
Scaling (Down) CLIP: A Comprehensive Analysis of Data, Architecture, and Training Strategies

Большинство работ по масштабированию, в том числе мультимодальных моделей, направлены на исследование влияния увеличения модели, данных и компьюта. DataComp и основанные на нём работы, а также Beyond Neural Scaling Laws и YaART показали, что качество - важный фактор, влияющий на оптимальное количество данных необходимых для данной модели, а в Scaling Laws for Data Filtering показали, что качество данных связано еще и с тем сколько выч. ресурсов оптимально тратить на обучение.

Здесь авторы изучают quality-quantity trade-off, а также влияние конкретных методов фильтрафии и претрена, обучая CLIP на пофильтрованных подмножествах WebLI 3.4В. В статье есть несколько занятных выводов:

1. Можно получить буст качества претреном на 40% лучших (по текстовой релевантности) данных относительно обучения на всех данных в терминах zero-shot качества на ImageNet.

2. Наибольший ViT не всегда оптимален. Например, если учить одну эпоху на датасетах < 100М, то ViT-L/16 оказывается худшим из всей линейки ViT’ов. Оптимальный размер зависит от размера данных даже при фиксированном числе итераций обучения. Также на небольших выборках CNN (ResNet-50) могут быть даже лучше. Объясняется это сильным inductive bias, который, видимо, решает на малых выборках.

3. Продвинутые техники предобучения вроде SLIP, FLIP и добавления аугментаций не всегда побеждают стандартный CLIP. С увеличением масштаба эксперимента методы выравниваются по качеству, при этом SLIP становится не выгодным из-за в два раза большей выч. сложности. На максимальном тестировавшемся размере (3.4В) базовый CLIP оказывается лучшим вариантом.

Ни кодом ни обученными модельками авторы не делятся.
👍2🔥1
CatLIP: CLIP-level Visual Recognition Accuracy with 2.7× Faster Pre-training
on Web-scale Image-Text Data


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

Интересно, что изначальной мотивацией перехода на self-supervised обучение был уход от предобучения на классификационных задачах, обычно требующих явной разметки. Здесь авторы предлагают вернуться к классификации в угоду вычислительной эффективности, при этом все еще не требуя явной разметки. Повышение эффективности достигается за счет исключения большого числа мало информативных негативных сравнений в contrastive loss.

Метод основан на использовании иерархии концептов WordNet в качестве классов. Для этого из текстовых описаний к картинкам выделяют существительные. Каждое уникальное существительное - класс, при этом длинный хвост редко встречающихся существительных выбрасывается. На практике хорошо работает количество классов от 100 до 500. Каждый текст может содержать несколько существительных, поэтому классификация многоклассовая.

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

Для интересующихся есть детальная инфа про протоколы обучения и тестирования, а также есть код и веса обученных моделей.
👍3
SeeSR: Towards Semantics-Aware Real-World Image Super-Resolution

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

Отношение к текстам в диффузонном Super Resolution (SR) не однозначное. С одной стороны, Imagen, YaART, SR3/SR3+ и многие другие не видят улучшения от использования текстов для SR в высоком разрешении. С другой стороны, в SUPIR утверждается, что тексты полезны.

Суть этой статьи - свой механизм подготовки текстов для SR, который, вроде как, бустит качество. Авторы предлагают:
— Обучить модель тегирования (по сути, классификации) ассоциировать low-rez картинки с тегами так же хорошо как их high-rez версии;
— С помощью неё предсказывать теги (ключевые слова через запятую) по low-rez картинке;
— Подавать строку, состоящую из тегов, в SR модель в качестве условия.

Большинство последних SR моделей полагаются на генеративный prior Stable Diffusion (SD). Для этого модели вроде DiffBIR и SUPIR берут предобученные варианты SD и адаптируют их: low-rez картинку подают через обучаемые отдельно варианты ControlNet, основная модель и VAE остаются замороженными.

Здесь авторы делают то же самое: полученные тегированием тексты подаются через cross-attention, а low-rez картинка через ControlNet в предобученную SD. Обучаются на мелких датасетах (DIV2k, Flickr etc.), с RealSR аугментациями, эвалятся на их тестах с теми же аугментациями + сборной корзинке из RealSR/DRealSR и собственных картинок.

Метод чуть напоминает натягивание совы (text-cond diffusion generation) на глобус (задача SR). Прирост качества, скорее всего, достигается за счет того что модель ломается меньше чем в работах, пытающихся оторвать ненужные тексты. Код есть.
👍4
Tackling the Singularities at the Endpoints of Time Intervals in Diffusion Models

Несмотря на отличное среднее качество генераций Stable Diffusion (SD), у этой модели были замечены сложности с генерацией изображений с яркостью, сильно отличающейся от средней. Не понятно насколько это распространенная проблема, но утверждается, что моделям бывает сложно сделать очень контрастную картинку, имеющую чисто белый/чёрный фон и яркие цветовые переходы.

Ранее это объясняли проблемами в реализациях расписания шума, оставляющих немного сигнала в точке Т. Утверждалось, что усреднение яркости происходит из-за того что модель всегда оставляет, а потом стартует с некого “среднего сигнала” и потому всегда приходит в “усредненные картинки”.

В этой работе авторы заходят с точки зрения проблем с предсказаниями шума в точках 0 и Т. Утверждается, что в обеих точках возникает сингулярность, не позволяющая сделать осмысленное предсказание. Действительно, например в точке Т наш сигнал представляет собой x ~ N(0, 1) и не понятно как предсказать какой шум нужно вычесть из шума чтобы получить не шум 💀

Авторы предлагают рассматривать первый шаг начала семплирования (точку Т) как особый случай. Они показывают, что в случае условной генерации можно (и нужно) отдельно выучить предсказание оценки на х_0 при условии кондишена (например, промта), которую дальше вставлять в любой процесс семплирования.

Итого получаем алгоритм:
1. Учим диффузию как обычно (на предсказание шума) либо берём предобученную;
2. Отдельно учим модель-добавку для предсказания оценки на х_0 на первом шаге семплирования;
3. Во время семплирования делаем первый шаг моделькой из п.2, а дальше как обычно.

В экспериментах на SD 1.5 и 2.0 качественно и количественно (FID) показывают рост качества и увеличение контраста. Код выложен.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🤔3
CADS: Unleashing the Diversity of Diffusion Models through Condition-Annealed Sampling

Classifier-free guidance - важный элемент инференса диффузионных моделей, существенно повышающий качество генераций. Суть метода в том чтобы из всех возможных выученных мод направить генерацию в сторону той, которая лучше всего соответствует кондишену (обычно, тексту). Чем выше guidance scale (а для максимизации качества он, как правило, высокий), тем больше “сужается” пространство траекторий семплирования и, следовательно, разнообразие.

Авторы предлагают увеличивать разнообразие возможных генераций с помощью Condition-Annealed Diffusion Sampler (CADS) - метода, не требующего переобучения и модификаций параметров семплирования. Интуитивно, авторам хочется меньше ограничивать множество генераций промтом на ранних шагах семплирования. Ближе к финальным шагам роль промта можно снова увеличить для получения высокого качества и хорошего соответствия запросу.

Суть метода заключается во впрыскивании нормального шума непосредственно в текстовый эмбеддинг, подающийся в модельку в качества кондишена. Уровень шума задаётся некоторым расписанием, где базовый вариант - кусочно-линейная функция:
- На промежутке от Т до t1 - полностью заменяем эмбед на шум;
- От t1 до t2 линейно понижаем уровень шума;
- От t2 до 0 используем чистенький эмбед.

Чтобы эмбеды не ломались, используется дополнительная процедура нормализации эмбедингов перед их зашумлением.

Внимательный читатель спросит почему бы нам просто не варьировать силу guidance scale в ходе семплирования вплоть до полного его отключения промежутке от Т до t1, ведь кажется, что это эквивалентно. Такой подход является бейзлайном этой работы и авторы значительно его превосходят. В том ли причина, что авторы плохо завели бейзлайн - вопрос открытый.

В статье аблейтится метод в приложении к нескольким популярным семплерам (включая DMP++ и UniPC), рассматриваются вариации расписания зашумления. Все эксперименты на ImageNet 256 и 512, качество в терминах FID и Precision даже растёт. Кода нет.
👍5
Automatic Data Curation for Self-Supervised Learning: A Clustering-Based Approach

Современные Self-Supervised Learning (SSL) методы качественно и робастно решают широкий круг задач. SSL модели обучают на больших наборах данных, часто являющихся пофильтрованными подмножествами кусков интернета. Большой прогресс в области достигнут за счет совершенствования процедур фильтрации данных (DataComp), позволяющих отбирать более качественные семплы.

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

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

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

Суть метода в том чтобы:
- Делать k-means на эмбедах, получать кластеры;
- Для каждого кластера считать центроиды;
- Снова делать k-means, но уже на центроидах;
- Асимптотически процесс сходится к равномерному покрытию произвольного распределения.

Получив иерархию, авторы семплируют нужное количество примеров из семпла интернет картинок/текстов и обучают свои версии DINOv2 на этих данных. Довольно убедительный эвал и ablation показывает высокую робастность, код обещают тут.
👍2
LiteVAE: Lightweight and Efficient Variational Autoencoders for Latent Diffusion Models

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

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

Основные составляющие метода:

1. Wavelet processing (основной элемент на приложенной схеме): к входной картинке применяется multi-scale wavelet transform, возвращающий wavelet карты разного разрешения (1/2, 1/4, 1/8 от исходного и тд). На практике, авторы берут 3 скейла, которые далее кодируются отдельными энкодерами. Латенты просто конкатенируются и декодируются.

2. Self-modulated convolution: авторам не нравится распределение значений активаций после group norm блоков декодера, поэтому они меняют их на свои свертки с модуляцией. Эти блоки выучивают скейлинг активаций, что приводит к меньшему разбросу значений.

3. Training improvements: учатся на картинках низкого разрешения для эффективности, меняют архитектуру дискриминатора на U-Net, добавляют частотный лосс.

Внимания заслуживает сапмат, в котором обсуждается важность выучивания латентного представления для реконструкции и последующего обучения LDM. Также обсуждаются более тонкие архитектурные моменты, выбор конкретного adversarial loss, детали имплементации. Кода нет.
👍6
Align Your Steps: Optimizing Sampling Schedules in Diffusion Models

В стандартной DDPM постановке, диффузионки требуют много шагов семплирования (>100) для получения качественных генераций. Это жуть как не удобно, поэтому делают: дистилляцию по шагам (ADD, Consistency etc.) и используют продвинутые солверы (часто высокого порядка) для решения ODE/SDE (DPM++, ER-SDE-Solvers), т.е. диффузионный дифур разбивается на интервалы (дискретизируется), далее численно решаемые солверами.

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

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

Теперь, когда у нас есть эвристическое расписание шагов t и некоторая аппроксимация идеального решения обратного SDE, давайте адаптировать наше расписание так чтобы минимизировать ошибку дискретизации. Авторы показывают, что делать это лучше иерархически. Допустим вы хотите лучшее расписание на 32 шага. Тогда нужно:
- Найти оптимальное расписание на 10 шагов минимизируя ошибку дискретизации;
- Добавить экспоненциально количество шагов (сначала до 20, потом до 40) и найти оптимальное решение для них;
- Аппроксимировать расписание какой-нибудь нелинейной функцией, после чего найти точки для нужного числа шагов (32) интерполяцией.

Метод показывает видимый прирост качества на картиночных и видео версия Stable Diffusion для ряда ODE/SDE солверов. Ссылки на потыкать (colab, diffusers) есть на сайте проекта.
👍5
Data Filtering Networks

Появление больших датасетов (CommonCrawl, LAION) для обучения мультимодальных моделей позволило качественно продвинуться в области дискриминативных (DINO, CLIP, BLIP, CoCa) и генеративных (SD, DALL-E, MJ) моделей. При этом, давно понятно, что важно не только их количество, но и качество. Обучение на меньших датасетах лучшего качества приводит к лучшим результатам (DataComp, YaART).

Обычно, улучшение данных проводится за счет их фильтрации сторонними моделями. Модели выбираются исходя из общих соображений, пороги подбираются “на глаз”. Авторы системно подходят к задаче фильтрации данных, проводят анализ зависимостей, делают о том что важно, а что - не очень.

Для всех экспериментов учат CLIP-like Data Filtering Networks (DFNs), эвалятся в DataComp режиме на 38 classification (в т.ч. zero-shot ImageNet) + retrieval бенчмарках.

Анализ показывает, что:
- Качество CLIP-like фильтрационных моделей на zero-shot ImageNet плохо коррелировано с zero-shot ImageNet качеством моделей, обученных на пофильтрованных данных 😬;
- Фильтрационные модели лучше учить на небольшом наборе качественных данных (показали ухудшающим экспом с доливанием CommonCrawl шакалов);
- CLIP-like претрен для DFN лучше классификационного (на качество семплов);
- Размер DFN модели (ViT-B/ViT-L) слабо влияет на качество;

После этого авторы получают SOTA CLIP-like качество файнтюнингом OpenAI CLIP чекпоинта на своем HQITP-350M датасете с качественными кепшенами, проверенными людьми. Использование аугментаций, большого батча и более долгого обучения тоже помогает. В общем, сюрпризов не случилось. High-quality data is king. Кода/весов нет.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
On Discrete Prompt Optimization for Diffusion Models
ICML’24

Современные text-to-image модели учатся на больших корпусах пар картинка-текст, что позволяет им генерировать произвольные изображения в хорошем качестве. Однако, распределение промтов в датасетах в среднем отличается от пользовательских вводов и в результате модель может выдавать субоптимальное качество. Борьба с этим порождает prompt engineering - ручной процесс подбора промта для достижения лучшего результата.

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

1️⃣ Discrete Prompt Optimization - метод улучшения промтов как для максимизации качества, так и для поиска адверсариальных вариантов, ломающих генерацию.
Метод:
- Делаем генерацию по user prompt
- Считаем графиенты по prompt имея картинку (генерацию), стартуая с пользовательского промта.
- Минимизируем лосс (CLIP score) между итоговой генерацией и пользовательским промтом.
- Для получения adversarial делаем то же самое, но с обратным знаком.

2️⃣ Процедуру тюнинга негатив промтов для моделей с classifier-free guidance. Метод работает аналогично, но авторы показывают показывают, что это может быть даже более эффективно чем тюнинг “позитивных” промтов.

3️⃣ Трюки-хаки для того чтобы сделать вычисления посильными:
- В идеале, нам нужно посчитать градиенты на всех шагах семплирования. Это слишком тяжело по VRAM, поэтому предлагается эвристика того где их считать, а где - нет.
- Прокидываем градиенты через lookup таблицу токенайзера с помощью Gumbel softmax trick.

Экспы на SD с промтами DiffusionDB/ChatGPT/COCO показывают рост по human eval. Основная проблема - нужно несколько доп. форвардов через диффузионку на каждый промт. Кода нет.
👍2
Residual Learning in Diffusion Models
CVPR’24

Известная проблема диффузионной генерации - отклонение траектории обратного процесса (семплирования) от прямого (обучение). Отклонение вызвано не идеальностью оценки скор функции (диффузионной модели) и накоплением ошибки дескритизации. Ранее феномен обсуждался в статьях по exposure bias, где было показано, что его уменьшение снижает артефактность генераций. В качестве методов снижения exposure bias использовали шумовые агументации во время обучения, адаптацию расписания семплирования, корректировку норм шума обратного процесса.

В этой работе авторы никак не используют термин exposure bias и не ссылаются на работы выше. Проблему они называют sampling gap и в качестве метода её решения предлагают учить correction function, цель которой - исправлять траекторию семплирования уже обученных моделей. Утверждается, что метод позволяет выучивать универсальную добавку, которую далее можно использовать для +- любой модели.

Метод нагляднее всего разбирать на приложенной диаграмме:
- Семплируем x_t так, чтобы t соответствовала точке в расписании семплера;
- Делаем k-1 шагов ODE семплера, где k - количество шагов для получения приближения x_0 (генерации). То есть заканчиваем, когда нам остался один шаг семплирования;
- Учим correction function предсказывать x_0;
- Во время семплирования, используем correction function только на последнем шаге семплирования.

На практике correction function представляет собой диффузионку, которую можно либо инициализировать исходной моделью и дообучать, либо учить с нуля. Во втором случае модель может быть в 4-64 раза меньше исходной.

Эксперименты с несколькими диффузионками (ADM, EDM) показывают стабильное понижение FID на широком диапазоне NFE с DMP++ солвером. Статье очень не хватает визуализаций с/без коррекции и, конечно, открытых весов/кода.
👍2
MJ-BENCH: Is Your Multimodal Reward Model Really a Good Judge for Text-to-Image Generation?
[страница проекта (код, бенч)]

Вот допустим обучили вы text-to-image модель и теперь радостно генерируете картинки. Как понять, что они хорошие? Нужна какая-то метрика. Например, можно использовать традиционные подходы вроде FID/IS/PR, можно доверить работу людям и организовать разметку по нужным критериям. Основной минус первого метода - плохая корреляция с результатами второго. Разметка же плоха дороговизной и требованиями к инфраструктуре.

Альтернативные варианты метрик - более легковесные CLIP-like модели (CLIP, BLIP-2, PickScore-v1, HPS-v2.1) и модные VLM типа LLaVA, GPT-4o, Claude 3. Только вот не понятно насколько они хорошо справляются. Нужна метрика на метрику! Для этого авторы собирают датасет триплетов:
1️⃣ Промт
2️⃣ Картинка
3️⃣ Предпочтение пользователя

При этом, все триплеты размечены по четырём критериям:
1️⃣ Text-image alignment: степень соответствия объектов, их атрибутов, взаимного расположения и числа текстовому описанию;
2️⃣ Safety: наличие токсичного (разного рода жесть) и NSFW (порно/эротика) контента на сгенеренной картинке;
3️⃣ Quality: техническое качество изображения (блюр, артефакты);
4️⃣ Generation bias: следование промту в случаях, когда явно указаны пол, возраст, раса, социальный статус.

Помимо подсчета accuracy, авторы предлагают еще два метода оценки качества с помощью своего бенчмарка:
GES (Gini-based Equality Score)
NDS (Normalized Dispersion Score)

Метрики (CLIP-like и VLM модели) оценивают в двух сценариях:
⓵ Ответы моделей сравнивают с пользовательской разметкой, почти везде побеждают проприетарные VLM (GPT-4o, Gemini Ultra)
⓶ Файнтюнят SDv1.5 на выбранных разными моделями парах в RLHF режиме, после чего оценивают генерации людьми. Здесь тоже, в основном, побеждают GPT модели, но и HPS-v2.1 показывает себя неплохо.

В статье есть более детальный анализ плюсов и минусов открытых/закрытых моделей, но, в среднем, закрытые побеждают.
🔥1🤡1
Inf-DiT: Upsampling Any-Resolution Image with Memory-Efficient Diffusion Transformer
[репо с кодом и весами]

Архитектурная статья с очередной попыткой завести трансформеры для задачи Super Resolution (SR). В этот раз, основная проблема отмеченная авторами - высокое потребление VRAM при генерации картинок в ультра-высоком (2к/4к) разрешении. Действительно, обычные U-Net-подобные свёрточные сети размерами в малые сотни миллионов параметров требуют >= 80Gb VRAM для 1к -> 4к апсемпла.

В статье предлагается вариант DiT, включающий в себя следующие модификации.

Unidirectional Block Attention (UniBA). Основной источник потребления памяти в современных SR моделях - self-attention, который “смотрит” на все патчи при генерации текущего патча. В слоях с высоким разрешением активаций это требует много VRAM, поэтому предлагаемое решение - смотреть не на все, а только на часть соседних патчей. Авторы предлагают хранить KV-кеш только для трех соседних (левый, верхний и левый-верхний) блоков активаций.

Если визуализировать процесс инференса (Fig. 3), то складывается впечатление, что модель последовательно, авторегрессионно генерит патчи, что и даёт название методу. На самом деле это не так. Архитектура позволяет генерить много патчей одновременно, но для каждого из них принцип тот же.

Адаптации DiT под задачу SR.
Помимо изменения self-attention, авторы:
- Конкатят к входным патчам сумму time-embedding и картиночного эмбеда CLIP. Использование последнего - уже стандартная практика для обеспечения глобальной консистентности генерации по патчам.
- Добавляют cross-attention на исходную low-rez картинку между траснформерными блоками.
- Адаптируют Rotary Positional Encoding (RoPE) под 2D (картиночную) генерацию.

Метод обучают с Real-ESRGAN аугментациями и проверяют на задачах 4х апсемплинга реальных картинок из DIV2k и 1к генераций SDXL. Для первых репортят FID/PSNR/SSIM, для вторых - результаты human eval.

Отдельно хочется отметить отсутствие в репозитории проекта issues про блочные артефакты. Неужели трансформеры наконец заняли достойное место в задаче SR?
👍2
Consistency-diversity-realism Pareto fronts of conditional image generative models

Аналитическая статья от Meta, в которой авторы рассматривают мультимодальные (image/text) модели в контексте баланса трёх критериев: реализм, консистентность, разнообразие. Внимания заслуживают сами критерии и метрики их оценки в купе с выводами об открытых моделях.

Критерии.
В этой работе консистентность - это соответствие промта и изображения. В случае генеративных моделей это буквально prompt following, который можно оценивать CLIP-like моделями, а можно Visual Question Answering (VQA) подходами. Авторы придерживаются второго сценария и определяют консистентность как долю правильных ответов, которые VQA модель может сделать по (сгенерированной) картинке.

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

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

В безусловном случае всё просто: разнообразие это Recall, а реализм - FID.

Выводы.
Основной результат работы - Парето кривые для всех пар обозначенных кривых (скрин). На них видно, что реализм и консистентность можно одновременно улучшать и для text-to-image моделей, лучший результат по ним у SDXL. Однако даётся это не бесплатно, а в ущерб разнообразию, чемпионами по которой являются ранние версии SD (v1.4, v1.5).

В целом, прогресс в text-to-image и image+text-to-image моделях в разных доменах, в основном, достигается за счет потери разнообразия. Это интересный результат, учитывая то насколько сильным аргументом в пользу диффузии всегда выступает именно разнообразия её генерации.

В статье также подтверждается несколько известных наблюдений о влиянии CFG, RAG и фильтраций на разнообразие.
👍2
PaGoDA: Progressive Growing of a One-Step Generator from a Low-Resolution Diffusion Teacher
[кода нет]

Основная проблема диффузионок - скорость и решается она, как правило, дистилляцией. Если конкретнее - дистилляцией по шагам, когда выучивается модель-студент, примерно достигающая качества учителя за меньшее число шагов семплирования.

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

И тут авторы вспоминают про Progressive Growing of GANs (PGG) 😬
Комбинируя это с дистилляцией, получают алгоритм:
1️⃣ Берем предобученную пиксельную диффузионку, работающую в низком базовом разрешении (допустим 64);
2️⃣ Берем набор реальных изображений в произвольном разрешении;
3️⃣ Даунсемплим картинки в одинаковое базовое разрешение;
4️⃣ Получаем из картинок шум с помощью inverse-DDIM, получаем пары картинка-шум;
5️⃣ Инициализиуем новую модель диффузионкой, называем её декодером;
6️⃣ Учим декодер генерировать картинки:
- Из шума полученного нашим inverse-DDIM, используя L2 loss;
- Из случайного шума используя adversarial loss;
7️⃣ После того как обучение сходится, увеличиваем разрешение в 2 раза, приделываем к нашему декодеру несколько слоёв (как в PGG) и повторяем пункты 1️⃣-6️⃣.

В статье есть глубокий теоретический анализ того почему это лучше чем учить какой-нибудь StyleGAN с нуля. Интуиция в том что процесс сильно стабилизируется за счет хорошей инициализации и того что отображение шум-картинка существует и известно из диффузии. Фреймворк о,общается на text-to-image, можно добавить CFG. Получают одношаговую соту на ImageNet на всех разрешениях от 64 до 512.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Fast Training of Diffusion Models with Masked Transformers
[Код, веса]

Современные диффузионные модели имеют SOTA качество в задаче text-to-image генерации. Главный минус - учить их долго и дорого. Например, SDv2.1 учили 200к ГПУ часов A100 (еще и получилось не очень 😂).

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

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

1️⃣ Image masking.
Во время обучения, изображения x зашумляют до некоторых x_t согласно расписанию прямого диффузионного процесса, после чего учатся их расшумлять. Для использования x_t в трансформерах их разрезают на квадратные патчи, которые подаются в модель.

Больше патчей - выше вычислительная сложность. Предлагается маскировать, то есть просто не использовать некоторую долю патчей r, предполагая, что диффузионки достаточно общие чтоб восстановить недостающую информацию. Авторы используют костантую r для всех t.

2️⃣ Asymmetric encoder-decoder backbone.
Авторы используют идею асимметричной архитектуры из MAE:
- В качестве энкодера оставляют почти ванильный DiT (за исключением projection layer в конце). Он работает только на не маскированных патчах.
- Берут маленький декодер из MAE, в котором обработанные эмбеды из энкодера смешиваются через cross-attention с некоторым выучиваемым вектором, замещающим маскированные патчи.

3️⃣ Training objective.
Обучать такую систему только с диффузионным лоссом оказывается сложно из-за нетривиальности предсказания скоров для маскированных патчей. Поэтому диффузионный лосс считают только для не маскированных токенов, а для маскированных - обычный L2.

4️⃣ Unmasking tuning.
В конце модель совсем не много (6% от общего вычислительного бюджета) тюнят без маскирования для максимизации качества.

Результаты.
Авторам удаётся побежать DiT в conditional/unconditional сетапе на вариациях ImageNet по FID используя 30-50% исходного компьюта.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6❤‍🔥11👍1
Stretching Each Dollar: Diffusion Training from Scratch on a Micro-Budget
[Код и модели обещают тут]

Продолжаем тему минимизации костов на обучение text-to-image диффузии. В предыдущей серии, подход MaskedDiT позволил срезать 30-50% компьюта по сравнению с обучением DiT в аналогичном (LDM) сетапе. В этот раз, авторы предлагают набор трюков, позволяющих обучить сравнительно большую (1.16В) модель до уровня ~SDv1.5 по FID (а по черипикам даже лучше) за ~500 ГПУ часов H100 🤔.

1️⃣ Training with Patch-mixing.
Маскирование 50% патчей в MaskDiT - это предел, после которого качество начинает проседать. Причина в том что каждый патч хранит информацию только о самом себе, соседние патчи исходно не знаю про контент друг друга. Patch-mixer - это доп модуль на входе MaskDiT, цель которого - фьюзить входные патчи. Иначе говоря, выходные эмбеды этого модуля должны содержать информацию друг о друге. Это позволяет довести маскирование до 70% и убрать MAE компоненту в лоссе. Модель состоит из всего нескольких слоев и обучается вместе с основной тушкой на обычный диффузионный денойзинг не маскированных патчей. В конце модель немного тюнят без маскирования.

2️⃣ MOE & Layer-wise scaling.
Mixture-of-Experts (MOE) давно используются в LLM и потихоньку проникают в t2i модели. LWS также недавно предложили для LLM. Авторы не стесняясь просто добавляют эти компоненты в свою модель.

3️⃣ Synthetic data in training.
Не является основным контрибьюшеном статьи, но является важной фичей на пути к micro budget training. Авторы показывают, что если 40% трейна состоит из генераций публичных моделей (SDXL, SD3), то качество в терминах FID и CLIP Score. Существенно увеличивается

Помимо прочего, модель учат в 2 стадии: на генерации 256х256 и далее 512х512, компоненты пайплайна аблейтят, SOTA с использованием довольно небольшого датасета (37M) среди выбранных бейзлайнов небольшого размера показывают.
Please open Telegram to view this post
VIEW IN TELEGRAM
2🔥1
On the Scalability of Diffusion-based Text-to-Image Generation
[Кода нет и не ожидается]

Уже давно популярный в области LLM жанр Scaling Laws статей добрался и до text-to-image. Кстати, 2 из 3 мини-разборов в первом посте на этом канале были посвящены именно этой теме!

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

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

1️⃣ Scaling Denoising Backbone.
Сейчас в LDM используется целый зоопарк архитектур:
- U-Net был исторически первым, но за последние годы претерпел существенные изменения. Сейчас это гибрид, сочетающий свёрточную основу и вставки трансформерных блоков.
- DiT и U-ViT - путь адаптации ViT и языковых трансформеров с всеми их фишками для генерации изображений
- MDT с patch-mixer и другие вариации популярны в последнее время из-за стабильных клеймов в сторону высокой эффективности обучения.

В этой работе авторы перебирают параметры U-Net при фиксированных данных/компьюте и обнаруживают, что:
- Архитектура денойзера в SDXL подобрана лучше чем в SD2 и DeepFloyd-IF (выше качество за тот же компьют)
- Если хочется отмасштабировать модель вверх, то выгоднее увеличивать число трансформерных блоков, а не ширину свёрточных слоев (число каналов)
- Большие модели лучше чем маленькие модели 🤪, масштабируйтесь

2️⃣ Scaling Training Data.
Все экспы по данным проводят на проприетарных 250М и 350М датасетах, полученных чисткой ~1B пар на NSFW и неэстетичный контент. Основной вывод довольно очевиден и уже несколько раз обсуждался - учиться на почищенных данных лучше чем на всём подряд.

3️⃣ More Scaling Properties.
По остаточному принципу выписаны остальные наблюдения:
- Важно дообучать модель до конца, то есть качество сильно зависит от влитого компьюта
- Большие модели более sample efficient, малые - более compute efficient
- На основании экспов по генерации/тюнингу в разных разрешениях утверждается, что основные навыки compositional generation модель учит в низких разрешениях, а значит можно пробовать проверять гипотезы о моделях в low-res сетапе обучения.

Важно отметить, что все выводы в статье сделаны основании ранжирования моделей по метрике. TIFA. Это, конечно, не FID, но и не общепринятая на сегодняшний день метрика.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥2
Erasing Concepts from Diffusion Models
[ICCV’23, проект, код]

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

Авторы предлагают использовать собственные знания модели о не нужных нам концептах. Для этого подготовим набор соответствующих промтов и зафайнтюним уже обученную модель. В статье упоминается подготовка коротких промтов длиной в 1-2 слова. Предположительно, делается это для того чтобы минимизировать забывание лишнего.

Метод
1️⃣ Берём предобученную модель, создаём и “замораживаем” её копию. Об этой копии можно думать как об учителе в терминах дистилляции
2️⃣ Предсказываем шум “замороженной” моделью используя и не используя промт, после чего считаем разницу между ними. По сути, нам интересно получить разницу условной и безусловной генерации модели. Эта разница - направление, в которое нам хотелось бы заставить двигаться дообучаемую модель
3️⃣ Дообучаем “размороженную” копию модели стандартным диффузионным train loop’ом:
- Семплируем время
- Семплируем шум для это времени
- Накладываем шум на исходную картинку
- Учимся предсказывать шум (тут модификация)
4️⃣ Модифицируем лосс. Вместо предсказания наложенного случайного нормального шума, будем предсказывать разницу из п.2

Частичное дообучение
На практике есть три основные опции: дообучать всю модель, self-attention и/или cross-attention. Авторы показывают, что дообучать только cross-attention оптимально с точки зрения производительности и визуального качества. А еще есть параметр, регулирующий силу забывания, его тоже нужно будет подобрать, он важен.

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

В следующем посте поговорим про развитие этого метода, который будет представлен на ECCV’24 уже на следующей неделе!
🔥5🤯1
R.A.C.E. Robust Adversarial Concept Erasure for Secure Text-to-Image Diffusion Model
[ECCV’24, код есть]

Prior work
Пусть у нас есть text-to-image модель, научившаяся генерировать нежелательные концепты и их сочетания. Erasing Concepts from Diffusion Models (ECDM) предлагает делать Machine Unlearning. Модель дообучают генерировать что угодно кроме проблемного концепта в случае, если на вход подаётся отвечающий за проблемный концепт промт. Например, если раньше по запросу “nudity” вы получали релевантную генерацию, то теперь конкретно для этого промта генерация станет не релевантной.

Ограничения prior work
Наверняка существуют синонимы или просто наборы токенов, дающие эмбеды близкие к эмбеду нежелательного концепта. Заранее предугадать все подобные варианты не возможно, а если у системы большая база пользователей, то они наверняка найдут лазейку. В общем, на практике нужна более высокая общность забывания концептов.

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

Метод
Для расширения области забывания концепта будем использовать механизм PGD адверсариал атаки. Для этого:
1️⃣ Выберем проблемный концепт и сформулируем для него короткий промт как в ECDM
2️⃣ Соберем картинок этого концепта, не обязательно соответствующих промту
3️⃣ Найдем минимальную по норме добавку шума к тестовому эмбедингу, такую что результатом генерации станет другая картинка проблемного концепта
4️⃣ Модифицируем ECDM лосс на adversarial training: теперь модель будет учиться генерировать не проблемную картинку даже если ей на вход подали промт с адверсариальным шумом

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

Выглядит как прогресс, но не решение всех проблем. Планирую найти постер авторов на конфе и понабрасывать лично :)
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3👍1👏1