MobileFaceNets: Efficient CNNs for Accurate RealTime Face Verification on Mobile Devices

Abstract

一种非常高效的CNN模型MobileFaceNets,该模型使用少于一百万个参数,专门针对移动和嵌入式设备上的高精度实时人脸验证而量身定制。MobileFaceNet达到明显优越的精度,而且实际速度是MobileNetV2的两倍。单个4M尺寸大小的MobileFaceNet在MS-Celeb-1M数据集上用ArcFace训练后,可以在LFW达到99.55%精度,甚至可以和一些大型几百M的CNN网络相比较。最快的MobileFaceNet在手机上推断时间仅有18毫秒,对于人脸验证,相比之前的MobileCNN,它的效率大大提高。

Introduction

在移动设备上部署的面部验证模型不仅要求准确,而且体积小且快速。然而高精度的模型往往建立在大而深的CNN上,这些大模型需要高额的计算成本,不适合部署在移动和嵌入式设备上。一些高效的神经网络架构MobileNetsV1,MobileNetsV2和ShuffleNet被用于常见的视觉识别任务,而不是人脸验证。使用这些普通的cnn网络进行人脸验证是一种方式,但精度比mobilefacenet差很多。

许多现有技术,例如修剪,低位量化和知识蒸馏能够额外提高MobileFaceNets的效率,但这些都不包括在本文范围内。

本文主要贡献如下:

  1. 在人脸特征嵌入CNN的最后一个(非全局)卷积层之后,我们使用 a global
    depthwise convolution layer(全局深度卷积层)而不是a global average pooling layer (全局平均池层)或(a fully connected layer)完全连接层来输出一个判别特征向量。从理论和实验两方面分析了这种选择的优越性。
  2. 设计了一个人脸特征嵌入CNN,即MobileFaceNet,在移动和嵌入式设备上具有极高的效率。
  3. LFW, AgeDB, 和 MegaFace 表明 mobilefacenet 在人脸验证方面比以前最先进的移动CNN取得了显著提高的效率。

Approach

在常见的视觉识别任务中使用的mobile网络都有一个全局平均池化层(global average pooling layer,GAP),如MobileNetV1,Shufflenet,Mobilenetv2.对于人脸验证和识别任务,一些研究者发现带有全局平均池化的CNN准确度要低于不带有全局平均池化的CNN网络。

一个典型的深度人脸验证流程包括预处理人脸图像,通过预先训练好的模型提取人脸特征,以及根据人脸特征相似性或距离匹配两张人脸。通过预处理方法,并基于MTCNN进行人脸检测和5个人脸关键点标注,然后根据5个标注,通过相似性变换将人脸对齐,得到每个人脸图片大小112x112,将RGB图像减去127.5,除以128来进行归一化。最后,面部特征嵌入CNN将每个对齐的面部映射到特征向量,如图1所示。
在这里插入图片描述
不失一般性,下面采用Mobilenetv2作为人脸特征embedding CNN的结构。为了让输出特征映射的大小和原始网络的输入大小 224x224一样,在第一个卷积层使用stride=1而不是2。因为stride=2会导致准确度较低。所以在全局平均池化层前,最后一个卷积层的输出特征图(为方便起见表示为FMap-end)具有7×7的空间分辨率。虽然理论上FMap-end角上单元的感受野和中心区域单元的感受野大小是一样的,可是他们在原图上感受的范围区域是不一样的。FMap-end边角单元的理论感受野中心在输入图像的边角处,而FMap-end中心单元的感受野中心在输入图像的中心处。中心区域感受野比其他区域在最后的输出上更有影响,且一个感受野对输出的影响分布接近高斯分布。FMap-end的角单元的有效感受野的大小要小于中心单元上的有效感受野的大小。当输入图像是对齐的人脸时,FMap-end的一个角单元携带的人脸信息比中心单元携带的人脸信息少。因此FMap-end上不同的单元对于提取一个人脸特征向量有着不同的重要性。

在MobileNetv2中,平铺后的FMap-end不合适直接用来作为人脸特征向量,因为维度太高(7x7x1280=62720维)。所以自然的做法就是加上全局平均池化层并作为特征向量,这被证实准确度较低。因为全局平均池化层将FMap-end上每个神经元视为同等重要性,这是不合理的。另一个流行的做法就是将全局平均池化层替换成一个全连接层,以此将FMap-end映射到一个更紧凑的人脸特征向量上,这却会增加整个模型的参数量,即使当维度是128维,FMap-end后的全连接层也会给Mobilenetv2额外增加800万个参数。所以这个方法本文不采用。

全局逐深度卷积(Global Depthwise Convolution)

为了让FMap-end中不同的单元有不同的重要性,作者用全局逐深度卷积(global depthwise convolution layer, GDConv)替换全局平均池化层。一个GDConv层就是一个逐深度卷积,其kernel大小等于输入的size,pad=0,stride=1。全局逐深度卷积层的输出为:
在这里插入图片描述

F是输入的feature map,其size为 W×H×M;K是逐深度卷积核,其size为 W×H×M;G是输出,其size为 1×1×M。其中在G的第 m个通道上只有一个元素 Gm。其中 (i,j)表示F和K中的空间位置,m表示通道的索引。
全局逐深度卷积的计算代价为:
W⋅H⋅M

当在MobileNetV2的FMap-end之后用于人脸特征嵌入时,其核为7x7x1280,即有1280个通道。计算代价为62720M Adds(即相乘-相加的操作次数)和62720个参数。假设MobilenetV2-GDConv表示带有全局逐深度的Mobilenetv2。当MobileNetV2 和 MobileNetV2-GDConv在CIASIA-Wefface数据集上训练,使用Arcface loss,后者在LFW和AgeDB上有更好的准确度。所以MobilenetFaceNet采用GDConv结构。
在这里插入图片描述
MobileFaceNet Architectures
主要的构建模块依然是MobileNetV2里面提出的residual bottlenecks,不同的是, bottlenecks中的扩张因子比MobileNetV2里面的小得多。使用Prelu非线性激活函数,在人脸识别中比Relu会好一点。在网络的开始部分采用快速下采样,在最后几个卷积层采用早期降维策略,在线性全局Depthwise卷积层后加入一个1x1的线性卷积层作为特征输出。在训练中采用批量正则化(BN)。在部署之前采用BN折叠

MobileFaceNet 网络计算量是221百万个MAdds,有99万个参数。进一步调整主要架构,为了降低计算成本,我们将输入分辨率从112×112更改为112×96或96×96。为了减少参数量,我们去除了GDConv之后的线性1x1卷积层,这种新结构成为MobileFaceNet-M。在MobileFaceNet-M的基础上,去掉GDConv之前的1x1卷积层,产生了更小的的网络MobileFaceNet-S。这些小网络的有效性在接下来的实验部分论述。

Experiments
在这里插入图片描述
语言python 架构pytorch 主干网络mobilefacenet
前处理 RGB图像 -127.5/128
特殊结构:

  • 使用全局可分离卷积代替平均池化层
  • 使用mobilenetv2中的倒置残差结构 inverted residuals 和 Linear bottlenecks结构( Linear bottlenecks结构用来替代Relu),整个Bottleneck结构为pw conv >> #dw conv >> #pw conv-linear
    优化器使用SGD
    损失函数使用arcface loss
    人脸向量相关性使用欧式距离或余弦相似度

训练
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值