为了提高用于人脸识别的轻量级网络的判别和泛化能力,VargFacenet引用了可变组卷积(variable group convolution)来解决小计算量与块内计算强度不平衡之间的冲突,并通过可变组卷积设计网络。该网络在减少计算成本和参数的条件下,实现了大规模人脸识别。
作者根据具体识别任务设计了Normal block,down-sampling block,Head setting,Embedding setting。为了提高识别精度,作者采用递归知识角度蒸馏来学习teacher model训练得到的distribution。值得一提的是,LFR(2019)挑战赛,deepglintlight赛道冠军证明了本文模型和方法的有效性。
下面阐述VargFacenet几个核心创新点。
论文地址:
https://arxiv.org/abs/1910.04985v2
VarGFaceNet代码开源网址:
https://github.com/zma-c137/VarGFaceNet
作者采用可变组卷积(varg)作为网络的基础block,其主要想法和原因是,以往轻量型模型采用深度可分离卷积来实现轻量化目的,但是深度可分离卷积存在块内计算强度不平衡的问题,而且它的轻量化是在舍弃空间结构的基础上实现的,这使得模型在嵌入式设备中效率低下以及模型精度下降。为此,作者在深度可分离卷积的基础上提出了可变组卷积varg。
其实varg跟深度可分离卷积思想大致一致。mobilenet中深度可分离卷积可分为depthwise separable convolution和pointwise convolution,既先将feature map按channel数分成块,再通过1×1cov连接成新的feature map。不懂的小伙伴可以点这儿查看mobilenet具体解析
而varg如同depthwise separable convolution,只是varg将feature map按groups=n分成n块,这里groups是超参。所以它的计算成本就是 k 2 × h i × w i × c i × c i + 1 n \frac{k^2\times h_i \times w_i \times c_i \times c_{i+1}}{n} nk2×hi×wi×ci×ci+1, 这里k是kernel size,h,w是feature map的size, c i c_i ci是input channel, c i + 1 c_{i+1} ci+1是output的size。
varg相较于深度可分离卷积,舍弃了一定程度的计算成本的降低,而填补了卷积的空间结构。
VargFacenet一共设计了4个模块,Normal block,Downsampling block,Head setting, Embedding setting。这四个模块都是由varg组成,除了Embedding setting外,其他模块都存在残差。这些模块从Figure 1中可以看出并理解其结构。 The memory foot print of our VarGFaceNet is 20M and FLOPs is 1G.
针对闭集数据,很多方法已经取得了显著的效果。但是对于人脸识别这种开集数据来说,由于训练集与测试集类别不同,很难通过强调两端特种直接准确匹配来实现精度提升。所以,作者借鉴ShrinkTeaNet的Angular Distillation loss来蒸馏两端特征的方向以及来自teacher model超球面的样本分布,从而让student model获取更好的性能。
I I I表示输入, θ t \theta^t θt指teacher model的参数, θ s \theta^s θs表示student model的参数。S的学习过程通常是在T的监督下进行的,通过对T的输出进行分步比较。
G i t ( ⋅ ) \mathcal{G}_i^t(\cdot) Git(⋅), G i s ( ⋅ ) \mathcal{G}_i^s(\cdot) Gis(⋅)分别表示T和S的转换方程使得他们相应的嵌入特征可比较(即维度相同)。 d ( ⋅ , ⋅ ) d(\cdot,\cdot) d(⋅,⋅) denotes the difference between these transformed features.然后by minimizing these differences L d i s t i l l = ∑ 1 n λ i L i ( S , T ) \mathcal{L}_{distill}=\sum_{1}^n\lambda_i\mathcal{L}_i(S,T) Ldistill=∑1nλiLi(S,T), teacher model的知识可以转移到S,这样它们就可以嵌入相似的潜在域。 F i t F_i^t Fit和 F i s F_i^s Fis之间的距离隐含地定义了要从T转移到S的知识。而转移方程 G i t ( ⋅ ) \mathcal{G}_i^t(\cdot) Git(⋅), G i s ( ⋅ ) \mathcal{G}_i^s(\cdot) Gis(⋅)控制了转移信息的部分。
下面我们着重分析如何设计这两部分,让他们能够选择最有效的信息并转移到S。
在开集任务中,由于类别不能事前设定,所以每个类别的样本分布以及类间距离成为更加重要的知识。因此,作者提出用角度信息作为主要知识被蒸馏。通过这种方式,可以放宽约束,使学生模型提取的嵌入特征与教师提取的嵌入特征方向相似,而不是强制学生模型完全遵从教师模型的输出。
angular distillation loss:
通过余弦相似度来衡量S,T之间的距离。如果ST角度为0(即没有间隔),说明S已经习得T的角度分布,则 L n ( S , T ) = 1 − 1 = 0 \mathcal{L}_n(S,T)=1-1=0 Ln(S,T)=1−1=0. 若ST之间角度间隔大,则的值会趋于0,导致loss趋向1.
VarGFaceNet采取的是上式的等效形式:
另外应用ArcFace Loss作为类别损失,同样也是关注于角度信息:
因此,总的目标函数是上述两个公式之和:
如果teacher和student模型存在较大的差异,仅一次的知识蒸馏可能不足以迁移足够的知识到student modal中。为了提高本文student modal的判别性能力和泛化能力,本文使用递归知识蒸馏,用第一代的student modal来初始化第二代的student modal。有两个好处:
(1)好的初始化可使student更容易接近teacher的的指引方向;
(2)分类损失和作为指导的指引的角度信息之间的冲突能在第二代中得到缓和。