ArcFace

特点

  1. Engaging:(优胜,better)

ArcFace directly optimises the geodesic distance margin by virtue of the exact correspondence between
the angle and arc in the normalised hypersphere
ArcFace通过归一化超球面中角度和弧线之间的精确对应关系直接优化了测地距离裕度(margin) 都没懂到底是说的啥。

在这里插入图片描述
特征和权重之间就是有角度。

  1. Effective
    就是说SOTA performance

  2. Easy 简单 容易实现
    在这里插入图片描述
    容易实现,在算法1的图里好像就只是需要几行代码。

  3. Effcient
    计算复杂性现在的硬件还能支撑住。

Absract

在这里插入图片描述
在新建立的Loss里面合着并入margins来让face class更加可分。 于是提出了加性角度margin的loss让特征更加地discriminative.

1. Introduction

他这个文章还分析了基于softmax方法和基于triplet方法的各自的问题:

在这里插入图片描述
他们还分析了CosFace的问题,

在这里插入图片描述

在这里插入图片描述
他对他们方法的优势的描述还没吃透,结合图来看看。什么回事?

特征和最后全连接层的dot productfeatureweight归一化以后就等于余弦距离。

在这里插入图片描述
怎么看出来的?

在这里插入图片描述

上图是对Arcface所有精髓的描述。

我们利用反余弦函数来计算当前特征目标权重之间的角度。(纸上推导过)当前特征和目标权重怎么有的角度 怎么看
之后,我们向目标角度添加一个附加的角余量,然后通过余弦函数再次获得回来target logits

这说的是对 ( θ + m ) (\theta+m) (θ+m)取cos得到 c o s ( θ + m ) cos(\theta+m) cos(θ+m)

这就得到:

l o g i t s = c o s ( θ + m ) logits=cos(\theta+m) logits=cos(θ+m)

然后,我们按照固定的特征范数(怎么个固定法)?重新缩放所有logits

就是

l o g i t s = s ∗ c o s ( θ + m ) logits=s*cos(\theta+m) logits=scos(θ+m)

随后的步骤与softmax损失中的步骤完全相同. 这是他们实现arcface loss的所有程序实现依托。

在这里插入图片描述
这个fc7在程序的哪块???

就是程序中的:cos_t = tf.matmul(embds, weights, name='cos_t')

现在最需要弄懂的就是到底这个mx.sym.pick是什么意思?

看我的实现和这个pick的实现是否一致?

pick网上的说明:

在这里插入图片描述

根据沿给定轴的输入索引(不是沿着整个軸,而是确定軸以后,还确定了根据那个軸的输入索引。)从输入数组中选择元素。说白了就是,告诉你按行来还是按列来,然后再告诉你行或者列上要取的数的具体的位置。确实会先告知按行取还是按列取,但不是指定具体的列或者行。

Given an input array of shape (d0, d1) and indices of shape (i0,), the result will be an output array of shape (i0,) with:

这块的意思只是:

如果要取出来的表示索引的数据张成什么形状,然后取出来的数据就长成什么样子。

在这里插入图片描述
就和上图的描述一样,索引长成[0,1,0]然后取出来也是 1 × 3 1×3 1×3的列表[1., 4., 5]。

在MXnet框架同样是0-代表列,1-代表行.

在这里插入图片描述
截至到图片中的第6步,我都是清楚的。清楚pick到底在做什么,但没找到pick对应我程序的哪里?

在这里插入图片描述

2. Proposed Approach

真的去说理论部分了。

2.1 ArcFace

可以读着的时候,顺着我自己的,然后去更新tex文件。

在这里插入图片描述
我们知道: x i x_i xi代表的是特征向量,但是 R d R^d Rd d d d是不是就是512或者1024

在这里插入图片描述
38 Center Loss 原始文章
46 Range Loss 原始文章
18 SphereFace 原始文章
37 CosFace 原始文章

所以,我所有试验这个维度就设置D=512

传统softmax的问题:

在这里插入图片描述
传统的softmax损失函数并未明确优化特征嵌入,以使类内样本的相似性更高,而类间样本的多样性更高。尤其是1. 在大的类内外观变化时候(比如:同一类的样本存在pose variations, age gaps的时候)。或者2. 是在大型测试场景的时候。也就是million(百万)或者trillion(兆) pairs. 而我目前测试的都只是6000 pairs.

然后:

在这里插入图片描述
2D-feature? 不是说这个embedding的维度只是2吧???? 太少了吧?

在这里插入图片描述
这个图说的就是,softmax loss会产生noticeable ambiguitydecision boundaries, 但arcface
就会有更加evident的gap在nearest classes之间.

在这里插入图片描述
是因为基于了feature normalisation, 然后所有的特征all face features才以固定的radius被push到arc space。 但是这个,feature normalisation也不是第一次被arcface用啊,arcface也是用的别人的啊。

得详细看那个彩色流程图以及伪代码流程图

2.2 Comparison with SphereFace and CosFace

2.2.1 Numerical Similarity

Numerical Similarity 数值相似度

