人脸识别方法概述

人脸识别方法概述

人脸识别任务对应于机器学习的分类任务。然而并不是完全一致的。在传统的分类问题中,训练模型的数据类别数与实际应用时的数据类别数是一致的,而在人脸识别任务中,实际应用时的数据类别可以完全与训练模型的数据类别不一致。打个比方:

  • MNIST手写数字识别任务中,用10类的手写数字数据集( 记 为 D 记为D D)训练和测试模型 M m n i s t M_{mnist} Mmnist,应用该网络对其他数据 d d d d ∉ D d\notin D d/D),不需要对模型 M m n i s t M_{mnist} Mmnist进行更改,就可以预测10类的数字。这种任务的特点是softmax层节点一定,且每一类包含的样本足够多。
  • 人脸识别任务中,假设我们用MS-celeb-1M数据集(99,892个实体,8,456,240张图片,记为 D m s D_{ms} Dms)训练模型 M m s M_{ms} Mms,并希望将该模型应用在我们自己的人脸识别数据集(记为 D m y D_{my} Dmy)上。显然,如果不对 M m s M_{ms} Mms的结构进行修改的话,并不可能直接应用在 D m y D_{my} Dmy,一个很明显的冲突就是 M m s M_{ms} Mms的softmax节点为99,892个,与 D m s D_{ms} Dms的类别数一致,但与 D m y D_{my} Dmy的类别数不一致,就无法直接进行分类。

图1 直接使用softmax可能带来维度不一致。 D m s D_{ms} Dms以MS-celeb-1M为例, D m y D_{my} Dmy以LFW为例

基本原理与网络框架

因为人脸识别任务与常规的分类任务有些许差别,比较明显的矛盾在于输出层softmax。我们可以很自然的产生如下的思路

  • 假设得到训练好的模型 M m s M_{ms} Mms,既然直接取softmax不行,我们就取中间某一层(比如softmax层的前一层)的神经元作为特征向量输出,再进行下面的工作。由于网络在训练时能够达到较高的准确率,可以理解为该特征向量已包含了大部分的人脸特征。
  • 弃用softmax,使用其他的loss,以达到提取特征向量的目的。

我们先谈第一种方法的工作流程。我们可以用 M m s M_{ms} Mms,对 D m y D_{my} Dmy提取特征向量 E m y E_{my} Emy,由于 D m y D_{my} Dmy有带标签,因而 E m y E{my} Emy也是有带标签的。理想状况下, D m y D_{my} Dmy组间距大,而组内距小,我们可以想象在高维空间中, D m y D_{my} Dmy的数据点成簇分布,每一个簇是一个类别。因此很自然的,要对新的数据 d d d判断属于哪一类,一种较直观的方法是某一个点簇,让 d d d和该点簇有最短距离,并认为 d d d属于该点簇的类。

图2 得到特征向量,并获得有标注的超平面,对于新的数据 d d d,计算与点簇的距离并判断属于哪一类。 D m y D_{my} Dmy以LFW为例, d d d为LFW中的一个数据。当然, d ∉ D m y d\notin D_{my} d/Dmy

softmax

知道了整个任务的框架之后,我们开始着眼于细节。我们讨论网络如何设置并训练。网络主体部分可以选取不同的架构,比如inception,Resnet等,而损失函数也同样重要,因损失函数决定了我们对任务的理解。接下来的篇幅我们讨论损失函数的设置。

对于输出层,最原始的想法是 max ⁡ { o 1 , ⋯   , o n } \max\{o_1,\cdots,o_n\} max{o1,,on},其中 n n n为类别个数,即选取取值最大的那个。例如,对于 o = ( 5 , 1 , 1 , 1 ) o=(5,1,1,1) o=(5,1,1,1),我们的理想输出是 max ⁡ { 5 , 1 , 1 , 1 } → ( 1 , 0 , 0 , 0 ) \max\{5,1,1,1\}\rightarrow(1,0,0,0) max{5,1,1,1}(1,0,0,0)。然而 max ⁡ \max max函数无法做梯度下降,因而考虑转化为概率:
p ( i ) = o i ∑ j o j p(i)=\frac{o_i}{\sum_{j}o_j} p(i)=jojoi
于是, ( 5 , 1 , 1 , 1 ) (5,1,1,1) (5,1,1,1)则转化为 ( 62.5 % , 12.5 % , 12.5 % , 12.5 % ) (62.5\%,12.5\%,12.5\%,12.5\%) (62.5%,12.5%,12.5%,12.5%),结果离 ( 1 , 0 , 0 , 0 ) (1,0,0,0) (1,0,0,0)有点远,于是有了softmax:
s o f t m a x ( i ) = e o i ∑ j e o j softmax(i)=\frac{e^{o_i}}{\sum_je^{o_j}} softmax(i)=jeojeoi
于是, ( 5 , 1 , 1 , 1 ) (5,1,1,1) (5,1,1,1)则转化为 ( 94.79 % , 1.74 % , 1.74 % , 1.74 % ) (94.79\%,1.74\%,1.74\%,1.74\%) (94.79%,1.74%,1.74%,1.74%)
softmax拥有非线性特征且求导结果简洁的特点,但是softmax不要求类内紧凑和类间分离,因而需要对softmax作改进。

