下面各张图片大概年龄是多大?

在本教程中,您将学习如何使用OpenCV,深度学习和Python执行年龄的自动识别/预测。

学完本教程后,您将能够以相当高的精确度去自动预测静态图像文件和实时视频中的人物年龄。

要了解如何使用OpenCV和深度学习进行年龄识别,请继续阅读!

用OpenCV和深度学习进行年龄识别

在本教程的第一部分中,您将学习年龄识别,这包括从图片或视频中自动预测人的年龄需要的步骤(以及为什么应该将年龄识别当做分类问题而不是回归问题)。

下面,我们将介绍这个基于深度学习的年龄识别模型,然后学习如何使用这两种模型:

年龄识别是仅用人脸的照片去自动识别其年龄的过程

通常,您会看到年龄识别可分为两个阶段进行实现:

我们为什么不将年龄预测看做回归问题?

图3:用深度学习进行年龄预测可以被归类为回归或分类问题。

您会在上面注意到,我们将年龄离散化为“不同的区间”,从而将年龄预测作为分类问题——为什么不将它看做回归问题(我们在房价预测教程中所使用的方法://keras-regression-and-cnns/)?

从技术上讲,没有理由不能将年龄预测看做回归任务。甚至有一些模型可以通过回归来实现。

问题在于年龄预测本质上是主观的,并且仅基于容貌。

一个五十多岁的人一生中从未吸烟,出门总是擦防晒霜,而且每天都要护理皮肤。而一个三十多岁的人一天要抽很多烟,不擦防晒霜去从事体力劳动,并且没有适当的皮肤护理。这个五十岁的人很可能看起来比这个三十岁的人年轻。

而且不要忘记基因是衰老最重要的驱动因素——有些人就是比其他人衰老得慢。

图4:许多名人和行业领袖努力使自己看起来更年轻。这对使用OpenCV深度学习进行年龄检测提出了挑战。

除非您事先了解了关于这些演员的情况,否则我不会相信。

但另一方面,您能猜到这些演员在48-53岁吗?

我愿意打赌您可能有这个能力。

虽然人类天生不擅长预测年龄的准确值,但我们实际上在预测年龄段方面还是不错的。

当然,上面是一个示例。

Jennifer Aniston的基因近乎完美,再加上有非常优秀的整形外科医生,她似乎青春不老。

但这印证了我的观点——人们有意掩饰自己的年龄。

而且,如果人类准确地预测一个人的年龄很困难的话,那么机器肯定也会同样困难。

一旦你将年龄预测看做回归问题,那么对于一个模型,要准确预测人的图像中的年龄值是极困难的。

但是,如果您将其视为分类问题,为模型定义了年龄段,那么我们的年龄预测模型将更容易训练,通常会比基于回归的预测提供更高的准确性。

简而言之:将年龄预测看做分类问题可以极大地“缓解”问题,使其更容易解决——通常我们不需要一个人的确切年龄;粗略的估计就足够了。

请确保从本文的“下载”部分中获取代码,模型和图片。提取文件后,您的项目将如下所示:

前两个目录由年龄预测器和面部检测器组成。这两个深度学习模型都基于Caffe。

我提供了三张用于年龄预测的测试图片;您也可以添加自己的图片。

在本教程的其余部分,我们将讨论这两个Python脚本:

此外,我们需要导入Python内置的os模块,它可以添加模型所需的路径。

我们的脚本需要四个命令行参数:

·--图片:提供为年龄检测输入图像的路径

·--人脸:为预先训练的面部检测器模型提供路径

·--年龄:预先训练的年龄探测器模型

·--置信度:最小概率阈值,以便筛除低置信检测

如上所述,我们的年龄检测器是一种分类器,可以根据预定义的年龄分段,通过人的面部ROI预测这个人的年龄——我们不会将其视为回归问题。现在让我们定义这些年龄段的bucket:

我们的年龄是在预先训练好的年龄检测器的bucket(即类别标签)中定义的。我们将使用此列表和相关的索引来获取年龄段,从而在输出的图像上进行注释。

完成了导入,命令行参数和年龄段的设置,我们现在就可以加载两个预先训练的模型:

在这里,我们加载两个模型:

·我们的人脸检测器可以找到并定位图片中的人脸(第25-28行)

·年龄分类器确定特定面孔所属的年龄范围(第32-34行)

现在我们已经完成了所有初始化,让我们从磁盘加载图像并检测面部ROI:

为了检测图片中的人脸,我们通过CNN传送blob,得到了detections的列表。现在让我们循环面部ROI的检测:

当我们循环detections时,我们清除了低置信度的面部(第51-55行)。

对于满足了最低置信度标准的面部,我们提取它们的ROI坐标(第58-63行)。现在,我们在仅包含单个面部的图像中有了小小收获。我们在第64-66行根据此ROI创建一个blob(即faceBlob)。

现在,我们将进行年龄识别:

我们使用face blob进行年龄预测(第70-74行),从而得出年龄段和年龄的置信度。我们使用这些数据点以及面部ROI的坐标来注释最初输入的图片(第77-86行)并显示结果(第89和90行)。

在下一部分中,我们将分析结果。

OpenCV的年龄识别结果

让我们运行OpenCV年龄检测器。

首先,从本教程的“下载”部分下载源代码,预先训练的年龄检测器模型及示例图像。

从那里打开一个终端,然后执行以下命令:

图5:在我30岁时的照片中,该OpenCV年龄检测器正确识别了我的年龄。

人脸对齐功能会识别人脸的几何结构,然后尝试使用平移,缩放和旋转获得人脸的规范化。

在许多情况下(但并非总是如此),人脸对齐可以改善面部应用的效果,包括面部识别,年龄预测等。

为简单起见,我们在本教程中没有使用人脸对齐功能,但是您可以按照这个教程(//face-alignment-with-opencv-and-python/)学习有关人脸对齐的更多信息,然后将其应用于自己的年龄预测程序中。

我特意选择不在本教程中介绍性别预测。

使用计算机视觉和深度学习来识别一个人的性别似乎是一个有趣的分类问题,但实际上这是一个道德问题。

某人在视觉上看上去怎样,穿着什么或如何表现,这些都并不意味着他们可能是某种(或其他)性别。

试图将性别划分为两类的软件只会把我们束缚在对于性别的过时观念里。因此,我鼓励您尽可能不要在自己的程序中使用性别识别。

如果必须进行性别识别,请确保对自己负责,并确保您不去创建使他人遵循性别偏见的应用程序(例如根据感知到的性别去定义用户体验)。

性别识别几乎没有价值,而且它引起的问题比它解决的问题还要多。请尽可能避免它。

在本教程中,您学习了如何使用OpenCV通过深度学习进行年龄识别。

为此,我们利用了Levi和Hassner在2015年出版的《使用卷积神经网络进行年龄和性别分类》中的预训练模型。该模型使我们能够以相当高的准确度去预测八个不同的年龄段;但是,我们必须认识到年龄预测是一个很有挑战性的问题。

有很多因素可以决定一个人的视觉年龄,包括他们的生活方式,工作,吸烟习惯,最重要的是基因。其次,请记住,人们试图掩饰自己的年龄——如果人类准确地预测某人的年龄有困难的话,那么机器学习模型同样会有困难。

因此,您必须根据感知年龄(而非实际年龄)去评估所有的年龄预测结果。在您自己的计算机视觉项目中进行年龄识别时,请记住这一点。

}

我要回帖

更多关于 一个人的年龄变化照片 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信