人脸年龄识别

人脸识别背景

现今生活中主要采用号码、磁卡、口令等识别方法,这些都存在着易丢失、易伪造、易遗忘等诸多问题。随着技术的不断发展,传统的身份识别方法已经受到越来越多的挑战,可靠性大为降低,势必出现新的信息识别和检测技术。人们逐渐的把目光转向了生物体征,这些都是人类遗传的DNA所决定的,并且每个人都拥有自己独一无二的生物体征。生物识别技术大致可以分为两大类,一类是物体体征,例如指纹、虹膜、人脸、体味等。另一类是行为体征,例如书写、步频、惯性动作等,这些都可以通过现在的计算机图像处理技术进行识别。与其他人类的生理特征相比,人脸存在易采集、非接触、静态等优点,比较容易被大众所接受。 据调查,人与人接触时,90%的人是通过观察一个人的脸部特征来了解对方,获取对方的基本信息,这就是所谓的第一印象。虽然外部条件例如年龄、表情、光照等发生巨大变化,是一个人的面部特征发生巨大变化,但是人类仍然可以识别,这一现象说明人的脸部存有大量特征信息,通过提出人脸部的特征信息,就可以判断一个人。

人脸识别研究概况

2014年是我国人脸识别技术的转折点,使人脸识别技术从理论走向了应用,2018年则是人脸识别技术全面应用的重要节点,"刷脸"时代正式到来。
目前,从我国人脸识别技术应用来看,主要集中在三大领域:考勤门禁、安防以及金融。从具体应用来看,主要包含了公共安全领域的刑侦追逃、罪犯识别以及边防安全等;信息安全领域的政府职能领域的电子政务、户籍管理、社会福利和保险;商业企业领域的电子商务、电子货币和支付、考勤、市场营销;场所进出领域的军事机要部门、金融机构的门禁控制和进出管理等。

人脸识别算法分类

整体来看,人脸识别算法分为三类:

  1. 人脸检测(Face Detection) ,重点处理人脸定位问题,定位图像中的人脸;
  2. 人脸对齐(Face Alignment) ,重点处理人脸变换问题,得到同一角度与姿态的人脸;
  3. 人脸特征表征(Feature Representation) ,重点对人脸细节进行识别和处理,比如本文的人脸年龄检测;

人脸识别的意义

人脸识别的目标是确定一张人脸图像的身份,这是机器学习和模式识别中的分类问题。它不但可以用在身份识别和身份验证中,帮助找寻失踪人口、追踪嫌疑人、智能交互身份识别等场景;而且在证件查询、出入考勤查验、身份验证解锁、支付等场景中,也有广泛的应用,并为我们的生活带来极大的便利。

一张有趣的人脸年龄识别结果图

在这里插入图片描述
究竟是什么,让原本只有一岁之差的两个人被 AI 误会为「形同父子」?是 AI 的「良知泯灭」,还是人类的「自食其果」?

本文目的

通过训练模型推测人脸年龄

数据集

1到70岁人脸面部图像,数量不等
数据集下载地址: https://static.leiphone.com/face_age_dataset.zip.gz.
代码下载地址:https://www.leiphone.com/uploads/new/aihub/matchCode/zip/5e539045aa017.zip

dataloader.py

from PIL import Image
from torch.utils.data.dataset import Dataset
from torchvision import transforms

#定义人脸数据集类
class FADataset(Dataset):
    def __init__(self, filelist, isTrain=False):
       	self.images = [item.strip().split(' ')[0] for item in open(filelist, 'r').readlines()]
        self.labels = [int(item.strip().split(' ')[1]) for item in open(filelist, 'r').readlines()]
	#对训练集进行水平翻转及规范化操作
        if isTrain:
            self.transform = transforms.Compose([
                    transforms.RandomHorizontalFlip(),
                    transforms.ToTensor(),
                    transforms.Normalize(mean=[0.5], std=[0.5]),
                ]) 
    #对测试集不需要数据增强操作
        else:
            self.transform = transforms.Compose([
                    transforms.ToTensor(),
                    transforms.Normalize(mean=[0.5], std=[0.5]),
                ])                       
	#返回数据集中图片的个数
    def __len__(self):
        return len(self.images)
        
	#读取图片文件,返回其label
    def __getitem__(self, index):
        # image = Image.open(self.images[index])
        image = Image.open(self.images[index]).convert('L')
        img = self.transform(image)
        label = self.labels[index]
        
        return img, label

generate_train_val_file.py

import os 
#定义训练集路径并列出文件列表
root = '../../data/train/'
A = os.listdir(root)
#为训练集图片加上label
for item in A:
        if len(item) != 3:
                continue
        flag = 0
        
  • 5
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值