• Paper:https://arxiv.org/abs/1801.07698
  • Github:https://github.com/deepinsight/insightface

一、摘要

使用深度卷积神经网络 (DCNN) 进行大规模人脸识别的特征学习中,主要挑战之一在于 设计适当的损失函数以增强判别能力Center Loss 会惩罚欧式空间中深层特征及其对应的类中心之间的距离,以实现 类内紧凑性 (intra-class compactness)SphereFace 假定 最后一个全连接层中的线性变换矩阵 可用作角度空间 (angular space) 中类中心的表示,并以乘法方式惩罚深度特征及其相应权重 (weights) 之间的角度 (angles)。近期,一种流行的研究方向是将 margins 纳入已建立的损失函数中,以最大程度地提高人脸类别可分性 (face class separability)。本文提出了一个 加性角度边距损失 (Additive Angular Margin Loss, ArcFace),以获取用于人脸识别的高判别度特征 (highly discriminative features)。由于所提出的 ArcFace 与 超球面上的测地距离 (geodesic distance on the hypersphere) 精确对应,故其具有明晰的几何解释。大量实验表明,ArcFace 始终优于 SOTA,且容易实现,计算开销可忽略不计。


二、简介

使用 深度卷积神经网络嵌入 (DCNN Embedding) 的面部表示是人脸识别的首选方法。DCNNs 通常在 姿态归一化 (Pose Normalisation) 步骤后将面部图像映射到具有 较小的类内距离 (intra-class) 和 较大的类间距离 (inter-class) 的特征中。

有两个主要研究路线来训练 DCNNs 以进行人脸识别:

  1. 训练多类别分类器,如 Softmax 来分离训练集中的不同身份/实体 (identities)
  2. 直接学习嵌入,例如使用 Triplet Loss

基于大规模训练数据和精心设计的 DCNN 架构,基于 Softmax Loss 的方法和基于 Triplet Loss 的方法均可在人脸识别上取得出色性能。然而,Softmax Loss 和 Triplet Loss 都有一些缺点:

  • Softmax Loss:(1) 线性变换矩阵 W \in \mathbb{R} ^ {d \times n} 的大小随着身份/实体 (identities) 数 n 线性增加 (正线性相关);(2) 对于闭集分类 (Closed-set) 问题,学习到的特征是可分离的;但对于开集 (open-set) 人脸识别问题,则缺乏足够判别度。
  • Triplet Loss:(1) 人脸三元组 (triplets) 的数量出现了组合爆炸式增长,尤其是在大型数据集上,这导致迭代步骤数显着增加;(2) 对于有效的模型训练,半难样本挖掘 (semi-hard sample mining) 是一个相当困难的问题。

后来,研究人员提出了几种变体,以增强 Softmax Loss 的判别能力。 Wen 等率先提出了 Center Loss,即每个特征向量与其类中心之间的欧几里得距离,以获得 类内紧凑性 (intra-class compactness),而 类间分散性 (inter-class dispersion) 则通过对 Softmax 损失的联合惩罚来保障。然而,由于近期可用于训练的面部类别数急剧增加,因此在训练期间更新实际中心极为困难。

通过观察到在 Softmax Loss 上训练的分类 DCNN 的最后一个全连接层的权重,与每个面部类别的中心具有的概念上的相似性,有的工作提出了 Multiplicative Angular Margin Penalty 以同时执行额外的类内紧凑性和类间分散性惩罚,使训练后的模型更具判别度/区分力。 即使 Sphereface 引入了重要的 angular margin 概念,它们的损失函数也需要一系列近似值才能进行计算,这导致网络的训练不稳定。为稳定训练,他们提出了一种混合损失函数,其中包含了标准 Softmax Loss。根据经验,Softmax Loss 会影响训练过程,因为 Interger-based Multiplicative Angular Margin 会使目标 logit 曲线非常陡峭,从而妨碍收敛。CosFace 则将 Cosine Margin Penalty 直​​接加到目标 logit 中,与 SphereFace 相比,可获得更佳性能、更易实现,且消除了 Softmax Loss 联合监督的需要。

ArcFace 输入输出流程

