【问题标题】:CNN for recognizing five different faces用于识别五张不同面孔的 CNN
【发布时间】:2016-07-17 01:33:44
【问题描述】:

我有一个要让我的 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 x 800 的通道中拍摄照片(在 5 人的 google 上找到的头像),其中包含 64 个特征图、池化和另一组特征图 然后连接到一个 mlp 用于分类为 5 个输出神经元的二进制向量。我的问题是,这是尝试对某些人的头像进行分类的一种不错的方法吗? 例如,如果我要下载某个人的 100 张照片并将它们放入这个模型中,卷积中创建的特征空间是否足够大以捕获 那张脸和其他四个人的特征? 谢谢大家的帮助

【问题讨论】:

    标签: neural-network keras lasagne


    【解决方案1】:

    嗯,这不是一个工程问题,而是一个科学问题。在不显示当前进度的情况下很难判断 100 张图片是否足以满足您的目的(例如,现在的准确度是多少?您面临的是过拟合还是欠拟合。

    但是,是的,额外的人脸数据可以帮助您的模型,尤其是当这些人脸与您的最终测试数据具有相同的上下文(背景、光线、角度、肤色等)时.

    如果你对人脸识别感兴趣,可以从Deep Learning Face Representation from Predicting 10,000 Classes(非官方code here)开始,他们使用10000张人脸作为额外的数据集进行训练。您可以搜索“DeepID”了解更多信息。

    如果你是工程人员,可以查看Facial Expression Recognition with Convolutional Neural Networks,本报告更侧重于实现,Keras 也实现了。

    到那时,800*800 在人脸识别社区中是超大的。您可能希望将它们调整为更小的尺寸。否则你的程序可能太庞大而无法训练并消耗大量内存。

    【讨论】:

    • 谢谢谢谢,我会接受这个,当然我可以随时调整大小并添加更多面孔,但是您认为五张面孔的网络架构可以吗?如在 2dconv 中使用 64 个过滤器等
    • 很高兴能为您提供帮助。你的网络是标准的,但我不能保证它的性能。老实说,神经网络的最优结构仍然是一个谜。所以我们能做的就是耐心做实验,多参考以前的作品。从这个角度来看,您的网络是标准的。
    • 谢谢,范,我主要关心的是即使我有头像,它也会有一些背景空间,下一个工作会解决这个问题还是我需要提供输入图像只有脸,其他什么都没有?
    • 几乎所有原始图片都有背景或不相关的边距,因此我们首先将使用“人脸检测器”从图片中裁剪人脸。但这是另一项工作。您的网络应该可以处理这些裁剪的面孔。
    • van 例如这些图片会很好,即使实际的脸只是图片的一小部分? google.co.uk/…
    【解决方案2】:

    人脸识别不是常规的分类研究。如果你为 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。

    【讨论】:

      猜你喜欢
      • 2017-11-23
      • 1970-01-01
      • 1970-01-01
      • 2016-07-15
      • 2014-02-10
      • 2020-12-13
      • 1970-01-01
      • 2018-11-13
      • 1970-01-01
      相关资源
      最近更新 更多