【实战项目】基于MTCNN+ArcFaceLoss的人脸检测识别

详细项目地址:Face-Recognition

一、人脸识别介绍

人脸识别:人脸识别是基于人的脸部特征信息进行身份识别的一种生物识别技术

人脸识别检测原理:串行使用,并行训练

二、人脸检测模型 MTCNN

多任务级联卷积神经网络,进行联合人脸检测对齐

1.三层网络

  • P-Net(12×12)
  • R-Net(24×24)
  • O-Net(48×48)

2.MTCNN好处

  • 广泛性
  • 代表性
  • 关键性

3.MTCNN样本数据

  • 样本选择:CelebA、WiderFace
  • 观察样本
    • 样本数量(基础样本多,生成的样本更具多样性,训练网络参数泛化能力更强)
    • 样本质量(数据是否包含噪声,是否多样化,坐标是否准确,分类是否准确)
  • 生成新样本
    • 思考需要的样本总类
    • 如何生成所需样本

4.样本生成

  • 尺寸:12×12,24×24,48×48

  • 学习参数

    每种尺寸下都做正样本(全人脸)、部分样本(部分人脸)、负样本(非人脸)正、负样本用来训练人脸置信度,正、部分样本训练人脸坐标位置

    • 置信度(表示窗口滑动到当前位置时,检测到人脸的概率值)
    • 坐标偏移值(用于回归真实坐标)
  • IOU

    做置信度标签,根据置信度大小,分成三类样本
    正样本:IOU>0.65;
    部分样本:0.4 负样本:IOU<0.3
    正、部分、负样本比例为1:1:3

    # 正样本生成
    if positive_num > 0:
       _side_len = side_len + side_len * random.uniform(-0.2, 0.2) + 1
       _cx = cx + cx * random.uniform(-0.2, 0.2) + 1
       _cy = cy + cy * random.uniform(-0.2, 0.2) + 1
    
    # 部分样本生成
    elif part_num > 0:
       _side_len = side_len + side_len * random.uniform(-1, 1) + 1
       _cx = cx + cx * random.uniform(-1, 1) + 1
       _cy = cy + cy * random.uniform(-1, 1) + 1
    
    x_ = _cx - _side_len / 2
    y_ = _cy - _side_len / 2
    
    # 负样本生成
    n_w = random.randint(int(min(img_w, img_h) * 0.35),
                        int(min(img_w, img_h) * 0.40))
    n_x = random.randint(0, img_w - n_w)
    n_y = random.randint(0, img_h - n_w)
    
    new_box = [x_, y_, x_ + _side_len, y_ + _side_len]
    ratio = utils.iou(new_box, np.array(boxes))[0]
    
    n_new_box = [n_x, n_y, n_x + n_w, n_y + n_w]
    n_ratio = utils.iou(n_new_box, np.array(boxes))[0]
    

    生成的数据样本:
    【实战项目】基于MTCNN+ArcFaceLoss的人脸检测识别_第1张图片

5.MTCNN网络结构

【实战项目】基于MTCNN+ArcFaceLoss的人脸检测识别_第2张图片

  • P-Net
    Proposal Network: 建议框12×12。P网络输出一个置信度,四个坐标值,五个关键点。如果输出两个值,输出函数可以使用softmax,一个值输出函数使用sigmoid
  • R-Net
    Refinement Network: 建议框24×24(精细化建议框)
  • O-Net
    Output Network: 输入图片48×48,输出最终的结果。使用时,O网络如果对于背景的学习不够,就会造成高召回率,高误检率的情况。所以训练时负样本一般比正样本多三倍。

6.MTCNN主要知识模块(解决重复框的方法)

  • IOU(交并比)
    第一种方法用于P、R网络,第二种方式用于O网络
    【实战项目】基于MTCNN+ArcFaceLoss的人脸检测识别_第3张图片

  • NMS(非极大值抑制)
    【实战项目】基于MTCNN+ArcFaceLoss的人脸检测识别_第4张图片NMS算法用来对邻域中 IOU较大的框进行筛选,并得到最终的人脸检测框。

    NMS的工作流程如下:

    (1)将预测框按照检测效果评分由高至低排序,并设定一个阈值。

    (2)从检测效果评分最高的预测框A开始,依次判断剩下的框与A的IOU是否超过阈值。如果超过,则丢弃,并将A框作为保留框。

    (3)对剩下的框循环重复步骤(2),产生新的保留框。

  • 图像金字塔

    图像金字塔来解决目标多尺度问题,即把原图按照一定的比例(如0.5),多次等比缩放得到多尺度的图片,很像个金字塔
    在这里插入图片描述
    【实战项目】基于MTCNN+ArcFaceLoss的人脸检测识别_第5张图片

  • 图像正方形转换
    根据最大边进行扩充
    【实战项目】基于MTCNN+ArcFaceLoss的人脸检测识别_第6张图片

  • 坐标反算

    坐标反算分为两部分:

    1. 网络中由输出特征图反算回偏移框坐标

    2. 偏移框根据偏移量反算回原图坐标

    红色框相对于蓝色框偏移
    【实战项目】基于MTCNN+ArcFaceLoss的人脸检测识别_第7张图片
    【实战项目】基于MTCNN+ArcFaceLoss的人脸检测识别_第8张图片