本文提出了 加性角度边距损失 (Additive Angular Margin Loss, ArcFace),以进一步提高人脸识别模型的判别能力,并稳定训练过程。如上图所示,DCNN 特征和最后一个 FC 层权重之间的点积/内积 等于 特征和权重归一化之后的余弦距离。先利用 反余弦 (arc-cosine) 函数来计算当前特征与目标权重之间的角度。然后,把一个 加性角度边距 (additive angular margin)加到目标角度,然后通过 余弦 (cosine) 函数再次获得目标 logit。接着,通过固定的特征范数重缩放所有 logit,且后续的步骤与 Softmax Loss 中的步骤完全相同。

        ArcFace 流程 ☆

设类别数为 n,DCNN 最后一个 FC 层的权重 W 的维度为 d \times n,输入 W 的特征 x_i 的维度为 d

  1. 分别归一化输入特征 x_i \in \mathbb{R}^{d} 和 FC 层权重 W_j \in \mathbb{R}^{d \times 1} (张量除以欧几里得范数标量),令所得归一化特征 \frac{x_i}{ \left \| x_i \right \|} 与第 j \in \{1, 2,.., y_i ,.., n\} 个类别的 FC 层权重  \frac{W_{j}^T}{\left \| W_{j} \right \|} \in \mathbb{R}^{1 \times d}点乘得到 FC 层的第 j 个输出 cos \theta_j \in \mathbb{R}^{1 \times 1}(数量积公式 W_j^T \cdot x_i = \left \| W_j \right \| \left \| x_i \right \| cos \theta_j 详见 3.1.1 节),表示 将特征 x_i 预测为第 j 类的预测值 (原 Logit) (通常,令特征与所有类别的 FC 层权重进行矩阵乘法并 Softmax 可得类别预测概率值 Prob)。
  2. 设特征 x_i 的真实类别为第 y_i 个类别,则同理有 W_{y_i}^T \cdot x_i = \left \| W_y_i \right \| \left \| x_i \right \| cos \theta_{y_i}。通过单独取出 Target 权重 \frac{W_{y_i}^T}{\left \| W_{y_i} \right \|} 计算 \theta_{y_i} = arccos (cos \theta_{y_i}) = arccos( \frac{W_{y_i}^T}{\left \| W_{y_i} \right \|} \cdot \frac{x_i}{ \left \| x_i \right \|}) 可得归一化特征 \frac{x_i}{ \left \| x_i \right \|} 与 归一化 Target 权重 \frac{W_{y_i}^T}{\left \| W_{y_i} \right \|} 之间的夹角 —— Target 角度 \theta_{y_i}
  3. 通过把一个自定义的 加性角度边距 (additive angular margin) m 加到 \theta_{y_i},得到 \theta_{y_i} + m,用于 调整 Target 角度
  4. 计算经调整的 Target 角度的余弦,得到 仅 关于特征 x_i 的真实类别 y_i 的 新 Target Logit cos(\theta_{y_i} + m)
  5. 通过自定义的 特征范数 s 重缩放 所有 Logit (除 Target Logit 变为 cos(\theta_{y_i} + m) 外其余原 Logit 仍为 cos \theta_j,矩阵运算时需用 相当于 0/1 mask 的 one-hot labels 区分) 得到 新 Logit s * cos \theta_j, j \in \{1, 2,.., y_i ,.., n\}
  6. 对上述过程得到的  Logit 按通常方式计算 Softmax Loss (Softmax Loss 详见附录)。

        ArcFace 优点 ☆

  1. Engaging:ArcFace 通过归一化超球面中角度和弧线之间的精确对应关系直接优化了测地距离边距 (geodesic distance margin)。 我们通过分析特征和权重之间的角度统计来直观地说明在 512-D 空间中发生的情况。
  2. Effective:ArcFace 在十项人脸识别基准 (包括大规模图像和视频数据集) 上达到了 SOTA 性能。
  3. Easy:ArcFace 仅需算法 1 中给出的几行代码,且在基于计算图的深度学习框架中极易实现,无需与其他损失函数结合即可获得稳定的性能,并可轻松地收敛。
  4. Efficient:在训练期间,ArcFace 仅增加了可忽略不计的计算复杂度。当前的 GPU 可以轻松支持数百万个身份/实体训练,而模型并行策略可轻松支持更多身份/实体。

