1.年龄检测


论文地址:《Age and Gender Classification using Convolutional Neural Networks》
论文作者提出了一个简单的类似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

注意:这些年龄段不是连续的
首先,要搞懂检测年龄适合用回归还是用分类来做
举个栗子:

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.shape[2]):confidence = detect[0,0,i,2]# 过滤掉小的置信度,计算坐标,提取面部roi,构造面部blob特征if confidence > 0.5:box = detect[0,0,i,3:7]*np.array([w,h,w,h])(startX,startY,endX,endY) = box.astype("int")face = image[startY:endY,startX:endX]faceBlob = cv2.dnn.blobFromImage(face, 1.0, (227, 227),(78.4263377603, 87.7689143744, 114.895847746),swapRB=False)# 预测年龄ageNet.setInput(faceBlob)predictions = ageNet.forward()i = predictions[0].argmax()age = AGE_LIST[i]ageConfidence = predictions[0][i]#显示打印text = "age{}:{:.2f}%".format(age,ageConfidence*100)print(text)#绘制显示框y = startY - 10 if startY - 10 > 10 else startY + 10cv2.rectangle(image, (startX, startY), (endX, endY),(0, 0, 255), 2)cv2.putText(image, text, (startX, y),cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 0, 255), 2)cv2.imshow("Result",image)
cv2.waitKey(0)

3.2 视频流检测代码

import numpy as np
import cv2
import imutils"""
#视频流年龄预测
执行:
python test_video_age.py
"""
def detect_age(frame,faceNet,ageNet,minConfidence=0.5):# 检测年龄段AGE_LIST = ["(0-2)","(4-6)","(8-12)","(15-20)","(25-32)","(38-43)","(48-53)","(60-100)"]#定义空列表存放结果results = [](h,w)= frame.shape[:2]# 构造blobblob = cv2.dnn.blobFromImage(frame,1.0,(300,300),(104,177,123))# 送入网络计算faceNet.setInput(blob)detect = faceNet.forward()# 检测for i in range(0,detect.shape[2]):confidence = detect[0,0,i,2]# 过滤掉小的置信度,计算坐标,提取面部roi,if confidence > minConfidence:box = detect[0,0,i,3:7]*np.array([w,h,w,h])(startX,startY,endX,endY) = box.astype("int")face = frame[startY:endY,startX:endX]# 过滤干扰if face.shape[0]<20 or face.shape[1]<20:continue# 构造面部blob特faceBlob = cv2.dnn.blobFromImage(face, 1.0, (227, 227),(78.4263377603, 87.7689143744, 114.895847746),swapRB=False)# 预测年龄ageNet.setInput(faceBlob)predictions = ageNet.forward()i = predictions[0].argmax()age = AGE_LIST[i]ageConfidence = predictions[0][i]# 构造字典存放结果dicts = {"location":(startX,startY,endX,endY),"age":(age,ageConfidence)}results.append(dicts)return results# 人脸检测模型路径
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)#获取视频图像
videoPath = "./input/test1.mp4"
vs = cv2.VideoCapture(videoPath)#处理视频流
while True:(grabbed,frame) = vs.read()# 判断是否结束if not grabbed:print("无视频读取...")breakframe = imutils.resize(frame,width=720)#调用上面函数计算results = detect_age(frame,faceNet,ageNet,minConfidence=0.5)for  i in results:#显示信息text = "age{}:{:.2f}%".format(i["age"][0], i["age"][1] * 100)(startX,startY,endX,endY) = i["location"]# 绘制显示框y = startY - 10 if startY - 10 > 10 else startY + 10cv2.rectangle(frame, (startX, startY), (endX, endY),(0, 0, 255), 2)cv2.putText(frame, text, (startX, y),cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 0, 255), 2)# 显示cv2.imshow("Result", frame)key = cv2.waitKey(1) & 0xFF# 按q键退出循环if key == ord("q"):break
cv2.destroyAllWindows()
vs.release()

4.测试结果

4.1 单张图像测试

虚拟环境下命令行输入:

python test_age.py

效果一:

效果二:

效果三:

4.2 视频流检测

深度学习之年龄检测

视频地址: https://www.bilibili.com/video/BV16g4y187iQ/

Reference:
1.https://talhassner.github.io/home/publication/2015_CVPR
2.https://github.com/dpressel/rude-carnie
3.https://github.com/GilLevi/AgeGenderDeepLearning

