Лучше всего, если вы имеете в виду современное состояние - вот следующий список: https://paperswithcode.com/sota/face-verification-on-labeled-faces-in-the
В настоящее время ArcFace является лучшей моделью оценки.
Он использует Additive Angular Margin Loss для отличительной черты распознавания лиц.
Хорошо, его можно легко обобщить, а другие функции потерь можно спроектировать на основе представления angular функций и веса. векторы, включая потерю триплетов.
Для вашего вопроса 2 это выглядит довольно расплывчато. Если вы имеете в виду, что как сделать matchinf быстрее, вы всегда можете использовать методы кластеризации вместо линейного поиска.
В статье также рассматриваются некоторые исследования ускорения.
Код доступен по адресу:
https://github.com/deepinsight/insightface (м xnet)
https://github.com/TreB1eN/InsightFace_Pytorch (pytorch)
https://github.com/happynear/AMSoftmax (caffe)
Для более быстрого вывода вы можете использовать только расстояние L1 между два вложения, для практических целей на этапах вывода используются более простые метрики расстояния. Я бы посоветовал вам экспериментально наблюдать, какой из них лучше всего работает в вашей обученной модели. Некоторые другие метрики расстояния https://scikit-learn.org/stable/modules/classes.html#module -sklearn.metrics.pairwise
Как определить, какое лицо из базы данных встраивания?
Самый простой подход линейное сканирование Итак, для всех вложений в вашем наборе данных вычислите расстояние по вашему выбору metri c между вычисляемым в настоящее время внедрением граней и базой данных внедрений. Выберите тот с минимальным расстоянием. Кроме того, вам может потребоваться указать порог для удаления неизвестных лиц. Сложность O (N)
Немного лучший подход - запустить алгоритм кластеризации без присмотра на вашем наборе данных для встраивания лица, чтобы создать несколько кластеров. Скажем, есть k кластеров, и в каждом кластере есть в среднем p-гранные вложения.
Сначала вы выполняете поиск по всем кластерам, чтобы найти тот, который близок к текущему. встраивая O (k), затем в этот кластер запустите линейное сканирование O (p), чтобы найти подходящее лицо.
- После этого оно превращается в проблему структуры данных. Вы можете создать сбалансированное дерево для дальнейшего ускорения сопоставления.