三、方法


3.1 ArcFace


3.1.1 ArcFace 原理

最广泛应用的分类损失函数 Softmax Loss 为:

其中,x_i \in \mathbb{R}^d 表示第 i 个样本的深度特征,其实际属于第 y_i 类。本文按照惯例,设嵌入特征维数 d=512W_j \in \mathbb{R}^d表示 FC 层权重 W \in \mathbb{R}^{d \times n} 的第 j 列,b_j \in \mathbb{R}^n 是偏置项。Batch Size 和类别数分别为 N 和 n。传统的 Softmax Loss 广泛用于深度人脸识别。然而,Softmax Loss 函数并未显式优化特征 Embedding 以增强 类内样本的相似度 类间样本的多样性/不一致性,这会引发在 类内外观变化较大 (例如姿态变化和年龄差距)大规模测试场景 (例如百万或数万亿对) 下深度人脸识别的性能鸿沟。

为方便表示,固定偏置 b_j = 0。然后,将 Logit 转换为 cos \theta_{j} = arccos( \frac{W_{j}^T}{\left \| W_{j} \right \|} \cdot \frac{x_i}{ \left \| x_i \right \|})。其中,\theta_j 是特征 x_i 和权重 W_j 的夹角。通过 L_2 范数固定 \left \| W_j \right \| = 1 和 Embedding 特征 \left \| x_i \right \|,并将 Logit 重放缩到 s。在特征和权重上的归一化步骤使得预测仅依赖于特征和权重之间的夹角 \theta_j。学习到的 Embedding 特征也因此分布在半径为 s 超球面上。此时 Loss 表达式如下所示:

由于 Embedding 特征分布在超球面上的每个特征中心周围,因此我们在特征 x_i 和目标权重 W_{y_i} 之间添加了一个 加性角度边距 (additive angular margin) m得到 \theta_{y_i} + m以 同时增强 类内紧凑性 和 类间差异性。由于提出的 加性角度边距惩罚 (additive angular margin penalty) 等于 归一化超球面中的测地距离边距惩罚,因此我们将方法命名为 ArcFace。此时 Loss 表达式如下所示:

本文从 8 个不同身份/实体的人脸图像中选取足够的样本 (约1500张/类) 分别训练具有 Softmax LossArcFace Loss2-D 特征嵌入网络。

在带有 2D 特征的 8 个身份/实体的 softmax 和 ArcFace 损失下的玩具示例。
点表示样本,线代表每个身份/实体的中心方向。
基于特征归一化,所有人脸特征均以固定半径推入弧空间。
随着加性角度惩罚的增加,最近的类别间的测地距离差距变得显著。

如图 3 所示,Softmax Loss 提供了 大致可分离的特征 Embedding,但在决策边界中产生了明显的模糊性;而 ArcFace Loss 则显然可以 在最近的类间得到更显著的间隙 (类间距明显因 m 而增大)


3.1.2 ArcFace Loss 算法


3.1.3 ArcFace Loss 实现

