hahadsg's note

Follow me on GitHub

metrics

1.FAR(False Accept Rate) 误识率:人脸对比通过但实际不是本人,把假的认成真的

2.VAL(Validation Rate) 通过率:两张图是同一个人,识别出也是同一个人

3.FRR(False Reject Rate) 拒真率:1-通过率,应该是本人但是人脸对比不通过,把真的认成假的

所有metrics都建立在阈值选取的基础上,跟阈值结合起来看才有业务上的意义

通常计算一定FAR下的VAL,比如facenet千分之一FAR下的VAL为98.64%

feature extract

HOG(Histogram of Oriented Gradients)

https://www.learnopencv.com/histogram-of-oriented-gradients/

DeepLearning Loss Functions

Triplet Loss (FaceNet)

a: anchor, p: positive, n: negitive

这里的\(f(x)\)是embedding

我希望a离p更近,且有一个margin,所以,

\[||f(x_i^p) - f(x_i^a)||_2^2 + \alpha < ||f(x_i^n) - f(x_i^a)||_2^2\]

所以损失函数是,

\[L = \sum\limits_{i=1}^m max(||f(x_i^p) - f(x_i^a)||_2^2 - ||f(x_i^n) - f(x_i^a)||_2^2 + \alpha, 0)\]

Softmax Loss

将人脸识别视作多分类问题

这里的\(f(x)\)是embedding

\[L = -\frac{1}{m}\sum\limits_{i=1}^m log \frac{e^{W^T_{y_i}f(x_i) + b_{y_i}}}{\sum\limits_{j=1}^n e^{W^T_j f(x_i) + b_j}}\]

Center Loss

这里的\(f(x)\)是embedding

Softmax部分,即多分类问题的损失:

\[L = -\frac{1}{m}\sum\limits_{i=1}^m log \frac{e^{W^T_{y_i}f(x_i) + b_{y_i}}}{\sum\limits_{j=1}^n e^{W^T_j f(x_i) + b_j}}\]

Center部分,距离对应中心的距离:

\[L_C = \frac{1}{2} \sum\limits_{i=1}^m ||f(x_i) - c_{y_i}||_2^2\]

Center Loss的想法是,不仅在多分类问题上分得准,而且要更紧凑:

\[L = L_S + \lambda L_C\]

最后一个问题就是如何更新中心了:

\[c_j^{t+1} = c_j^t - \alpha \Delta c_j^t\] \[\Delta c_j = \frac{\sum\limits_{i=1}^m 1\{y_i=j\} (c_j - x_i)}{1 + \sum\limits_{i=1}^m 1\{y_i=j\}}\]

论文链接:http://ydwen.github.io/papers/WenECCV16.pdf

L-Softmax (Large-Margin Softmax)

这里的\(x\)是embedding

直观理解,当\(f(x)\)属于分类1,而不属于分类2时,Softmax想让\(W_1^Tx >W_2^Tx\),相当于\(\|W_1\| \|x\| cos(\theta_1) > \|W_2\| \|x\| cos(\theta_2)\)

那么,L-Softmax想让这个条件更严格一些,\(\|W_1\| \|x\| cos(m\theta_1) > \|W_2\| \|x\| cos(\theta_2), 0 \leq \theta_1 \leq \frac{\pi}{m}\),也就是原本\(\theta_1\)达到的损失,现在\(\frac{\theta_1}{m}\)时就达到了,对于\(\theta_1\)的要求更高了

L-Softmax的定义:

\[L_i = -log(\frac{e^{\|W_{y_i}\| \|x_i\| \phi(m\theta_{y_i})}}{e^{\|W_{y_i}\| \|x_i\| \phi(m\theta_{y_i})} + \sum\limits_{j \neq y_i} e^{\|W_j\| \|x_i\| cos(\theta_j)}})\]

这里的\(\phi (\theta)\)的损失为:(具体公式参考论文)

论文链接:http://proceedings.mlr.press/v48/liud16.pdf

A-Softmax (Angular Softmax, SphereFace)

这里的\(x\)是embedding

A-Softmax在L-Softmax的基础上,限定了\(\|W\|=1, b = 0\),则\(W_1^Tx + b = \|W_1\| \|x\| cos(\theta_1) + b = \|x\| cos(\theta_1)\),每个图片的\(x\)是相同的,所以实际上就是比较\(cos(\theta)\)。\(\|W\|\)与\(x\)角度越小,则余弦值越大,则softmax后的值越大。也就是说,与真实类别角度越小,最后的softmax出来的概率越大,分类问题跟余弦距离就契合上了(这时我们可以使用余弦距离评判人脸距离,不必使用欧几里得距离了)

我们可以看到A-Softmax使的类间距更小了,不对\(\|W\|\)进行norm,可能会使\(\|W\|\)变大从而降低损失,而不是\(cos(\theta)\)变大而降低损失

A-Softmax的定义:

