Forwarded from epsilon correct
У High-Dimensional Probability Вершинина стал доступен драфт второго издания. Добавили больше 200 упражнений и сделали книгу более удобоваримой. 🥁
Как по мне, лучшая книга по основам вероятностных методов в приложениях к нашему с вами любимому датасаенсу.
pdf
Как по мне, лучшая книга по основам вероятностных методов в приложениях к нашему с вами любимому датасаенсу.
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from CV Time
Yandex Alchemist: открытый датасет для буста text-to-image генерации
Раньше T2I-модели обучали в один этап — претрейн на большом, довольно грязном датасете интернет-данных. В 2023 году Meta в техрепорте EMU предложили делать файнтюн на маленьком датасете исключительного качества и за счёт этого существенно бустить результат генерации. Правда, они ничего не сказали о том, как такой датасет собрать.
Команда YandexART тоже занималась этой задачей, и сегодня мы делимся результатами своей работы — датасетом Alchemist. Он состоит из 3 350 пар «картинка-текст» и имеет лицензию Apache 2.0, пользуйтесь.
Alchemist сокращает дистанцию между крутыми потюненными закрытыми моделями и открытыми, для которых такой тюнинг недоступен. Ранее сообществу был доступен только пофильтрованный на эстетичность кусочек LAION и файнтюн-датасеты под узкий домен, например аниме или живопись. LAION часто не давал существенного прироста качества, а файнтюны под узкий домен ограничивали возможности генерации за его пределами.
Ниже мы подробно рассказываем, как получить датасет уровня Alchemist, имея лишь сырой набор интернет-данных. Отметим, что весь пайплайн — про картинки. Мы считаем, что так правильно: тексты потом лучше сгенерировать синтетические.
Итак, стартуя с датасета на 10 млрд примеров, мы выбрали картинки высокого разрешения без NSFW-контента и удалили те, что содержали вотермарки, имели низкое качество и были неэстетичны. Когда осталось примерно 300 млн изображений, дальнейшее выкручивание порогов фильтрации не помогало: модели недостаточно чувствительны, чтобы отделять хорошие картинки от великолепных. Выбирать руками лучшее из такого большого набора — тоже сомнительная затея.
На этом этапе мы предположили, что предобученная диффузионка может сама знать, какие картинки хорошие, а какие — не очень. Пробовали подходы из области dataset pruning, например, пропускать картинки через модель и смотреть на значение лосса. Оказалось, что так отбираются только самые простые изображения — абстрактные иллюстрации, вроде обоев на рабочий стол. В них немного деталей и их легко моделировать, но на файнтюне от них мало толку.
В итоге нам пришлось придумать свой метод, суть которого в следующем.
1. Возьмём 1000 картинок из наших 300 млн и разметим на условно плохие (LQ) и хорошие (HQ). Хорошими будем считать те, у которых высокие эстетичность и техническое качество, умеренная наполненность контентом.
2. Смастерим общий промт, который будет содержать перечисление желаемых характеристик: “aesthetic”, “high quality” и т. д.
3. Дальше будем брать LQ- и HQ-картинки, зашумлять их до какого-то t, подавать в нашу предобученую диффузионку вместе с промтом и смотреть, что происходит со значениями в cross-attention.
Оказывается, что на основе нашей небольшой и грубой разметки можно выделить комбинации активаций в cross-attn и токенов, которые будут хорошо отделять изображения с нужными нам свойствами. Если просуммировать эти значения, получим скаляр, который и будет нашим скором качества изображения. Проскорив таким образом 300 млн картинок, мы выбрали топ-3350 — это картинки из нашего датасета.
Дальше осталось сделать тексты — исходные из интернета могут быть ошибочны, содержать лишнюю или упускать нужную информацию. Наше наблюдение: лучше всего работают умеренно подробные промты, похожие на те, которые пишет скорее увлечённый пользователь, чем профессиональный промпт-инженер. YandexVLM как раз умеет подстраиваться под нужный формат. С её помощью мы сгенерировали тексты для каждой картинки, получив датасет Alchemist.
Чтобы убедиться в обобщаемости датасета и метода, мы сделали и выложили файнтюны SD 1.5, SD 2.1, SDXL-base 1.0, SD 3.5 Medium и Large. У всех файнтюнов растёт эстетичность и наполненность генераций, которую мы называем “image complexity”. Подробнее о методике и экспериментах читайте в препринте.
Статью подготовили❣ Валерий Старцев, Александр Устюжанин, Алексей Кириллов, Дмитрий Баранчук, Сергей Кастрюлин
CV Time
___
Meta признана экстремистской организацией, а Facebook и Instagram запрещены на территории РФ
Раньше T2I-модели обучали в один этап — претрейн на большом, довольно грязном датасете интернет-данных. В 2023 году Meta в техрепорте EMU предложили делать файнтюн на маленьком датасете исключительного качества и за счёт этого существенно бустить результат генерации. Правда, они ничего не сказали о том, как такой датасет собрать.
Команда YandexART тоже занималась этой задачей, и сегодня мы делимся результатами своей работы — датасетом Alchemist. Он состоит из 3 350 пар «картинка-текст» и имеет лицензию Apache 2.0, пользуйтесь.
Alchemist сокращает дистанцию между крутыми потюненными закрытыми моделями и открытыми, для которых такой тюнинг недоступен. Ранее сообществу был доступен только пофильтрованный на эстетичность кусочек LAION и файнтюн-датасеты под узкий домен, например аниме или живопись. LAION часто не давал существенного прироста качества, а файнтюны под узкий домен ограничивали возможности генерации за его пределами.
Ниже мы подробно рассказываем, как получить датасет уровня Alchemist, имея лишь сырой набор интернет-данных. Отметим, что весь пайплайн — про картинки. Мы считаем, что так правильно: тексты потом лучше сгенерировать синтетические.
Итак, стартуя с датасета на 10 млрд примеров, мы выбрали картинки высокого разрешения без NSFW-контента и удалили те, что содержали вотермарки, имели низкое качество и были неэстетичны. Когда осталось примерно 300 млн изображений, дальнейшее выкручивание порогов фильтрации не помогало: модели недостаточно чувствительны, чтобы отделять хорошие картинки от великолепных. Выбирать руками лучшее из такого большого набора — тоже сомнительная затея.
На этом этапе мы предположили, что предобученная диффузионка может сама знать, какие картинки хорошие, а какие — не очень. Пробовали подходы из области dataset pruning, например, пропускать картинки через модель и смотреть на значение лосса. Оказалось, что так отбираются только самые простые изображения — абстрактные иллюстрации, вроде обоев на рабочий стол. В них немного деталей и их легко моделировать, но на файнтюне от них мало толку.
В итоге нам пришлось придумать свой метод, суть которого в следующем.
1. Возьмём 1000 картинок из наших 300 млн и разметим на условно плохие (LQ) и хорошие (HQ). Хорошими будем считать те, у которых высокие эстетичность и техническое качество, умеренная наполненность контентом.
2. Смастерим общий промт, который будет содержать перечисление желаемых характеристик: “aesthetic”, “high quality” и т. д.
3. Дальше будем брать LQ- и HQ-картинки, зашумлять их до какого-то t, подавать в нашу предобученую диффузионку вместе с промтом и смотреть, что происходит со значениями в cross-attention.
Оказывается, что на основе нашей небольшой и грубой разметки можно выделить комбинации активаций в cross-attn и токенов, которые будут хорошо отделять изображения с нужными нам свойствами. Если просуммировать эти значения, получим скаляр, который и будет нашим скором качества изображения. Проскорив таким образом 300 млн картинок, мы выбрали топ-3350 — это картинки из нашего датасета.
Дальше осталось сделать тексты — исходные из интернета могут быть ошибочны, содержать лишнюю или упускать нужную информацию. Наше наблюдение: лучше всего работают умеренно подробные промты, похожие на те, которые пишет скорее увлечённый пользователь, чем профессиональный промпт-инженер. YandexVLM как раз умеет подстраиваться под нужный формат. С её помощью мы сгенерировали тексты для каждой картинки, получив датасет Alchemist.
Чтобы убедиться в обобщаемости датасета и метода, мы сделали и выложили файнтюны SD 1.5, SD 2.1, SDXL-base 1.0, SD 3.5 Medium и Large. У всех файнтюнов растёт эстетичность и наполненность генераций, которую мы называем “image complexity”. Подробнее о методике и экспериментах читайте в препринте.
Статью подготовили
CV Time
___
Meta признана экстремистской организацией, а Facebook и Instagram запрещены на территории РФ
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Concise Research (Sergey Kastryulin)
A Comprehensive Study of Decoder-Only LLMs for Text-to-Image Generation
В области text-to-image генерации давно стоит вопрос: какой текстовый энкодер использовать лучше? Сейчас каждый делает на свой лад: кто-то по инерции использует CLIP и T5 (как в DALL-E и Imagen), кто-то переходит на LLM decoder-only трансформеры (Lumina, SANA) без особой экспериментальной аргументации
В этой работе авторы:
▶️ Берут 12 текстовых энкодеров, включая CLIP, T5, Mistral разных размеров + instruct версию, Gemma и Qwen, а также эмбедеры на их основе
▶️ Учат 27 SDv2-like диффузионок к U-Net архитектурой на семпле 46М из LAION-Aesthetics
▶️ Замеряют результаты на GenAI-Bench — это такой набор 1,600 очень подробных промтов, после генераций по которым VLM оценивает навыки генератора
Для контекста важно вспомнить, что для использования CLIP и T5 обычно берут эмбединг их последнего слоя. Ранние работы по использованию LMок для диффузии делали также
Итак, что удалось выяснить:
▶️ У LLMок эмбед последнего слоя плохой из-за оверфита под задачу предсказания последнего токена. Эмбеды средних слоёв существенно информативнее и дают лучшее качество обученной с их использованием диффузии
▶️ Если комбинировать несколько средних слоёв, то это ещё сильнее бустит качество и позволяет обгонять T5 и CLIP
▶️ Выходы моделей-эмбедеров бывают разного качества: bge-Gemma2 — крутая, остальные рассмотренные — не очень. По умолчанию лучше использовать обычные LMки
▶️ Для моделей-эмбедеров тоже можно комбинировать несколько средних слоёв, это тоже улучшает качество
▶️ Модели большего размера (7B или 9B против 1.5B или 2B) работают лучше, но буст не драматический
А еще авторы говорят, что было бы классно комбинировать представления эмбедеров и обычных LM’ок для дальнейшего улучшения качества, но оставляют верификацию этого на future work
В статье очень мало картинок, но те что есть показывают, что модели на основе правильно использованных представлений LMок лучше справляются с учётом мелких деталей промтов и отрицаниями
В области text-to-image генерации давно стоит вопрос: какой текстовый энкодер использовать лучше? Сейчас каждый делает на свой лад: кто-то по инерции использует CLIP и T5 (как в DALL-E и Imagen), кто-то переходит на LLM decoder-only трансформеры (Lumina, SANA) без особой экспериментальной аргументации
В этой работе авторы:
Для контекста важно вспомнить, что для использования CLIP и T5 обычно берут эмбединг их последнего слоя. Ранние работы по использованию LMок для диффузии делали также
Итак, что удалось выяснить:
А еще авторы говорят, что было бы классно комбинировать представления эмбедеров и обычных LM’ок для дальнейшего улучшения качества, но оставляют верификацию этого на future work
В статье очень мало картинок, но те что есть показывают, что модели на основе правильно использованных представлений LMок лучше справляются с учётом мелких деталей промтов и отрицаниями
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Соне нравится (или нет)
Как человек, увлечённый развитием Fashion Tech и применением компьютерного зрения в индустрии моды, я внимательно слежу за новыми направлениями и подходами. Всем уже привычна задача Virtual Try-On (VTON), когда нейросети (диффузионные модели в данный момент) виртуально примеряют одежду на изображениях людей. Однако сейчас набирает популярность противоположное направление — Virtual Try-Off (VTOFF), задача извлечения одежды с моделей и получения её канонического изображения. Это не просто новая фишка, а перспективная задача с серьёзными техническими вызовами: в отличие от традиционного VTON, где модель цифровым образом «одевается», VTOFF стремится выделить и «снять» одежду, сохранив при этом её точную форму, текстуру и даже сложные паттерны ткани.
Кстати, на идущей прямо сейчас конференции CVPR-2025 были приняты пейперы, посвящённые именно Virtual Try-Off.
Зачем индустрии моды такой подход?
1. Создание идеального каталога — возможность быстро получить идеализированное изображение одежды, свободное от складок, позы и особенностей модели.
2. Точная визуализация и кастомизация — одежда, полученная через VTOFF, может быть легко переиспользована и виртуально адаптирована к новым условиям (поза, модель, фон).
3. Повышение эффективности производства контента — сокращение затрат на новые фотосессии и обработку изображений.
Вот пара интересных подхода к задаче Virtual Try-Off, которые стоит изучить уже сейчас:
TryOffDiff: Virtual Try-Off via High-Fidelity Garment Reconstruction using Diffusion Models
Основная цель: получить оригинальное изображение одежды (без тела, позы и искажений) из одной фотографии одетого человека.
Ключевые идеи:
TryOffAnyone: Tiled Cloth Generation from a Dressed Person
Основная цель: восстановить канонический вид одежды с фото одетого человека, представив её в виде тайлов (фрагментов), пригодных для переиспользования и редактирования.
Ключевые идеи:
Оба подхода — TryOffDiff и TryOffAnyone — подчёркивают, что Virtual Try-Off нельзя рассматривать как простое дополнение к VTON. Это отдельный класс задач, требующий других архитектурных решений, способных восстанавливать геометрию, структуру и текстильные особенности одежды в отрыве от тела, позы и сцены.
@sonya_aesthetics
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Пресидский залив
Технический фаундер — это человек, который может построить почти все.
И именно поэтому он часто строит не то😆
Часто по привычке такие фаундеры начинают строить не для людей, а что-то технологически красивое и интересное себе,
такое, про что условно можно написать пейпер на EMNLP👩🦰
Не специально, конечно. Но как результат получается не продукт вокруг боли, а витрина вокруг технологии, потому что это еще один инженерный челендж. Интеллектуально кайфовый, но не всегда нужный😁
Первая версия Aesty была жесть какая непонятная: куча параметров, кнопок, сценариев. Движок рекомендаций был классно проработан, примерки еще не было, но пользователи тем временем просто отваливались👋
Я называю это галлюцинациями технического фаундера —
влюбиться в свое технологическое решение раньше, чем по-настоящему понять проблему😍
Вот вам 4 примера:
1. Технология = value😐
Кажется, что если ты сделал что-то сложное, умное, кастомное в этом уже заложена ценность.
Но нет. Пользователя не так уж интересует, насколько изящна твоя архитектура и какие бенчмарки бьет твоя фэнси модель, куда интереснее, помогает ли это его проблемам?😐
Прежде чем приступать к реализации, я просто выкладываю мокап и смотрю, зацепит ли это вообще кого-нибудь. Примерка вот зацепила и мы ее добавили😏
2. Умная фича говорит сама за себя
Она не скажет, а затеряется и интерфейсе😳
Спаун внимания короткий, мануал читать никто не будет.
Если это не интуитивно — это не работает.
Я стараюсь не строить фичи до тех пор, пока четко не понимаю кто ее просил, как встроится в текущий флоу и какую боль она решает😎
3. Если юзер не понимает — это он глупый😐
Нет, это я нафантазировала⌨️
Если не кликают, значит, не нужно или мы нарисовали какую-то фигню
Я считаю, что любой интерфейс по умолчанию сломан, пока не доказано обратное🤡
4. Сейчас допилим вот это — и будет ценно
Качество, а не количество, польза должна быть очень бинарной и желательно в одну кнопку
Валидация перед реализацией🧠
Я стараюсь держать в голове одну простую мысль:
fall in love with the problem, not the solution😎
Го делиться в комментариях что забыла 🤗
@neural_prosecco
И именно поэтому он часто строит не то
Часто по привычке такие фаундеры начинают строить не для людей, а что-то технологически красивое и интересное себе,
такое, про что условно можно написать пейпер на EMNLP
Не специально, конечно. Но как результат получается не продукт вокруг боли, а витрина вокруг технологии, потому что это еще один инженерный челендж. Интеллектуально кайфовый, но не всегда нужный
Первая версия Aesty была жесть какая непонятная: куча параметров, кнопок, сценариев. Движок рекомендаций был классно проработан, примерки еще не было, но пользователи тем временем просто отваливались
Я называю это галлюцинациями технического фаундера —
влюбиться в свое технологическое решение раньше, чем по-настоящему понять проблему
Вот вам 4 примера:
1. Технология = value
Кажется, что если ты сделал что-то сложное, умное, кастомное в этом уже заложена ценность.
Но нет. Пользователя не так уж интересует, насколько изящна твоя архитектура и какие бенчмарки бьет твоя фэнси модель, куда интереснее, помогает ли это его проблемам?
Прежде чем приступать к реализации, я просто выкладываю мокап и смотрю, зацепит ли это вообще кого-нибудь. Примерка вот зацепила и мы ее добавили
2. Умная фича говорит сама за себя
Она не скажет, а затеряется и интерфейсе
Спаун внимания короткий, мануал читать никто не будет.
Если это не интуитивно — это не работает.
Я стараюсь не строить фичи до тех пор, пока четко не понимаю кто ее просил, как встроится в текущий флоу и какую боль она решает
3. Если юзер не понимает — это он глупый
Нет, это я нафантазировала
Если не кликают, значит, не нужно или мы нарисовали какую-то фигню
Я считаю, что любой интерфейс по умолчанию сломан, пока не доказано обратное
4. Сейчас допилим вот это — и будет ценно
Качество, а не количество, польза должна быть очень бинарной и желательно в одну кнопку
Валидация перед реализацией
Я стараюсь держать в голове одну простую мысль:
fall in love with the problem, not the solution
Го делиться в комментариях что забыла 🤗
@neural_prosecco
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from КПД
На канале GPU Mode неделю назад появилось видео от Songlin Yang (гуру линейных вниманиев), где она в течение часа дает содержательный и интересный обзор области.
Кроме того, в феврале она выступала у Sasha Rush (известный персонаж на 🤗) с похожим материалом.
Рекомендую к просмотру!
[Либа с реализациями разных субквадратичных альтернатив вниманию]
Кроме того, в феврале она выступала у Sasha Rush (известный персонаж на 🤗) с похожим материалом.
Рекомендую к просмотру!
[Либа с реализациями разных субквадратичных альтернатив вниманию]
Forwarded from Concise Research (Sergey Kastryulin)
Короткие разборы
Когда я только задумывал канал, в голове представлялся формат — ёмкие разборы длиной в абзац, описывающие только суть. Меня самого привлекает максимальная плотность информации, потому что читаю много и расписывать всё нет времени. Во время ICLR’25 (серия постов) вам такое заходило. Давайте пробовать еще раз (но уже без фотографий постеров😫 )
1. Ambient Diffusion Omni:
Training Good Models with Bad Data
Замечают, что при высоких уровнях шума, картинки разного технического качества выглядят одинаково. Это наблюдение помогает улучшить качество диффузионного претрена. Для этого IQA классификатором оценивают качество картинок прямо во время обучения. Если картинка хорошая - семплим как обычно шум равномерно на отрезке [0, 1]. Если картинка плохая - только на некотором отрезке [t_min, 1], где t_min - параметр, подбираемый экспериментально (на глазок или учим классификатор)
2. Angle Domain Guidance: Latent Diffusion Requires Rotation Rather Than
Extrapolation
Очень похожа на Adaptive Projected Guidance (APG), где гайденс раскладывали на линейную комбинацию скор функций и выкидывали компоненту параллельную conditional генерации, оставляя только ортогональную. Авторы говорят, что предположение линейности может плохо работать при высоких значениях guidance scale и может в целом ограничивать качество. Вместо стандартной CFG добавки, увеличивающей нормы, предлагается вращать и далее комбинировать матрицы cond и uncond генераций
3. Decouple-Then-Merge: Finetune Diffusion Models as Multi-Task Learning
Во время обучения диффузии, градиенты модели на разных t отличаются. Предполагается, что это может мешать оптимизации. Предлагается делать следующую процедуру SFT:
- Берем претрен
- Берем наш диапазон t in [0, 1] и разбираем на N не пересекающихся отрезков
- Учим N файнтюнов, каждый на своем отрезке t
- Используем несколько техник (Consistency, Probabilistic sampling, Channel-wise projection) чтобы каждый файнтюн совсем уж не забыл про другие t
- После обучения мерджим веса файнтюнов
4. Advancing Compositional Awareness in CLIP with Efficient Fine-Tuning
Год назад был предложен SUGARCREPE++ Dataset, на котором в том числе показали, что CLIP-like модели плохо понимают отношения между объектами в промте. В этой работе предлагается:
- Собирать синтетический датасета негативных примеров из уже существующего путём комбинации кусочков промтов
- Учить CLIP с доп компонентами в лоссе про то чтобы форсить акцент на эти негативные примеры
Когда я только задумывал канал, в голове представлялся формат — ёмкие разборы длиной в абзац, описывающие только суть. Меня самого привлекает максимальная плотность информации, потому что читаю много и расписывать всё нет времени. Во время ICLR’25 (серия постов) вам такое заходило. Давайте пробовать еще раз (но уже без фотографий постеров
1. Ambient Diffusion Omni:
Training Good Models with Bad Data
Замечают, что при высоких уровнях шума, картинки разного технического качества выглядят одинаково. Это наблюдение помогает улучшить качество диффузионного претрена. Для этого IQA классификатором оценивают качество картинок прямо во время обучения. Если картинка хорошая - семплим как обычно шум равномерно на отрезке [0, 1]. Если картинка плохая - только на некотором отрезке [t_min, 1], где t_min - параметр, подбираемый экспериментально (на глазок или учим классификатор)
2. Angle Domain Guidance: Latent Diffusion Requires Rotation Rather Than
Extrapolation
Очень похожа на Adaptive Projected Guidance (APG), где гайденс раскладывали на линейную комбинацию скор функций и выкидывали компоненту параллельную conditional генерации, оставляя только ортогональную. Авторы говорят, что предположение линейности может плохо работать при высоких значениях guidance scale и может в целом ограничивать качество. Вместо стандартной CFG добавки, увеличивающей нормы, предлагается вращать и далее комбинировать матрицы cond и uncond генераций
3. Decouple-Then-Merge: Finetune Diffusion Models as Multi-Task Learning
Во время обучения диффузии, градиенты модели на разных t отличаются. Предполагается, что это может мешать оптимизации. Предлагается делать следующую процедуру SFT:
- Берем претрен
- Берем наш диапазон t in [0, 1] и разбираем на N не пересекающихся отрезков
- Учим N файнтюнов, каждый на своем отрезке t
- Используем несколько техник (Consistency, Probabilistic sampling, Channel-wise projection) чтобы каждый файнтюн совсем уж не забыл про другие t
- После обучения мерджим веса файнтюнов
4. Advancing Compositional Awareness in CLIP with Efficient Fine-Tuning
Год назад был предложен SUGARCREPE++ Dataset, на котором в том числе показали, что CLIP-like модели плохо понимают отношения между объектами в промте. В этой работе предлагается:
- Собирать синтетический датасета негативных примеров из уже существующего путём комбинации кусочков промтов
- Учить CLIP с доп компонентами в лоссе про то чтобы форсить акцент на эти негативные примеры
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from EasyData
Привет, друзья!
Во многих задачах - от классификации и кластеризации до поиска похожих объектов и генерации рекомендаций - важно уметь эффективно находить ближайшие векторы в высокоразмерном пространстве. Но как только число векторов превышает несколько тысяч, простые методы из sklearn и numpy начинают работать непозволительно медленно🐌 При масштабах же в миллионы объектов стоит задуматься уже не только про быстроту, но и про оптимизацию, балансируя между точностью, скоростью и потреблением памяти.
В таких случаях приходят на помощь библиотеки для быстрого KNN в высокоразмерных пространствах. Самая известная, пожалуй, Faiss от Facebook AI Research. Вот её главные преимущества:
🔠 Подкапотная реализация на C++ с SIMD-оптимизациями и продуманным управлением памятью в Python-обёртке. А ещё это значит, что Faiss не блокируется GIL'ом и отлично масштабируется по потокам: можно параллелить поиск через joblib.Parallel или ThreadPoolExecutor.
🔠 Поддержка GPU, что также даёт прирост скорости в десятки раз.
🔠 Гибкость индексов: от точного поиска (Flat) до приближённых структур с квантованием и кластеризацией.
Рассмотрим основные типы индексов:
🔠
🔠
При поиске сначала выбираются N ближайших кластеров, а затем производится поиск заданной глубины K внутри них.
На моей практике, даже с учётом времени на обучение индекса, IVF ускорил процесс поиска в ~8 раз по сравнению с Flat+Parallel, при этом точность результата по метрикам проявилась только в 5-м знаке после запятой(ещё и в бОльшую сторону! 😎 )
Но есть уже озвученное "НО" - такой индекс требует предварительного обучения, и на это нужно время. Поэтому имеет смысл его использовать, если запросы каждый раз делаются из одинакового и фиксированного пространства.
Если захотите воспользоваться IVF, то упомянутые N и K лучше брать как
🔠
🔠
Такие индексы не требуют предварительного обучения и хорошо подходят для динамических баз, где данные часто добавляются на лету. Отличаются высокой точностью даже при небольшой глубине поиска, но потребляют больше памяти и не поддерживаются на GPU.
Полезные ссылки:
🔠 Официальный репозиторий Faiss.
Там же ссылка на quick start и базу jupyter-ноутбуков с примерами кода на Python
🔠 Ещё пара хороших туториалов с примерами кода тут и тут
⚠️Если решите установить версию с поддержкой GPU, лучше использовать эту
Лёгкой и солнечной недели!☀️
#mlops@data_easy
Во многих задачах - от классификации и кластеризации до поиска похожих объектов и генерации рекомендаций - важно уметь эффективно находить ближайшие векторы в высокоразмерном пространстве. Но как только число векторов превышает несколько тысяч, простые методы из sklearn и numpy начинают работать непозволительно медленно
В таких случаях приходят на помощь библиотеки для быстрого KNN в высокоразмерных пространствах. Самая известная, пожалуй, Faiss от Facebook AI Research. Вот её главные преимущества:
Рассмотрим основные типы индексов:
IndexFlat - базовая реализация, которая хранит все векторы в RAM и выполняет точный линейный поиск. Работает быстро на малых объемах (<100K векторов), также идеален для отладки или в случаях, если поиск каждый раз нужно осуществлять в разных ограниченных подпространствах векторов (тогда просто запускаете с тем же Parallel:)).IndexIVF (Inverted File Index) - предварительно перед поиском он кластеризует всё пространство векторов (например, с помощью k-means). При поиске сначала выбираются N ближайших кластеров, а затем производится поиск заданной глубины K внутри них.
На моей практике, даже с учётом времени на обучение индекса, IVF ускорил процесс поиска в ~8 раз по сравнению с Flat+Parallel, при этом точность результата по метрикам проявилась только в 5-м знаке после запятой
Но есть уже озвученное "НО" - такой индекс требует предварительного обучения, и на это нужно время. Поэтому имеет смысл его использовать, если запросы каждый раз делаются из одинакового и фиксированного пространства.
Если захотите воспользоваться IVF, то упомянутые N и K лучше брать как
√d и 2–4*(размер топа, который вы ищете) соответственно, где d - количество векторов в базе для поиска.IndexIVFPQ (Product Quantization) добавляет к IVF еще одно ускорение - сжимает векторы до компактного кода (например, 8 байт вместо 128 float32). Работает ещё быстрее и экономит память при минимуме потерь в точности. Имеет смысл посмотреть в сторону этого подхода, если у вас порядка миллиарда векторов.HNSW-семейство индексов (Hierarchical Navigable Small World) - индексы на основе графов малого мира, где каждый вектор представляется как вершина, связанная с соседями в многослойной структуре. Поиск происходит за счёт навигации по графу: сначала на грубом уровне, затем всё точнее.Такие индексы не требуют предварительного обучения и хорошо подходят для динамических баз, где данные часто добавляются на лету. Отличаются высокой точностью даже при небольшой глубине поиска, но потребляют больше памяти и не поддерживаются на GPU.
Полезные ссылки:
Там же ссылка на quick start и базу jupyter-ноутбуков с примерами кода на Python
⚠️Если решите установить версию с поддержкой GPU, лучше использовать эту
Лёгкой и солнечной недели!
#mlops@data_easy
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - facebookresearch/faiss: A library for efficient similarity search and clustering of dense vectors.
A library for efficient similarity search and clustering of dense vectors. - facebookresearch/faiss
Forwarded from Data Blog
Интерпретация CLIP, papers with code (свежие).
Привет, друзья! В последнее время ударилась в анализ методов интерпретации для мультимодальных моделей.Из интересного — собрала методы и идеи для анализа CLIP.
▪️ Пре-теория:
CLIP — модель, обученная сопоставлять изображение и текст в общем пространстве.
Spurious features — признаки, которые коррелируют с меткой в данных, но не связаны причинно (например, фон).
Zero-shot классификация — предсказание без обучающих примеров для класса, только по текстовому описанию.
Second-order effect — влияние элемента модели не напрямую, а через цепочку последующих преобразований.
Mutual knowledge — общий понятийный слой между текстом и изображением, на котором модель принимает решение.
▪️Как обычно интерпретируют CLIP?
Чаще всего исследуют, на какие текстовые концепты "смотрит" изображение, используя:
— Similarity scores между image и text embeddings,
— Grad-CAM/attention heatmaps,
— Prompt engineering
В отличие от обычных подходов, статьи ниже предлагают иную парадигму — либо через анализ внутренних представлений модели (нейроны, attention-heads), либо через поведенческий анализ взаимодействия между модальностями (текстом и изображением).
▪️ Статьи:
1. CLIP Under the Microscope: A Fine-Grained Analysis of Multi-Object Representation [repo]
Как размер объекта и порядок слов в промпте влияют на поведение CLIP? Пример анализа поведения модели в зависимости от промпта.
Авторы анализируют задачу поиска изображения и классификации и показывают, что:
— порядок слов влияет на приоритет внимания;
— мелкие объекты игнорируются, если не упомянуты явно;
— модель чаще "видит" первый объект в тексте, особенно если он крупный на изображении.
2. “Interpreting the Second-Order Effects of Neurons in CLIP” [repo]
Здесь исследуются отдельные нейроны, чтобы понять, какие семантические концепты они кодируют. Основной инструмент — second-order effects: вклад нейрона в выход модели через последующие attention-слои.
Авторы:
— выделяют нейроны, кодирующие семантические концепты (напр. “рыжая собака”);
— автоматически подбирают текстовые описания нейронов;
— применяют это для генерации adversarial-примеров и улучшения zero-shot сегментации
3. INTERPRETING CLIP’S IMAGE REPRESENTATION VIA TEXT-BASED DECOMPOSITION [repo]
В этой работе CLIP-ViT разбирается по слоям и attention-head’ам. Авторы:
— выявляют специализированные головы: по цвету, числу, форме, геолокации и пр.;
— применяют результат применяется для удаления spurious признаков (признаков, которые коррелируют с метками классов в обучающей выборке, но не являются причинно значимыми для правильного вывода. Пример окружение «вода» для уток).
— пименяют результат для повышения устойчивости модели (и решения задачи сегментации)
Кстати пример поиска стиральных признаков вот, но мне не удалось найти описания к нему.
4. "Interpreting and Analysing CLIP’s Zero-Shot Image Classification via Mutual Knowledge" [repo]
Авторы объясняют zero-shot классификацию CLIP через взаимное знание (mutual knowledge) между визуальным и текстовым энкодерами:
— извлекают визуальные концепты (через PCA/K-means) и сопоставляют им тексты;
— оценивают вклад каждого концепта в предсказание;
— показывают, как сила взаимной информации коррелирует с уверенностью и качеством вывода.
▪️ Что есть ещё:
Интерпретация CLIP через градиетный подъём.
Как использовать всё ниже:
Для вдохновения, общего знания и того самого списка на "пригодится" :)
Привет, друзья! В последнее время ударилась в анализ методов интерпретации для мультимодальных моделей.Из интересного — собрала методы и идеи для анализа CLIP.
▪️ Пре-теория:
CLIP — модель, обученная сопоставлять изображение и текст в общем пространстве.
Spurious features — признаки, которые коррелируют с меткой в данных, но не связаны причинно (например, фон).
Zero-shot классификация — предсказание без обучающих примеров для класса, только по текстовому описанию.
Second-order effect — влияние элемента модели не напрямую, а через цепочку последующих преобразований.
Mutual knowledge — общий понятийный слой между текстом и изображением, на котором модель принимает решение.
▪️Как обычно интерпретируют CLIP?
Чаще всего исследуют, на какие текстовые концепты "смотрит" изображение, используя:
— Similarity scores между image и text embeddings,
— Grad-CAM/attention heatmaps,
— Prompt engineering
В отличие от обычных подходов, статьи ниже предлагают иную парадигму — либо через анализ внутренних представлений модели (нейроны, attention-heads), либо через поведенческий анализ взаимодействия между модальностями (текстом и изображением).
▪️ Статьи:
1. CLIP Under the Microscope: A Fine-Grained Analysis of Multi-Object Representation [repo]
Как размер объекта и порядок слов в промпте влияют на поведение CLIP? Пример анализа поведения модели в зависимости от промпта.
Авторы анализируют задачу поиска изображения и классификации и показывают, что:
— порядок слов влияет на приоритет внимания;
— мелкие объекты игнорируются, если не упомянуты явно;
— модель чаще "видит" первый объект в тексте, особенно если он крупный на изображении.
2. “Interpreting the Second-Order Effects of Neurons in CLIP” [repo]
Здесь исследуются отдельные нейроны, чтобы понять, какие семантические концепты они кодируют. Основной инструмент — second-order effects: вклад нейрона в выход модели через последующие attention-слои.
Авторы:
— выделяют нейроны, кодирующие семантические концепты (напр. “рыжая собака”);
— автоматически подбирают текстовые описания нейронов;
— применяют это для генерации adversarial-примеров и улучшения zero-shot сегментации
3. INTERPRETING CLIP’S IMAGE REPRESENTATION VIA TEXT-BASED DECOMPOSITION [repo]
В этой работе CLIP-ViT разбирается по слоям и attention-head’ам. Авторы:
— выявляют специализированные головы: по цвету, числу, форме, геолокации и пр.;
— применяют результат применяется для удаления spurious признаков (признаков, которые коррелируют с метками классов в обучающей выборке, но не являются причинно значимыми для правильного вывода. Пример окружение «вода» для уток).
— пименяют результат для повышения устойчивости модели (и решения задачи сегментации)
Кстати пример поиска стиральных признаков вот, но мне не удалось найти описания к нему.
4. "Interpreting and Analysing CLIP’s Zero-Shot Image Classification via Mutual Knowledge" [repo]
Авторы объясняют zero-shot классификацию CLIP через взаимное знание (mutual knowledge) между визуальным и текстовым энкодерами:
— извлекают визуальные концепты (через PCA/K-means) и сопоставляют им тексты;
— оценивают вклад каждого концепта в предсказание;
— показывают, как сила взаимной информации коррелирует с уверенностью и качеством вывода.
▪️ Что есть ещё:
Интерпретация CLIP через градиетный подъём.
Как использовать всё ниже:
Для вдохновения, общего знания и того самого списка на "пригодится" :)
GitHub
GitHub - openai/CLIP: CLIP (Contrastive Language-Image Pretraining), Predict the most relevant text snippet given an image
CLIP (Contrastive Language-Image Pretraining), Predict the most relevant text snippet given an image - openai/CLIP