Как кластеризовать лица людей по признакам лица?

Я получаю лицевые ориентиры, используя dlib. У меня есть набор данных из более чем 1000 лиц. Я хочу сравнить эти 1000 изображений с каким-то неизвестным изображением. Чтобы уменьшить время поиска в базе данных, я хочу сгруппировать эти 1000 изображений в 10 различных кластеров, основываясь на 68 чертах лица dlib. В настоящее время я делаю кластеры на основе расстояния между подбородком и носом разных изображений лица.

Проблема: Каждое изображение одного и того же человека создает различные лицевые ориентиры, которые влияют на расстояние, рассчитанное от подбородка до кончика носа. Пожалуйста, найдите скриншот CSV введите описание изображения здесь

  1. 1-й столбец - имена лиц (одно лицо с примерно 25 образцами)
  2. 2-й,3-й столбцы - кластерные метки Kmeans и центроиды 4-го столбца
  3. 4-е - Евклидово расстояние от подбородка до кончика носа
  4. 5 - 68 длинных черт лица, разделенных как подбородок, глаз....

Вопросы:

  1. Это правильный способ кластеризации изображений на основе лицевых ориентиров? Если нет, каков наилучший способ кластеризации изображений лиц / группирования лиц, чтобы сделать поиск в базе данных более эффективным для получения большего количества изображений?

Я пробовал с гендерной классификацией, но точность не очень хорошая. Пробовал с классификацией цвета лица / этнической принадлежности, но это ограничивало мои возможности. Например, только азиатские / европейские лица снова заставят меня искать всю базу данных

Я не могу определить, какой фактор является правильным для кластеризации. Любая ссылка на статьи или идеи высоко ценится.

2 ответа

Кластеризация, как я указал в вопросе, не подходит для изображений лица. Лучше использовать сверточную нейронную сеть для обучения функций вместо того, чтобы вручную вычислять расстояния от лицевых ориентиров.

Позже к этим обученным функциям мы можем применить любой популярный алгоритм кластеризации, как показано здесь: https://arxiv.org/pdf/1604.00989.pdf или как предложено @sascha, Приблизительный ближайший сосед или как @Davis King предложил китайский шепот в зависимости на ваших потребностях.

Как предположил @sascha, есть много библиотек с глубоким обучением, таких как openface, которые делают это поверх torche/tenorflow.

Если вы выполняете кластеризацию неконтролируемых данных, используйте face_recognition. Dlib или ориентиры лица группируют изображения на основе выражений лица, а не черт лица.

Другие вопросы по тегам