我有一个面向五个人的面部识别项目,我希望CNN能够检测到这个项目,我想知道人们是否可以查看我的模型,看看这是否是朝着正确方向迈出的一步
def model():
model= Sequential()
# sort out the input layer later
model.add(convolutional.Convolution2D(64,3,3, activation='relu'), input_shape=(3,800,800))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(convolutional.Convolution2D(64,3,3, activation='relu'))
model.add(convolutional.MaxPooling2D((2,2), strides=(2,2)))
flatten()
model.add(Dense(128, activation='relu'))
model.add(Dropout(p=0.2))
model.add(Dense(number_of_faces, activation='softmax'))
因此该模型将在3个800×800的通道中拍摄图片(5人谷歌上的头像),64个特征地图,汇集,然后是另一组特征地图 然后连接到mlp以分类成5个输出神经元的二元载体。我的问题是,这是尝试对某些人的爆头进行分类的好方法吗? 例如,如果我要下载某个人的一百张照片并将它们放入这个模型中,那么在卷积中创建的特征空间是否足以捕获 那张脸和其他四个人的特征? 感谢帮助人员
答案 0 :(得分:1)
嗯,这不是工程问题,而是科学问题。很难判断100张图片是否足以满足您的目的而不显示当前的进度(例如,现在的准确度是多少?您是否面临过度拟合或过度拟合。
但是,是,面部的额外数据可以帮助您的模型,特别是当这些面具有与您的最终测试数据相同的背景(背景,光线,角度,肤色等)时
如果您对面部识别很感兴趣,可以从Deep Learning Face Representation from Predicting 10,000 Classes(非官方code here)开始,他们使用万面作为额外的数据集进行训练。您可以搜索“DeepID”以获取更多信息。
如果您是工程师,可以查看 Facial Expression Recognition with Convolutional Neural Networks ,此报告更多地关注实施,这也是由Keras实施的。
通过这种方式,800 * 800在人脸识别社区中特别大。您可能希望将它们调整为较小的尺寸。否则你的程序可能太庞大,不能训练和消耗记忆。
答案 1 :(得分:0)
人脸识别不是常规的分类研究。如果您要为5个人训练模型,即使这将是一个成功的模型,那么如果有新人加入团队,您也需要重新训练它。这意味着您的新模型可能不再成功。
我们首先训练一个常规分类模型,然后删除其最终的softmax图层,并使用其早期的图层来表示图像。表示是多维向量。在此,我们期望同一个人的图像对应该具有较高的相似度,而不同人的图像对应该具有较低的相似度。我们可以通过余弦相似度或欧氏距离法找到向量相似度。
总而言之,您不应该再为人脸识别应用训练模型。您只需要使用神经网络进行预测即可。预测就是表示。
我建议您使用Deepface。它包装了最新的人脸识别模型,例如VGG-Face,Google FaceNet,OpenFace,Facebook DeepFace,DeepID和Dlib。它还可以在后台处理人脸检测和对齐。您只需要调用一行代码即可应用人脸识别。
#!pip install deepface
from deepface import DeepFace
models = ['VGG-Face', 'Facenet', 'OpenFace', 'DeepFace', 'DeepID', 'Dlib']
obj = DeepFace.verify("img1.jpg", "img2.jpg", model_name = models[0])
print(obj["verified"], ", ", obj["distance"])
返回的对象存储最大阈值和找到的距离。这样,如果图像对是同一个人,则在验证参数中返回True,如果图像对是不同个人,则返回False。