使用少量样本进行人脸识别

时间:2014-01-15 21:42:12

标签: opencv machine-learning computer-vision face-recognition

有人可以建议我建立有效的面部分类器,可以分类许多不同的面孔(~1000)吗?

我每张脸只有1-5个例子

我知道opencv face分类器,但它对我的任务很糟糕(许多类,一些样本)。 对于具有少量样本的一个面部分类,它可以正常工作。但我认为1k单独的分类器不是好主意

我读了一些关于人脸识别的文章,但这些文章中的方法重新考虑了每个班级的大量样本

PS对不起我的写作错误。英语不是我的母语。

3 个答案:

答案 0 :(得分:9)

实际上,为了给您一个正确的答案,我很乐意了解您的任务和数据的一些细节。人脸识别是一个非常重要的问题,并且没有针对各种图像采集的通用解决方案。

首先,您应该定义样本和测试集中有多少变异来源(冒充,情绪,光照,遮挡或延时)。然后你应该选择一个合适的算法,更重要的是,根据类型预处理步骤。

如果您没有任何重大变化,那么最好考虑将Discrete Orthogonal Moments中的一个作为特征提取方法的小训练集。他们具有非常强大的能力来提取没有冗余的功能。其中一些(Hahn,Racah时刻)也可以在两种模式下工作 - 局部和全局特征提取。这个主题相对较新,关于它的文章仍然很少。虽然,它们被认为是图像识别中非常强大的工具。它们可以通过使用递归关系近乎实时地计算。有关详细信息,请查看herehere

如果个人的姿势发生显着变化,您可以尝试按Active Appearance Model首先执行姿势修正。

如果有很多遮挡物(眼镜,帽子),那么使用其中一个local feature extractors可能有所帮助。

如果列车和探测图像之间存在显着的时间间隔,则面部的局部特征可能会随着年龄而变化,那么尝试使用graphs for face representation之一的算法是一个很好的选择。面部拓扑。

我认为上述内容不是在OpenCV中实现的,但对于其中一些内容,您可以找到MATLAB implementation

我也不是母语人士,对语法很抱歉

答案 1 :(得分:2)

遇到您的问题,它的方式非常独特。正如您说的,每个班级只有很少的图像,我们训练的模型应该具有令人敬畏的体系结构,可以在图像本身内创建更好的功能,或者应该有其他方法可以实现此任务。  到目前为止,我有四件事可以分享:

  • 进行数据预处理,然后创建更大的数据集并理想地在神经网络上进行训练。在这里,我们可以像这样进行预处理:                              -图像旋转                              -图像剪切                              -图像缩放                              -图像模糊                              -图像拉伸                              -图片翻译 并每个课程创建至少200张图像。请查阅opencv文档,该文档提供了更多有关如何增加数据集大小的方法。完成此操作后,我们可以应用转移学习,这比从头开始训练神经网络是一种更好的方法。

转移学习是一种在我们自己的自定义类上训练网络的方法,并且该网络已经在1000多个类上进行了预训练。由于此处的数据非常少,我只希望转移学习。我写了一个博客,内容涉及所需的数据量后,如何使用转移学习来实现这一目标。它已链接here。人脸识别本身也是一个分类任务,每个人都是一个单独的类。因此,请按照博客中给出的说明进行操作,可能会帮助您创建自己的强大分类器。

  • 另一个建议是,在创建数据集之后,对其进行正确编码。此编码将帮助您保留图像中的功能,并可以帮助您训练更好的网络。 VLADFisherBag of Words是很少的编码技术。您可以在线搜索一些已经在ORL数据库中实现了这些存储库的存储库。编码后,对网络进行编码训练,显然可以看到更好的性能。
  • 即使确实结帐了 Siamese 网络here,我也感觉要这样做。在这里,他们比较了两个在不同网络上具有相似特征的图像,从而获得了更好的分类精度。 Git存储库为here
  • 另一种标准方法是使用SVM(随机森林),因为数据较少。如果您仍然喜欢神经网络,上述方法将为您服务。如果您打算使用编码,那么我建议您使用随机森林,因为它在学习和灵活性方面都非常可取。

希望这个答案将帮助您朝着实现目标的正确方向前进。

答案 2 :(得分:1)

您可能想看看 OpenFace ,它是使用深度神经网络的人脸识别的Python和Torch实现:https://cmusatyalab.github.io/openface/