在本教程中,您将学习如何使用OpenCV,深度学习和Python执行年龄的自动识别/预测。
学完本教程后,您将能够以相当高的精确度去自动预测静态图像文件和实时视频中的人物年龄。
要了解如何使用OpenCV和深度学习进行年龄识别,请继续阅读!
用OpenCV和深度学习进行年龄识别
在本教程的第一部分中,您将学习年龄识别,这包括从图片或视频中自动预测人的年龄需要的步骤(以及为什么应该将年龄识别当做分类问题而不是回归问题)。
下面,我们将介绍这个基于深度学习的年龄识别模型,然后学习如何使用这两种模型:
1.静态图像中的年龄识别
2.实时视频中的年龄识别
然后,我们将分析我们所做的年龄预测工作的结果。
什么是年龄识别?
图1:在本教程中,我们使用OpenCV和预先训练的深度学习模型来预测给定人脸的年龄。
(图片来源:https://www.researchgate.net/publication/336955775_Age_Estimation_in_Make-up_Cosmetics_Using_Color_and_Depth_Images)。
年龄识别是仅用人脸的照片去自动识别其年龄的过程
通常,您会看到年龄识别可分为两个阶段进行实现:
1.阶段1:检测输入图像/视频中的人脸
2.阶段2:提取人的面部(感兴趣区域,ROI),并通过年龄检测器的算法去预测人物的年龄
对于阶段1,能够为图片中的人脸生成边框的人脸检测器都是可用的,这些检测器包括但不限于Haar cascades,HOG+线性SVM,单杆检测器(SSD)等。
使用哪种人脸检测器取决于您的项目:
·Haar cascades速度很快,并且能够在嵌入式设备上实时运行,存在的问题是它们的准确度较低并且极易出现假阳性检测。
·HOG+线性SVM模型比Haar cascades更精确,但速度较慢。它们对遮挡(即部分面部可见)或视角变化(即面部的不同视图)的容错性也较低。
·基于深度学习的人脸检测器功能最为强大,它提供了最高的准确度,但比Haar cascades和HOG+线性SVM需要更多的计算资源。
在为您的应用选择人脸检测器时,请花点时间考虑您的项目需求——速度或准确性,哪个对您更加重要?我还建议对每个面部检测器进行一些试验,以便让这些结果来指导您做决定。
一旦您的面部检测器在图像/视频中生成了人脸的边界框坐标,您就可以进入第2阶段——识别人的年龄。
确定了脸部的边界框坐标(x,y)后,您首先提取面部ROI,而忽略图像(帧)的其余部分。这样做可以使年龄检测器仅将注意力放在人脸上,而不是图像中其他不相关的“噪点”。
然后将面部ROI传递给模型,从而得到实际的年龄预测。
年龄检测器的算法有很多,但是最受欢迎的是基于深度学习的年龄检测器——在本教程中,我们将使用这种基于深度学习的年龄检测器。
我们基于深度学习的年龄检测器模型
图2:用深度学习进行年龄识别是一个活跃的研究领域。在本教程中,我们使用由Levi和Hassner在其2015年论文中构建和训练的模型(图像来源https://talhassner.github.io/home/projects/cnn_agegender/CVPR2015_CNN_AgeGenderEstimation.pdf)。
我们在这里使用的深度学习年龄检测器模型是Levi和Hassner在其2015年发表的《使用卷积神经网络进行年龄和性别分类》(https://talhassner.github.io/home/publication/2015_CVPR)中构建和训练的。
在这篇论文里,作者提出了一个类似AlexNet的简单体系,该体系总共学习了8个年龄段:
1 0-2
2 4-6
3 8-12
4 15-20
5 25-32
6 38-43
7 48-53
8 60-100
您可能会注意到这些年龄段是不连续的——这是有意而为的,因为用于训练模型的Adience数据集(https://talhassner.github.io/home/projects/Adience/Adience-data.html#agegender)定义了年龄段(我们将在下一节中介绍为什么这样做)。
在这篇文章中,我们将使用预先训练的年龄检测器模型。但是如果您有兴趣学习如何从头开始训练它,请务必阅读《用Python进行计算机视觉深度学习》(https://www.pyimagesearch.com/deep-learning-computer-vision-python-book/),在那里我将向您展示如何训练。
我们为什么不将年龄预测看做回归问题?