
1.年龄检测

论文地址:《Age and Gender Classification using Convolutional Neural Networks》
论文作者提出了一个简单的类似AlexNet的网络结构,该网络总共学习了8个年龄段:
- 0-2
- 4-6
- 8-12
- 15-20
- 25-32
- 38-43
- 48-53
- 60-100
注意:这些年龄段不是连续的
首先,要搞懂检测年龄适合用回归还是用分类来做
举个栗子:
1. 回归

2. 分类

年龄预测是基于面部外观,有的人保养的好,显得年轻,实际年龄与测得会有差别。在不结合其它有关信息作推断情况下,网络模型很难预测到实际的真实年龄。若看作是回归问题,模型很难预测到图像中年龄的一个准确值,而看作是分类问题,预测一个年龄段相对来说模型更容易训练,比回归产生更高的准确性。
2.思路方法
自动识别年龄步骤:
1. 检测出输入图像或视频中的人脸
2. 提取面部感兴趣区域(ROI)
3. 用年龄检测器预测人物的年龄
4. 返回结果
对于检测人脸的分类器:
| 分类器 | 优缺点 |
|---|---|
| Haar级联 | 速度快,嵌入式设备上运行,但准确性低 |
| HOG +线性SVM | 相比Haar级联精确,但速度慢,对遮挡,面部角度变化时检测效果不好 |
| 深度学习检测器 | 相比以上两者效果最佳,但需消耗更多计算资源 |
3.代码实现
环境:
- win10
- pycharm
- anaconda3
- python3.7
- opencv4.2.0
对于OpenCV尽量用最新版本,可参考这篇仅一个命令行简单快速安装:https://blog.csdn.net/y459541195/article/details/104851892
文件结构:

3.1 单张图像检测代码
import numpy as np
import cv2
"""
#图片年龄预测
执行:
python test_age.py
"""
# 检测年龄段
AGE_LIST = ["(0-2)","(4-6)","(8-12)","(15-20)","(25-32)","(38-43)","(48-53)","(60-100)"]
# 人脸检测模型路径
prototxtPathF ="./models/face_detector/face_deploy.prototxt"
weightsPathF = "./models/face_detector/res10_300x300_ssd_iter_140000.caffemodel"
# 加载人脸模型
faceNet = cv2.dnn.readNet(prototxtPathF,weightsPathF)
# 年龄检测模型
prototxtPathA ="./models/age_detector/age_deploy.prototxt"
weightsPathA = "./models/age_detector/age_net.caffemodel"
#加载模型
ageNet = cv2.dnn.readNet(prototxtPathA,weightsPathA)
#获取图像
image = cv2.imread("./input/test01.jpg")
src = image.copy()
(h,w)= image.shape[:2]
# 构造blob
blob = cv2.dnn.blobFromImage(image,1.0,(300,300),
(104,177,123))
# 送入网络计算
faceNet.setInput(blob)
detect = faceNet.forward()
# 检测
for i in range(0,detect

最低0.47元/天 解锁文章
1695

被折叠的 条评论
为什么被折叠?