from __future__ import print_function
from __future__ import division
import torch
import torch.nn as nn
import torch.nn.functional as F
from torch.nn import Parameter
import mathclass ArcMarginProduct(nn.Module):r"""Implement of large margin arc distance: :Args:in_features: size of each input sampleout_features: size of each output samples: norm of input featurem: additive angular margincos(theta + m)"""def __init__(self, in_features, out_features, s=30.0, m=0.50, easy_margin=False):super(ArcMarginProduct, self).__init__()self.in_features = in_features    # 特征输入通道数self.out_features = out_features  # 特征输出通道数self.s = s                        # 输入特征范数 ||x_i||self.m = m                        # 加性角度边距 m (additive angular margin)self.weight = Parameter(torch.FloatTensor(out_features, in_features))  # FC 权重nn.init.xavier_uniform_(self.weight)  # Xavier 初始化 FC 权重self.easy_margin = easy_marginself.cos_m = math.cos(m)self.sin_m = math.sin(m)self.th = math.cos(math.pi - m)self.mm = math.sin(math.pi - m) * mdef forward(self, input, label):# --------------------------- cos(theta) & phi(theta) ---------------------------# 分别归一化输入特征 xi 和 FC 权重 W, 二者点乘得到 cosθ, 即预测值 Logit  cosine = F.linear(F.normalize(input), F.normalize(self.weight))# 由 cosθ 计算相应的 sinθsine = torch.sqrt(1.0 - torch.pow(cosine, 2))# 展开计算 cos(θ+m) = cosθ*cosm - sinθ*sinm, 其中包含了 Target Logit (cos(θyi+ m)) (由于输入特征 xi 的非真实类也参与了计算, 最后计算新 Logit 时需使用 One-Hot 区别)phi = cosine * self.cos_m - sine * self.sin_m  # 是否松弛约束??if self.easy_margin:phi = torch.where(cosine > 0, phi, cosine)else:phi = torch.where(cosine > self.th, phi, cosine - self.mm)# --------------------------- convert label to one-hot ---------------------------# one_hot = torch.zeros(cosine.size(), requires_grad=True, device='cuda')# 将 labels 转换为独热编码, 用于区分是否为输入特征 xi 对应的真实类别 yione_hot = torch.zeros(cosine.size(), device='cuda')one_hot.scatter_(1, label.view(-1, 1).long(), 1)# -------------torch.where(out_i = {x_i if condition_i else y_i) -------------# 计算新 Logit#  - 只有输入特征 xi 对应的真实类别 yi (one_hot=1) 采用新 Target Logit cos(θ_yi + m)#  - 其余并不对应输入特征 xi 的真实类别的类 (one_hot=0) 则仍保持原 Logit cosθ_joutput = (one_hot * phi) + ((1.0 - one_hot) * cosine)  # can use torch.where if torch.__version__  > 0.4# 使用 s rescale 放缩新 Logit, 以馈入传统 Softmax Loss 计算output *= self.sreturn output

3.2 Comparison with SphereFace and CosFace


3.2.1 Numerical Similarity

分别设:

  • SphereFace乘性角度边距惩罚 (multiplicative angular margin penalty) 为 m_1
  • ArcFace 的 加性角度边距惩罚 (additive angular margin penalty) 为 m_2
  • CosFace 的 加性余弦边距惩罚 (additive cosine margin penalty) 为 m_3

从数值的角度分析,不同的 margin penalty 均旨在通过专门惩罚 Target Logit 以增强 类内紧凑型 和 类间分散性

图 4(b) 绘制了最佳 margin 设置下的 SphereFace、ArcFace、CosFace 的 Target Logit 曲线 (仅展示 [20^{\circ}, 100^{\circ}] 范围内)。

将所有的 margin penaltym_1m_2 和 m_3放在一个联合框架中可得:


3.2.2 Geometric Difference

除数值相似度外,ArcFace 还拥有 更好的几何属性,因为 angular margin 与 超球面上的测地距离 (geodesic distance on the hypersphere) 精确对应。

如图 5 在二分类案例下计算了决策边界 (蓝色虚线)。ArcFace 在整个间隔内具有恒定的线性 angular margin。对比之下,SphereFace 和 CosFace 仅具有非线性的 angular margin。

事实上,margin 设计上的细微差别可能会对模型训练产生“蝴蝶效应”。例如,原始的 SphereFace 采用衰减优化策略。为避免在训练伊始发散 (divergence),在 SphereFace 中使用了来自 Softmax 的联合监督可弱化 multiplicative angular margin penalty。通过采用反余弦函数取代 complex double angle公式,我们实现了一个新版 SphereFace,而对 margin 没有整数要求。在实现中,我们发现与原始 SphereFace 相比,m = 1.35 时可获得类似性能而没有任何收敛 (convergence) 困难。


3.3 Comparison with Other Losses

其他损失函数可以基于特征和权重向量的角度来设计。例如,可以设计一个 Loss 来增强超球面上的类内紧凑性和类间差异性。如图 1 所示,我们对比了其他 3 个损失。

