Deep Learning Face Representation by Joint Identification-Verification
arXiv
人脸识别任务的主要挑战是开发有效的特征表征以降低个体内部差异并增加个体间差异。DeepID2从不同的身份提取特征来增大个体间差异,将同一身份的特征聚集在以降低个体内差异。
无约束条件下,同一身份的姿态、光照、表情等变化可能会压倒不同身份导致的变化。个体内\间变化是复杂的、高度非线性的,这使得早期方法,如LDA,贝叶斯脸,度量学习效果并不好。
同时使用两种监督信号来学习特征:人脸识别信号和人脸验证信号。识别是将一张图像分类到一个大的身份类别中(多分类),而验证是判断两张图像是否属于同一身份(二分类)。在训练时,获得最高层特征后使用另一个函数 g g g将其映射到众多身份中的一个,识别监督信号倾向于将不同身份的特征分类,因此学习的特征有丰富的身份相关和个体间变化。然而识别信号对于提取自同一身份的特征约束较弱,不同的特征经过 g ( ⋅ ) g(\cdot) g(⋅)可能会被映射到同以身份,这导致特征泛化性不好。使用额外的人脸验证信号能够有效降低个体内部变化。
为了从不同方面来表征人脸,我们从不同的人脸区域和分辨率中提取互补的DeepID2特征,经过PCA降维后拼接成最终特征表示。
网络共有四个卷积层,前三层使用最大池化,最后一个卷积层不使用权值共享。网络提取160维的DeepID2向量。DeepID2层与最后两层进行全连接,使用多个尺度特征作为输入。特征提取过程定义为 f = C o n v ( x , θ c ) f=Conv(x,\theta_c) f=Conv(x,θc)。
使用两种监督信号学习特征表示,识别监督信号将每一张人脸图像分类到
n
n
n个不同的身份中,在DeepID2层后添加一个
n
n
n类softmax层,输出
n
n
n类的概率。最小化交叉熵损失来训练网络,称为识别损失,
I
d
e
n
t
(
f
,
t
,
θ
i
d
)
=
−
∑
i
=
1
n
p
i
log
p
^
i
=
−
log
p
^
t
Ident(f,t,\theta_{id})=-\sum^n_{i=1}p_i\log \hat p_i=-\log \hat p_t
Ident(f,t,θid)=−i=1∑npilogp^i=−logp^t
为了正确分类,DeepID2层必须形成判别性身份相关特征(个体差异大)。人脸验证信号鼓励提取自同一身份的DeepID2特征相似。验证信号直接对DeepID2进行正则化,能够有效降低个体内部差异。常用的约束条件是
L
1
/
L
2
L_1/L_2
L1/L2和余弦相似度。这里采用
L
2
L_2
L2范数作为损失函数,
V
e
r
i
f
(
f
i
,
f
j
,
y
i
j
,
θ
v
e
)
=
{
1
2
∥
f
i
−
f
j
∥
2
2
i
f
y
i
j
=
1
1
2
max
(
0
,
m
−
∥
f
i
−
f
j
∥
2
2
)
i
f
y
i
j
=
−
1
Verif(f_i,f_j,y_{ij},\theta_{ve})=\begin{cases} \frac 1 2 \|f_i-f_j\|^2_2 & if\ y_{ij}=1 \\ \frac 1 2 \max(0,m-\|f_i-f_j\|^2_2) & if\ y_{ij}=-1\end{cases}
Verif(fi,fj,yij,θve)={21∥fi−fj∥2221max(0,m−∥fi−fj∥22)if yij=1if yij=−1
其中
f
i
f_i
fi和
f
j
f_j
fj是提取自两张人脸图像的特征,当来自同一身份时
y
i
j
=
1
y_{ij}=1
yij=1,否者
y
i
,
j
=
−
1
y_{i,j}=-1
yi,j=−1,
m
m
m是要求的距离,
θ
v
e
=
{
m
}
\theta_{ve}=\{m\}
θve={m}是可学习参数。
余弦相似度量为
V
e
r
i
f
(
f
i
,
f
j
,
y
i
j
,
θ
v
e
)
=
1
2
(
y
i
j
−
σ
(
w
d
+
b
)
)
2
Verif(f_i,f_j,y_{ij},\theta_{ve})=\frac 1 2 (y_{ij}-\sigma(wd+b))^2
Verif(fi,fj,yij,θve)=21(yij−σ(wd+b))2
其中
d
d
d是
f
i
f_i
fi与
f
j
f_j
fj的余弦距离,
θ
v
e
=
{
w
,
b
}
\theta_{ve}=\{w,b\}
θve={w,b}是可学习尺度和位移参数,
σ
\sigma
σ是sigmoid函数,
y
i
j
y_{ij}
yij是二值目标。
我们的目标是学习特征提取函数 C o n v ( ⋅ ) Conv(\cdot) Conv(⋅)中的参数 θ c \theta_c θc,而 θ i d \theta_{id} θid和 θ v e \theta_{ve} θve是引入参数用于在训练中传播识别和验证信号。间隔 m m m无法使用梯度下降进行更新因为他的梯度非负。在训练中采用自适应更新 m m m,它是在最近的训练样本上给出最低验证错误的阈值。
- 人脸对齐,使用SGD算法检测21个人脸特征点,再使用相似变换将人脸对齐。
- 特征提取,变化位置、尺度、色彩空间和水平翻转裁剪400个人脸图像块,输入到200个深度卷积网络,每个网络输出两个160维的特征向量(图像块及对应水平翻转)。使用forward-backward贪婪算法挑选出一小部分有效且互补的特征向量(25个),将特征进行拼接得到一个4000维的特征向量,再进一步使用PCA进行压缩用于人脸验证。
- 人脸验证,使用联合贝叶斯模型进行人脸验证,将人脸表征 f f f视为个体之间和个体内部变换之和,即 f = μ + ϵ f=\mu+\epsilon f=μ+ϵ, μ \mu μ和 ϵ \epsilon ϵ均服从高斯分布并从训练数据中估计得到。计算对数似然率 log P ( f 1 , f 2 ∣ H i n t e r ) P ( f 1 , f 2 ∣ H i n t r a \log\frac{P(f_1,f_2|H_{inter})}{P(f_1,f_2|H_{intra}} logP(f1,f2∣HintraP(f1,f2∣Hinter)来判断两张人脸是否属于同一个个体。