Center-Loss

Center Loss辅助人脸识
本文总结了论文《一种用于深度人脸识别的判别特征学习方法》。文中提出了一种新的辅助损失函数——Center Loss,该方法结合传统的Softmax交叉熵损失函数,显著提升了人脸识别的准确性,尤其是在遇到未见过的数据时。

摘要

简介

  • 卷积神经网络在许多领域都取得了state-of-the-art的结果,包括检测,识别等。通常情况下,CNN作为特征提取器提取deep features(最后一个隐层的输出)用于之后的识别/确认。在诸如动作识别、场景识别情况下,可能的测试样本类别包含在训练集中(closed-set),这种情况下模型性能下降较小;在人脸识别中,因为我们不可能实现收集所有人的人脸图像,因此在使用中总会遇到不在训练集中的人脸,这种情况下就要求CNN提取的deep features不仅是可分的,而且要具有较高的判别度。

相关工作

  • 基于triplet loss的image pair方法
    在这种方法中,训练样本两个样本对pair_1 : (positive_1, positive_2), pair_2 : (positive_1, negative_1),训练的目标是使得pair_1之间的距离小于pair_2之间的距离。这种方法的缺点在于样本对的数量会爆炸,假设有10个人,每个人10张图片,则共有81000( C110C210C12C190 C 10 1 C 10 2 C 2 1 C 90 1 )个样本对。
  • 基于孪生网络的方法
    着这种方法中,训练时输入一对图片,标签为0或者1,0表示图片属于不同的人,1表示图片属于相同的人。训练的目标在于使得属于同一个人的图片距离尽可能小,属于不同人的图片距离尽可能大。与triplet loss相同,这种方法同样面临样本对爆炸的可能。假设有10个人,每个人10张图片,则共有900( C110C210+C210C110 C 10 1 C 10 2 + C 10 2 C 10 1 )个样本对。

提出的方法

  • 通常在用CNN做人脸识别等分类问题时,我们通常采用softmax交叉熵作为损失函数,在close-set测试中模型性能良好,但在遇到unseen数据情况下,模型性能会急剧下降。在做分类时,模型的最后一层通常是全连接(很难不用全连接而使得最后一层的维度刚好和类别数相等),可以将最后一层看做线性分类器。一个直观的感觉是:如果模型学到的特征判别度更高,那么再遇到unseen数据时,泛化性能会比较好。为了使得模型学到的特征判别度更高,论文提出了一种新的辅助损失函数,之说以说是辅助损失函数是因为新提出的损失函数需要结合softmax交叉熵一起使用,而非替代后者。两种损失函数如下所示:
    这里写图片描述
    这里写图片描述

  • 在结合使用这两种损失函数时,可以认为softmax交叉熵负责增加inter-class距离,center-loss负责减小intra-class距离,这样学习到的特征判别度会更高。

实验

  • 作者在LFW和YTF上做了对比试验,结果如下表:
    这里写图片描述

  • 从表中可以看出,在这两个数据集上,论文提出的方法取得了最高的acc。

结论

  • 虽然新提出的方法取得了良好的结果,但是也有一些不足之处,最麻烦的地方在于如何选择训练样本对。在论文中,作者也提到了,选取合适的样本对对于模型的性能至关重要,论文中采用的方法是每次选择比较难以分类的样本对重新训练,类似于hard-mining。同时,合适的训练样本还可以加快收敛速度。

引用

  1. A Discriminative Feature Learning Approach for Deep Face Recognition
  2. Linear classifier
  3. Closed set
### Center Loss的定义 Center Loss是一种用于深度学习模型的损失函数,旨在提升特征表示的判别能力。它的核心思想是通过最小化每个类别内部样本之间的距离,使得同一类别的特征更加集中,从而提高分类的准确性。具体而言,Center Loss通过计算每个样本特征与其对应类别中心之间的欧氏距离,并将这些距离累加作为损失值。公式可以表示为: $$ L_{center} = \frac{1}{2} \sum_{i=1}^{m} \| x_i - c_{y_i} \|^2 $$ 其中,$ x_i $ 是第 $ i $ 个样本的特征向量,$ c_{y_i} $ 是该样本所属类别的中心点,$ m $ 是样本数量[^3]。 ### Center Loss的原理 在深度学习中,Center Loss通常与Softmax Loss结合使用。Softmax Loss负责将不同类别的特征分开,而Center Loss则负责压缩同一类别的特征,使其更加紧凑。这种双重优化机制有助于模型学习到更具判别性的特征表示。 具体来说,在训练过程中,每个类别的中心点会不断更新,以反映当前所有样本的特征分布。通过最小化样本特征与类中心之间的距离,Center Loss促使同一类别的样本在特征空间中聚集在一起,从而减少类内差异,增加类间差异[^2]。 ### Center Loss的应用 Center Loss在人脸识别等领域表现出色。例如,在ECCV2016的一篇论文中,研究人员利用Center Loss辅助Softmax Loss进行人脸训练,成功提高了特征的判别能力。通过这种方式,模型能够在特征空间中更好地分离不同个体,同时压缩同一类别的特征,从而提升识别准确率[^2]。 此外,Center Loss还可以应用于其他需要高精度特征表示的任务,如图像检索和物体检测。在这些任务中,通过减少类内差异,Center Loss能够帮助模型更有效地找到目标对象[^3]。 ### 示例代码 以下是一个简单的PyTorch实现示例,展示了如何计算Center Loss: ```python import torch import torch.nn as nn class CenterLoss(nn.Module): def __init__(self, num_classes, feat_dim, device): super(CenterLoss, self).__init__() self.centers = nn.Parameter(torch.randn(num_classes, feat_dim).to(device)) def forward(self, x, labels): batch_size = x.size(0) feat_dim = x.size(1) centers = self.centers[labels] loss = (x - centers).pow(2).sum() / 2 / batch_size return loss ``` ### 总结 Center Loss通过最小化样本特征与类中心之间的距离,有效地提升了深度学习模型的特征表示能力。它在人脸识别等任务中表现出色,能够显著提高模型的准确性和鲁棒性。结合Softmax LossCenter Loss为模型提供了一种强大的优化机制,使其在特征空间中更好地分离不同类别[^2]。
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值