基于VGGFace2的人脸性别年龄检测系统(源码&教程)

1.研究背景

计算机视觉作为计算机学科的一大分支,在近些年的发展十分迅速。图像识别也从最开始进行简单的数字和形状识别发展到了现在对各种复杂物体的识别。其中我们最熟悉的便是计算机对于人脸的识别,近些年大数据和深度学习网络的高速发展,给人脸的识别提供了极佳的发展环境,加上越来越多的开源数据库的成立,对于人脸识别的研究在近几年达到高潮。
人脸年龄识别是人脸识别问题的一个子集,人脸的年龄估计有比较广泛的应用范围,人脸是一个随时间变化的属性,年龄的变化可能会给常规的人脸识别带来误差,增加人脸识别的误识率,这种情况就可以根据年龄估计系统快速对人脸属性进行年龄归类,然后对系统中储存的图像进行年龄修正,允许部分脸部特征的匹配,从而减小年龄的变化对人脸识别的影响。除了图像的跨年龄识别外,图像识别还能应用在人员的快速筛查系统当中,在有大量人员的图像或者视频当中如果想要对人群进行年龄分类的话,如果对所有人的面部特征进行逐一搜索识别然后提取属性信息的话会花费大量的时间代价。如果仅仅对每个人的面部特征进行提取并进行年龄估计的话,便能很快地将人群按年龄分类。

2.识别图片

3.视频演示

基于VGGFace2的人脸性别年龄检测系统(源码&教程)_哔哩哔哩_bilibili

4.VGGFace简介

主要思想

目标:构建最少的人为干预大规模人脸数据集,使训练的卷积神经网络进行人脸识别,可以与谷歌和Facebook等互联网巨头竞争。并不是用FaceNet那种端到端系统。
人脸分类器:VGGNet+Softmax loss,输出2622个类别概率
三元组学习人脸嵌入:VGGNet+Triplet loss,输出1024维的人脸表示
在人脸分类器基础上,用目标数据集只fine-tuning学习了映射层
人脸验证:通过比较两个人脸嵌入的欧式距离来验证同种人。
构建新的人脸数据集:2622个人,每人1000张,共260万个人脸。
在LFW上的准确率为98.95%,YTF上准确率是97.3%

VGGNet网络架构

参考该博客提出的改进后的VGGNet网络比较深,基本和VGGNet一样,又改进了:
1.3x3卷积核,卷积步长为1
2.ReLU激活
3.有3个全连接层
4.没有用local contrast normalization

人脸分类器

1.使用如下VGGNet,训练一个n=2622路的Softmax loss人脸分类器。使用随机高斯初始化,随机梯度下降(批量较大时用Accumulator Descent),Batch Size=256
2.学习完成后,去除分类器层(W,b),利用欧氏距离比较得分向量,进行人脸识别验证。
3.然而,我们而是通过使用“三元组损失”训练方案对它们进行调优,以便在欧几里德空间中进行验证,可以显著提高分数,下一节将对此进行说明。为了获得良好的整体性能,必须将网络引导为分类器。
基于VGGFace2的人脸性别年龄检测系统(源码&教程)_第1张图片

三元组学习人脸嵌入

1.三元组损失训练的目的是学习在最终应用中表现良好的分数向量,即通过比较欧几里德空间中的人脸描述符来验证身份。这在本质上类似于“度量学习(metric learning)”,并且像许多度量学习方法一样,它用于学习同时具有独特性和紧凑性的映射,同时实现降维。
2.在进行验证时,分类器在最后一层FC层输出了2622维的特征(即对应每一类的概率),而这里还会被用来以Triplet loss做一个度量学习。度量学习是一个全连接层,使用目标数据集(如LFW和YTF)的训练集部分训练映射函数W’,获得1024维的人脸特征表达(人脸嵌入)。(基于神经网络的人脸验证)
3.同样的网络输入为大小为224×224的人脸图像,后面前两个FC层的输出是4096维的,最后一个FC层后的输出是N=2622维或L=1024维,这取决于用于优化的损失函数是Softmax还是Triplet loss。
注意,与前一节不同的是,这里没有学习到任何偏差,因为三元组损失函数中的差异会抵消它

5.人脸验证

通过比较两个1024维人脸特征的欧式距离是否小于阈值来验证
8.png

6.VGGFace2人脸年龄数据集

基于VGGFace2的人脸性别年龄检测系统(源码&教程)_第2张图片

你可能感兴趣的:(python,计算机视觉)