图3 softmax类间不够分离,类内不够紧凑。图来自SphereFace: Deep Hypersphere Embedding for Face Recognition

Largin Angular Margin(L-softmax)

论文连接:Large-Margin Softmax Loss for Convolutional Neural Networks
联合全连接层,softmax层,CrossEntropy,修改了softmax
L i = 1 N ∑ i − log ⁡ ( e ∣ ∣ w y i ∣ ∣ ∣ ∣ x i ∣ ∣ cos ⁡ ( θ y i , i ) ∑ j e ∣ ∣ w j ∣ ∣ ∣ ∣ x i ∣ ∣ cos ⁡ ( θ j , i ) ) L_i=\frac{1}{N}\sum_i -\log(\frac{e^{||w_{y_i}||||x_i||\cos(\theta_{y_i,i})}}{\sum_je^{||w_{j}||||x_i||\cos(\theta_{j,i})}}) Li=N1ilog(jewjxicos(θj,i)ewyixicos(θyi,i))
之后强制将对应类别的 w w w x x x的夹角增加为原来的 m m m倍。由于 cos ⁡ \cos cos为周期函数,对其进行修改,只取原来的四分之一周期,修改为单调递减函数。
L i = 1 N ∑ i − log ⁡ ( e ∣ ∣ w y i ∣ ∣ ⋅ ∣ ∣ x i ∣ ∣ ϕ ( θ y i , i ) ∑ j ≠ y i e ∣ ∣ w j ∣ ∣ ⋅ ∣ ∣ x i ∣ ∣ cos ⁡ ( θ j , i ) + e ∣ ∣ w y i ∣ ∣ ⋅ ∣ ∣ x i ∣ ∣ ϕ ( θ y i , i ) ) L_i=\frac{1}{N}\sum_i -\log(\frac{e^{||w_{y_i}||\cdot||x_i||\phi(\theta_{y_i,i})}}{\sum_{j\neq y_i}e^{||w_{j}||\cdot||x_i||\cos(\theta_{j,i})}+e^{||w_{y_i}||\cdot||x_i||\phi(\theta_{y_i,i})}}) Li=N1ilog(j̸=yiewjxicos(θj,i)+ewyixiϕ(θyi,i)ewyixiϕ(θyi,i))
其中, ϕ ( θ ) \phi(\theta) ϕ(θ)表达式如下
ϕ ( θ ) = ( − 1 ) k cos ⁡ ( m θ ) − 2 k , θ ∈ [ k π m , ( k + 1 ) π m ] \phi(\theta)=(-1)^k\cos(m\theta)-2k,\theta\in[\frac{k\pi}{m},\frac{(k+1)\pi}{m}] ϕ(θ)=(1)kcos(mθ)2k,θ[mkπ,m(k+1)π]
ϕ ( x ) \phi(x) ϕ(x)相当于 c o s ( m x ) cos(mx) cos(mx)的单调版本。

图4 ϕ ( x ) \phi(x) ϕ(x)的图像(m=2)与softmax图像。图来自Large-Margin Softmax Loss for Convolutional Neural Networks

图5 L-softmax的效果。图来自Large-Margin Softmax Loss for Convolutional Neural Networks

SphereFace(A-softmax)

