Компьютерное зрение
CV System Design
Pinterest: 500M изображений, visual search за 200ms. Instagram: 100M фото в день, модерация за 300ms. Snapchat: 60fps AR-фильтры без единого серверного запроса. Это не просто 'обучить нейросеть и задеплоить' - это system design: как организовать offline индексирование, streaming inference, мониторинг drift, retraining loop. CV engineer в FAANG тратит больше времени на pipeline и infrastructure, чем на выбор архитектуры модели.
- **Pinterest Visual Search** - CLIP embeddings + FAISS IVF-PQ индекс 500M векторов; recall@10=92% за 5ms; двухэтапный pipeline: ANN + cross-encoder re-ranker
- **Instagram Content Moderation** - 100M фото/день; PhotoDNA для CSAM + multi-label ViT для NSFW/violence; human review queue для P(label) in [0.7, 0.95]; audit trail для каждого решения
- **Snapchat AR** - BlazeFace + MediaPipe 478 landmarks + OpenGL rendering; полностью on-device; <10ms на iPhone; 300M+ DAU используют фильтры ежедневно
Предварительные знания
- Image embeddings и CLIP из урока про vision-language
- Свёрточные и трансформерные backbone для кодирования изображений
- Базовые идеи распределённых систем: кеширование, батчинг, latency-бюджеты
Как сложились production CV-пайплайны
Production computer vision менялась примерно десятилетие. До 2015 года большинство систем использовали вручную сконструированные признаки и модели под каждую задачу, обученные с нуля. После того как глубокие CNN выиграли ImageNet, доминирующим паттерном стали предобученные backbone плюс fine-tuning: взять сеть, обученную на большом датасете, и адаптировать её к целевой задаче на гораздо меньшем объёме разметки. Второй сдвиг касался того, где выполняется inference. Ранние системы отправляли каждый кадр на сервер, но мобильные NPU и edge-ускорители сделали on-device inference практичным, поэтому чувствительные к latency функции вроде AR-фильтров переехали на телефон, а тяжёлые retrieval и модерация остались в облаке. К началу 2020-х production CV-систему стали понимать как пайплайн (ingestion, preprocessing, батчинг inference, post-processing, мониторинг, retraining), а не как одну модель, и serving-стеки вроде Triton и TensorRT стали стандартным инструментарием.
Visual Search System
Pinterest: пользователь загружает фото платья и хочет найти похожие среди 500 миллионов пинов. Задержка ответа должна быть менее 200 мс. Как это устроено? Не перебором - embedding + approximate nearest neighbor search.
Архитектура visual search: **offline** (batch) - генерировать CLIP embeddings для всех изображений, индексировать в FAISS/Milvus. **Online** (real-time) - для query-изображения: resize -> embedding -> ANN search -> re-ranking -> return top-K.
| Компонент | Технология | Задача |
|---|---|---|
| Embedding | CLIP ViT-L/14 | 512-1024 dim представление изображения |
| ANN Index | FAISS IVF-PQ / HNSW | Поиск ближайших из 500M за 5-10ms |
| Re-ranker | Cross-encoder / fine-tuned | Уточнение top-200 до top-20 |
| Storage | S3 + Redis кеш | Оригиналы + embeddings |
| Serving | Triton Inference Server | GPU батчинг для encoder |
Почему в visual search используют двухэтапный поиск: ANN (top-200) + re-ranker (top-20), а не сразу точный поиск?
Content Moderation System
Instagram получает 100 миллионов фото в день. Модерация вручную невозможна - нужна автоматическая система. Требования: latency <500ms, precision >99% для запрещённого контента (CSAM), recall >95% для nudity, audit trail для каждого решения.
Content moderation pipeline: **multi-label classifier** (NSFW, violence, spam, hate) + **перцептивный хеш** (PhotoDNA для CSAM) + **VLM** для контекста (оружие в новостях vs сцены насилия). Fallback на человека-модератора при низкой уверенности модели.
Почему система модерации содержит отдельный PhotoDNA hash match наряду с ML-классификатором?
AR Filters System
Snapchat Dog Filter - уши и нос накладываются точно на лицо при любом повороте головы, в реальном времени на мобильном устройстве. 60 fps на iPhone 12. Никакого серверного запроса - всё на устройстве. Как?
AR filter pipeline: **face detection** (BlazeFace, 200 fps на мобильном) -> **face landmark detection** (468 точек, MediaPipe Face Mesh) -> **pose estimation** (угол поворота головы) -> **rendering** (наложение 3D-маски через OpenGL/Metal с учётом перспективы).
| Компонент | Модель | Latency (mobile) |
|---|---|---|
| Face Detection | BlazeFace (MobileNet-based) | <1ms |
| Face Landmark | MediaPipe Face Mesh (478 pts) | ~3ms |
| Head Pose | solvePnP (OpenCV) | <1ms |
| Rendering | OpenGL ES / Metal | ~5ms (GPU) |
| Total | End-to-end pipeline | <16ms (60fps) |
Почему AR-фильтры в Snapchat работают полностью on-device без серверных запросов?
Production CV Pipeline Design
Общие принципы production CV-систем - независимо от задачи (search, moderation, AR). Какие компоненты присутствуют всегда, где типичные узкие места, как организовать мониторинг.
Ключевые trade-offs в CV system design: **accuracy vs latency** (более сложная модель точнее, но медленнее), **batch vs real-time** (batch дешевле, real-time требует GPU on-demand), **on-device vs server** (on-device - latency, privacy; server - quality, updates), **model size vs recall** (MobileNet vs ViT-L).
Для production CV достаточно взять предобученную модель и задеплоить
Production CV требует: выбор правильного trade-off accuracy/latency, оптимизацию модели (TensorRT, quantization), двухэтапные pipeline (ANN + re-ranker), мониторинг data drift, retraining loop, fallback стратегию.
Типичная ошибка: взять ViT-L/14 (300ms inference) для задачи с требованием 50ms. Или не учесть data drift: модель обучена на летних фото, зимой accuracy падает на 15%. Production CV - это system design, не только выбор архитектуры.
Какой метод мониторинга CV-модели в продакшне позволяет обнаружить деградацию до появления пользовательских жалоб?
Ключевые идеи
- **Visual Search**: offline embedding + FAISS ANN (5ms, recall 92%) + online re-ranker; PQ quantization снижает 1.5TB до 4GB в RAM
- **Content Moderation**: PhotoDNA для детерминированного поиска известного контента + ML для нового; human-in-the-loop при P in [0.7, 0.95]
- **AR Filters**: on-device (BlazeFace + MediaPipe Face Mesh + OpenGL) для <16ms/кадр; сетевой запрос делает 60fps невозможным
- **Production CV**: accuracy/latency trade-off, TensorRT оптимизация, data drift мониторинг, retraining loop - это system design, не только выбор модели
Связанные темы
CV System Design объединяет ML и distributed systems:
- Vision-Language Models — CLIP embeddings - основа visual search; VLM для context-aware moderation
- Vector Databases — FAISS, Milvus, Pinecone - хранилище embeddings для visual search
Вопросы для размышления
- Pinterest использует FAISS IVF-PQ: recall@10=92%, latency 5ms. Если перейти на HNSW: recall@10=98%, latency 15ms. Как этот trade-off влияет на пользовательский опыт и бизнес-метрики?
- Instagram модерирует через multi-label classifier с порогом 0.95 для блокировки. Что происходит если порог снизить до 0.8: как изменится precision/recall и количество ошибочно заблокированных постов?
- Snapchat Dog Filter работает on-device. Компания хочет добавить AR-эффект на основе VLM (генерация сцены по описанию). Почему это нельзя сделать on-device и как спроектировать гибридный подход?
Связанные уроки
- cv-17 — VLM и модели детекции это inference-компоненты этого пайплайна
- cv-16 — Self-supervised pretraining определяет качество backbone развёрнутых моделей
- dl-05 — Оптимизация инференса трансформеров применима к CV-backbone
- ml-01-intro — Метрики (mAP, precision-recall) общие для классического ML и CV
- sd-01-intro