Как извлечь характерные черты одного и того же человека, используя другое изображение? - PullRequest
0 голосов
/ 21 февраля 2019

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

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

Я извлекаю функции из изображений Эммы Уотсон, image_1 возвращает feature_1, image2возвращает feature_2 и так далее (длина вектора = 2048).Если функция [i]> 0.0, преобразуйте ее в 1.

for i in range(0, 2048): if feature1[0][i] > 0.0: feature1[0][i] = 1

Затем я сравниваю вектор двух объектов, используя расстояние Хэмминга.Расстояние Хэмминга - это просто наивный способ сравнения, в реальном проекте я буду квантовать эти функции перед сравнением.Тем не менее, расстояние между двумя изображениями Эммы все еще велико, хотя я использую 2 изображения с выражением нейронного выражения лица (одни и те же эмоции, разные типы эмоций дают худший результат).

Мой вопрос заключается в том, как я могу обучить модель для извлечения функцийцелевого пользователя.Воображение, Эмма является целевым пользователем, и ее телефон должен только извлечь ее функции.Когда кто-то пытается разблокировать телефон Эммы, ее телефон извлекает лицо этого человека, а затем сравнивает с сохраненными функциями Эммы.Кроме того, я не хочу тренировать модель для классификации 2 классов Эммы, а не Эммы.Мне нужно сравнить извлеченные элементы.

Подводя итог: если мы сравниваем элементы из разных изображений одного и того же человека, расстояние (различия) должно быть «близким» (маленьким).Если мы сравним особенности разных изображений разных людей, расстояние должно быть «большим» (большим).

Большое вам спасибо.

1 Ответ

0 голосов
/ 21 февраля 2019

Я бы сделал следующее: мы хотим вычислить объекты из глубокого слоя из ConvNet, чтобы в конечном итоге сравнить новые изображения с базовым изображением.Допустим, этот глубокий слой дает вам вектор функций f.Теперь создайте набор данных с парами изображений и меткой y.Скажем, y = 1, если оба изображения принадлежат одному и тому же лицу, и y = 0, если они разные.Затем рассчитайте разность элементов и введите ее в единицу логистической регрессии, чтобы получить y_hat: y_hat = sigmoid(np.multiply(W, np.sum(abs(f1 - f2)) + b).Вам нужно будет создать "сиамскую" сеть, в которой у вас будет два одинаковых ConvNets, один из которых даст вам f1 для одного изображения, а другой - f2 для другого изображения из той же пары примеров.Сиамские сети должны всегда иметь точные веса, поэтому вы должны всегда следить за тем, чтобы их веса были одинаковыми.Обучая эту новую сеть, вы должны получать желаемые результаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...