Обучение метрике онлайн для распознавания лиц
Я использую OpenFace для вычисления представлений (в 128D) для лиц, найденных на изображениях, снятых в условиях без ограничений, которые показывают значительные изменения в освещении, времени и т. Д.
Согласно их веб-сайту и демонстрационным материалам, стандартного евклидова расстояния с надлежащим порогом достаточно, чтобы можно было использовать эти представления для схемы "один и тот же, а не тот же". То есть, учитывая две грани с представлениями v1 и v2, я могу определить, принадлежат ли они одному и тому же человеку, если eucDist(v1,v2) На практике результаты не плохие, но определенно далеки от идеальных. Что я хотел бы сделать в своем приложении, так это использовать пользовательский ввод для улучшения прогноза. В идеале я хотел бы выполнить что-то вроде следующей процедуры: Предположим, что я извлек N граней, для каждого у меня есть представление, которое является вектором в R^128. Предположим, что эти грани принадлежат n индивидам (когда n значительно меньше N). Я выбираю случайным образом k лиц (когда k - небольшое число, скажем, 10) и показываю их пользователю, прося ее пометить их для лиц, принадлежащих одному человеку. Теперь я хочу использовать пользовательский ввод, чтобы "подправить" евклидово расстояние, чтобы оно работало лучше: делая расстояние между лицами, которые она помечала как "не одинаковые", больше, а расстояние между лицами, которые она помечала как "одинаковые", меньше. Очевидно, я хочу сделать это способом, который обобщает весь набор данных N граней. "терпеливые" пользователи могут помечать фотографии для улучшения результатов. Я знаю, что это относится к области "обучения метрикам", и я читал о таких вещах, как расстояние Махаланобиса, но я не уверен, как заставить это работать в этом "онлайн" сценарии. Мне было интересно, если бы кто-нибудь имел опыт с такой задачей и мог бы пролить немного света или дать мне какие-либо указатели. Я должен упомянуть, что я действительно не ищу слишком "тяжелую математику"; В идеале я хотел бы знать, существует ли алгоритм (предпочтительно с какой-то существующей реализацией, который я мог бы использовать), который мог бы улучшить производительность на основе пользовательского ввода. Для начала я буду удовлетворен любым улучшением, так что это не должен быть лучший доступный метод. Спасибо!