三、MTCNN基本使用流程

【实战项目】基于MTCNN+ArcFaceLoss的人脸检测识别_第9张图片

【实战项目】基于MTCNN+ArcFaceLoss的人脸检测识别_第10张图片

四、人脸特征点定位

  • MTCNN可输出人脸的5个特征点的位置
  • 基于深度学习的特征点定位算法,将人脸特征分为内部特征点和轮廓特征点,包含17个特征点
    【实战项目】基于MTCNN+ArcFaceLoss的人脸检测识别_第11张图片

五、MTCNN优缺点

  • 优点
    • 设备要求低
    • 容易训练
    • 精度较高
  • 缺点
    • 误检率高
    • 模型有优化空间

六、人脸识别

1.人脸识别流程

  • 人脸侦测
  • 特征提取
  • 特征对比【实战项目】基于MTCNN+ArcFaceLoss的人脸检测识别_第12张图片
    【实战项目】基于MTCNN+ArcFaceLoss的人脸检测识别_第13张图片

2.实现人脸识别的流程

  • 训练一个特征提取器
    • 准备训练的数据集(开源、收费、自制)
    • 创建特征提取网络(ResNet、MobileNet)
    • 设计合理的目标函数(CenterLoss、ArcFaceLoss)
    • 训练网络使网络获得人脸特征提取能力
  • 创建人脸特征库
    • 通过MTCNN网络获取当前图像中的人脸框
    • 将获取的人脸框传入特征提取器提取人脸特征
    • 将每个人脸标签和人脸作为一组特征值保存到人脸特征库
  • 获取目标人脸特征
    • 通过MTCNN获取画面中所有人脸框
    • 将获取的所有人脸框传入特征提取器提取人脸特征
  • 对比人脸特征
    • 将从当前画面获取的每个人脸特征和人脸特征库里的人脸特征一一对比
    • 如果当前画面中的某个人脸特征和人脸特征库里的人脸特征相似度最大值小于所设阈值,则认为当前画面中的这个人脸和人脸库中正在对比的人脸不是同一个人脸
    • 如果当前画面中的人脸特征和人脸特征库中的人脸特征相似最大值大于所设阈值,则认为当前画面中的人脸和人脸库中对比的人脸是同一个人脸

3.视频人脸识别

  • 对于人脸特征的对比是基于连续帧画面的目标特征提取和对比得出的结果
  • 实际应用中,只要某一帧画面中的目标被认为是人脸库的某个人脸,就可以认为完成对这个人的识别
  • 作为标签的人脸采集不只是一张人脸的图像特征,而是在相同的光度下对每个标签人脸的各个方位不同表情都进行采集,相当于采集了一个人的各个角度的不同表情人脸特征,从而提高对这个人的识别率
  • 采集大量的人脸作为识别对象同样增大了对比的时间长度,因为当前画面里的人脸框需要和人脸特征库中每个人的每张人脸特征一一对比

4.人脸识别的图像预处理

  • 对于人脸的图像预处理是基于人脸检测的结果,对图像进行处理并最终服务于特征提取的过程
  • 系统获取的原始图像由于受到各种条件的限制和随机干扰,往往不能直接使用,必须在图像处理的早期阶段对它进行灰度校正、噪声过滤等图像预处理
  • 对于人脸图像而言,其预处理过程主要包括人脸图像的光线补偿、灰度变换、直方图均衡化、归一化、几何校正、滤波以及锐化

5.人脸识别的训练数据集

  • 训练数据
    • VGG-Face2
    • MS-Celeb-1M
  • 验证数据
    • CFP
    • LFW
    • AgeDB
  • 测试数据
    • MegaFace
    • FDDB

参考文章:
MTCNN超详解
基于MTCNN和Arc-Loss的人脸识别(详细版)
MTCNN+ArcFaceloss实现视频人脸识别理论与实践(附代码)
【人脸识别】MTCNN + Arcface全流程详解 Pytorch代码 损失函数发展
利用MTCNN和facenet实现人脸检测和人脸识别

你可能感兴趣的:(深度学习项目,人脸识别,深度学习)