论文连接:SphereFace: Deep Hypersphere Embedding for Face Recognition
原始的softmax损失为如下形式
L s o f t m a x = 1 N ∑ i − log ⁡ ( e f y i ∑ j e f j ) L_{softmax}=\frac{1}{N}\sum_i -\log(\frac{e^{f_{y_i}}}{\sum_je^{f_j}}) Lsoftmax=N1ilog(jefjefyi)
其中,
f i = W j T x i + b j f y i = W y i T x i + b y i f_i=W_j^Tx_i+bj\\f_{y_i}=W_{y_i}^Tx_i+b_{y_i} fi=WjTxi+bjfyi=WyiTxi+byi
则有
L i = − log ⁡ ( e ∣ ∣ w y i ∣ ∣ ∣ ∣ x i ∣ ∣ cos ⁡ ( θ y i , i ) ∑ j e ∣ ∣ w j ∣ ∣ ∣ ∣ x i ∣ ∣ cos ⁡ ( θ j , i ) ) L_i= -\log(\frac{e^{||w_{y_i}||||x_i||\cos(\theta_{y_i,i})}}{\sum_je^{||w_{j}||||x_i||\cos(\theta_{j,i})}}) Li=log(jewjxicos(θj,i)ewyixicos(θyi,i))
假设是二分类问题,由softmax层得到输出,分别记为 p 1 p_1 p1 p 2 p_2 p2,有如下形式
p 1 = exp ⁡ ( W 1 T x = b 1 ) exp ⁡ ( W 1 T x + b 1 ) + exp ⁡ ( W 2 T x + b 2 ) p_1=\frac{\exp(W_1^Tx=b_1)}{\exp(W_1^Tx+b_1)+\exp(W_2^Tx+b_2)} p1=exp(W1Tx+b1)+exp(W2Tx+b2)exp(W1Tx=b1)
p 2 = exp ⁡ ( W 2 T x = b 2 ) exp ⁡ ( W 1 T x + b 1 ) + exp ⁡ ( W 2 T x + b 2 ) p_2=\frac{\exp(W_2^Tx=b_2)}{\exp(W_1^Tx+b_1)+\exp(W_2^Tx+b_2)} p2=exp(W1Tx+b1)+exp(W2Tx+b2)exp(W2Tx=b2)
由于可把 p 1 p_1 p1, p 2 p_2 p2看为近似概率,则二分类的预测值是取 p 1 p_1 p1 p 2 p_2 p2的较大的一项,则决策平面则为
KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ & p_1=p_2\\ &\…

∣ ∣ W ∣ ∣ = 1 , b = 0 ||W||=1,b=0 W=1,b=0,则决策平面化简为
∣ ∣ x ∣ ∣ ( cos ⁡ ( θ 1 ) − cos ⁡ ( θ 2 ) ) = 0 ||x||(\cos(\theta_1)-\cos(\theta_2))=0 x(cos(θ1)cos(θ2))=0
则决策平面完全取决于 θ 1 \theta_1 θ1 θ 2 \theta_2 θ2。此时的损失函数为
L i = − log ⁡ ( e ∣ ∣ x i ∣ ∣ cos ⁡ ( θ y i , i ) ∑ j e ∣ ∣ x i ∣ ∣ cos ⁡ ( θ j , i ) ) L_i= -\log(\frac{e^{||x_i||\cos(\theta_{y_i,i})}}{\sum_je^{||x_i||\cos(\theta_{j,i})}}) Li=log(jexicos(θj,i)exicos(θyi,i))
在论文中,该损失称为Modified Softmax Loss。

图6 softmax在欧式空间与映射到球面。图来自SphereFace: Deep Hypersphere Embedding for Face Recognition

图7 Modified Softmax Loss在欧式空间与映射到球面。图来自SphereFace: Deep Hypersphere Embedding for Face Recognition

Modified Softmax Loss的边界平面覆盖范围太大(因 θ 1 \theta_1 θ1 θ 2 \theta_2 θ2取值范围太大),是否有一种方法可以缩小边界平面的覆盖范围。考虑在 ∣ ∣ x ∣ ∣ ( c o s ( θ 1 ) − cos ⁡ ( θ 2 ) ) = 0 ||x||(cos(\theta_1)-\cos(\theta_2))=0 x(cos(θ1)cos(θ2))=0上进行修改。若采用以下形式
∣ ∣ x ∣ ∣ ( cos ⁡ ( m θ 1 ) − cos ⁡ ( θ 2 ) ) = 0 ||x||(\cos(m\theta_1)-\cos(\theta_2))=0 x(cos(mθ1)cos(θ2))=0
其中, m ≥ 2 m\geq 2 m2。这样, θ 1 \theta_1 θ1会被限制在更小的范围中。从而缩小了第1类的边界。同样的, θ 2 \theta_2 θ2也可用同样的方式来缩小边界。因而,该方法的边界条件为
∣ ∣ x ∣ ∣ ( cos ⁡ ( m θ 1 ) − cos ⁡ ( θ 2 ) ) = 0   for class 1 ∣ ∣ x ∣ ∣ ( cos ⁡ ( θ 1 ) − cos ⁡ ( m θ 2 ) ) = 0   for class 2 ||x||(\cos(m\theta_1)-\cos(\theta_2))=0\ \text{ for class 1}\\ ||x||(\cos(\theta_1)-\cos(m\theta_2))=0\ \text{ for class 2} x(cos(mθ1)cos(θ2))=0  for class 1x(cos(θ1)cos(mθ2))=0  for class 2

