深度学习—人脸识别·笔记
2020-07-14 本文已影响0人
90000Tank
依赖知识
- 互相关,寻找与模板所匹配的特征
- 卷积,滤波,机器学习中就是互相关
- 图像、信号处理参考资料: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
- 使用了多级结构,PNet可以较快速度检测候选区域,RNet、ONet较高精度处理
- 相比于传统机器学习算法,不需要特征工程(或少量特征工程)
- 相比于传统机器学习算法,准确度相对更好
- 可以使用后续课程中的物体检测模型
- 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的优化
- 三元损失函数的构建