Neural network CNN用于识别五张不同的脸

Neural network CNN用于识别五张不同的脸,neural-network,keras,lasagne,Neural Network,Keras,Lasagne,我有一个关于五人面部识别的项目,我想让我的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(Ma

我有一个关于五人面部识别的项目,我想让我的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个输出神经元。我的问题是,这是一个体面的方法来尝试和分类某些人的头像? 例如,如果我要下载100张某个人的照片,并将它们放入这个模型中,那么在卷积中创建的特征空间是否足够大,可以捕捉到这些照片 那张脸和另外四张脸的特征是什么?
谢谢大家的帮助,这不是工程问题,而是科学问题。在不显示当前进度的情况下,很难判断100张图片是否足以满足您的需要(例如,现在的准确度是多少?您的脸是过度贴合还是欠贴合)

但是,,额外的面数据可以帮助您建立模型,特别是当这些面与最终测试数据具有相同的上下文(背景、灯光、角度、肤色等)时

如果你对人脸识别感兴趣,你可以从(非官方的)开始,他们使用10000张人脸作为额外的数据集进行训练。你可以搜索“DeepID”以获取更多信息

如果你是一个工程人员,你可以检查一下,这份报告更关注于实现,这也是由Keras实现的


顺便说一句,800*800在人脸识别社区中是非常大的。您可能希望将其调整为较小的大小。否则,您的程序可能太庞大,无法训练,并且会消耗大量内存。

人脸识别不是一项常规的分类研究。如果您为5个人训练模型,即使它是一个成功的模型,您也可以如果有新人加入团队,需要重新培训。这意味着你的新模式可能不再成功

我们首先训练一个规则的分类模型,然后去掉它的最后一个softmax层,使用它的早期层来表示图像。表示是多维向量。在这里,我们期望同一个人的图像对应该具有高相似度,而不同人的图像对应该具有低相似度。我们可以找到向量s使用余弦相似或欧几里德距离方法的相似性

总而言之,你不应该再为人脸识别应用训练模型。你只需要使用神经网络来预测。预测将是一种表示

我建议您使用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"])

返回的对象存储最大阈值和找到的距离。这样,如果图像对是同一个人,则在verified param中返回True,如果图像对是不同的人,则返回False。

谢谢,我会考虑这一点,当然我可以随时调整大小和添加更多面,但网络的体系结构是否适合您你认为有五张脸吗?就像在2dconv中有64个过滤器等,可以帮助你。你的网络是标准的,但我不能保证它的性能。老实说,神经网络的最佳结构仍然是一个谜。所以我们可以做的是耐心地做实验,并参考更多以前的作品。从这个角度来看,你的n网络是标准的。谢谢你,范,我主要关心的是,即使我有头像,它也会有一些背景空间,下一个网络会处理这个问题吗,还是我只需要提供脸部的输入图像而不需要其他任何东西?几乎任何原始图片都有背景或不相关的边距,因此我们首先使用“人脸检测器”首先从图片中裁剪出人脸。但这是另一项工作。您的网络应该可以在这些裁剪过的人脸上工作。例如,即使实际的人脸只是图片中很小的一部分,这些图片也可以?