有人可以建议我建立有效的面部分类器,可以分类许多不同的面孔(~1000)吗?
我每张脸只有1-5个例子
我知道opencv face分类器,但它对我的任务很糟糕(许多类,一些样本)。 对于具有少量样本的一个面部分类,它可以正常工作。但我认为1k单独的分类器不是好主意
我读了一些关于人脸识别的文章,但这些文章中的方法重新考虑了每个班级的大量样本
PS对不起我的写作错误。英语不是我的母语。
答案 0 :(得分:9)
实际上,为了给您一个正确的答案,我很乐意了解您的任务和数据的一些细节。人脸识别是一个非常重要的问题,并且没有针对各种图像采集的通用解决方案。
首先,您应该定义样本和测试集中有多少变异来源(冒充,情绪,光照,遮挡或延时)。然后你应该选择一个合适的算法,更重要的是,根据类型预处理步骤。
如果您没有任何重大变化,那么最好考虑将Discrete Orthogonal Moments中的一个作为特征提取方法的小训练集。他们具有非常强大的能力来提取没有冗余的功能。其中一些(Hahn,Racah时刻)也可以在两种模式下工作 - 局部和全局特征提取。这个主题相对较新,关于它的文章仍然很少。虽然,它们被认为是图像识别中非常强大的工具。它们可以通过使用递归关系近乎实时地计算。有关详细信息,请查看here和here。
如果个人的姿势发生显着变化,您可以尝试按Active Appearance Model首先执行姿势修正。
如果有很多遮挡物(眼镜,帽子),那么使用其中一个local feature extractors可能有所帮助。
如果列车和探测图像之间存在显着的时间间隔,则面部的局部特征可能会随着年龄而变化,那么尝试使用graphs for face representation之一的算法是一个很好的选择。面部拓扑。
我认为上述内容不是在OpenCV中实现的,但对于其中一些内容,您可以找到MATLAB implementation。
我也不是母语人士,对语法很抱歉
答案 1 :(得分:2)
遇到您的问题,它的方式非常独特。正如您说的,每个班级只有很少的图像,我们训练的模型应该具有令人敬畏的体系结构,可以在图像本身内创建更好的功能,或者应该有其他方法可以实现此任务。 到目前为止,我有四件事可以分享:
转移学习是一种在我们自己的自定义类上训练网络的方法,并且该网络已经在1000多个类上进行了预训练。由于此处的数据非常少,我只希望转移学习。我写了一个博客,内容涉及所需的数据量后,如何使用转移学习来实现这一目标。它已链接here。人脸识别本身也是一个分类任务,每个人都是一个单独的类。因此,请按照博客中给出的说明进行操作,可能会帮助您创建自己的强大分类器。
希望这个答案将帮助您朝着实现目标的正确方向前进。
答案 2 :(得分:1)
您可能想看看 OpenFace ,它是使用深度神经网络的人脸识别的Python和Torch实现:https://cmusatyalab.github.io/openface/