深度学习之人物年龄预测相关推荐

  1. 2018 年,关于深度学习的 10 个预测

    我有一种预感:2018年,所有的事情都会发生巨变.我们在2017年看到的深度学习取得的惊人突破将会以一种强大的方式延续到2018年.2017年在深度学习领域的研究成果将会应用于日常的软件应用中. 下面 ...

  2. 基于深度学习的驾驶行为预测方法

    基于深度学习的驾驶行为预测方法 1 概述 2 深度学习算法 3 驾驶行为预测建模 4 结论 5 参考文献 6 python LSTM程序 7 python LSTM模型调用 1 概述 在汽车前向仿真中 ...

  3. 深度学习:波士顿房价预测

    深度学习:波士顿房价预测 1.代码 #加载波士顿房价数据 import keras from keras.datasets import boston_housing (train_data,trai ...

  4. i6mA-DNC:基于深度学习的二核苷酸表示预测水稻基因组DNA n6 -甲基腺苷位点

    i6mA-DNC:基于深度学习的二核苷酸表示预测水稻基因组DNA n6 -甲基腺苷位点 摘要 一.简介 二.材料和方法 1.基准数据集 2.提出的模型 3.绩效评估 3.1交叉验证 三.结果与讨论 四 ...

  5. 【人工智能项目】深度学习实现白葡萄酒品质预测

    [人工智能项目]深度学习实现白葡萄酒品质预测 任务介绍 评价一款葡萄酒时不外乎从颜色.酸度.甜度.香气.风味等入手,而决定这些就是葡萄酒的挥发酸度.糖分.密度等. 根据给出的白葡萄酒酸度.糖分.PH值 ...

  6. A Deep Learning-Based Remaining Useful Life Prediction Approach for Bearings 基于深度学习的轴承剩余寿命预测

    A Deep Learning-Based Remaining Useful Life Prediction Approach for Bearings 基于深度学习的轴承剩余寿命预测 目录 A De ...

  7. 深度学习决策支持 时空预测_重工业的预测性维护和决策支持系统

    深度学习决策支持 时空预测 Digital transformation is one of the top priorities for industrial companies. The larg ...

  8. 基于深度学习的建筑能耗预测04——能耗建模

    天津城建大学建筑学院18级-数字设计-基于深度学习的建筑能耗预测-2021WS 作者:徐仔 指导老师:万老师.丁老师 带组导师:宋学姐(建筑学专业).卢学长(计算机专业) (转载请注明出处)  基于G ...

  9. 告别RNN,迎来TCN!将深度学习应用于股市预测

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|计算机视觉联盟 本文介绍了 TCN 在股市趋势预测任务中 ...

最新文章

  1. 【大数据】SparkSql 连接查询中的谓词下推处理 (一)
  2. 编程软件python中的if用法-适合Python初学者的一些编程技巧
  3. 微型计算机可避免强磁场干扰,微型计算机测控系统抗干扰技术
  4. python 鸭子类型_Python中的鸭子输入是什么?
  5. rabbitMQ消息中间件五种模式
  6. javascript捕获事件event
  7. offsetLeft,Left,clientLeft的区别
  8. python之gunicorn的配置
  9. mysql事件关闭解决办法
  10. WCF 第五章 行为
  11. 【路径规划】基于matlab粒子群和遗传算法求解机器人栅格地图避障路径规划问题【含Matlab源码 202期】
  12. 免费中文版Adobe Acrobat Reader DC PDF文件阅读软件
  13. 服务号idbase64_微信 unionid 获取 解密数据
  14. 无线打印机服务器安装教程,网络打印服务器怎么安装和使用?
  15. 卸载Windows下驱动并删除sys文件
  16. C++静态库与动态库的区别?
  17. assert()使用
  18. 剪贴板查看器:CopyClip 2 for Mac
  19. 夏日葵电商:开发一个微信商城系统多少钱
  20. SAP MM——采购业务模块流程 创建采购订单基础流程

热门文章

  1. 小程序 U你caughtSyntax Error: Invalid or Unexpected token: 1: 2154
  2. Java游戏-贪吃蛇
  3. 《C语言及程序设计》实践参考——个人所得税计算器if语句版
  4. 爬梯:搭建SVN服务器
  5. PCM音频和音量调节
  6. Win10系统易升如何彻底关闭?【系统天地】
  7. [camera]ISP-黑电平矫正(BLC)
  8. 全民“红包热”现象说明什么
  9. python中not3 2对不对_Python表达式not 326+8的结果为True。
  10. 手机联系人头像包_拉杆箱早过时了,出差浙江才发现“差旅包”正火,方便又有面儿...