Как построить модель визуального сравнения объявлений авто
Есть база объявлений авто и якорное объявление. Нужно находить архивные объявления, где визуально другая машина: другой цвет, салон, колеса, кузов или ракурс. Как поставить задачу и обучить модель?
Короткий ответ
Задачу можно поставить как pairwise similarity/anomaly detection по двум объявлениям: сначала нормализовать ракурсы, затем обучить metric learning на positives и hard negatives, агрегировать photo-pair scores и дообучить reranker/heads под конкретные типы различий.
Полный разбор
Сначала нужно определить объект сравнения: не одна фотография, а пара объявлений с набором фото. Полезно выделить ракурсы автомобиля: фронт, зад, бок, диагонали, салон. Это снижает шум, потому что сравнение "салон против кузова" бессмысленно.
Данные: positives - тот же автомобиль, то же объявление или надежно совпадающая комплектация/история; easy negatives - явно другие автомобили; hard negatives - та же марка/модель/поколение, но отличия в деталях: цвет, колеса, решетка, салон, кузов. Именно hard negatives заставляют embedding ловить мелкие визуальные различия.
Модель: encoder изображения или пары изображений, metric learning с contrastive/triplet loss, in-batch negatives, а затем агрегация расстояний по сопоставимым ракурсам. Поверх embedding-признаков можно обучить GBDT/MLP reranker или отдельные heads: цвет, салон, внешний вид. На выходе нужен score и порог для автоматического удаления или отправки на ручную проверку.
Оценка: precision/recall по "чужим" объявлениям, cost-sensitive threshold, разбор ошибок по типам отличий и guardrail на false positives, потому что ошибочное удаление настоящей истории автомобиля вредно для продукта.
Теория
Это retrieval/metric-learning задача, близкая к RecSys по идеям embeddings, positives/negatives и hard negative mining, хотя домен визуальный.
Типичные ошибки
- Сравнивать случайные фото без нормализации ракурса.
- Обучаться только на easy negatives.
- Не задать бизнес-порог и цену false positive.
Как отвечать на собеседовании
- Сначала разложи entity: объявление -> набор фото -> ракурсы -> pairwise scores.
- Обязательно назови hard negatives из той же модели/поколения авто.