Компьютерное зрение

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-бюджеты
  • Vision-Language Models
  • Image Classification с CNN

Как сложились 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.

КомпонентТехнологияЗадача
EmbeddingCLIP ViT-L/14512-1024 dim представление изображения
ANN IndexFAISS IVF-PQ / HNSWПоиск ближайших из 500M за 5-10ms
Re-rankerCross-encoder / fine-tunedУточнение top-200 до top-20
StorageS3 + Redis кешОригиналы + embeddings
ServingTriton Inference ServerGPU батчинг для 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 DetectionBlazeFace (MobileNet-based)<1ms
Face LandmarkMediaPipe Face Mesh (478 pts)~3ms
Head PosesolvePnP (OpenCV)<1ms
RenderingOpenGL ES / Metal~5ms (GPU)
TotalEnd-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
CV System Design

0

1

Войти