MobileFaceNets: Efficient CNNs for Accurate RealTime Face Verification on Mobile Devices
背景介绍
偏工程性论文,分析了现有轻量级网络应用于人脸识别的不足,并使用Global Depthwise Convolution改进。
论文要点
- Global Depthwise Convolution
- 人脸识别最后需生成特征向量,一般由全连接或平均池化生成。
- 全连接全产生大量的参数,会导致模型增大,不便于嵌入端的部署。
- 平均池化没有考虑位置信息,所有位置的特征都一样。
- 基于人脸的直观感受,最后一层特征图每个像素对应人脸区域其重要性有所差异,因而使用加权平均更合理,使用Global Depthwise Convolution可以实现加权的效果。
[图片上传失败...(image-b946b-1543585944328)]
- 网络结构
- 采用类似MobileNetV2的网络结构
- residual bottlenecks (MobileNetV2)
- expansion factors for bottlenecks are much smaller than MobileNetV2
- 使用PReLU激活层
- fast downsampling
在Global Depthwise Conv层后添加1x1的线性变换层
结果分析
- 删除GDConv后线性变换层后,准确率有所下降,但部署时间没有减少,因而实际应用可以保留线性变换层。
- 将PReLU换成ReLU后,其实际的部署时间少1ms,准确率有所下降,在推理框架支持PReLU的情况下,可以考虑优先使用PReLU。
- expansion factor 变大后,准确率没用提升反而下降,说明在此网络结构下,并不是filter越多,效果越好。
-
MobileNetV2使用GDConv相比于不使用GDConv准确率提升明显,说明GDConv有作用,是不是GDConv对所有具有Global Average Pooling的网络结构都作用呢?
问题思考
- 训练方法
- 为什么要将GDConv后卷积层的weight decay设置得比之前的小?
- 以MobileNetV1/MobileNetV2/ShuffleNet作对比实验时,为什么要从头训练,而不使用imagenet的预训练模型,是为了保证所有模型从头训练的同一条件。
- 文中提MobileNetV1如果第一层卷积层stride=2时,其准确率较差,但并没有分析原因,个人觉得如果第一层卷积层stride=2,会导致中间主要提取特征的分辨率较小,不利于提取更丰富的特征,设计轻量级网络时,既要使用fast downsampling的策略,也要保证中间层时的分辨率不宜过小。
- 测试结果
- 没有对比MobileFaceNet使用GDConv和不使用GDConv的差异,因而无法评估整体准确率的提升是由于前面的网络结构设计,还是最后使用了GDConv带来的准确率提升。
- Global Depthwise Convolution
- 其想法与Face R-FCN提到position-sensitive average pooling是一致的