Как создать неизвестный набор данных для распознавания лиц python - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть python face recognition, где я использую модель open-face и SVM для обнаружения и распознавания лиц. Ниже приведены общие шаги по распознаванию изображения:

  1. Обнаружение лица с использованием модели распознавания лиц: Причина использования модели с открытым лицом вместо каскада HAAR заключается в том, что каскад не может обнаружить боковое лицо
  2. Извлечение врезания лица: Извлечение врезания лица 128 d с использованием модели открытого лица
  3. Обучение: использование SVM Я тренирую встраивание лица с соответствующей меткой, как показано ниже:

    params = {"C": [0.001, 0.01, 0.1, 1.0, 10.0, 100.0, 1000.0], "gamma": [1e-1, 1e-2, 1e-3, 1e-4, 1e-5]}

    model = GridSearchCV(SVC(kernel="rbf", gamma="auto", probability=True), params, cv=3, n_jobs=-1)

    model.fit(data["embeddings"], labels)

  4. Тестирование: извлечение встраивания граней тестового изображения и прогнозирование результатов, например ниже:

model.predict_proba()

У меня есть unknown случайный набор данных лица и known набор данных лица. Проблема здесь в том, что, если я добавляю около 30 изображений известных людей и если у меня есть около 10 изображений неизвестных, это значит, что он хорошо распознает известного человека, но если заходит какой-то неизвестный человек, он также распознает этого неизвестного человека как известного человека с высоким достоверность, которая в действительности должна быть неизвестна.

Если я добавлю больше случайного человека в набор данных unknown, скажем, около 50 изображений, и если у меня есть 30 изображений известных людей. Он хорошо распознает изображение известного человека, но уверенность низкая, и если появляется какой-либо неизвестный человек, он теперь распознается как неизвестный

Похоже, что для получения хороших результатов распознавания лиц нам нужно иметь примерно столько же known and unknown изображение человека, которое практически невозможно, так как изображения известных людей могут увеличиться до 100 или более, чем для каждого известного человека, которого мы добавляем. Я очень смущен здесь и не уверен, что делать. Есть ли другой способ узнать known/unknown человека. Пожалуйста помоги. Спасибо

Ответы [ 2 ]

1 голос
/ 16 апреля 2020

Я не думаю, что SVM будет хорошо работать здесь. Это двоичный классификатор по нативному. Он попытается вычислить границу между двумя наборами точек 128D (известным и неизвестным классами), но эти классы внутренне не связаны с какими-либо отношениями. Известный может быть похож на неизвестный больше, чем на другой известный в пространстве встраивания. Это будет проблемой для обобщения для SVM. SVM может использоваться на закрытых наборах, но у вас есть открытый набор для неизвестных лиц.

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

1 голос
/ 16 апреля 2020

Обычно доверие уменьшается с увеличением числа возможных людей (количество ярлыков), так как возможностей больше. Я пытаюсь понять, что вы имели в виду: у вас есть ярлык для каждого человека, а затем дополнительный ярлык для неизвестного? Это не путь к go, поскольку неизвестное рассматривается как любое другое вложение. Вы должны использовать вероятность отсечки, и все, что падает ниже, считается неизвестным.

Помните, что существует компромисс между размером вашего прогноза (больше людей, больше возможностей) и точностью

...