指的就是:在数学乃至数字大小上,两者相差不大。
在这里插入图片描述
三种不同的margin penalty,

  • SphereFace(m1): multiplicative angular margin 乘性角度
  • ArcFace(m2): additive angular margin 加性角度
  • CosFace(m3): additive cosine margin 加性余弦

在数学分析上,无论哪种惩罚项,无论在角度还是在cosine空间,他们干的事都是一个,通过通过penalising the target logit来让类内更紧凑,类间更可分。得深入理解这句话:

by penalising the target logit

在这里插入图片描述
怎么画这个the target logit curves?

横轴是特征和目标中心的角度,纵軸是目标logit.
在这里插入图片描述
在这个图里的话,可以看出来,是越靠近左下角的曲线,就越好。ArcFace的紫色(注意是紫色,不是玫红色)基本和结合CM1的蓝色重合了。文中有描述,说结合,结合的有better performance.

在这里插入图片描述

在这里插入图片描述
只画20到100, 这个我还不太确定,到底权重和向量之间怎么具体化这个角度。

此外,因为是随机初始化random initialisation的,所以这个角度是从90度左右开始的.

然后随着训练,这个角度的变化是这样的,刚开始是90度,然后在中间是40-50-60度,然后最后的最后end是30度. 也就是随着训练角度在变小,为什么是变小,肯定是变小意味着网络更好了。

目标logit曲线,

ArcFace的作者还把之前的SphereFace, CosFace里的margin 还有自己提出的全部结合到一起,说这样得到的target logits(获得更好的target logits)可以有更好的表现。

在这里插入图片描述

2.2.2 Geometric Difference

在这里插入图片描述
加性角度margin有更好的geometric attribute 因为角度margin和测地距离有着精确的对应。

为什么角度margin测地距离有着精确的对应???

在这里插入图片描述
我们知道,sphereface也是角度,为啥没提它的这个角度和测地距离有着精确的对应。?

然后就是同样拿二分类来做图说明:

在这里插入图片描述

提出的ArcFace具有恒定的线性角度margin,对比的话,Spherefacecosface只有非线性角度margin. nonlinear angular margin

margin设计上的细小差距在模型训练的时候会产生butterfly effect(蝴蝶效应)

在这里插入图片描述
这可能是为啥我的sphereface不工作的原因:

Sphereface采用退火优化,

  • 我应该就是开始时候就发散了
  • 我好像也没按照人家这样,去进行来自softmax的监督
  • 来自softmax的监督可以来弱化 multiplicative margin penalty.
    ====

在这里插入图片描述

在没有对margin的整数integer的要求下,他们实现了一个新版本的sphereface, 通过利用arc-cosine反余弦函数去代替使用复杂的双角度公式。得看看这是具体怎么做到的. 他们这个版本在使用m=1.35时候能没有任何收敛问题的情况下和original sphereface相当。

那我也设置这个,相当于sphereface.

2.3 Comparison with Other Losses

在这里插入图片描述
基于特征和权重向量的角度表达可以设计其他loss functions.

和另外的三种进行了对比:

  • Intra-Loss
  • Inter-Loss
  • Triplet-Loss

Intra-Loss通过减少the angle/arc between 样本the ground truth centre. 数学公式如下:

在这里插入图片描述

实验部分

之前2019年的ArcFace程序没有验证部分:

在这里插入图片描述
训练30epochtraining accuracy:

在这里插入图片描述
只有0.2多,不到0.3

现在的2021年的CosFace程序有验证和测试部分:

在这里插入图片描述
训练0.1并且30epochCosfacetraining accuracyvalidation accuracy:

在这里插入图片描述
两者在数值上也只是只有0.1多,不到0.2

这能说明30epoch是肯定不行的。

看看用0.050.1初始化的两个版本:

为啥没有0.05的30epoch版本?

因为0.05的90epoch版本都因为训练太少还欠拟合着呢,因为截止到LR=0.0005训练精度只达到0.444

图示如下:

在这里插入图片描述

没错,下面的图已经证实了0.1的90epoch都不行的话,0.1的30epoch肯定也不行啊

下面是30的:

在这里插入图片描述
下面是90的:

在这里插入图片描述
综上,0.1训练90还欠拟合呢,0.1训练30肯定不行。 同理,0.05训30就没必要再训练了,因为训练90的那个才到0.44多不到0.5。

如果不放心,可以提交一个试试。

  • 0.1初始的版本(30epoch)TrainValidationAccuracy都只有0.2左右。
  • 0.1初始的版本(90epoch): TrainValidationAccuracy都只有0.36左右。
  • 0.05初始的版本(不测30epoch只测90epoch,因为david官方是90)TrainValidationAccuracy都只有0.44左右。
    在这里插入图片描述
    感觉这种情形是最高的,但是要看曲线,还是把曲线都画出来。然后根据曲线趋势再调整。曲线全都画完了

得出的结论就是Arcface可能loss的实现是没问题的,只是单纯训练的epoch太少

在这里插入图片描述
37文献是:

在这里插入图片描述

一. 实验部分luckycallor实验部分

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值