美文网首页
深度学习—人脸识别·笔记

深度学习—人脸识别·笔记

作者: 90000Tank | 来源:发表于2020-07-14 23:42 被阅读0次

依赖知识

  • 互相关,寻找与模板所匹配的特征
  • 卷积,滤波,机器学习中就是互相关
  • 图像、信号处理参考资料:https://item.jd.com/11974394.html
    • 采样、量化
    • 插值:邻近插值、样条插值、线性插值
    • 1D、2D傅里叶变换:所有卷积和滤波基础
    • 小波变换
    • 局部预处理:Sober变换、高斯模糊、角点(兴趣点)检测
    • 边缘图像阈值化
  • 深度学习算法是较容易实现的。
  • 学习过程中需要大家实现正向计算过程,推断过程。

问题分类

人脸检测
  • 从任意大小照片中找到人脸,box
  • 难点如何处理任意大小图像
关键点检测
  • 检测人脸关键点位置
  • 用于美颜、人脸校正
人脸识别
  • 识别不同的人
  • 用于安全领域
识别过程
  • step1:从任意大小的图片中检测到人脸(人脸检测)
  • step2:将检测到的人脸放正,人脸对齐(人脸关键点检测)
  • step3:识别不同的人 (人脸识别)

人脸检测模型

模型1:小波变换 + Adaboost算法

  • 思路:特征工程+机器学习算法
  • 明确训练和推断过程

训练过程

- 输入固定大小的图像:24×24灰度图 
- 使用HaarLike小波提取特征:得到10w+个特征 
- 特征过多需要进行特征筛选 
- 使用Adaboost进行二分类 
- 训练过程中需要24×24大小的人脸进行训练
  - 提取特征需要付出较多精力 
  - 数据预处理很麻烦 

推断过程

- 输入任意大小的图像进行检测 
- 使用滑动窗在图像上进行检测 
- 有些时候人脸是大于28×28 
  - 建立图像金字塔
  - 为检测不同大小的人脸 
- 候选Box过多:非极大值抑制(NMS)
  - 概念:交并比IoU 
  - 按照置信度排序,并删除交并比较大的候选Box 

模型2:卷积神经网络

  • 思路:原始数据+卷积神经网络模型
  • 模型:多层卷积神经网络
  • 细节:Multi-task CNN
    • 使用三个卷积神经网络进行人脸识别
    • PNet:纯卷积神经网络,相当于一个滑动窗,其可以处理任意大小图像
    • RNet,ONet:对PNet的结果进行更精细处理

预测过程

PNet
- 输入固定12×12大小的彩色图像 
- 网络为纯卷积神经网络
- 主要目标为识别候选区域
- 需要注意,人脸较小,因此读取零碎文件时可能较慢。
RNet,ONet
- 输入固定大小的彩色图像
- 网络为卷积+全连接

预测过程

PNet
- 输入任意大小的彩色图像 
- 网络为纯卷积网络
RNet、ONet
- 输入也是固定大小的 
- 其需要使用PNet识别后进行截取输入到网络中 
- 可以获取更高精度 

整合——MTCNN

  1. 使用了多级结构,PNet可以较快速度检测候选区域,RNet、ONet较高精度处理
  2. 相比于传统机器学习算法,不需要特征工程(或少量特征工程)
  3. 相比于传统机器学习算法,准确度相对更好
  4. 可以使用后续课程中的物体检测模型
  5. MTCNN同样可以用于物体检测

注意问题

  • 感受野很重要
  • 其代表什么含义,以及如何计算感受野需要熟悉。

拓展应用

  • 可以进行物体检测
  • 可以进行OCR预处理,字符分割
  • 可以用于语音识别(较不常见)
  • 类似思想可以用于1D、2D数据。

重点知识

  • 滑动窗
  • 图像金字塔
  • 纯卷积结构可以处理任意大小图像
  • NMS:删除冗余的候选Box
  • 感受野问题

人脸识别问题

识别不同的人

  • 此时输入是固定大小的图像,需要使用人脸检测方法检测人脸
  • 输入一个深度神经网络模型进行分类

如何搭建一个合理的深度神经网络

  • 最早的代表性的深度神经网络:AlexNet
    • 第一层卷积:11×11的KernelSize
    • 使得卷积核心非常大,可训练参数多,难以训练。
  • 改进模型:VGGNet
    • 改进方式:将大的卷积核心拆为3×3大小。
    • 神经网络可训练参数存在冗余,因此考虑使用更加精简的模型。
  • 后续改进1:GoogleNet
    • 改进方式:将大的卷积核心拆分为不同分支
    • 可训练参数更少,更加容易训练
  • 后续改进2:ResNet
    • 改进方式:添加支路
    • 改进梯度消失问题,使得网络更好训练
    • 可以使得网络层数更多
  • 后续改进3:BatchNorm
    • 显著的改善了梯度消失问题
    • 使得深度神经网络更容易训练

如何识别任意多类人脸

  • 在全连接网络中无法直接增加类别
  • 使用固定长度(128)向量表示不同人脸
解决方式1:构建三元损失函数
- 使用三张图片两张是同一个人脸,一张不同人脸
- 分别计算成向量v1,v2,vp 
- 使得相同人脸距离越来越近 
- $loss = \max((v1-v2)^2+\alpha-(v1-vp)^2, 0)$
- 收敛速度较慢,可能需要训练几个星期。 
解决方式2:构建分类问题损失函数+中心损失
- 先使用分类问题进行训练
- 再加入中心损失(使得同一类之间的距离更近,同一类的方差更小)
- 收敛速度会更快 

目前人脸识别问题

  • 一张图片即可破解
    • 可以使用3D人脸识别,成本高
    • 活体检测,成本低
  • 计算代价过高
    • 深度学习模型压缩
    • 设计专门硬件

知识重点

  • GoogleNet和ResNet的优化
  • 三元损失函数的构建

相关文章

网友评论

      本文标题:深度学习—人脸识别·笔记

      本文链接:https://www.haomeiwen.com/subject/gkaqhktx.html