人脸识别总结
概要
人脸识别在深度学习领域里算是一项较为成功的应用,在日常生活中,经常可以见到人脸识别的设备,如人脸考勤机,各大交通站点的闸机,移动支付等。本人在从事人脸识别算法开发的短短一年时间里,也关注了不少论文和大佬们,对相关的技术发展也有了一些皮毛上的了解,在这里记录一下。本文的主要结构如下:
网络模型
深度学习发展至今,主流的 CNN 网络有 VGG, GoogleLeNet, ResNet, ResNeXt, DenseNet 等。其中,基于 ResNet 的开源人脸识别模型最为常见,如 InsightFace,wy1iu/sphereface,ageitgey/face_recognition 等。
本文主要介绍一下ResNet, 该模型结构是何凯明大神的团队提出的,用于解决深度学习模型因深度加深而导致的“退化”问题。由于网络深度增加后,梯度消失或者爆炸的问题就会接踵而来,因此模型达不到很优的收敛效果。关于梯度爆炸与消失的问题,可以参考博客详解机器学习中的梯度消失、爆炸原因及其解决方法。针对这个问题,作者提出了一个残差(Residual)的结构,如下:
对于一个简单的 block , 当输入为 x 时其学习到的特征记为 H(x) ,作者通过增加了一个恒等映射(identity mapping),将所需要学习的 H(x) 转换成学习残差 F(x)=H(x)-x 。这一想法源于图像处理中的残差向量编码,通过一个reformulation,将一个问题分解成多个尺度直接的残差问题,能够很好的起到优化训练的效果。除了上图中常规的残差结构外,针对于更深层的 ResNet 网络,还有如下的变体:
该结构的目的主要是为了降低模型的计算和参数量,使模型具有深层的语义表达能力的同时,兼具较快的速度,有利于实际应用需求。常见的 ResNet 网络结构有 18, 34, 50, 101, 152 层,详细如下:
从该表可以看出,ResNet 的结构可以分为 conv1,conv2_x,conv3_x,conv4_x,conv5_x ,共 5 个部分,每个部分的残差结构数目各不相同。关于其层数计算,拿 101 层的网络为例,每层的 block 数目为 conv2_x:3, conv3_x:4,conv4_x:23,conv5_x:3,共计 33 个 block, 再加上 conv1 和模型最后的 FC 层,为 101 层网络。
以下是收集的有关 CNN 网络的论文和博客等资料。
-
论文资料
- VGG: Very Deep Convolutional Networks for Large-Scale Image Recognition
- GoogLeNet: Going Deeper with Convolutions
- ResNet: Deep Residual Learning for Image Recognition
- DenseNet:Densely Connected Convolutional Networks
-
博客资料
- 深度学习----CNN几种常见网络结构及区别
- DenseNet:比ResNet更优的CNN模型
- 一文简述ResNet及其多种变体
LOSS
人脸识别中所用的 LOSS 真的是百花齐放,从最基础的 SoftMax 到加入各种 trick 的 ArcFace, 从欧氏距离到余弦距离,从无 Margin 到加入 Margin。整理了一下,大概有如下几种:
-
L2-softmax: L2-constrained Softmax Loss for Discriminative Face Verification
原始的 softmax 未优化提取的人脸特征,而 L2-softmax 添加了一个 L2 约束,使得类内的距离减小。实验结果:在 LFW 上的准确率达到 99.78%, YTF 上的准确率为 96.08%。