Паттерн Декоратор — специальный способ организации модулей в программе, который позволяет подставить какую-то новую функцию прямо в середину цепочки вызовов, тем самым чуть-чуть подкорректировав поведение.
Например, в реальном мире очки для чтения это декоратор. Вы ставите их между вашими глазами и текстом. Глобально взаимодействие ваших глаз и текста не меняется: отражённые световые лучи от страницы книги попадают в ваши зрачки, что с очками, что без них. Но очки располагаются посередине: они принимают лучи на вход и преломляют их, передавая дальше вам в глаза уже изменёнными.
Важной особенностью является тот факт, что очки можно снять. Они не требуют ни модификации вашего тела, ни модификации книги. Вообще никакие условия не нужны, кроме наличия самих очков. А если вы в линзах, то внешний наблюдатель может даже этого не знать.
Класс-декоратор должен быть спроектирован так, чтобы не требовать никаких изменений в объектах, с которыми он работает. Его можно отключить, чаще всего буквально закомментировав одну строку.
В примере ниже программа выведет текст "Привет, мир, в натуре.", и вот это дополнение в конце как раз дописано декоратором. Можно убрать или закомментировать подчёркнутую строчку, не трогая остальной код, для всех внешних вызовов сигнатуры останутся теми же самыми, но выводиться будет уже просто "Привет, мир".
В декораторы можно прятать логику, которую буквально навешивают поверх основной функции программы. Например, проверку прав на выполнение операции. Перевод на другой язык, логирование, поддержку обратной совместимости при обновлении и так далее.
#dev
🌟 FlexTok: адаптивная 1D-токенизация изображений от Apple.
FlexTok - метод токенизации изображений, который преобразует 2D-изображения в упорядоченные 1D-последовательности переменной длины.
Его цель - сократить объем данных, необходимых для обучения генеративных моделей, и при этом оставить достаточную информацию для качественной реконструкции и генерации.
В отличие от традиционных подходов, где число токенов фиксировано и зависит только от размера изображения, FlexTok подстраивается под сложность контента: простейшая сцена может кодироваться несколькими токенами, а сложная - десятками и сотнями .
FlexTok, это по сути, пайплайн из 3 компонентов: ViT‑энкодер, квантование регистров и маскирование внимания:
ViT‑энкодер с набором «регистровых» токенов читает латентные представления VAE‑GAN и конденсирует их в 1D-последовательность до 256 регистров .
Затем, с помощью FSQ‑квантования, каждый регистр дискретизируется в код из заранее определенного словаря размером ~64 000.
На этом этапе применяется "nested dropout": во время обучения случайно обрезаются последние токены, чтобы модель научилась упорядочивать информацию от грубых форм к деталям.
Параллельно применяется авторегрессионная маска внимания: каждый токен в цепочке видит только те, что были до него, и не знает о тех, что идут после. Это заставляет модель генерировать изображения шаг за шагом, от первого токена к последнему, и упрощает ей задачу прогнозирования следующих элементов.
Декодер в FlexTok - это модель rectified flow, которая на вход берет укороченные токены и слегка зашумленные латенты VAE и учится предсказывать тот шум, который нужно убрать, чтобы вернуть исходное представление.
Чтобы обучение шло быстрее и давало более точные результаты, добавляют REPA‑Loss: он сравнивает промежуточные признаки с векторами из DINOv2‑L. Благодаря этому даже при очень жесткой компрессии (от 1 до 256 токенов), FlexTok успешно восстанавливает детали изображения.
FlexTok легко встраивается в текстово‑ориентированные модели и может улучшить соответствие изображения описанию, даже если число токенов меняется. К тому же его адаптивная токенизация применима не только к картинкам, но и к аудио или видео.
▶️Набор токенизаторов:
🟢Flextok_d12_d12_in1k - 12\12 слоев энкодер-декодер, датасет IN1K;
🟢Flextok_d18_d18_in1k - 18\18 слоев энкодер-декодер, датасет IN1K;
🟢Flextok_d18_d28_in1k - 18\28 слоев энкодер-декодер, датасет IN1K;
🟢Flextok_d18_d28_dfm - 18\28 слоев энкодер-декодер, датасет DFN.
▶️VAE:
🟠Flextok_vae_c4 - 4 каналов латента, коэффициент понижающей дискретизации 8;
🟠Flextok_vae_c8 - 8 каналов латента, коэффициент понижающей дискретизации 8;
🟠Flextok_vae_c16 - 16 каналов латента, коэффициент понижающей дискретизации 8.
🟡Страница проекта
🟡Набор на HF
🟡Arxiv
🟡Demo
🖥GitHub
@ai_machinelearning_big_data
#AI#ML#Tokenizer#Flextok#Apple
🌟Minimax VTP: гибридный токенизатор для диффузии на стероидах.
В диффузионных архитектурах считается, что масштабировать первую стадию, VAE - занятие неблагодарное.
Eго задача - превратить пиксели в латентный код и обратно, а добавление ему параметров или данных никак не помогает основной модели DiT генерировать изображения лучше.
MiniMax решила поменять правила игры и представила Visual Tokenizer Pre-training (VTP).
Их гипотеза заключается в том, что токенизатор должен не просто механически "зиповать" пиксели, а понимать семантику изображения.
Чтобы реализовать это, они объединили в обучении токенизатора сразу 3 лосса:
🟢Стандартный pixel reconstruction loss;
🟢Self-supervised learning (через Masked Image Modeling и дистилляцию, как в DINOv2);
🟢Image-text contrastive loss (как в CLIP).
Это заставило латентное пространство структурироваться семантически: теперь векторы кодировали смыслы, а не просто цветовые пятна.
🟡Теоретические выкладки подтвердились на практике.
Оказалось, что качество генерации напрямую зависит от "интеллекта" токенизатора. Не меняя архитектуру и гиперпараметры самого DiT и не увеличивая затраты на его обучение, просто за счет использования VTP-токенизатора удалось улучшить метрику FID на 65.8% и ускорить сходимость модели в 3 раза.
🟡Но главное открытие - это то, что заработал закон масштабирования для Stage 1.
Теперь, чем больше вычислительной мощности и данных вливается в претрейн токенизатора, тем качественнее становится итоговая генерация, чего раньше с обычными VAE достичь было невозможно.
🟡В открытом доступе опубликованы 3 чекпоинта VTP с различием по количеству параметров:
🟠VTP-Large - 0.7B;
🟠VTP-Base - 0.3B;
🟠VTP-Small - 0.2B.
📌Лицензирование: MIT License.
🟡Набор моделей
🟡Arxiv
🖥GitHub
@ai_machinelearning_big_data
#AI#ML#Diffusion#Tokenizer#Minimax