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