Прежде всего, я очень новичок в этой области.может быть, мой вопрос слишком наивен, даже тривиален ..
В настоящее время я пытаюсь понять, как мне узнать о разных лицах.Вот что я пробовал до сих пор и основные проблемы с каждым подходом:
1) Каскад Хаара -> HOG -> SVM: Основная проблема заключается в том, что алгоритм становится очень нерешительным, когда обучается более 4 человек.... то же самое происходит, когда мы меняем каскад Хаара на предварительно обученный CNN для обнаружения лиц ..
2) dlib ориентиры на лицах -> расстояние между точками -> SVM или простая классификация нейронных сетей: это текущий подходи он ведет себя очень хорошо, когда обучается 4 человека ... когда обучается больше людей, он становится очень грязным, перепрыгивая с решения на решение и никогда не решаясь на выбор.
Я читал в Интернете, что потеря Тройкипуть ... но я очень смущен тем, как id идет о его реализации ... могу ли я использовать текущие векторы расстояния, найденные с помощью Dlib, или я должен отказаться от всего и обучить свой собственный CNN?
Если я могуиспользовать векторы расстояния, как я передам данные в алгоритм?Потеря Триплета является тривиальной нейронной сетью только с измененной функцией потерь?
Я позволил себе точно показать, как вычисляются векторы расстояния:
Зеленые линии представляют расстояниявычисляется Возвращается список с плавающей точкой 33, который затем подается в классификатор
Вот соответствующий код для классификатора (Keras):
def fit_classifier(self):
x_train, y_train = self._get_data(self.train_data_path)
x_test, y_test = self._get_data(self.test_data_path)
encoding_train_y = np_utils.to_categorical(y_train)
encoding_test_y = np_utils.to_categorical(y_test)
model = Sequential()
model.add(Dense(10, input_dim=33, activation='relu'))
model.add(Dense(20, activation='relu'))
model.add(Dense(30, activation='relu'))
model.add(Dense(40, activation='relu'))
model.add(Dense(30, activation='relu'))
model.add(Dense(20, activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(max(y_train)+1, activation='softmax'))
model.compile(loss='mse', optimizer='adam', metrics=['accuracy'])
model.fit(x_train, encoding_train_y, epochs=100, batch_size=10)
Я думаю, что это более теоретический вопросчем что-либо еще .. если бы кто-то с хорошим опытом в этой области мог бы помочь мне, я был бы очень счастлив!