Я читал код кластеризации лиц dlib и заметил, что процесс выглядит так:
- Преобразование лиц в вектор с использованием обученной сети
- Используйте алгоритм кластеризации китайского шепота для вычисления групп на основе расстояния
Кластеризация китайского шепота может занять довольно много времени при попытке кластеризовать большое количество (> 10 000) изображений.
В этой pyimagesearch автор использует DBSCAN, другой алгоритм кластеризации для группировки изображений по лицам.
Поскольку векторы, сгенерированные нейронной сетью, можно использовать для вычисления сходства между двумя лицами, не лучше ли просто вычислить евклидова матрица расстояний, а затем найти все значения, соответствующие порогу достоверности (например, x ‹ 0,3 для достоверности 70%)?
Зачем вообще использовать алгоритм кластеризации, если можно просто сравнить каждое лицо с любым другим лицом, чтобы определить, какое из них является одним и тем же человеком? и DBSCAN, и кластеризация китайского шепота занимают гораздо больше времени, чем вычисление матрицы расстояний. С моим набором данных из 30 000 изображений времена таковы:
C-шепот - 5 минут
матрица расстояний + поиск - 10-20 секунд