人脸识别损失函数疏理与分析

博客:博客园 | CSDN | bloghtml

写在前面

Closed-set 和 Open-set 人脸识别的对好比下,git

Comparison-of-open-set-and-closed-set-face-recognition.png

两张人脸图像,分别提取特征,经过计算特征向量间的距离(类似度)来判断它们是否来自同一我的。选择与问题背景相契合的度量方式很重要,人脸识别中通常有两种,欧氏距离余弦距离(角度距离)github

训练阶段和测试阶段采用的度量方式要一致,若是想在测试阶段使用欧氏距离,天然在训练阶段就要基于欧氏距离来构造损失进行优化。网络

实际上,不一样度量方式间存在着必定的内在联系,app

  • 欧氏距离与向量的模和角度都有关,模固定,角度越大欧氏距离也越大,角度固定,模同比增大欧式距离也增大,模分别增大状况会比较复杂;
  • 余弦距离和角度距离有单调关系(负相关),但二者分布的“密度”不一样,观察余弦函数曲线可知,在角度从0向\(\pi\)匀速(线性)前进时,余弦值在0和\(\pi\)附近缓慢变化,在\(\frac{\pi}{2}\)附近近似线性变化
  • 当向量模长归一化后,欧氏距离和余弦距离有单调关系,因此,在预测阶段,归一化后的特征选取哪一种度量进行判别都可

可对不一样损失函数按度量方式进行划分,函数

  • 欧氏距离:Contrastive Loss,Triplet Loss,Center Loss……
  • 余弦距离(角度距离):Large-Margin Softmax Loss,Angular-Softmax Loss,Large Margin Cosine Loss,Additive Angular Margin Loss……

先从最基本的Softmax Loss开始。学习

Cross-Entropy Loss (softmax loss)

交叉熵损失,也称为softmax损失,是深度学习中应用最普遍的损失函数之一。测试

\[\mathcal{L}_{\mathrm{s}}=-\frac{1}{N_b} \sum_{i=1}^{N_b} \log \frac{e^{W_{y_{i}}^{T} x_{i}+b_{y_{i}}}}{\sum_{j=1}^{n} e^{W_{j}^{T} x_{i}+b_{j}}} \]

其中,大数据

  • \(n\)个类别,\(N_b\)为batch size
  • \(x_{i} \in \mathbb{R}^{d}\),第\(i\)个样本的特征,特征有\(d\)维,属于\(y_i\)
  • \(W \in \mathbb{R}^{d \times n}\)为权重矩阵,\(W_j\)表示\(W\)的第\(j\)列,\(b_{j} \in \mathbb{R}^{n}\)为bias

特征\(x\)经全链接层的权重矩阵\(W\)获得与类别数相同的\(n\)\((-\infty, +\infty)\)实数,相对越大的实数表明越像某一个类别,Softmax的做用是将\((-\infty, +\infty)\)\(n\)个实数经过指数映射到\((0, +\infty)\),而后归一化,使和为1,以得到某种几率解释。优化

指数操做会将映射前的小差别指数放大,Softmax Loss但愿label对应的项越大越好,但由于指数操做的存在,只须要映射前差别足够大便可,并不须要使出“全力”。

在人脸识别中,可经过对人脸分类来驱动模型学习人脸的特征表示。但该损失追求的是类别的可分性,并无显式最优化类间和类内距离,这启发了其余损失函数的出现。

Contrastive Loss - CVPR2006

Contrastive Loss由LeCun在《Dimensionality Reduction by Learning an Invariant Mapping》CVPR2006中提出,起初是但愿降维后的样本保持原有距离关系,类似的仍类似,不类似的仍不类似,以下所示,

\[\begin{array}{c} L\left(W, Y, \vec{X}_{1}, \vec{X}_{2}\right)= (1-Y) \frac{1}{2}\left(D_{W}\right)^{2}+(Y) \frac{1}{2}\left\{\max \left(0, m-D_{W}\right)\right\}^{2} \end{array} \]

其中,\(\vec{X}_{1}\)\(\vec{X}_{2}\)为样本对,\(Y=\{0, 1\}\)指示样本对是否类似,\(Y=0\)类似,\(Y=1\)不类似,\(D_W\)为样本对特征间的欧氏距离,\(W\)为待学习参数。至关于欧氏距离损失+Hinge损失

Graph-of-Contrastive-Loss.png

类内但愿距离越小越好,类间但愿越大越好(大于margin),这恰与人脸识别特征学习的目的相一致。Contrastive Loss在DeepID2中得以使用,做为Verification Loss,与Softmax Loss形式的Identification Loss构成联合损失,以下所示,

