2020-07-15 总结人脸识别项目
- 轻量级人脸识别研究过程:
(1) 在VGGFace2数据集上,Inception-ResNet-V1 / VGG16 + TripletLoss,问题:泛化性能相对不佳。
(2) 在MS1M数据集上,ResNet50/ResNet100 + ArcFace, 精度高,问题:手机端高时延
(3) 在MS1M数据集上,MobileNet/ShuffleNet/MobileFaceNet/VarGFaceNet + ArcFace, 精度高,时延低,轻微精度损失。
Light Networks.png
(4) 评估集: LFW, AgeDB, CFP, MegaFace
(5)参数设置:
- L2 weight decay: 5e-4
- SGD momentum: 0.9
- lr 0.01 LR_STEPs
- batch_size : 64 \ 128
(6) 如何选择batch size?太大或太小会有什么问题?
样本量少时,方差很大,会使得梯度下降时在局部最优点或鞍点时很不稳定,有机会寻找更优的最优点;样本量大时, 方差很小,梯度估计会准确和稳定得多,可能在差劲的局部最优点和鞍点停滞,导致网络收敛在了较差的点上
(7) SE block对人脸识别效果提升的研究:
image.png
(8)不同人脸检测器对训练数据图片做人脸对齐对人脸识别效果的影响? MTCNN 和 RetinaFace
(9) 在MobileFaceNet中使用Variable Group Convolution.
-
TripletLoss
(1) Distance: 欧式距离
(2) semi-hard triplet selection: d(a,p) + α < d(a, n) -
ArcFace
(1) 训练集中每个人物的所有图片都有一个center,目标:使同一个人物的人脸特征向量夹角尽可能小,不同人物的人脸特征向量夹角尽可能大。
(2) angular margin penalty m,θ1+m < θ2: 当前人脸特征向量X11与center特征向量W1的夹角加上边缘角m,小于X11与其它类的center特征向量W2。
(3) 概率输出:softmax
(4) ground truth: one-hot vector
(5) loss: cross-entropy Loss
(6) why work? 将margin 直接作为角度加上去,拉大了同类之间的角度,使神经网络将同类收得更紧。 -
其它人脸损失函数:
(1) SphereFace:
cos(mθ)
(2) CosFace:
cos(θ) - m
(3) CombinedLoss (in ArcFace Paper):
cos(m1*θ + m2) - m3
Note: [
m1, SphereFace
m2, CosFace
m3, ArcFace
]
(4) CenterLoss
CenterLoss.png
CenterLoss的公式就是希望每个样本的Feature离Feature中心的距离的平方和越小越好,也就是说类内距离越小越好。
loss function.png
- MobileFaceNet: 由MobileNet V2改进来用于人脸识别任务.
(1) 原理: 经典轻量网络中的MobileNet和ShuffleNet中的平均池化层会使得网络在需要精确面部信息的人脸识别任务中表现下降.
(2) 改进:
- 使用GDConv(深度可分离卷积)替换Global Average Pooling
- 通道扩张倍数变小
- 使用PReLU代替ReLU
- 使用Batch Normalization
- VarGFaceNet---Champion in LFR(Light Face Recognition):
(1) 原理: MobileNet的连续两层DWConv和PWConv之间有巨大的计算量差异,5%用于DWConv , 95%用于PWConv。因为嵌入式设备加载网络的所有参数来执行卷积操作,它需要为1 x 1 卷积准备额外的片上缓冲区域来存储中间feature map的分片。
(2) Variable Group Convolution: 解决深度可分离卷积中连续两层计算量极大不平衡的问题.
(3) 深度可分离中的分组数s, s大于1就意味着组可变卷积比深度可分离卷积有更多的计算量和有更大的网络容量,从而有更大的提取信息能力。
(4) SE block : 通过学习的方式来自动获取到每个特征通道的重要程度,然后依照这个重要程度去提升有用的特征并抑制对当前任务用处不大的特征。
(5) 知识蒸馏的模型压缩方法
- 轻量级网络的设计原则:
(1)为什么需要对图片做“金字塔”变换?
推断的时候,想要检测各种尺度的人脸更准,需要把待检测的人脸的尺度先变化到接近模型尺度。(12*12)
(2) MTCNN算法可以接受任意尺度的图片,为什么?
P-NET 是一个全卷积网络(FCN),可以接受任意尺寸输入。
卷积、池化、非线性激活都是一些可以接受任意尺度矩阵的运算,但全连接运算是需要规定输入。如果网络中有全连接层,则输入的图片尺度(一般)需固定;如果没有全连接层,图片尺度可以是任意的。
(3) 为什么缩放因子factor官方选择0.709?
缩放因子0.709 ≈ sqrt(2)/2,这样宽高变为原来的sqrt(2)/2,面积就变为原来的1/2。
(4) 为什么把图片输入模型的时候要对每个像素做(x – 127.5)/128的操作?
归一化操作,加快收敛速度。由于图片每个像素点上是[0, 255]的数,都是非负数,对每个像素点做(x – 127.5)/128,可以把[0, 255]映射为(-1, 1)。
(5) 特点:准而慢。第一,生成图片金字塔慢;第二,每种尺度的图片都需要输入进模型,相当于执行了多次的模型推断流程。
(6)损失函数
- Face classification: cross-entropy loss
- Bounding box regression: Euclidean loss
- Facial landmark localization: Euclidean loss