图8 边界可视化。图来自SphereFace: Deep Hypersphere Embedding for Face Recognition

在此可引入Angular Margin Softmax Loss(A-softmax)
L = 1 N ∑ i − log ⁡ ( e ∣ ∣ x i ∣ ∣ ϕ ( θ y i , i ) ∑ j ≠ y i e ∣ ∣ x j ∣ ∣ cos ⁡ ( θ j , i ) + e ∣ ∣ x i ∣ ∣ ϕ ( θ y i , i ) ) ϕ ( θ y i , i ) = ( − 1 ) k cos ⁡ ( m θ y i , i ) − 2 k , θ y i , i ∈ [ k π m , ( k + 1 ) π m ] L=\frac{1}{N}\sum_i -\log(\frac{e^{||x_i||\phi(\theta_{y_i,i})}}{\sum_{j\neq y_i}e^{||x_j||\cos(\theta_{j,i})}+e^{||x_i||\phi(\theta_{y_i,i})}})\\ \phi(\theta_{y_i,i})=(-1)^k\cos(m\theta_{y_i,i})-2k,\theta_{y_i,i}\in[\frac{k\pi}{m},\frac{(k+1)\pi}{m}] L=N1ilog(j̸=yiexjcos(θj,i)+exiϕ(θyi,i)exiϕ(θyi,i))ϕ(θyi,i)=(1)kcos(mθyi,i)2k,θyi,i[mkπ,m(k+1)π]

