【人脸识别】Center Loss详解

论文题目:《A Discriminative Feature Learning Approach
for Deep Face Recognition》
论文地址:http://ydwen.github.io/papers/WenECCV16.pdf
在这里插入图片描述

概述

       ECCV2016年的这篇文章主要是提出了一个新的Loss:Center Loss,以辅助Softmax Loss进行人脸的训练。主要就是先利用Softmax loss来分开不同类别,然后利用Center Loss来压缩某一类。最终获得discriminative features。

1. 前言

       在深度学习里,深度学习网络通常被看作是特征提取器(从第1层网络层到最后一层隐藏层),提取出来的特征x随后经过线性变换(W ^T · x)得到类别分数,通过softmax层计算损失。通常,我们没有对提取出来的特征x提出太大的约束,只要它能被最后一层分类器正确分类就可以了。特征x与其类别要有什么关系,需要特征x具有什么约束,这些都没有被明确地要求或规定。Softmax损失要求特征x能够被最后一层分类器正确分类,这个对特征x的约束不是很强。当给网络传入一些对抗样本(容易被网络误识别的样本)时,网络难以分辨出这些样本属于哪类。如果从提取出来的特征来说,是因为网络从对抗样本提取出来的特征处于最后一层分类器的分类边界,或者说,网络提取出来的特征没有很强的区分度。

在这里插入图片描述

       上图是使用Softmax loss训练,从MNIST数据集中提取出来的特征分布图。不同颜色代表不同类别的特征。图a是训练集的特征,可以看到不同类之间的特征有明显的间隔,很容易区分不同的类别。但是,图b是测试集的特征,可以看到,有些测试样本的特征位于分类器的分类边界,使得分类器难以判断样本的类别。其原因可以认为是提取的不同类别的特征没有明显的区分度,同类的特征没有紧凑地聚在一起。
       从特征特征的角度来看,为了增强网络的性能,网络提取出来的特征应该具有强的区分度(discrimination power)。怎样的特征算是有强的区分度呢?(看下图)学过聚类的朋友应该听说过,聚类的结果“簇内相似度”高且“簇间相似度”低。套用这种说法,特征应该有类内紧凑性和类间可分离性(intra-class compactness and inter-class separability)。类内紧凑性的意思是同一类的特征应该聚在一起,类间可分离性是指特征很容易划分成不同的类别。同类样本特征聚在一起,不同类特征之间的间隔更大,更容易对特征进行分类,提高网络模型的分类能力,提高鲁棒性。Softmax损失能够要求特征具有类间的可分离性,但不能约束特征的类内紧凑性。

在这里插入图片描述

       为了约束网络提取出来的特征具有紧凑性,contrastive loss 和 triplets loss 被提出来了。contrastive loss的思想是最小化一对同类样本特征的距离,最大化一对不同样本特征之间的距离。Triplets loss则把一对变成3个。contrastive loss 和 triplets loss 需要把样本两两配对或三三组合起来,导致样本急剧增大,加长了训练的时间,提高了训练难度。

2. Center Loss

2.1. Softmax Loss

       在介绍Center Loss之前先回顾一下传统的softmax loss。公式如下:

在这里插入图片描述
公式解释如下:
       公式(1)中:x_i是倒数第二个全连接层输出的特征向量,w和b分别为最后一个全连接层的权重和偏置,m为mini-batch的大小,n为类别个数,log函数的输入就是softmax的结果(概率),Ls表示softmax loss的结果(损失),wx+b是全连接层的输出。

2.2. Center Loss

       Center Loss为每一个类别提供一个类别中心,最小化min-batch中每个样本与对应类别中心的距离,这样就可以达到缩小类内距离的目的(特征与同类别的平均特征的距离要足够小,这要求同类特征要接近它们的中心点),因此Center loss 能够直接对样本特征之间的距离进行约束。
在这里插入图片描述
公式解释如下:
       其中x_i表示第i个样本提取到的特征向量(倒数第二个全连接层的输出),c_yi表示样本i所对应的类别的所有样本特征的平均特征,或者说同类样本特征的中心点,m表示mini-batch的大小。因此这个公式就是希望一个batch中的每个样本的feature离feature 的中心的距离的平方和要越小越好,也就是类内距离要越小越好。

       Center Loss有一个难点,就是如何计算C_yi。理论上来讲,可以通过所有的样本来为每个类别算一个中心点(即通过计算同一类别所有样本的特征,然后求平均值)。但是这种方法有以下缺点:其一是我们的训练样本非常庞大;其二是样本统计到的中心点不能代表真正的中心点,这个中心点应该随训练而动态变化(即模型在当前分类能力前提下的中心点)。因此作者提出使用mini-batch中的每个类别的平均特征来近似不同类别所有样本的平均特征,即在进行类别中心的求导时,只用当前batch中某一类别的图片来获得该类别中心的更新量。即每一个类别中心的变化只用属于这个类别的图片特征来计算。

       损失L_c的梯度为公式(3)所示,公式(4)为c_j 梯度公式。
在这里插入图片描述
公式解释如下:
       m表示mini-batch size,δ(y_i = j)是指示函数,当j是类别类别y_i时,函数返回1,否则返回0,意思就是当y_i(表示y_i类别)和c_j的类别j不一样时,c_j是不需要更新的,只有当y_i和j一样才需要更新。分母的1是防止mini-batch中没有类别j类别的样本而导致分母为0。同时设置了一个c_j的更新速率α,控制c_j的更新速度。

       训练是softmax loss结合center loss进行联合训练的,公式如下,loss的权重为lambda,用来控制二者的比重。这里的m表示mini-batch size,n表示类别数。
在这里插入图片描述
整体的算法流程如下:
在这里插入图片描述

3. 实验

       对于不同的lambda值,网络提取的特征有不同的区分度效果,如下图所示,可以看到lambda越大,提取出来的特征区分度越高。
在这里插入图片描述
       作者也做实验探究不同lambda值和α取值对应的不同效果,如下图所示,lambda=0.003和α=0.5时对face verification任务效果更好。
在这里插入图片描述

● Center的计算与更新

论文中说:

In each iteration, the centers are computed by averaging the features of the corresponding classes

但是实际在实现时候却是;
       使用"xavier"进行初始化,然后用△c_j进行更新与计算,而且△c_j并不是上面说的那样进行求均值,而是通过求梯度得到的,详见公式(5),总而言之,center就像一个参数一样,先随机初始化,然后再每个迭代后在当前类别中更新一次。

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页