\[\operatorname{Ident}\left(f, t, \theta_{i d}\right)=-\sum_{i=1}^{n}-p_{i} \log \hat{p}_{i}=-\log \hat{p}_{t} \\ \operatorname{Verif}\left(f_{i}, f_{j}, y_{i j}, \theta_{v e}\right)=\left\{\begin{array}{ll} \frac{1}{2}\left\|f_{i}-f_{j}\right\|_{2}^{2} & \text { if } y_{i j}=1 \\ \frac{1}{2} \max \left(0, m-\left\|f_{i}-f_{j}\right\|_{2}\right)^{2} & \text { if } y_{i j}=-1 \end{array}\right. \]

这种Softmax Loss + 其余损失 构成的联合损失比较常见,经过引入Softmax Loss可让训练更稳定,更容易收敛。

Triplet Loss - CVPR2015

Contrastive Loss的输入是一对样本。

Triplet Loss的输入是3个样本,1对正样本(同一我的),1对负样本(不一样人),但愿拉近正样本间的距离,拉开负样本间的距离。Triplet Loss出自《FaceNet: A Unified Embedding for Face Recognition and Clustering》

triplet-loss.png

损失函数以下,

\[\mathcal{L}_t = \sum_{i}^{N}\left[\left\|f\left(x_{i}^{a}\right)-f\left(x_{i}^{p}\right)\right\|_{2}^{2}-\left\|f\left(x_{i}^{a}\right)-f\left(x_{i}^{n}\right)\right\|_{2}^{2}+\alpha\right]_{+} \]

该损失但愿在拉近正样本、拉开负样本的同时,有一个margin,

\[\left\|f\left(x_{i}^{a}\right)-f\left(x_{i}^{p}\right)\right\|_{2}^{2}+\alpha<\left\|f\left(x_{i}^{a}\right)-f\left(x_{i}^{n}\right)\right\|_{2}^{2} \]

Softmax Loss最后的全链接层参数量与人数成正比,在大规模数据集上,对显存提出了挑战。

Contrastive Loss和Triplet Loss的输入为pair和triplet,方便在大数据集上训练,但pair和triplet挑选有难度,训练不稳定难收敛,可与Softmax Loss搭配使用,或构成联合损失,或一前一后,用Softmax Loss先“热身”。

Center Loss - ECCV2016

由于人脸表情和角度的变化,同一我的的类内距离甚至可能大于不一样人的类间距离。Center Loss的出发点在于,不只但愿类间可分,还但愿类内紧凑,前者经过Softmax loss实现,后者经过Center Loss实现,以下所示,为每一个类别分配一个可学习的类中心,计算每一个样本到各自类中心的距离,距离之和越小表示类内越紧凑。

\[\mathcal{L}_{c e}=\frac{1}{2} \sum_{i=1}^{N}\left\|x_{i}-c_{y_{i}}\right\|_{2}^{2} \]

联合损失以下,经过超参数\(\lambda\)来平衡两个损失,并给两个损失分配不一样的学习率,

\[\begin{aligned} L_{c} &=L_{s}+\lambda L_{c e} \\ &=-\sum_{i=1}^{N_{b}} \log \frac{e^{W_{y_{i}}^{T} x_{i}+b_{y_{i}}}}{\sum_{j=1}^{n} e^{W_{j}^{T} x_{i}+b_{j}}}+\frac{\lambda}{2} \sum_{i=1}^{N_b}\left\|x_{i}-c_{y_{i}}\right\|_{2}^{2} \end{aligned} \]

center-loss-algorithm.png

但愿达成的效果以下,

center-loss-distribution-of-features.png

以上损失在欧氏距离上优化,下面介绍在余弦距离上优化的损失函数。

L-Softmax Loss - ICML2016

L-Softmax 即 large-margin softmax,出自《Large-Margin Softmax Loss for Convolutional Neural Networks》

若忽略bias,FC+softmax+cross entropy可写成以下形式,

\[L_{i}=-\log \left(\frac{e^{\left\|\boldsymbol{W}_{y_{i}}\right\|\left\|\boldsymbol{x}_{i}\right\| \cos \left(\theta_{y_{i}}\right)}}{\sum_{j} e^{\left\|\boldsymbol{W}_{j}\right\|\left\|\boldsymbol{x}_{i}\right\| \cos \left(\theta_{j}\right)}}\right) \]

可将\(\boldsymbol{W}_{j}\)视为第\(j\)类的类中心向量,对\(x_i\),但愿\(\left\|\boldsymbol{W}_{y_{i}}\right\|\left\|\boldsymbol{x}_{i}\right\| \cos \left(\theta_{y_{i}}\right)\)相比\(\left\|\boldsymbol{W}_{j}\right\|\left\|\boldsymbol{x}_{i}\right\| \cos \left(\theta_{j}\right), j \neq y_i\)越大越好,有两个影响因素,

  • \(\boldsymbol{W}\)每一列的模
  • \(\boldsymbol{x}_i\)\(\boldsymbol{W}_j\)的夹角

L-Softmax主要关注在第2个因素 夹角上,相比Softmax,但愿\(\boldsymbol{x}_i\)\(\boldsymbol{W}_{y_i}\)靠得更近,因而对\(\cos \left(\theta_{y_{i}}\right)\)施加了更强的约束,对角度\(\theta_{y_i}\)乘上个因子\(m\)若是想得到与Softmax相同的内积值,须要\(\theta_{y_i}\)更小

\[L_{i}=-\log \left(\frac{e^{\left\|\boldsymbol{W}_{y_{i}}\right\|\left\|\boldsymbol{x}_{i}\right\| \psi\left(\theta_{y_{i}}\right)}}{e^{\left\|\boldsymbol{W}_{y_{i}}\right\|\left\|\boldsymbol{x}_{i}\right\| \psi\left(\theta_{y_{i}}\right)}+\sum_{j \neq y_{i}} e^{\left\|\boldsymbol{W}_{j}\right\|\left\|\boldsymbol{x}_{i}\right\| \cos \left(\theta_{j}\right)}}\right) \]

为此,须要构造\(\psi(\theta)\),需知足以下条件

  • \(\psi(\theta) < cos(\theta)\)
  • 单调递减

文中构造的\(\psi(\theta)\)以下,经过\(m\)调整margin大小

\[\psi(\theta)=(-1)^{k} \cos (m \theta)-2 k, \quad \theta \in\left[\frac{k \pi}{m}, \frac{(k+1) \pi}{m}\right], k \in [0, m-1] \]

\(m=2\)时,以下所示,

L-Softmax-phi.png

二分类状况下,结合解释以下,

L-Softmax-Geometric-Interpretation.png

为了梯度计算和反向传播,将\(\cos(\theta)\)替换为仅包含\(W\)\(w_i\)的表达式\(\frac{\boldsymbol{W}_{j}^{T} \boldsymbol{x}_{i}}{\left\|\boldsymbol{W}_{j}\right\|\left\|\boldsymbol{x}_{i}\right\|}\),经过倍角公式计算\(\cos(m \theta)\)

\[\begin{aligned} \cos \left(m \theta_{y_{i}}\right) &=C_{m}^{0} \cos ^{m}\left(\theta_{y_{i}}\right)-C_{m}^{2} \cos ^{m-2}\left(\theta_{y_{i}}\right)\left(1-\cos ^{2}\left(\theta_{y_{i}}\right)\right) \\ &+C_{m}^{4} \cos ^{m-4}\left(\theta_{y_{i}}\right)\left(1-\cos ^{2}\left(\theta_{y_{i}}\right)\right)^{2}+\cdots \\ &(-1)^{n} C_{m}^{2 n} \cos ^{m-2 n}\left(\theta_{y_{i}}\right)\left(1-\cos ^{2}\left(\theta_{y_{i}}\right)\right)^{n}+\cdots \end{aligned} \]

同时,为了便于训练,定义超参数\(\lambda\),将\(\left\|\boldsymbol{W}_{y_{i}}\right\|\left\|\boldsymbol{x}_{i}\right\| \psi\left(\theta_{y_{i}}\right)\)替换为\(f_{y_i}\)

\[f_{y_{i}}=\frac{\lambda\left\|\boldsymbol{W}_{y_{i}}\right\|\left\|\boldsymbol{x}_{i}\right\| \cos \left(\theta_{y_{i}}\right)+\left\|\boldsymbol{W}_{y_{i}}\right\|\left\|\boldsymbol{x}_{i}\right\| \psi\left(\theta_{y_{i}}\right)}{1+\lambda} \]

训练时,从较大的\(\lambda\)开始,而后逐渐减少,近似于用Softmax“热身”。

A-Softmax Loss - CVPR2017

A-Softmax即Angular-Softmax,出自《SphereFace: Deep Hypersphere Embedding for Face Recognition》

L-Softmax中,在对\(x_i\)归类时,会同时考虑类中心向量的模夹角

A-Softmax的最大差别在于对每一个类中心向量进行归一化,即令\(||W_j|| = 1\),同时令bias为0,在分类时只考虑\(x_i\)\(W_j\)的夹角,并引入和L-Softmax相同的margin,以下所示,

\[\mathcal{L}_{\mathrm{AS}}=-\frac{1}{N} \sum_{i=1}^{N} \log \left(\frac{e^{\left\|\boldsymbol{x}_{i}\right\| \psi\left(\theta_{y_{i}, i}\right)}}{e^{\left\|\boldsymbol{x}_{i}\right\| \psi\left(\theta_{y_{i}, i}\right)}+\sum_{j \neq y_{i}} e^{\left\|\boldsymbol{x}_{i}\right\| \cos \left(\theta_{j, i}\right)}}\right) \\ \psi(\theta_{y_i, i})=(-1)^{k} \cos (m \theta_{y_i, i})-2 k, \quad \theta_{y_i, i} \in\left[\frac{k \pi}{m}, \frac{(k+1) \pi}{m}\right], k \in [0, m-1] \]

\(m=1\)时,即不引入margin时,称之为 modified softmax loss

Softmax Loss、Modified Softmax Loss和A-Softmax Loss,三者的决策面以下,

A-Softmax-decision-boundaries.png

可视化以下,

A-Softmax-Geometry-Interpretation.png

AM-Softmax Loss-CVPR2018

AM-Softmax即Additive Margin Softmax,出自论文《Additive Margin Softmax for Face Verification》,同CosFace 《CosFace: Large Margin Cosine Loss for Deep Face Recognition》,CosFace中损失名为LMCL(Large Margin Cosine Loss)。

与A-Softmax相比,有2点变化,

  • \(x_i\)也作归一化,同时保留对\(W\)每一列的归一化以及bias为0
  • \(\cos(m \theta)\)变成\(s \cdot (\cos \theta - m)\)

\[\mathcal{L}_{\mathrm{AM}}=-\frac{1}{N} \sum_{i=1}^{N} \log \frac{e^{s \cdot\left(\cos \theta_{y_{i}}-m\right)}}{e^{s \cdot\left(\cos \theta_{y_{i}}-m\right)}+\sum_{j=1, j \neq y_{i}}^{c} e^{s \cdot \cos \theta_{j}}} \]

相比Softmax,但愿得到更大的类间距离和更小类内距离,若是采用的是余弦距离,意味着,要想得到与Softmax相同的\(y_i\)对应的份量,须要更小的夹角\(\theta\),为此须要构建\(\psi(\theta)\),如前所述,须要

  • \(\psi(\theta) < cos(\theta)\)
  • 单调递减

前面构建的\(\psi(\theta)\),始于\(\cos(m \theta)\)\(m\)\(\theta\)是乘的关系,这里令\(\varphi(\theta)= s(\cos (\theta)-m)\)

  • \(\cos(\theta) - m\)\(m\)变乘法为加法,\(\cos(m\theta)\)将margin做用在角度上,\(\cos(\theta) - m\)直接做用在余弦距离上,前者的问题在于对类中心向量夹角较小的状况惩罚较小,夹角小则margin会相对更小,同时计算复杂,后者能够当作是Hard Margin Softmax,但愿在保证类间“硬”间距的状况下学习特征映射。

    Additive-Margin.png

  • \(s\):将\(x_i\)也归一化后,至关于将特征嵌入到单位超球上,表征空间有限,特征和权重归一化后\(\mid \boldsymbol{W}_{j}\|\| \boldsymbol{x}_{i} \| \cos \left(\theta_{ij}\right)=cos(\theta_{ij})\)的值域为\([-1, 1]\),即\(x_i\)到每一个类中心向量的余弦距离,最大为1,最小为-1,Softmax 指数归一化前,各种的份量差别太小,因此要乘个因子\(s\),将特征映射到半径为\(s\)的超球上,放大表征空间,拉开各份量的差距。

AM-Softmax-visualization.png

ArcFace Loss - CVPR2019

ArcFace Loss 即 Additive Angular Margin Loss,出自《ArcFace: Additive Angular Margin Loss for Deep Face Recognition》

AM-Softmax Loss将margin做用在余弦距离上,与之不一样的是,ArcFace将margin做用在角度上,其损失函数以下,

\[\mathcal{L}_{\mathrm{AF}}=-\frac{1}{N} \sum_{i=1}^{N} \log \frac{e^{s \cdot\left(\cos \left(\theta_{y_{i}}+m\right)\right)}}{e^{s \cdot\left(\cos \left(\theta_{y_{i}}+m\right)\right)}+\sum_{j=1, j \neq y_{i}}^{n} e^{s \cdot \cos \theta_{j}}} \]

ArcFace.png

把margin是加在余弦距离(CosFace)仍是加在角度(ArcFace)上,在《Additive Margin Softmax for Face Verification》中有这样一段分析,

Angular-Margin-or-Cosine-Margin.png

ArcFace中并无求取arccos,因此计算并不复杂,而是把margin加在了角度上,但优化的还是余弦距离。

还有一点须要注意的是,不管margin是加在余弦距离上仍是加在角度上,单纯看示意图,很容易看出减小了类内距离,那类间距离增长呢?

文中,给出了类内距离和类间距离的数学描述,以下:

\[L_{Intra}=\frac{1}{\pi N} \sum_{i=1}^{N} \theta_{y_{i}} \\ L_{Inter}=-\frac{1}{\pi N(n-1)} \sum_{i=1}^{N} \sum_{j=1, j \neq y_{i}}^{n} \arccos \left(W_{y_{i}}^{T} W_{j}\right) \]

\(W\)是待学习的参数,特征\(x_i\)也是经过前面层的权重学习获得,在训练过程当中\(x_i\)\(W\)都会发生变化,都会被梯度驱使着向Loss减少的方向移动。margin的引入有意压低了类标签对应份量的值,去尽可能“压榨”模型的潜力,在softmax中本来能够收敛的位置还须要继续降低,降低能够经过提升类标签对应份量的值,也能够经过下降其余份量的值。因此,\(x_i\)在向\(W_{y_i}\)靠近的同时,\(W_j, j\neq y_i\)也可能在向远离\(x_i\)的方向移动,最终达成的效果就多是\(x_i\)尽量地靠近\(W_{y_i}\),而\(W_j, j\neq y_i\)远离了\(W_{y_i}\)

欧氏距离or角度距离与归一化

这里,再讨论下为何对\(W\)\(x\)的模进行归一化,主观思考偏多,未经验证。

在文章为何要作特征归一化/标准化?中,咱们提到,

归一化/标准化的目的是为了得到某种“无关性”——偏置无关、尺度无关、长度无关……当归一化/标准化方法背后的物理意义和几何含义与当前问题的须要相契合时,其对解决该问题就有正向做用,反之,就会起副作用。

特征\(x\)\(W\)每一个类中心向量内积的结果,取决于\(x\)的模、\(W_j\)的模以及它们的夹角,模的大小和夹角的大小都将影响内积结果的大小。

  • \(W_j\)归一化:若是训练集存在较严重的类别不均衡,网络将倾向于把输入图像划分到图片数量多的类别,这种倾向将反映在类中心向量的模上,即图片数量多的类别其类中心向量的模将偏大,这一点论文One-shot Face Recognition by Promoting Underrepresented Classes中有实验验证。因此,\(W_j\)的模归一化至关于强迫网络同等看待每个类别,至关于把同等看待每个人的先验作进网络,来缓解类别不均衡问题。

  • \(x\)归一化:对某一个具体的\(x_i\),其与每一个类中心的内积 为 \(x_i \cdot W_j = |x_i||W_j|\cos \theta_{ij} = |x_i|\cos \theta_{ij}\),由于每一个类别的内积结果都含\(x_i\)的模,\(x_i\)的模是否归一化彷佛并不影响内积结果间的大小关系,但会影响损失的大小,好比内积结果分别为\([4,1,1,1]\),模同时放大1倍,变成\([8,2,2,2]\),通过Softmax的指数归一化后,后者的损失更小。在卷积神经网络之卷积计算、做用与思想中,咱们知道模式蕴含在卷积核的权重当中,特征表明着与某种模式的类似程度,越类似响应越大。什么样的输入图像容易获得模小的特征,首先是数值尺度较小的输入图像,这点能够经过对输入图像作归一化解决(若是输入图像的归一化不够,对特征进行归一化可能能够缓解这个问题),而后是那些模糊的、大角度的、有遮挡的人脸图像其特征的模会较小,这些图在训练集中至关于困难样本,若是他们的数量很少,就可能会被简单样本淹没掉。从这个角度看,对\(x\)进行归一化,可能可让网络相对更关注到这些困难样本,去找到更细节的特征,专一在角度上进行判别,进一步压榨网络的潜能。有点Focal Loss思想的感受。

网络会利用它可能利用上的一切手段来下降损失,有些手段可能并非你所指望的,此时,经过融入先验、添加正则等方式抑制那些你不但愿网络采起的手段,修正网络进化的方式,以此让网络朝着你指望的方向成长。

以上。

参考

相关文章
相关标签/搜索