Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Примерь онлайн: как разработать свою модель вир...

Avatar for Lamoda Tech Lamoda Tech
September 03, 2026

Примерь онлайн: как разработать свою модель виртуальной примерки. Искандер Сафиулин, Senior Data Scientist Lamoda Tech

Продукт виртуальной примерки позволяет пользователю безопасно и легко экспериментировать со стилем прямо в приложении. Расскажу про путь, который мы прошли в разработке этой ML-модели:

- Как с нуля обучать модель для подобной задачи — от сбора данных до оценки качества
- С какими сложностями мы столкнулись при обучении, и какую эволюцию прошло наше решение
- Как мы внедряли нашу модель в прод и какие результаты получили

Avatar for Lamoda Tech

Lamoda Tech

September 03, 2026

More Decks by Lamoda Tech

Other Decks in Technology

Transcript

  1. О чем поговорим 1 О задаче виртуальной примерки 2 Эволюция

    разработки модели - от бейзлайна до SOTA 3 Выкатка модели в прод 48
  2. Преимущества своего решения Контроль Качество • • Хостим на контролируемых

    ресурсах • Можем точечно исправлять проблемы Обучаем на целевых для нас данных Скорость Стоимость • • Можем настраивать железо под нашу потребность по скорости Генерация своей моделью будет стоить намного дешевле 54
  3. Image-generative модели GAN Pix2Pix StyleGAN CLIP 2014, Goodfellow 2016, cond.

    GAN 2019, face synth 2021, text-image text conditioning ↓ GAN era 2014 Diffusion era 2016 VAE VQ-VAE 2013, latent space 2017, discrete 2018 latent space → 2020 DiT / Hybrid 2022 2024 DDPM SD1.5 / DALL-E 2 SDXL 2020 2022, latent diff. 2023 DiT 2023 SD3 / Flux 2024, flow match 59
  4. Разработка своей модели • В современном Generative AI — это

    всегда дообучение уже существующей “Инициализация весов Qwen-ом” 60
  5. Разработка своей модели • В современном Generative AI — это

    всегда дообучение уже существующей • За основу мы можем брать только модели, разрешающие коммерческое использование 61
  6. Разработка своей модели • В современном Generative AI — это

    всегда дообучение уже существующей • За основу мы можем брать только модели, разрешающие коммерческое использование • На старте разработки (Начало 2025) такие модели сильно отставали от закрытых, но за 2025 год ситуация кардинально изменилась 62
  7. Путь — от классики к open-source SOTA Переходный этап Наш

    бейзлайн Stable Diffusion 1.5/XL Flex.2 8B params 0.9B/2.3B params 64
  8. Путь — от классики к open-source SOTA Итоговая модель Переходный

    этап Наш бейзлайн Stable Diffusion 1.5/XL Flex.2 Qwen-Image-Edit 8B params 20B params 0.9B/2.3B params 65
  9. Исследовательская стадия • Большинство подходов из публичного доступа — исследовательские,

    не продуктовые • В основном базируются на SD1.5 • Обучены на одном и том же датасете 66
  10. Архитектура большинства подходов • Главная сеть — работает с фото

    человека • Вспомогательная сеть — обрабатывает фото товара • На промежуточных слоях UNet-а — инъекция признаков фото товара через attention в основную сеть OOTDiffusion 68
  11. Формат input и output • Примеры датасета — пары изображений

    • Еще одно изображение (входное фото человека) — через маскирование • Inpainting-генерация — модель учится генерировать только внутри маски Input Output 69
  12. Архитектура нашего бейзлайна • Основа идеи — CatVTON (конкатенация изображений)

    • Единая сеть, работающая с одним потоком • Self-attention вместо cross • Inpainting-формат генерации 70
  13. Где взять данные для обучения? • Самый популярный открытый датасет

    — Viton-HD • ~12к обучающих примеров Проблемы: • Запрещено коммерческое использование • Ограниченность данных 71
  14. Сбор собственного датасета У нас много товаров, и мы можем

    собрать свою выборку: • Бренды нашей компании — Nume и Mademan — плюс Lime 72
  15. Сбор собственного датасета У нас много товаров, и мы можем

    собрать свою выборку: • Бренды нашей компании — Nume и Mademan — плюс Lime • Есть flat-lay фотографии 73
  16. Сбор собственного датасета У нас много товаров, и мы можем

    собрать свою выборку: • Бренды нашей компании — Nume и Mademan — плюс Lime • Есть flat-lay фотографии • В сумме — ~4500 пар • Только upper-body одежда 74
  17. Обучение модели • Стек — pytorch, diffusers • Обучаем все

    веса модели • 1 x A100 • BS = 16 • bfloat16 • Train: ~4000 примеров • Val: ~500 примеров • Начали с 512x384, потом — 768x576 • 10к итераций - ~10 часов 77
  18. Итеративное улучшение модели • Провели много итераций по исправлению проблем

    модели • Одна из проблем — маскирование • Как думаете — что не так с маской справа? 81
  19. Итеративное улучшение модели • Провели много итераций по исправлению проблем

    модели • Одна из проблем — маскирование • Как думаете — что не так с маской справа? • Маска сильно ликует -— содержит сигнал о надетой одеже • Модель переобучается под маску и начинает подстраивать вещь под неё 82
  20. Итеративное улучшение модели • Решение — расширение маски • Уменьшаем

    сигнал о форме изначальной одежды • Но появляются другие минусы • Маскирование — проблемная часть пайплайна 83
  21. Выход Qwen-Image-Edit меняет правила игры • В августе Alibaba выпускает

    модель — Qwen-Image-Edit • 20B параметров, современная архитектура, Apache 2.0 лицензия • Гигантский скачок в open-source качестве 84
  22. Испытания Qwen-Image-Edit • Пробуем модель в первый раз • Получаем

    ~50 секунд генерации на A100 • Грустим — очень долго для нас 85
  23. Испытания Qwen-Image-Edit • Пробуем модель в первый раз • Получаем

    ~50 секунд генерации на A100 • Грустим — очень долго для нас • Через месяц выходит дополнение к модели — Lightning-LoRA • Уменьшает кол-во шагов генерации с 30 до 4/8 • Тестируем — работает за ~10-12 секунд практически без потери качества • Зеленый свет — можем переходить на её обучение 86
  24. 1. Используем фото на модели в качестве референса • Использовали

    flat-lay фото в качестве референса, так как модели с ним проще работать • Но для большинства товаров flat-lay нет, только фото модели в одежде 2 % товаров 88
  25. 1. Используем фото на модели в качестве референса • Использовали

    flat-lay фото в качестве референса, так как модели с ним проще работать • Но для большинства товаров flat-lay нет, только фото модели в одежде • Даже разработали TryOff-модель, чтобы решить эту проблему 89
  26. 1. Используем фото на модели в качестве референса • Использовали

    flat-lay фото в качестве референса, так как модели с ним проще работать • Но для большинства товаров flat-lay нет, только фото модели в одежде • Даже разработали TryOff-модель, чтобы решить эту проблему • Но для Qwen-Image-Edit фото одежды на модели — не проблема 90
  27. 2. Отказ от masked-image на входе Ранее мы делали маску

    и подавали её на вход Референс (настоящее фото) Маска Выход (настоящее фото) 91
  28. 2. Отказ от masked-image на входе Много проблем — сильно

    зависим от способа построения маски Референс (настоящее фото) Маска Выход (настоящее фото) 92
  29. 2. Отказ от masked-image на входе Принципиально меняем подход —

    теперь второе изображения для обучения генерируем Референс (настоящее фото) Фото человека (синтетика) Выход (настоящее фото) Замени блузу на что-то другое 93
  30. 3. Обогащение выборки фотографиями из отзывов Сырые фото из отзывов

    • Предыдущие версии датасетов — студийный фотографии • Нецелевое распределение — на проде у нас будут in-the-wild фотографии • Есть отличный источник данных — фотографии из отзывов • Они максимально приближены к тому, что пользователи будут грузить в примерку Автофильтрация Ручная фильтрация Качественные примеры 98
  31. 3. Обогащение выборки из отзывов — фильтрация хорошо плохо Одежду

    хорошо видно Разнообразие ракурсов Разнообразие фигур 99
  32. 3. Обогащение выборки из отзывов — фильтрация хорошо плохо Одежду

    хорошо видно Неестественная поза -— приподнимает другую одежду Разнообразие ракурсов Одежда мятая Разнообразие фигур 10 0
  33. Ключевые изменения 1 Новый обучающий датасет 4 Обучаем LoRA вместо

    всей модели 2 Генерируем всё изображение 5 Используем фото одежды на модели в качестве референса 3 Переходим на разрешение 1MP 10 1
  34. Результат • Качественный скачок — получаем отличную модель, которая хорошо

    понимает физику реального мира **Здесь чуть позже будет изображение такого же размера** 10 2
  35. Результат • Качественный скачок — получаем отличную модель, которая хорошо

    понимает физику реального мира • Справляется со сложными ракурсами и освещениями **Здесь чуть позже будет изображение такого же размера** 10 3
  36. Результат • Качественный скачок — получаем отличную модель, которая хорошо

    понимает физику реального мира • Справляется со сложными ракурсами и освещениями • Сохраняет идентичность человека и одежды **Здесь чуть позже будет изображение такого же размера** 10 4
  37. Версии Qwen-Image-Edit • За пару месяцев вышло несколько новых версий

    модели • В каждой новой версии авторы улучшали определенные аспекты генерации • Мы проводили эксперименты под каждую новую модель 10 5
  38. Версии Qwen-Image-Edit Qwen-Image-Edit: • • Для работы с несколькими изображениями

    нужно их конкатенировать Целевое изображение — 0.5 MP Qwen-Image-Edit-2509: • • Поддержка работы с несколькими изображениями отдельно Лучше контраст переносимой одежды Qwen-Image-Edit-2511: • • Идентичность сохраняется на том же уровне Немного больше артефактов с одеждой 10 6
  39. Версии Qwen-Image-Edit Qwen-Image-Edit: • • Для работы с несколькими изображениями

    нужно их конкатенировать Целевое изображение — 0.5 MP Qwen-Image-Edit-2509: • • Поддержка работы с несколькими изображениями отдельно Лучше контраст переносимой одежды Qwen-Image-Edit-2511: • • Идентичность сохраняется на том же уровне Немного больше артефактов с одеждой 10 7
  40. Масштабирование — покрываем больше категорий • По уже выстроенному пайплайну

    собираем данные для dress и lower-body категорий • Для каждой - обучаем отдельную LoRA (200 Mb) • На инференсе - переключаем модель в зависимости от типа одежды 10 8
  41. Сравнение моделей • • Как понять, что наша модель лучше?

    Базовые метрики для image-generation задач — были чувствительны только на первых этапах • Ручной просмотр генераций — без этого никак • Разработали свои метрики, которые оценивают сохранение идентичности человека (лицо, фигура, поза) • Расшифровка значений метрик — лицо сохраняем примерно одинаково, фигуру получше, позу — заметно лучше LaTryOn Подрядчик Face sim ↑ 0.881 ± 0.002 0.866 ± 0.001 Figure sim ↓ 1.49 ± 0.04 2.26 ± 0.04 Pose sim ↓ 2.43 ± 0.06 10.65 ± 0.39 10 9
  42. Модерация фото • Мы решаем задачу генерации изображения • Результаты

    модели могут быть разными • Нужны инструменты автоматической проверки генерации 11 1
  43. Модерация фото • Мы решаем задачу генерации изображения • Результаты

    модели могут быть разными • Нужны инструменты автоматической проверки генерации Решение: • Внедрили модели, оценивающие возраст участников фото и NSFW-скор • Формализовали правила фильтрации на основе этих предсказаний Input-модерация LaTryOn Output-модерация 11 2
  44. Оптимизация инференса Triton inference server, Python-бэкендом Оптимизации под A100: -

    tf32 - torch.compile - FlashAttention2 Оптимизации под H100: - FlashAttention3 Время генерации A100, raw ~10.1 сек A100, optimized ~6.9 сек H100, optimized ~3.0 сек Что не сработало: - квантизация — качество заметно ухудшалось 11 3
  45. Интеграция с Backend • В проде уже работала модель подрядчика

    Контракт запроса Асинхронно Модель подрядчика 11 4
  46. Интеграция с Backend • • • В проде уже работала

    модель подрядчика Адаптировались под архитектуру backend-а Команда MLOps разработала сервис асинхронной прослойки перед тритоном Async ML Service Cинхронно Triton LaTryOn Асинхронно Контракт запроса Асинхронно Модель Модель подрядчик подрядчика а 11 5
  47. Этапы выкатки в прод А/Б 50/50 А/Б 80/20 LaTryon vs

    Подрядчик LaTryon vs Подрядчик Полный переход на LaTryOn 1 этап 2 этап 3 этап 116
  48. Результаты А/Б • • • LaTryOn vs Подрядчик А/Б длился

    неделю - технический, но метрики мы считали Прирост по кол-ву примерок - обусловлен скоростью генерации нашей моделью: в среднем 9 сек vs 35 сек) Пользователи стали чаще делиться результатами примерки Кол-во примерок +64% Кол-во шарингов результатами +12.4% Кол-во ошибок -60.3% 11 7
  49. Дальнейшие планы • Работать над проблемными генерациями • Адаптировать решение

    под новые open-source модели • Более глубокая оптимизацию инференса 11 8