社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

【深度学习】同款商品识别的克星--ArcFace!

机器学习初学者 • 5 年前 • 546 次点击  

作者:杰少,一品炼丹师


ArcFace: Additive Angular Margin Loss for Deep Face Recognition(CVPR2019)

简 介

利用深度卷积神经网络(DCNNs)进行大规模人脸识别特征学习的一大挑战是设计合适的损失函数以提高识别能力。

  • 在欧氏空间中,中心损失是对深层特征与其对应的类中心之间的距离进行惩罚,以实现类内紧性;
  • SphereFace假设最后一个全连接层中的线性变换矩阵可用作角度空间中类中心的表示,并以乘法的方式惩罚深度特征与其相应权重之间的角度。

最近,一个流行的研究路线是将margins纳入已建立的损失函数,以最大限度地提高人脸类别可分性。

在本文中,我们提出了一个附加的角Margin损失(ArcFace)来获得高分辨的人脸识别特征。由于与超球面上的测地距离精确对应,所提出的弧面具有清晰的几何解释。通过大量的实验,我们证明了ArcFace的效果始终优于目前最好的模型,并且可以轻松实现,计算开销可以忽略不计。

背 景

目前训练人脸识别的DCNN方案主要有两种:

  • 训练一个多分类器,它可以将训练集合中的不同实体分开;
  • 训练embeddings,例如triplet loss。

但是softmax的loss和triplet loss都存在一些缺点,

对于softmax来说

  • 线性转化矩阵是线性相关的;
  • 学习得到的特征对于闭集分类问题是可分离的,而对于开集人脸识别问题,学习到的特征是不可分辨的;

对于triplet loss来说

  • 特别是对于大规模数据集,人脸三元组的数量会出现组合爆炸,导致迭代步骤的数量显著增加;
  • semi-hard样本挖掘对于有效的模型训练是一个相当困难的问题;
提出的方法

1. ArcFace


softmax loss:

其中,表示第个样本的深度特征,属于类。表示权重的第列,表示偏差项。分别表示batch大小和类的个数。但是,softmax函数没有直接优化特征的embedding来加强类内样本的相似度以及不同类样本之间的不一致性

为了方便,此处我们将设置为0,然后令

其中,是权重和特征之间的权重,我们通过范数令,同样的我们可以做相同的处理,然后对其rescale,于是我们得到:

由于embedding特征分布在超球面上的每个特征中心,我们在加入一个增量的角度margin惩罚,以是的我们类内更紧,类间更可区分。由于所提出的增加角度margin惩罚函数等于在超球面中标准化测地距离margin的惩罚,因此我们将该方法命名为ArcFace

我们从8个不同身份的人脸图像中选取足够的样本(约1500张/类)分别训练具有softmax和ArcFace损失的二维特征嵌入网络。如图3所示,softmax损失提供了大致可分离的特征嵌入,但在决策边界中产生了明显的模糊性,

如上图所示,softmax损失提供了大致可分离的特征embedding,但在决策边界中产生了明显的模糊性,ArcFace损失显然可以在最近的类之间得到更明显的间隙

ArcFace算法

2.与SphereFace和CosFace的比较

1.数值相似度

在SphereFace和CosFace和ArcFace中,我们都加入来margin的惩罚,我们用分别表示乘法角度margin,增加的角度margin和增加的cosine margin。从数值的角度来看,不同的margin惩罚都是希望相同类之间更为紧密,类之间分的更开。

通过将所有的margin惩罚放在一个框架中,我们有:

通过组合,我们往往可以获得更好的结果。

2. 几何区别

除了数值相似度之外,ArcFace拥有更好的几何属性,如下图所示:

3. 和其它Loss比较

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

Intra-Loss

这边是加上后面的项,而我们的目标是最小化,所以我们希望尽可能的小,这样类内就会被压缩,从而变得更紧。

Inter-Loss

这边是减去后面的项,所以我们需要减去的项尽可能大,也就是尽可能大,也就是不同类之间尽可能的角度大。

Triplet Loss

想加大三元组样本的角度margin, 此处我们采用triplet-loss作为特征的角表示,

实验

  • ArcFace在所有三个测试集上都达到了最高的验证精度;
  • 组合margin框架比单独的SphereFace和CosFace有更好的效果,但都不如ArcFace效果好;
  • Triplet Loss优于标准Softmax Loss,说明了margin对提高效果的重要性;
  • 在三元样本中使用margin惩罚比在样本和中心之间插入margin效果要差,就像在ArcFace中一样。最后,我们将累呢、类间丢失和Triplet Loss合并到ArcFace中,但是没有观察到任何改进,这让我们相信ArcFace已经加强了类内更紧、类间差异性和分类margin。

  • ArcFace相较于Triplet-Loss有更好的margin;
小结

本文提出了一种Additive Angular Margin Loss ,该函数能有效地提高DCNNs学习的特征嵌入在人脸识别中的判别能力。在文献报道的最全面的实验中,我们证明了我们的方法始终优于目前最好的方法。

参考文献
  1. ArcFace: Additive Angular Margin Loss for Deep Face Recognition,CVPR2019

往期精彩回顾





本站qq群851320808,加入微信群请扫码:

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/111432