Машинное обучение подход к распознаванию лиц - PullRequest
0 голосов
/ 17 ноября 2018

Прежде всего, я очень новичок в этой области.может быть, мой вопрос слишком наивен, даже тривиален ..

В настоящее время я пытаюсь понять, как мне узнать о разных лицах.Вот что я пробовал до сих пор и основные проблемы с каждым подходом:

1) Каскад Хаара -> HOG -> SVM: Основная проблема заключается в том, что алгоритм становится очень нерешительным, когда обучается более 4 человек.... то же самое происходит, когда мы меняем каскад Хаара на предварительно обученный CNN для обнаружения лиц ..

2) dlib ориентиры на лицах -> расстояние между точками -> SVM или простая классификация нейронных сетей: это текущий подходи он ведет себя очень хорошо, когда обучается 4 человека ... когда обучается больше людей, он становится очень грязным, перепрыгивая с решения на решение и никогда не решаясь на выбор.

Я читал в Интернете, что потеря Тройкипуть ... но я очень смущен тем, как id идет о его реализации ... могу ли я использовать текущие векторы расстояния, найденные с помощью Dlib, или я должен отказаться от всего и обучить свой собственный CNN?

Если я могуиспользовать векторы расстояния, как я передам данные в алгоритм?Потеря Триплета является тривиальной нейронной сетью только с измененной функцией потерь?

Я позволил себе точно показать, как вычисляются векторы расстояния:

The green lines represent the distances being calculated

Зеленые линии представляют расстояниявычисляется Возвращается список с плавающей точкой 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)

Я думаю, что это более теоретический вопросчем что-либо еще .. если бы кто-то с хорошим опытом в этой области мог бы помочь мне, я был бы очень счастлив!

...