\[L_i = -log(\frac{e^{\|x_i\| \phi(m\theta_{y_i})}}{e^{\|x_i\| \phi(m\theta_{y_i})} + \sum\limits_{j \neq y_i} e^{\|x_i\| cos(\theta_j)}})\]

另外需要注意在实践中的\(m\)设置,由于\(m\)是一个非常强的限制,在\(m=2\)时,它会认为距离真实分类仍有\(2\theta\)的角度,所以比较难优化。实践中,可以使用softmax + \(\alpha\)倍的A-Softmax,刚开始\(\alpha=0\),后面慢慢变大

论文链接:https://arxiv.org/pdf/1704.08063.pdf

NormFace

这里的\(f\)是embedding

NormFace在Softmax基础上,将embedding向量和W都标准化了,还去掉了bias,这时候softmax更加贴近余弦相似度了,文章分析了为什么会更贴近余弦相似度以及训练中可能会出现的坑

不进行norm的缺点

可以看到下图是直接使用softmax进行训练,\(f_1\)与\(f_2\)是不同类,但是距离更近,而\(f_2\)跟\(f_3\)是同类,但距离更远

另外,分类色块趋向于放射状,是由于softmax会通过增加\(f\)的大小来降低损失

如果我们不去掉bias,即\(\|b\|>0\),那么在原点附近就会有分类聚集

进行norm的问题:训练收敛失败

单纯的将\(f\),\(W\)都标准化,并取消bias,会无法收敛

原因是这样做会使\(Wx\)在\([-1, 1]\)之间,也就是\(\frac{e^{W^T_{y_i}f_i}}{\sum\limits_{j=1}^n e^{W^T_j f_i}}\)无法收敛到接近1,所以需要将\(Wx\)乘以一个倍数,来让它收敛

所以NormFace的损失为: \(L_{S'} = -\frac{1}{m}\sum\limits_{i=1}^m log \frac{e^{sW^T_{y_i}f_i}}{\sum\limits_{j=1}^n e^{sW^T_j f_i}}\)

s的取值详情见论文(类数量会影响s的取值)

跟欧几里得距离的关系

由于\(\|x-y\|^2_2=2-2x^Ty\),所以可以将损失写为,

\[L_{S'} = -\frac{1}{m}\sum\limits_{i=1}^m log \frac{e^{sW^T_{y_i}f}}{\sum\limits_{j=1}^n e^{sW^T_j f}} = -\frac{1}{m}\sum\limits_{i=1}^m log \frac{e^{-\frac{s}{2}\|f_i - W_{y_i}\|_2^2}}{\sum\limits_{j=1}^n e^{-\frac{s}{2}\|f_i - W_j\|_2^2}}\]

所以这个时间余弦相似度跟欧几里得距离实质是一样的

我们可以将\(\|f_i - W_j\|_2^2\)带入到contrastive loss或者triplet loss中,这样就解决了这两种loss是使用欧几里得距离的问题了(不过要注意margin的设置,具体可见论文)

论文链接:https://arxiv.org/pdf/1704.06369.pdf

AM-Softmax (Additive Margin Softmax)

CosFace也是一样的思路

这里的\(f\)是embedding

AM-Softmax将\(f\),\(W\)都标准化,并取消bias。特别的,它使用的margin方式是\(\phi(\theta) = cos(\theta) - m\)

所以最终的损失是: \(\begin{aligned} & l_{AMS} = -log(\frac{e^{s\cdot (cos(\theta_{y_i}) - m)}}{e^{s\cdot (cos(\theta_{y_i}) - m)} + \sum\limits_{j \neq y_i} e^{s\cdot cos(\theta_j)}}) \\ & \qquad = -log(\frac{e^{s\cdot (W_{y_i}^T f - m)}}{e^{s\cdot (W_{y_i}^T f - m)} + \sum\limits_{j \neq y_i} e^{s\cdot W_{j}^T f}}) \\ \end{aligned}\)

论文链接:https://arxiv.org/pdf/1801.05599.pdf

ArcFace

这里的\(f\)是embedding

ArcFace将\(f\),\(W\)都标准化,并取消bias。它使用的margin方式是\(\phi(\theta) = cos(\theta - m)\)

所以最终的损失是:

\[l = -log(\frac{e^{s\cdot (cos(\theta_{y_i} + m))}}{e^{s\cdot (cos(\theta_{y_i} + m))} + \sum\limits_{j \neq y_i} e^{s\cdot cos(\theta_j)}})\]

我们可以将A-Softmax、AM-Softmax(CosFace)、ArcFace结合在一起:

\[l = -log(\frac{e^{s\cdot (cos(m_1\theta_{y_i} + m_2) - m_3)}}{e^{s\cdot (cos(m_1\theta_{y_i} + m_2) - m_3)} + \sum\limits_{j \neq y_i} e^{s\cdot cos(\theta_j)}})\]

这里对比一下三者在几何学上的差别

论文链接:https://arxiv.org/pdf/1801.07698.pdf