Визуальный поиск одежды и аксессуаров на основе ИИ
Пользователь видит на улице куртку, фотографирует, открывает приложение — и находит точно такую или похожую в каталоге из 2 миллионов SKU за 200 ms. Это не маркетинговый сценарий, а вполне рабочая задача, которую решают ASOS, Zara, Pinterest и крупные fashion-ретейлеры. Технически в ней несколько нетривиальных слоёв.
Architecture visual search системы
Задача делится на два этапа:
- Offline: индексация каталога — построение векторных эмбеддингов для всех товаров
- Online: для запросного изображения извлечь эмбеддинг и найти ближайших соседей в индексе
Models эмбеддингов для fashion
Общие image embedding модели (CLIP, DINO) дают неплохую базу, но для fashion-поиска лучше специализированные:
Fashion CLIP — CLIP, дообученный на 800K fashion-пар изображение/описание. Понимает текстовые запросы типа «синее платье с V-образным вырезом» и визуальные одновременно.
SES (Style Embedding Space) — контрастивное обучение на triplet loss с парами похожих/непохожих товаров. Эмбеддинги группируют похожие стили в пространстве.
Metric learning подход: для высокой точности на конкретном каталоге — дообучение на собственных данных. ArcFace или Proxy-NCA loss на парах SKU одного стиля. Для каталога 500K+ SKU нужно минимум 50K обучающих пар с разметкой «похожие / непохожие».
| Модель | R@1 (DeepFashion) | R@10 | Размер эмбеддинга |
|---|---|---|---|
| ResNet-50 (ImageNet) | 0.21 | 0.48 | 2048 |
| CLIP ViT-B/32 | 0.34 | 0.61 | 512 |
| Fashion CLIP | 0.47 | 0.74 | 512 |
| Fine-tuned ArcFace | 0.63 | 0.85 | 256 |
Глубокий разбор: сегментация и re-ranking
Проблема background noise
Фото товара в каталоге — белый фон, студийный свет. Запросное фото пользователя — человек в толпе, сложный фон, частичная видимость вещи. Если извлекать эмбеддинг со всего изображения, модель будет матчиться по фону, а не по одежде.
Решение: сегментация одежды перед извлечением эмбеддинга. Models: HumanParsing (SCHP, lip-parser) для сегментации частей тела и одежды, Grounded-SAM для zero-shot сегментации по текстовому запросу. После сегментации — кроп одежды + белый или нейтральный фон.
Это существенно улучшает метрики: на внутреннем тесте с 50K запросами реальных пользователей R@1 вырос с 0.43 до 0.58 после добавления сегментации.
Re-ranking через attribute matching
После ANN-поиска в топ-100 результатах делаем attribute-based re-ranking:
- Извлекаем атрибуты запросного изображения: цвет, паттерн (полоска/клетка/однотонный), силуэт (приталенный/свободный), материал (если видно)
- Для этого — отдельный attribute classifier (multi-label) обученный на DeepFashion-C (280K изображений, 1000 атрибутов)
- Ранжируем топ-100 по комбинации visual similarity + attribute match score
Это поднимает P@5 (точность в топ-5 результатах) на 12–15% по сравнению с чистым visual similarity.
Векторный индекс для production
Каталог 2M SKU = 2M векторов dim=256. Точный поиск (brute force) — неприемлемо медленно. Используем approximate nearest neighbor (ANN):
- FAISS (Facebook AI Similarity Search) — стандарт де-факто, IndexIVFPQ с 1024 кластерами даёт recall 0.92 при latency < 10 ms для 2M векторов на одном A10G
- Qdrant или Weaviate — managed vector DB с поддержкой фильтрации по метаданным (цвет, категория, размер, наличие на складе). Удобнее для production с частыми обновлениями каталога
- pgvector — хороший выбор если уже есть PostgreSQL и каталог < 500K товаров
Обновление каталога: при добавлении нового SKU — инференс embedding модели + upsert в векторный индекс. Инкрементальные обновления без перестройки индекса.
Multimodal поиск: текст + изображение
CLIP-based архитектура позволяет искать по изображению + текстовому уточнению одновременно: «похожее платье, но красное» или «такая же куртка, но без капюшона». Реализуется через комбинирование эмбеддинга изображения с CLIP text эмбеддингом запроса (weighted sum или learned combination).
Сроки
MVP visual search для каталога до 100K SKU: 6–10 недель. Production система с сегментацией, attribute re-ranking и managed vector DB для 1M+ SKU: 3–5 месяцев.







