SqueezerFaceNet:通过滤波器剪枝进一步优化人脸识别CNN
1. 背景与动机
随着智能手机作为一体化平台的广泛使用,人们越来越依赖它们来访问电子商务和银行等在线服务。因此,实施强大的用户认证机制以确保设备安全解锁和受保护的交易变得至关重要。人脸识别技术因其在移动设备上摄像头的普及以及与日常应用的集成,成为了一种可靠的用户验证方法。然而,目前许多高性能的卷积神经网络(CNN)人脸识别模型通常具有数百万个参数,大小可达数百兆字节,这给在资源受限的设备上部署带来了巨大挑战。
2. 相关工作
- 轻量级CNN :多年来,针对ImageNet挑战中的常见视觉任务,出现了一些轻量级CNN,如SqueezeNet(1.24M参数)、MobileNetV2(3.5M)、ShuffleNet(1.4M)、MixNets(5M)和VarGNet(13.23M)。它们采用了不同的技术来减少参数数量和加快处理速度,如逐点卷积、深度可分离卷积、可变组卷积、混合卷积、通道洗牌和瓶颈层。
- 人脸识别应用 :部分工作将这些网络应用于人脸识别任务,例如LightCNN、MobileFaceNets、MobiFace等。还有工作提出应用神经架构搜索(NAS)来设计轻量级人脸识别模型,如PocketNets。
3. SqueezerFaceNet的提出
本文采用了一种不同的策略,即对现有架构进行网络压缩。常见的技术包括知识蒸馏、量化或剪枝。本文使用基于网络滤波器重要性得分的剪枝方法,对一个基于修改后的SqueezeNet架构、具有1.24M参数的小型人脸识别网络进行剪枝,得到了SqueezerFaceNet。滤波器的重要性得分通过一阶泰勒近似计算,该近似仅需要训练过程中通过反向传播计算的梯度元素。
4. 网络剪枝方法
- 重要性得分计算 :给定一个网络参数 $W = {w_0, w_1, …, w_M}$ 和训练集 $D$,网络训练的目标是最小化分类误差 $E$。参数 $w_m$ 的重要性可以通过其移除后对误差的影响来定义。为避免计算每个参数移除后的网络版本,采用一阶泰勒展开近似计算重要性得分:$I_1^m(W) = (g_mw_m)^2$,其中 $g_m = \frac{\partial E}{\partial w_m}$ 是梯度 $g$ 的元素。对于一组参数 $W_S$(如一个滤波器)的联合重要性,计算方法为:$I_1^S(W) \triangleq \sum_{s \in S} (g_sw_s)^2$。
-
剪枝算法流程
:
- 从一个训练好的网络开始,在同一训练集上迭代剪枝。
- 给定一个小批量数据,计算梯度并通过梯度下降更新网络权重。
- 同时,通过上述公式计算每个滤波器的重要性。
- 在每个epoch结束时,对每个滤波器的重要性得分进行平均,并移除得分最低的滤波器。
- 剪枝过程在一定数量的epoch后停止,然后对得到的网络在训练集上进行微调,以恢复因滤波器移除可能导致的精度损失。
5. SqueezerFaceNet架构与数据库
- 架构 :SqueezerFaceNet以SqueezeNet为骨干。SqueezeNet是ImageNet挑战中提出的最小的通用CNN之一,具有18个卷积层、1.24M参数和4.6MB的未压缩大小。它使用火模块(fire modules)来减少网络大小,包括挤压阶段(通过1×1逐点滤波器减少输入通道维度)和扩展阶段(在较低维度空间中使用更多的3×3和1×1滤波器进行处理)。此外,还采用了后期下采样策略以提高准确性。本文采用了之前为轻量级CNN人脸识别提出的SqueezeNet实现,并进行了改进,包括将输入大小从227×227改为113×113,添加了批量归一化层。
- 数据库 :使用VGGFace2数据库进行训练和评估,该数据库包含9131位名人的331万张图像,图像在姿势、年龄、种族、光照和背景等方面存在显著差异。协议包括8631个训练类(314万张图像)和500个测试类。对于跨姿势实验,定义了一个包含368个受试者的子集(VGGFace2 - Pose),每个姿势有10张图像,共11040张图像。为了进一步提高识别性能,还在MS - Celeb - 1M数据库的RetinaFace清理集(MS1M)上对SqueezerFaceNet进行预训练。
6. 实验协议
- 训练 :使用soft - max函数和ImageNet作为初始化,对SqueezerFaceNet进行生物识别训练。训练时,将VGGFace2图像的边界框调整为较短边为129像素,并随机裁剪为113×113。对MS1M和VGGFace2都应用水平随机翻转。优化器为SGDM,小批量大小为128,初始学习率为0.01,当验证损失平稳时,学习率降低到0.005、0.001和0.0001。将训练集中每个用户的2%图像留作验证集。
- 验证 :使用VGGFace2 - Pose进行验证实验。在验证时,将图像较短边调整为129像素后进行中心裁剪为113×113。为每个用户创建身份模板,模板可以由五张相同姿势的人脸组合而成,也可以仅使用一张图像。模板向量通过对模板集中人脸的描述符进行平均得到,描述符从与分类层相邻的层(全局平均池化层)获取,SqueezeNet对应的描述符有1000个元素。为了提高对姿势变化的鲁棒性,还对图像及其水平翻转后的描述符进行平均。使用余弦相似度比较两个模板。
7. 实验结果
-
未剪枝结果 :表2展示了SqueezerFaceNet和SqueezeFacePoseNet在未剪枝情况下的验证准确率。SqueezerFaceNet通过添加批量归一化层、应用随机水平翻转、使用余弦相似度和平均图像及其翻转后的描述符等改进,提高了识别准确率。同时,使用五张图像生成用户模板(5 - 5)的性能明显优于使用一张图像(1 - 1)。
| Network | One face image per template (1 - 1) | | | | | | Five face images per template (5 - 5) | | | | | | |
| — | — | — | — | — | — | — | — | — | — | — | — | — | — |
| | Same - Pose | | | Cross - Pose | | | Over - all | Same - Pose | | | Cross - Pose | | | Over - all |
| | F - F | 3/4 - 3/4 | P - P | F - 3/4 | F - P | 3/4 - P | | F - F | 3/4 - 3/4 | P - P | F - 3/4 | F - P | 3/4 - P | |
| SqueezerFaceNet (ours) | 5.32 | 4.87 | 7.36 | 5.09 | 7.32 | 6.47 | 6.07 | 0.27 | 0.3 | 0.85 | 0.23 | 0.74 | 0.75 | 0.52 |
| SqueezeFacePoseNet [2] | 6.39 | 5.47 | 7.88 | 6.09 | 8.15 | 7.02 | 6.34 | 0.27 | 0.06 | 0.54 | 0.2 | 1.23 | 0.88 | 0.52 | -
剪枝结果 :对SqueezerFaceNet进行剪枝实验,每次迭代使用VGGFace2训练集的随机25%来计算每个卷积滤波器的重要性得分,每次移除1%得分最低的滤波器。实验结果表明,在移除约15%的滤波器之前,损失会略有下降,然后再次上升;验证准确率在移除1%的滤波器后会急剧下降,然后在剪枝到约15%时逐渐恢复。在五对五比较中,性能在剪枝到30 - 40%之前保持相对稳定;在一对一比较中,准确率下降较快。对剪枝后的网络进行重新训练可以恢复一定的准确率,在一对一比较中,性能在移除约15%的滤波器之前保持稳定,之后准确率呈指数级下降;在五对五比较中,性能在剪枝到约30 - 40%之前与未剪枝网络相当。即使移除70%的滤波器,等错误率(EER)也不到原来的两倍。
8. 剪枝对网络的影响
- 滤波器数量 :滤波器数量在每次迭代中线性减少1%。
- 可学习参数和网络大小 :可学习参数和网络大小最初缓慢下降,在移除约10 - 15%的滤波器时出现显著下降,然后下降速度再次稳定。这表明最初移除的滤波器参数较少,对通道影响较小,后期移除的滤波器参数较多。
- 嵌入向量大小 :嵌入向量大小在剪枝到约18%之前保持不变,说明最初移除的滤波器不影响网络的最后一层。如果将15%作为最佳剪枝率,参数从1.24M减少到0.94M(减少24%),大小从4.6MB减少到3.4MB(减少26%),且不会显著损失准确率。
综上所述,SqueezerFaceNet通过滤波器剪枝方法,在不显著损失准确率的情况下,有效减少了网络的参数数量和大小,为在资源受限的设备上部署人脸识别模型提供了一种有效的解决方案。
graph TD;
A[开始] --> B[训练SqueezerFaceNet];
B --> C[计算滤波器重要性得分];
C --> D{是否达到剪枝率};
D -- 否 --> E[移除得分最低的滤波器];
E --> F[重新训练网络];
F --> C;
D -- 是 --> G[评估剪枝后网络性能];
G --> H[结束];
通过以上步骤和分析,我们可以清晰地看到SqueezerFaceNet在人脸识别任务中的优势和潜力,以及滤波器剪枝方法在优化网络方面的有效性。这种方法不仅有助于解决资源受限设备上的部署问题,还为未来的人脸识别研究提供了新的思路和方向。
SqueezerFaceNet:通过滤波器剪枝进一步优化人脸识别CNN
9. 不同剪枝率下的性能分析
为了更深入地了解剪枝对网络性能的影响,我们对不同剪枝率下的SqueezerFaceNet进行了详细分析。表3展示了不同剪枝率下的参数减少情况以及相应的等错误率(EER)。
| 剪枝率 | 参数数量(M) | 网络大小(MB) | 一对一比较EER(%) | 五对五比较EER(%) |
|---|---|---|---|---|
| 0% | 1.24 | 4.6 | 6.07 | 0.52 |
| 10% | 1.11 | 4.0 | 6.2 | 0.55 |
| 15% | 0.94 | 3.4 | 6.3 | 0.58 |
| 20% | 0.89 | 3.0 | 6.8 | 0.65 |
| 30% | 0.79 | 2.6 | 7.5 | 0.75 |
| 40% | 0.65 | 2.2 | 9.0 | 0.9 |
| 70% | 0.37 | 1.3 | 12.0 | 1.06 |
从表中可以看出,随着剪枝率的增加,参数数量和网络大小显著减少。在一对一比较中,当剪枝率达到15%时,EER仅有轻微上升;当剪枝率超过20%后,EER开始明显增加。在五对五比较中,剪枝率在30%以内时,EER的变化相对较小,直到剪枝率达到40%,EER才出现较为明显的上升。这再次证明了在五对五比较中,结合多个面部图像创建用户模板可以有效抵消卷积滤波器移除的影响。
10. 最佳剪枝率的选择
根据实验结果,我们可以选择合适的最佳剪枝率。如果对网络大小和参数数量的减少有较高要求,同时能够接受一定程度的性能损失,那么15%的剪枝率是一个不错的选择。在这个剪枝率下,参数减少了24%,网络大小减少了26%,而在一对一和五对五比较中,EER的增加都相对较小。
如果对性能的稳定性要求较高,希望在减少网络规模的同时尽量保持性能不变,那么可以选择30%的剪枝率。在五对五比较中,这个剪枝率下的性能与未剪枝网络相当,而参数和网络大小都有了显著的减少。
11. 与其他方法的比较
在人脸识别领域,除了滤波器剪枝方法,还有其他一些网络压缩技术,如知识蒸馏、量化等。与这些方法相比,滤波器剪枝方法具有以下优势:
-
直接减少参数数量
:滤波器剪枝直接移除网络中不重要的滤波器,从而减少了参数数量和计算量,而知识蒸馏和量化主要是通过优化模型的表示和存储方式来减少资源消耗。
-
可解释性强
:滤波器剪枝方法基于滤波器的重要性得分进行剪枝,每个滤波器的重要性可以通过梯度信息来量化,具有较强的可解释性。而知识蒸馏和量化的过程相对复杂,难以直观地理解模型的变化。
-
灵活性高
:滤波器剪枝方法可以根据具体的需求和实验结果,灵活调整剪枝率,以达到不同的性能和资源消耗平衡。
12. 实际应用中的考虑
在实际应用中,将SqueezerFaceNet部署到资源受限的设备上时,还需要考虑以下几个方面:
-
计算资源
:虽然SqueezerFaceNet通过剪枝减少了参数数量和计算量,但在一些计算资源极其有限的设备上,仍然需要进一步优化计算过程,如采用更高效的卷积算法或硬件加速。
-
数据多样性
:实验中使用的数据库虽然具有一定的多样性,但在实际应用中,可能会遇到更多不同的场景和数据。因此,需要在更多样化的数据上进行测试和优化,以确保模型的泛化能力。
-
实时性要求
:在一些实时性要求较高的应用中,如门禁系统、移动支付等,需要确保模型能够在短时间内完成识别任务。这可能需要对模型的推理速度进行进一步优化。
13. 总结与展望
本文提出了SqueezerFaceNet,通过基于泰勒分数的滤波器剪枝方法,对基于SqueezeNet的人脸识别网络进行了压缩。实验结果表明,该方法在不显著损失准确率的情况下,有效减少了网络的参数数量和大小,为在资源受限的设备上部署人脸识别模型提供了一种可行的解决方案。
未来的研究可以从以下几个方面展开:
-
更高效的剪枝算法
:探索更高效的滤波器剪枝算法,进一步提高剪枝的效率和准确性,减少剪枝过程中的性能损失。
-
多模态融合
:结合其他模态的信息,如音频、深度信息等,提高人脸识别的准确性和鲁棒性。
-
自适应剪枝
:根据不同的应用场景和设备资源,实现自适应的剪枝策略,使模型能够在不同的条件下都能达到最佳性能。
graph LR;
A[选择最佳剪枝率] --> B[部署到资源受限设备];
B --> C[考虑计算资源];
B --> D[考虑数据多样性];
B --> E[考虑实时性要求];
C --> F[优化计算过程];
D --> G[在多样化数据上测试];
E --> H[优化推理速度];
F --> I[实现实际应用];
G --> I;
H --> I;
通过不断的研究和优化,SqueezerFaceNet有望在更多的实际应用中发挥重要作用,为人脸识别技术的发展做出贡献。
超级会员免费看

被折叠的 条评论
为什么被折叠?



