机器学习的面部识别方法

时间:2018-11-17 17:38:02

标签: machine-learning neural-network classification face-detection facial-identification

首先,我是该领域的新手。也许我的问题过于琐碎,甚至太天真了。

我目前正在尝试了解如何识别不同的面孔。 这是到目前为止我尝试过的方法,以及每种方法的主要问题:

1)Haar级联-> HOG-> SVM:   主要问题是,当训练了4个以上的人时,该算法变得犹豫不决。当我们将Haar Cascade更改为预先训练的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)

我认为这是一个比任何其他问题都更具理论性的问题..如果在该领域具有丰富经验的人可以帮助我,我将非常高兴!

0 个答案:

没有答案