Я пытаюсь реализовать алгоритм распознавания лиц с использованием Python. Я хочу иметь возможность получать каталог изображений и вычислять пары между ними, когда короткие расстояния должны надеяться соответствовать изображениям одного и того же человека. Конечная цель - сгруппировать изображения и выполнить некоторые основные задачи идентификации лица (неконтролируемое обучение).Реализация распознавания лиц с использованием локальных дескрипторов (неконтролируемое обучение)
Из-за неконтролируемой обстановке, мой подход к этой проблеме, чтобы вычислить «лицо подпись» (вектор в R^г для некоторого Int г), а затем выяснить метрику, в которой два лица, принадлежащие к у того же человека действительно будет небольшое расстояние между ними.
У меня есть алгоритм обнаружения лица, который обнаруживает лицо, обрезает изображение и выполняет некоторую базовую предварительную обработку, поэтому изображения, которые я подаю алгоритму, являются серыми и выравниваются (см. Ниже).
Для «лицо» подпись части, я попробовал два подхода, которые я читал в нескольких публикациях:
- Принимая гистограмму LBP (Local Binary Pattern) всего (обработано) image
- Расчет SIFT дескрипторы в 7 ориентированных точках лица (справа на шее, слева от рта и т. д.), которые я определяю для каждого изображения с помощью внешнего приложения. Подпись является конкатенацией квадратного корня дескрипторов (это приводит к значительно более высокой размерности, но пока производительность не является проблемой).
Для сравнения двух подписей, я использую функцию compareHist OpenCV (см here), пытаясь несколько различных показателей расстояния (хи-квадрат, евклидовы и т.д.).
Я знаю, что распознавание лиц - это трудная задача, не говоря уже о том, чтобы не тренироваться, поэтому я не ожидаю больших результатов. Но все, что я получаю до сих пор, кажется совершенно случайным. Например, при расчете расстояний от изображения справа от остальной части изображения я получаю, что она больше всего похожа на 4 Билла Клинтона (...!).
Я прочитал в this большой презентации, что это популярно проводить «Метрика обучения» процедура на тестовом наборе, который должен значительно улучшить результаты. Однако в презентации и в других местах говорится, что «регулярные» дистанционные меры также должны иметь хорошие результаты, поэтому, прежде чем я попытаюсь это сделать, я хочу понять, почему то, что я делаю, ничего не дает мне.
В заключение, мои вопросы, которые я хотел бы получить какую-либо помощь на:
Одно улучшение я хотя бы выполнять LBP только на фактическом лице, а не углы и все, что могло бы помещать шум в подпись. Как я могу замаскировать части, которые не являются лицом перед вычислением LBP? Я тоже использую OpenCV для этой части.
Я довольно новичок в компьютерном зрении; Как мне пойти «отлаживать» мой алгоритм, чтобы выяснить, где все идет не так? Это возможно?
В неконтролируемой настройке существует ли какой-либо другой подход (который не является локальным дескриптором + вычислительные расстояния), который может работать, для задачи кластеризации лиц?
Есть ли что-нибудь еще в модуле OpenCV, который, возможно, я не думал об этом, возможно, будет полезно? Кажется, что все алгоритмы там требуют обучения и не полезны в моем случае - алгоритм должен работать над совершенно новыми изображениями.
Заранее спасибо.
Спасибо за ответ. На самом деле у меня есть структура Caffe, которую я смогу использовать. Предложите ли вы разработать большой набор обучающих наборов предварительно обработанных лиц и запустить его через CNN, чтобы получить лучшее представление каждого изображения, а затем вычислить расстояния между изображениями? Считаете ли вы, что при достаточно хорошем представлении простое евклидово расстояние должно быть достаточно хорошим? – galoosh33
Да, это именно то, что было у меня на уме. Если функции, которые CNN узнает, хороши, достаточно простого евклидова расстояния. –