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