论文笔记:MobileFaceNet

原文:MobileFaceNets: Efficient CNNs for Accurate Real-time Face Verification on Mobile Devices

MobileFaceNet

1、四个问题

  1. 要解决什么问题?
    • 设计一个在手机或嵌入式设备上可实时运行且具有高精度的人脸验证CNN模型。
  2. 用了什么方法解决?
    • 以MobileNet v2网络为骨架,做了一些改进:
      1. 使用全局可分离卷积(global depthwise convolution,GDConv)替代全局平均池化层(global average pooling)。(注:我自己在训练MobileNet v2时,使用全局平均池化层的话也经常会遇到网络较难收敛的情况)
      2. 使用ArcFace的Loss函数。
      3. 使用PReLU替代ReLU,效果会稍微好一点。
      4. 通道扩张参数(expansion factors)比MobileNet v2的减小一些。
  3. 效果如何?
    • 由于是小网络,性能肯定会比大网络差一点。但在一定程度上已经与一些大网络的性能相当了。
    • 在使用MS-Celeb-1M从头开始训练后,在LFW上的准确率达到了99.55%,在MegaFace比赛中达到了92.59%的TAR@FAR1e-6 。
  4. 还存在什么问题?
    • 为了达到实时性,网络结构不得不进行缩减,这在一定程度上会限制网络的学习能力,文中只是使用了轻量化网络结构(MobileNet v2),并没有使用其他模型压缩方法,还可以再使用一些模型压缩方法(如剪枝(prunning)、量化(low-bit quantization)、知识蒸馏(knowledge distillation))进一步改进。

2、论文概述

2.1、改进方法

A、MobileNet v2的局限性

论文笔记:MobileFaceNet_第1张图片

  • 以上图为例,主要说明一下global average pooling的缺陷。
    1. 预处理:使用MTCNN检测出人脸以及5个人脸特征点,之后将人脸对其到 112 × 112 112 \times 112 112×112的图片。对像素做归一化,归一化到-1到1(减去127.5再除以128)。
    2. CNN:假设这里用的CNN是MobileNet v2,将前面预处理后的人脸送入CNN,输出可以得到一个 7 × 7 × c 7 \times 7 \times c 7×7×c的特征图(c表示特征图的通道数),再使用全局平均池化提取特征向量。
    3. 从图中的RF1和RF2来看,RF2的感受野对应包括了整个图像,RF1的感受野只包括了人脸图像的一部分。但是使用全局平均池化,即意味着我们认为RF1与RF2等价,很显然这是不正确的。应该给RF2更大的权重,RF1更小的权重才对。
  • 全局池化将特征图上所有的值都视作同等重要,根据上面的分析来看,这是不太好的。而一种很常见的解决办法就是,将全局池化替换为全连接层,但是替换成全连接层会给模型带来非常多的参数,有悖于轻量化模型的初衷。

B、全局可分离卷积(global depthwise convolution)

  • 将全局池化替换为全局可分离卷积。
    • 如果输入特征图是 h × w h \times w h×w,那么全局可分离卷积的卷积核大小也是 h × w h \times w h×w。通道数即为特征维数。

C、网络结构

论文笔记:MobileFaceNet_第2张图片

3、参考资料

  1. 论文阅读笔记:MobileFaceNets: Efficient CNNs for Accurate RealTime Face Verification on Mobile Devices
  2. MobileFaceNets: Efficient CNNs for Accurate Real-time Face Verification on Mobile Devices

你可能感兴趣的:(论文阅读,深度学习,论文笔记)