基于中心和特征归一化,所有身份都分布在超球面上。
为增强类内紧凑性和类间差异性,考虑了四种测地距离(GDis)约束。
(A)边距损失:在样本和中心间插入测地距离边距
(B)类内损失:减小样本与相应中心间的测地距离
(C)类间损失:增加不同中心间的测地距离
(D)三元组损失:插入三元组样本间的测地距离边距
本文提出了一个加性角度边距损失(ArcFace)
它与(A)中的测地距离(Arc)边距惩罚精确对应
以增强人脸识别模型的判别能力
  • Intra-Loss

Inter Loss 设计为通过减小样本与 GT 中心之间的角度/弧度来提高类内紧凑性,即希望加上的项尽量小,以压缩类内距离。

  • Inter-Loss

Inter Loss 旨在通过增加不同中心之间的角度/弧度来增强类间差异性,即希望减去的项尽量大,以扩大类间距离。

此处的内部损耗是最小超球面能量 (MHE) 方法的特例。在 MHE 论文中,隐藏层和输出层都由 MHE 进行了正则化,其还提出了损失函数的特殊情况,方法是将 SphereFace Loss 与网络最后一层的 MHE Loss 相结合。

  • Triplet Loss

Triplet Loss 旨在扩大三元组样本的角度/弧度 margin。在 FaceNet 中,对归一化的特征采用了欧几里距离。此处,我们采用 Triplet Loss 作为特征的角度表示,即 arccos(x_i^{pos} x_i) + m \leqslant arccos(x_i^{neg} x_i)


附、相关知识


A. Softmax Loss = Softmax + Cross Entropy Loss

A.1 Softmax

        Softmax 激活函数 常后接在神经网络的最后一层,以于分类任务。相比于 Sigmoid 只能用于二分类,Softmax 还可用于多分类

Softmax 能够将所有 预测值转换为预测概率值,并约束在 (0, 1] 范围之间,且概率值之和为 1。例如,第 i 个类别的预测值 z_i 经 Softmax 处理后,得到的预测概率值 y_i (最后一层的 Logit) 为:

由于网络输出的预测值可能存在负值,故采用 指数处理,使得预测值总大于 0,既得到了符合实际意义的 (0, 1] 概率范围,又统一了量纲便于比较