在L-softmax基础上,归一化权值 w w w,即 ∣ ∣ w ∣ ∣ = 1 ||w||=1 w=1,从直观上看,就是将特征映射到超平面上,使得训练集中在优化深度特征映射和特征向量角度上,降低样本数量不均的问题。
由于这个L-softmax和A-softmax训练起来难度较大,可以从softmax退火到L-softmax或A-softmax
f y i = λ ∣ ∣ x i ∣ ∣ cos ⁡ ( θ y i + ϕ ( θ y i ) 1 + λ f_{y_i}=\frac{\lambda||x_i||\cos(\theta_{y_i}+\phi(\theta_{y_i})}{1+\lambda} fyi=1+λλxicos(θyi+ϕ(θyi)

可参考博文

评价方法 doublet 与 ROC

如果直接从验证集中挑出一部分数据,放入网络得到softmax输出,再与数据标签进行比对计算准确率,依旧有可能会出现维度不匹配的情况。我们是想要评价所得到的特征向量的效果,因而依旧可以从特征向量入手。总体的思路是选择True对(类别相同的两个样本组成一对)与False对(类别不同的两个样本组成一对)各 n n n对,对True对集计算特征向量并计算余弦距离,对False对集计算特征向量并计算余弦距离,若True对集的余弦距离总体较高,而False对集的余弦距离总体较低,则认为该特征向量的效果较好。

假设人脸识别模型为 M M M,设 O O O 为模型输出的特征向量(该特征向量为单位向量,设512-d),该评价指标基于模型输出的特征向量来计算。步骤如下

  • 采样得到true对 D t Dt Dt和false对 D f Df Df
    true对指的是两个数据来自同一类,两个数据组成一个对
    false对指的是两个数据来自不同类,两个数据组成一个对
    D t Dt Dt D f Df Df的对数目要相同
    D t Dt Dt样式为
    D t = ( D t 11 , D t 12 D t 21 , D t 22 ⋮ D t m 1 , D t m 2 ) Dt= \begin{pmatrix} Dt_{11},Dt_{12}\\ Dt_{21},Dt_{22}\\ \vdots\\ Dt_{m1},Dt_{m2} \end{pmatrix} Dt=Dt11,Dt12Dt21,Dt22Dtm1,Dtm2
    其中, D t ⋅ ⋅ Dt_{\cdot\cdot} Dt的shape为[1,512]
    D f Df Df样式为
    D f = ( D f 11 , D f 12 D f 21 , D f 22 ⋮ D f m 1 , D f m 2 ) Df= \begin{pmatrix} Df_{11},Df_{12}\\ Df_{21},Df_{22}\\ \vdots\\ Df_{m1},Df_{m2} \end{pmatrix} Df=Df11,Df12Df21,Df22Dfm1,Dfm2
    其中, D f ⋅ ⋅ Df_{\cdot\cdot} Df的shape为[1,512]
  • 计算每一个对的余弦相似度。由于每一个对的两个数据为单位向量,因而做矩阵相乘即可得到余弦相似度。记 D t Dt Dt的相似度为 S t St St D f Df Df的相似度为 S f Sf Sf S t St St S f Sf Sf的shape都为[512,1]
    S t = ( D t 11 D t 12 T D t 21 D t 22 T ⋮ D t m 1 D t m 2 T ) S f = ( D f 11 D f 12 T D f 21 D f 22 T ⋮ D f m 1 D f m 2 T ) St= \begin{pmatrix} Dt_{11}Dt_{12}^T\\ Dt_{21}Dt_{22}^T\\ \vdots\\ Dt_{m1}Dt_{m2}^T \end{pmatrix}\\ Sf= \begin{pmatrix} Df_{11}Df_{12}^T\\ Df_{21}Df_{22}^T\\ \vdots\\ Df_{m1}Df_{m2}^T \end{pmatrix} St=Dt11Dt12TDt21Dt22TDtm1Dtm2TSf=Df11Df12TDf21Df22TDfm1Dfm2T
  • 分别对 S t St St S f Sf Sf从高到低排序,得到 R S t RSt RSt R S f RSf RSf
  • 有两种方法,一种计算ROC曲线,一种计算较小的FPR时,TPR的取值
    • 1.计算ROC曲线

      • 阈值 η \eta η从大到小进行取值遍历,取值范围为 [ m i n ( m i n ( R S t ) , m i n ( R S f ) ) , m a x ( m a x ( R S t ) , m a x ( R S f ) ) ] [min(min(RSt),min(RSf)),max(max(RSt),max(RSf))] [min(min(RSt),min(RSf)),max(max(RSt),max(RSf))],遍历步长越小,ROC曲线精度越高。假设 η \eta η H H H个取值: η 1 , ⋯   , η H \eta_1,\cdots,\eta_H η1,,ηH
      • 对于 η \eta η的第 h h h个取值 η h , \eta_h, ηhRSt中,大于 η h \eta_h ηh的样本数目记为 T P h TP_{h} TPh,小于 η h \eta_h ηh的样本数目记为 F N h FN_{h} FNh。RSf中,大于 η h \eta_h ηh的样本数目记为 F P h FP_{h} FPh,小于 η \eta η的样本数目记为 T N h TN_{h} TNh,计算 η h \eta_h ηh对应的 T P R TPR TPR F P R FPR FPR
        T P R h = T P h T P h + F N h F P R h = F P h F P h + T N h {TPR}_h=\frac{TP_{h}}{TP_{h}+FN_{h}}\\ {FPR}_h=\frac{FP_{h}}{FP_{h}+TN_{h}}\\ TPRh=TPh+FNhTPhFPRh=FPh+TNhFPh
        并组成一个点对 P h = ( F P R h , T P R h ) P_h=({FPR}_h,{TPR}_h) Ph=(FPRh,TPRh)。显然, F P R h ∈ [ 0 , 1 ] , T P R h ∈ [ 0 , 1 ] {FPR}_h \in [0,1],{TPR}_h \in [0,1] FPRh[0,1],TPRh[0,1]
      • 对于 H H H个点对 P h , h = 1 ⋯   , H P_h,h=1\cdots,H Ph,h=1,H作图, x x x轴为 F P R FPR FPR y y y轴为 T P R TPR TPR,即为ROC曲线

      ROC曲线

    • 2.直接计算FPR点所对应的TPR

      • 计算 F P = F P R × ( F P + T N ) FP=FPR\times(FP+TN) FP=FPR×(FP+TN),得到给定FPR时,FP的取值,取FP中取值最小的数作为 η \eta η
      • η \eta η对True对进行分割,得到 T P TP TP F N FN FN,进而计算 T P R = T P T P + F N TPR=\frac{TP}{TP+FN} TPR=TP+FNTP

当模型提取出的特征向量较好时,在较小的FPR时,其TPR能到比较高的水平。因而能通过TPR的值来判断模型的效果。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值