论文标题:EdgeFace: Efficient Face Recognition Model for Edge Devices
论文地址:https://arxiv.org/pdf/2307.01838
彻底理解需要先看EdgeNeXt,我还没看
EdgeFace 受到了 EdgeNeXt 混合架构的启发,结合了卷积神经网络(CNN)和Transformer模型的优势,并引入了一个低秩线性层,从而在保持低计算成本和紧凑存储的同时,实现了出色的面部识别性能,使其非常适合部署在边缘设备上。
研究背景
面部识别领域近年来取得了显著进展,主要得益于深度神经网络和基于边界的损失函数(Margin-based Loss Functions)的发展。然而,当前最先进的面部识别模型通常涉及大量参数和复杂的计算,难以在资源有限的设备上部署。
为了解决这一问题,研究者们开始设计轻量化且高效的神经网络,以在保持高识别准确度的同时,降低内存需求和计算复杂度。最近,有些工作尝试利用轻量级卷积神经网络(如MobileNets、ShuffleNet等)和视觉Transformer(ViTs)的优势,进一步提升面部识别模型的效率和性能。
"基于边界的损失函数"是一种在面部识别中使用的损失函数,通过在特征空间中拉开不同类别样本之间的距离,缩小同一类别样本的距离,来增强模型的区分能力。这种方法使模型能够更准确地识别人脸,提高识别性能。
EdgeFace的实现
传统高效面部识别网络大多基于CNN,但CNN存在两个主要限制:其局部感受野难以捕捉全局上下文,并且在推理过程中权重静态,缺乏对不同输入的适应性。为了解决这些问题,引入了Transformer和CNN-Transformer混合模型,虽然计算成本较高,但它们提供了改进的全局表示能力。本文使用EdgeNeXt的CNN-Transformer混合架构,并对其进行了调整,以减少参数和FLOPs,使其更适合面部识别任务。
1. EdgeFace面部识别模型的设计
- 将EdgeNeXt网络中的线性层替换为低秩的LoRaLin层,以减少模型的参数和浮点运算量(FLOPs)。
- 添加了一个分类头,由自适应平均池化层、层归一化和LoRaLin层组成,最终输出一个512维的特征表示。
- 输入分辨率调整为112×112。
- 采用端到端训练,并结合CosFace分类头来优化模型。
2. EdgeNeXt 结构
EdgeNeXt架构是一种轻量级的混合设计,结合了Transformer和卷积神经网络(CNN)的优势,专为低功耗边缘设备优化。与MobileViT和EdgeFormer等模型相比,EdgeNeXt在参数数量、模型大小和乘加运算量(MAdds)方面更小,但在图像识别性能上表现更优。
EdgeNeXt架构中一个关键组件——分组深度可分解转置注意力(STDA)编码器通过结合卷积和自注意力机制,解决了传统Transformer自注意力计算量大、延迟高的问题。STDA(分组深度可分解转置注意力)编码器通过以下几个关键步骤来实现其功能:
(1) 输入分组:
输入数据分组:首先,将输入的张量(通常是特征图)按通道维度分成多个小组。例如,如果输入特征图有128个通道,可以将其分成4个小组,每个小组包含32个通道。
这种分组使得每个小组都可以被独立处理,从而增加了模型的灵活性和并行处理能力。
(2) 深度卷积(Depth-wise Convolution):
- 标准卷积:
在标准卷积中,卷积核不仅会在空间维度(如图像的宽度和高度)上滑动,还会在通道维度上操作。
举个例子,假设你有一个大小为32×32×3的彩色图像输入(3个通道代表RGB颜色),并且你使用3×3的卷积核。如果你使用32个3×3的卷积核,输出将是32个通道的特征图。每个卷积核与输入的所有3个通道进行计算,输出1个特征图。
计算复杂度较高,因为每个输出特征图都结合了所有输入通道的信息。 - 深度卷积:
深度卷积的不同之处在于,它只对每个通道单独进行卷积操作,而不跨通道进行操作。
有一个大小为32×32×3的彩色图像输入(3个通道代表RGB颜色),如果你使用深度卷积,每个3×3的卷积核只作用于输入的一个通道。因此,对于3个输入通道,你只需要3个卷积核,每个核产生一个特征图。
输出的特征图仍然是3个通道,但每个通道仅包含来自输入对应通道的信息。
计算量大大减少,因为你没有进行跨通道的计算。
(3) 转置自注意力机制:
-
传统自注意力机制的计算方式(空间维度)
在视觉Transformer(ViT)中,自注意力机制的计算是在空间维度上进行的。这意味着它会计算图像中每个像素与其他所有像素之间的关系。这种关系的计算有助于模型捕捉图像中长距离的依赖性和全局信息。举例说明:
输入图像:假设我们有一张32×32像素的灰度图像,意味着它只有一个通道(即单色)。
像素点:这张图像有32×32=1024个像素点。
在传统的自注意力机制中,模型会计算每个像素与其他1023个像素之间的关系。因为每个像素与其他所有像素都要计算相关性,这就需要执行1024 × 1024 = 1,048,576次计算(也就是一百万次)。这种计算量会随着图像尺寸的增大而迅速增加,变得非常庞大。 -
STDA的计算方式(通道维度)
在STDA编码器中,自注意力机制不是在空间维度上(即像素之间)进行,而是在通道维度上进行。这里,通道指的是图像的不同特征,例如颜色通道或在特征提取过程中生成的特征图。举例说明:
输入特征图:假设经过某个卷积层的处理后,我们得到一个32×32×128的特征图,这意味着它有128个通道,每个通道都是32×32的空间维度。
通道:这里的128个通道可以被看作128种不同的特征表示。
在STDA中,自注意力机制的计算是在这些通道之间进行的。模型会计算每个通道与其他127个通道之间的关系,而不是在每个像素之间进行计算。因为通道的数量通常比像素的数量要少得多,计算复杂度也就大大降低了。举例来说,128个通道的自注意力计算只需要128 × 128 = 16,384次计算,相比之前一百万次的计算量,减少了很多。
(4) 自适应卷积核大小:
- 卷积核大小调整:在模型的不同阶段,使用不同大小的卷积核。例如,在早期层使用较小的卷积核,以捕捉细节信息;在后期层使用较大的卷积核,以捕捉更广泛的全局信息。
- 多尺度特征提取:这种方法使模型能够同时提取多尺度的特征,兼顾细节和全局信息。
(5) 输出整合:
整合特征:最终,将各个通道组的特征重新组合起来,形成整体的特征表示。这个过程类似于在全局和局部信息之间进行整合,确保模型能捕捉到完整的信息。
3. Low Rank Linear Module (LoRaLin)
传统的线性层使用一个权重矩阵将输入映射到输出,这个矩阵的大小决定了参数的数量和计算复杂度。LoRaLin通过将这个权重矩阵分解为两个低秩矩阵,从而减少参数数量和乘加运算量。
传统线性层:假设一个线性层的输入大小为
M
M
M,输出大小为
N
N
N,那么权重矩阵
W
W
W 的大小为
M
×
N
M \times N
M×N。计算公式为:
Y
=
W
×
X
+
b
Y = W \times X + b
Y=W×X+b
低秩分解:将权重矩阵
W
W
W 分解为两个较小的矩阵
W
M
×
r
W_{M \times r}
WM×r 和
W
r
×
N
W_{r \times N}
Wr×N,其中
r
r
r 是一个低秩参数。这样计算公式变为:
Y
=
W
r
×
N
×
(
W
M
×
r
×
X
)
+
b
Y = W_{r \times N} \times (W_{M \times r} \times X) + b
Y=Wr×N×(WM×r×X)+b
通过这种分解,原本的一个线性层被实现为两个具有较少参数的线性层,从而减少了计算量和存储需求。
超参数控制:
LoRaLin模块的秩由一个称为Rank-ratio (
γ
\gamma
γ) 的超参数控制。这个
γ
\gamma
γ 值决定了分解后的矩阵秩的大小,进而影响模型的参数数量和计算需求。通过调整
γ
\gamma
γ 值,可以在模型的计算复杂度和性能之间找到一个平衡点。
实例说明:
假设有一个网络 “edgenext-extra-small (XS)” 使用LoRaLin模块,如果
γ
≤
0.8
\gamma \leq 0.8
γ≤0.8,那么该模型的参数数量和计算效率相较于原始模型都有明显改善。这意味着在保证模型性能的前提下,LoRaLin成功地减少了模型的资源消耗。
总结:
LoRaLin通过将线性层的权重矩阵进行低秩分解,有效减少了参数数量和计算量。这种方法特别适用于需要在有限资源(如边缘设备)上运行的模型,同时保持较高的性能。
实验结果
在CA-LFW、CP-LFW、IJB-B和IJB-C数据集上,EdgeFace-S( γ = 0.5 \gamma = 0.5 γ=0.5)、EdgeFace-XS( γ = 0.6 \gamma = 0.6 γ=0.6)模型在识别准确率上优于同类的SOTA轻量级模型
结论
EdgeFace为边缘设备提供了一个高效且高度准确的人脸识别模型。未来研究可以通过知识蒸馏策略进一步提升模型性能,同时探索不同的量化方法,以改进存储和推理效率。