此外,由于是指数运算,往往也会因网络预测值过大造成指数溢出的情况 ,如 e^{66} 等就 指数爆炸 了。故通常还需增加一个数值处理,即 令每个预测值先减去最大预测值,再进行指数运算。例如,第 i 个类别的预测值 z_i 经 Softmax 处理和去最大值处理后,得到的预测概率值 y_i^{'} 为:

为方便起见,后续说明仍使用未经减去最大预测值处理的 Softmax。


A.2 Cross Entropy Loss

在单标签多分类任务中,常用 交叉熵损失 (Cross Entropy Loss) 作为损失函数。设在某 m 分类问题下,第 i 个样本预测值为 z_i,经 Softmax 处理得到预测概率值为 y_i,其 GT / Label / Target 为 \hat{y_i} \in C = \{ C_1, C_2, ... C_m \},则第 i 个样本的交叉熵损失 L_{CE}^{i} 为 (如上图例子所示):

注意,当使用 One-Hot 编码时,容易发现只有当前样本预测值 y_i 及其对应的真实标签 \hat{y_i} = 1,此时计算损失不为 0 为 L = -logy_i;其余 \hat{y_j}=0, j \neq i,故计算损失总为 0。又由于单标签多分类任务下,每个样本仅属于一个类别,故第 i 个样本的交叉熵损失 L_{CE}^{i} 实际可表示为:

因此,设 batch size 为 N,则 一个 batch 的交叉熵损失 L_{CE} 可表示为:


A.3 Softmax Loss

紧接上节,若将网络最后一个全连接层的 Softmax 操作单独提取出来,可得到针对 一个 batch 的预测值 (Logit) z_i, i \in \{1,2,...N\} (而非预测概率值) 的 Softmax Loss 为

举个例子,设在某三分类问题下 C = \{C_1, C_2, C_3\}, \left | C \right | = 3,对某一模型输入 N = 2 的 batch。其中样本 1 的模型预测值 z_1 = [0.3, 0.4, 0.8]^T, \hat{z_1} = C_1z_2 = [0.5, 0.7, 0.1]^T, \hat{z_2} = C_2,那么该 batch 的 Softmax Loss 为:

实际操作中,通常会在网络最后一层接一个 Softmax,很多 paper 将 传统 Softmax loss 表示为如下形式:

其中,W_j 和 b_j 是网络最后一个全连接层的第 j 个权重和偏置;W_{C_i} 和 b_{C_i} 则是馈入的深层特征 x_i 的 GT / Target / Label C_i 所对应的权重和偏置,简称 Target 权重Target 偏置

简言之,Softmax LossSoftmaxCross Entropy Loss 的关系是:将网络输出的预测值 (Logit) 先用使用 Softmax 转换为预测概率值,再传入 Cross Entropy Loss 计算,就得到了最终的 Softmax Loss

换言之,Softmax Loss = Softmax + Cross Entropy Loss


B. 人脸识别损失函数

关于 Loss 对网络最直观影响便是通过计算 Loss 反向传播梯度以更新模型参数,而不同的 Loss 可使模型更侧重于学习到数据不同方面的特性,并在之后能够更好地提取到这一特有/特定的特征,故 Loss 对网络优化有导向性作用。近年来,人脸识别领域的 Loss 不断发展,从 Center Loss 到 SphereFace、CosineFace、InsightFace 再到 ArcFace,均与传统的 Softmax Loss 存在一定联系,故有必要了解一下各 Loss。


B.1 Softmax Loss

Softmax Loss 中, W_{j}^{T} x_i + b_j 代表线性层/仿射层/全连接层的输出,在训练使损失 L_s 下降的过程中,应提高 W_{y_i}^{T} x_i + b_{y_i} 所占比重,从而使该类的样本更多地落入到该类的决策边界之内。然而,该方式 主要考虑样本是否能正确分类,而 缺乏类内和类间距离的约束

【A Discriminative Feature Learning Approach for Deep Face Recognition】的作者在 Mnist 上用了一个比 LeNet 更深的网络结构证明 Softmax 学习到的特征与理想状态下的差距:

结果表明,传统的 Softmax 仍存在很大的类内距离。为此,上文作者提出了 Center Loss。


B.2 Center Loss

Center Loss 希望 batch 中各样本特征 x_i 离特征中心 c_{y_i} 的距离的平方和尽量小 —— 通过约束使得类内距离越小越好,此时类内紧凑性越来越强。

最终的损失函数由 Softmax Loss 和 Center Loss 构成,并用参数 λ 来控制相对比重,如下所示:

因而,加入了 对正确类别分类有所考量的 Softmax Loss,以及 对类内距离紧凑有所考量的 Center Loss,总损失函数在分类结果上颇具表现力。


B.3 SphereFace / A-Softmax Loss

Center Loss 的出现,使得人脸识别的研究转向损失函数的改进。研究发现 Softmax Loss 学习到的特征分辨性/区分度/判别性不够强Center Loss 考虑到了类内紧凑性却忽略了类间可分性,而 Contrastive Loss、Triplet Loss 增大了时间损耗

【SphereFace: Deep Hypersphere Embedding for Face Recognition】一文的作者提出了 A-Softmax Loss。在原 Softmax Loss 中,由 W^T x = \left \| W \right \| \cdot \left \| x \right \| \cdot cos\theta 可知,特征向量的内积/点乘包含了向量间夹角角度的信息,即 Softmax 使得学习到的特征具有角度上的分布特性。为学习到更具区分度/判别性的角度特性,作者对原 Softmax Loss 部分改进如下:

其中,在 L_{modified_0} 中约束了权重的欧几里得范数 \left \| W \right \| = 1,并令偏置项 b_j = 0,还将 e^{\left \| x_i \right \| \cdot cos\theta_{y_i} } 从 \sum_{j=1}^{n} e^{\left \| x_i \right \| \cdot cos \theta_j} 区分出来 (分母),以便于特征学习到 更可分的角度特性,这样的特征具有 更明显的角度分布,因为 决策边界只与角度相关

对 Softmax 而言,希望有 cos \theta_1 > cos \theta_2 (上左图蓝色虚线即决策边界),以使样本被正确分类为 Class1。

为此,作者增加了在角度空间中对损失函数的约束 cos (t \cdot \theta_1) > cos \theta_2 ,旨在将同类数据压缩在更紧凑的空间中 (系数 t 使得 \theta 的范围更小),同时扩大异类类间差距 (系数 t 使得上右图蓝色虚线表示的决策边界扩大)。

由于 cos \theta 在 [0, \pi] 上单调递减,故 \theta 存在上界。为使上述函数随角度单调递减,作者构造了另一个函数 \varphi (\theta_{y_i}) 代替 cos \theta

在 SphereFace 的实际训练过程中,作者发现引入 Softmax 约束可保证模型的收敛性。因此,进一步修改了 \varphi (\theta_{y_i}) 函数,并用参数 \lambda 控制分子两项的比重。

参数 t 用于控制同类样本点的聚集程度,从而间接地控制了异类间的距离,例如:

容易看出  t 的不同取值对映射分布的影响 (不同的类位于一个单位超球表面的不同区域)。

后续的 F-Norm SphereFace 则对 SphereFace 进一步改进,仅关注从数据中得到的角度信息,而不考虑特征向量的模值,故采用 s = 64 作为 特征归一化参数 取代 \left \| x \right \|,其公式更新为:

事实上,用 s = 64 作为特征归一化参数替代 \left \| x \right \| 的思想也被 Cosine LossArcface Loss 沿用,即 相对于距离信息更加重视角度信息


B.4 Cosine Margin Loss

与 SphereFace 相比,CosineFace 最明显的变化就是将 cos(t \cdot \theta_{y_i}) 中的 t 提出来变成 cos \theta_{y_i} - t,其优势在于:

  • 相较 SphereFace 更易实现,移除 \varphi (\theta_{y_i}) 减少了复杂的参数计算量
  • 移除 Softmax 监督约束,简化训练过程,同时仍保证收敛
  • 模型性能显著改善

B.5 Arcface Margin Loss

尽管在余弦范围到角度范围的映射具有一对一的关系,但他们之间仍有不同之处,事实上,实现角度空间内最大化分类界限相对于余弦空间而言具有更加清晰的几何解释性,角空间中的边缘差距也相当于超球面上的弧距。


B.6 Loss 对比分析

为研究 SphereFace、CosineFace 和 ArcFace 是如何提高人脸识别的效果,作者使用了 LResNet34E-IR 网络和 M1SM 人脸数据集分别使用不同的损失函数对网络进行训练,客观分析了其中的影响。


参考文献:

Shopee竞赛知识点--ArcFace!

论文阅读之Arcface_Zebiao Wu Blog-CSDN博客

人脸识别项目,网络模型,损失函数,数据集相关总结 - 简书

softmax loss详解,softmax与交叉熵的关系 - 知乎

【机器学习】详解 Softmax Loss = Softmax + Cross Entropy Loss_闻韶-CSDN博客

【机器学习】详解 ArcFace相关推荐

  1. 二分类最优阈值确定_机器学习 | 详解GBDT在分类场景中的应用原理与公式推导...

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第31篇文章,我们一起继续来聊聊GBDT模型. 在上一篇文章当中,我们学习了GBDT这个模型在回归问题当中的原理.GBD ...

  2. 强的离谱, Transformer 模型与联邦机器学习详解!

    Transformer 作为一种基于注意力的编码器 - 解码器架构,不仅彻底改变了自然语言处理(NLP)领域,还在计算机视觉(CV)领域做出了一些开创性的工作.与卷积神经网络(CNN)相比,视觉 Tr ...

  3. 机器学习--详解基于梯度下降的Logistic回归算法原理

    先给出Logistic回归的sigmod函数数学表达式: 很简单的表达式,再看看它的性质,当时,,因此 当时,,因此 Logistic回归之所以称为Logistic是因为只有两个状态即0和1,这也是数 ...

  4. 机器学习——详解KD-Tree原理

    今天是机器学习的第15篇文章,之前的文章当中讲了Kmeans的相关优化,还讲了大名鼎鼎的EM算法.有些小伙伴表示喜欢看这些硬核的,于是今天上点硬菜,我们来看一个机器学习领域经常用到的数据结构--KD- ...

  5. 机器学习--详解贝叶斯公式、朴素贝叶斯的来龙去脉(附上多方式代码实现)

    贝叶斯公式: 提到贝叶斯公式,首先需要从条件概率说起,因为他们都是基于条件概率发展而来的,既然条件概率那么重要,那么什么是条件概率呢? 条件概率是概率论中的一个重要而时用的概念,生活中我们总是无意识的 ...

  6. 机器学习--详解人脸对齐算法SDM-LBF

    https://www.cnblogs.com/Anita9002/p/7095380.html 引自:http://blog.csdn.net/taily_duan/article/details/ ...

  7. 【机器学习详解】SVM解回归问题

    转载请注明出处:http://blog.csdn.net/luoshixian099/article/details/51121767 CSDN−勿在浮沙筑高台 \color{Blue}{CSDN-勿 ...

  8. SLAM学习笔记(二十)LIO-SAM流程及代码详解(最全)

    写在前面 关于安装配置,博客LIO_SAM实测运行,论文学习及代码注释[附对应google driver数据] 我觉得已经写的比较完善了.但是我觉得在注释方面,这位博主写的还不够完善,因此在学习以后, ...

  9. 详解SVM支持向量机算法(四:坐标上升和SMO算法)

    作者:RayChiu_Labloy 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 目录 背景 坐标上升算法 定义 过程 举个求解的栗子 基于坐标上升的SMO算法 SMO ...

  10. 微软开源的自动机器学习工具上新了:NNI概览及新功能详解

    作者 | 宋驰 来源 | 微软研究院AI头条(ID: MSRAsia) 2018年9月,微软亚洲研究院发布了第一版 NNI (Neural Network Intelligence) ,目前已在 Gi ...

最新文章

  1. 《JavaScript忍者秘籍》——导读
  2. boolean searching, it is so important for searching your papers
  3. weakhashmap_Java WeakHashMap entrySet()方法与示例
  4. uniapp 表单提交图片跟其他填写数据_记录第一次实现表单数据提交到数据库
  5. mysql 表 区 块 页_数据库 | 001-MySQL梳理系列(一)
  6. digiKam 6.1.0 发布,相片管理工具
  7. python3.7.2安装与pycharm_Python3和PyCharm安装与环境配置【图文教程】
  8. mysql 5.7.11 压缩包安装办法遇到故障后彻底卸载办法
  9. Mybatis-Dao层开发之Mapper接口
  10. python可不可以同时执行1000个线程_python怎么能同时执行代码(多线程)?
  11. 李宏毅svm_CAA | 【智能自动化学科前沿讲习班第1期】国立台湾大学(位于中国台北)李宏毅教授:Anime Face Generation...
  12. vue el-descriptions 样式问题
  13. 如何将小程序内置非promise API转换为promise对象(风袖小程序的学习)
  14. pt100专用芯片_新能源 汽车电机专用温度传感器 PT100 进口芯片 德国
  15. 新站如何快速提升百度索引量
  16. 区块链技术与应用:未来的一场技术革命
  17. RPG Maker MV游戏解包
  18. solr教程,值得刚接触搜索开发人员一看
  19. Matlab实现最小二乘法拟合曲线
  20. 把一个数的分子分母化简

热门文章

  1. 学习笔记:微波遥感反演土壤水分——理论模型和经验模型(1)
  2. petalinux2020.2离线编译配置
  3. 趣味花体模糊字体玩法介绍与实践
  4. 在ESP32/ESP8266上使用MicroPython利用MQTT发布BME280传感器数据(温度,湿度和压力)
  5. 电容的串联和并联的性质
  6. 极域课堂管理系统软件如何取消控制_极域新品发布会圆满落幕,你想看的都在这里...
  7. 图像加密技术综述(常见的图像加密算法简介)
  8. 实现MySQL读写分离---maxscale代理服务器配置(详解)
  9. 铁三角- 倒数348天
  10. 模拟幅度调制相干解调系统抗噪声性能仿真分析