Кластеризация 512-D лицевых вложений / векторов - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть набор из 1900+ 512-D лицевых вложений / векторов, я хотел бы сгруппировать всех похожих лиц / лиц. Существует также неизвестное количество отдельных лиц.

Я использовал sklearn.cluster.DBSCAN , аналогично предложению PyImageSearch Face Clustering с Python. Однако он не может эффективно кластеризоваться, возвращая 0 кластеров. Я считаю, что матрица слишком разрежена. И поверьте, есть несколько вариантов:

  • Рассчитать евклидово подобие для каждой из 1900 комбинаций - медленно, даже с умножением матрицы, но это работает
  • Использование уменьшения размерности / PCA до 128- D и попробуйте использовать DBSCAN
  • Использовать ближайших соседей - мне нужно знать заранее, сколько людей существует
  • Китайская шепотная кластеризация

В процесс опробования различных методологий прямо сейчас, но, может быть, есть известный метод / подход, который мне не хватает?

Ответы [ 2 ]

1 голос
/ 21 февраля 2020

Сначала я думаю, что важно проверить, с помощью какого измерения сходства использует ваше распознавание лиц, чтобы решить, являются ли два вложения одного и того же человека. Некоторые движки используют косинусное сходство, а не евклидово расстояние (например, Sphereface или Arcface)

Во-вторых, я бы проверил, каково пороговое значение в этом измерении сходства, когда механизм распознавания лиц рассматривает два вложения одного и того же человека. Обычно это делается для того, чтобы балансировать между TP и FP на помеченном наборе данных.

Используя эти два пункта выше, я сделаю следующий алгоритм:

  1. Создать матрицу сходства между всеми матрица вложений A1900x1900, где значение entrey I, j соответствует подобию, измеренному между внедрением I и внедрением j.
  2. Порог матрицы с использованием соответствующего значения (вторая точка выше). Каждая запись в матрице выше порогового значения получит 1, а ниже получит ноль
  3. Обрабатывать пороговую матрицу как вспомогательную матрицу графа и запускать алгоритм связанных компонентов графа (используя BFS или DFS), чтобы найти количество компонентов , Каждый компонент соответствует уникальному идентификатору.

Примечание по второму пункту: вы можете самостоятельно определить порог, используя некоторый набор данных распознавания лиц, например LFW или Celeb a, и решить, как именно вы хотите точно настроить порог по балансировке ФП и ТП.

0 голосов
/ 21 февраля 2020

DBSCAN, кажется, работает после нормализации функций, однако это вызывает некоторые трудности в наших приложениях из-за невозможности указать c достаточно для определенного сценария ios.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...