赞
踩
Learning Generalized Spoof Cues for Face Anti-spoofing
paper PDF
anti-spoof -> 传统方法 -> 缺陷 -> idea -> 设计->实验
Face Anti-spoof 即对人脸图像进行活体检测,常用于人脸身份认证的过程中,以防止别有用心的人利用目标人脸的照片,视频或者面具进行欺诈。
传统的anti-spoof利用如HOG,SIFT等手工特征来提取图像的纹理信息,并利用浅层的分类器如SVM来建立分类边界。再有就是利用CNN将该任务作为二分类网络来训练,以提取更加discriminate特征。但是由于人脸spoof的方式不同,并且考虑unknown欺诈方式。利用上述的训练方式,往往造成对某种欺诈方式的过拟合,而缺乏泛化能力。
考虑到FAS(Face Anti-spoof)的泛化能力差,主要在于欺诈手段的多样性。为了减轻这种多样性对决策边界的影响,本论文提出从异常检测(Anomaly Detection)的角度出发来重新定义FAS。本文假设live samples属于属于一个闭集,而其他spoof sample属于该闭集之外的一个开集中1,并利用通过学习spoof cue作为区分封闭集和非封闭集的discriminate特征(spoof cue只在 spoof samples中存在)。在本论文中,spoof cue定义为一个于输入图像大小相同的feature map,spoof samples应该是一个非全零的feature map,而live samples应该是全零的feature map。
为了学习上文所说的feature map,论文中提出的网络模型由一个spoof cue生成器和一个Auxiliary Classifier构成。在spoof cue生成器中,论文对live samples计算了显式的回归损失,以最小化其feature map中值的大小;但并没有对spoof samples设置显式约束,使其feature map可以任何实数。这样一来,live samples和spoof samples就可以很自然地分离开来。此外,论文在生成器上采用多尺度特征级度量学习,以提高live samples的类内紧凑和live-spoof类间可分。最后,将feature map和以残差学习方式进行连接的输入图像反馈给Auxiliary Classifier,进一步改进了判别特征学习。
Anomaly detection(AD)指的是在一组正常数据中识别异常样本的任务。典型的AD方法试图以监督的方式学习正常数据的紧凑描述。通常通过训练模型学习一种映射,使得以预定点c为中心的输出空间的超球面的体积最小化。而异常点就可以通过其在输出空间与预定点c之间的距离来判断。
在AD方法下,我们假设live samples属于一个闭集,而spoof samples是这个闭集的离群点,属于一个开集。因此,我们假设live samples的分布在学习特征表示空间的一个紧凑的球面上,而spoof samples远离这个球体的中心,如下图所示。
具体来讲,对于本文的FAS模型,假设输入空间为
X
∈
R
d
X \in \mathbb{R}^d
X∈Rd,输出空间是
Z
∈
R
p
Z \in \mathbb{R}^p
Z∈Rp,
ϕ
(
⋅
;
W
)
\phi(\cdot ; W)
ϕ(⋅;W)是一个L层的深度神经网络,对应权重为
w
=
{
w
1
,
w
2
.
.
.
w
L
}
w=\{w^1, w^2...w^L\}
w={w1,w2...wL}。在给定
N
l
N_l
Nl个live samples
(
x
1
,
x
2
.
.
.
.
x
n
l
∈
X
)
(x_1, x_2....x_{n_l}\in X)
(x1,x2....xnl∈X)和
N
s
N_s
Ns个spoof samples
(
y
1
,
y
2
.
.
.
.
y
n
s
∈
X
)
(y_1, y_2....y_{n_s}\in X)
(y1,y2....yns∈X)的情况下,模型的目标函数为:
a
r
g
(
W
)
:
m
i
n
1
n
l
∑
i
=
1
n
l
∥
ϕ
(
x
i
,
W
)
−
c
∥
2
m
a
x
1
n
s
∑
i
=
1
n
s
∥
ϕ
(
y
i
,
W
)
−
c
∥
2
(1)
arg(W): \\ min\frac{1}{n_l} \sum_{i=1}^{n_l}\| \phi(x_i, W) - c\|^2 \\ max\frac{1}{n_s} \sum_{i=1}^{n_s}\| \phi(y_i, W) - c\|^2 \tag{1}
arg(W):minnl1i=1∑nl∥ϕ(xi,W)−c∥2maxns1i=1∑ns∥ϕ(yi,W)−c∥2(1)
在测试阶段,样本t是spoof的得分则通过计算输出到点c的距离获得,如公式2:
s
(
x
)
=
∥
ϕ
(
x
i
,
W
)
−
c
∥
(2)
s(x)=\| \phi(x_i, W) - c \| \tag{2}
s(x)=∥ϕ(xi,W)−c∥(2)
在FAS中,live samples和spoof samples之间的区别可能是由于媒介的固有特性造成的,如印刷介质或屏幕。在残差学习方法的驱动下,live samples和spoof samples的判别差异可以看作是spoof samples和live samples的残差。
在Spoof cue生成器中,如图2所示,采用了U-Net架构,构建从编码器到解码器的多尺度跳跃连接,生成spoof cue。
在本文的假设中,Spoof cue仅仅存在于spoof samples中。因而live samples对应的feature map应该是全零矩阵,也就是说这个全零的feature map就是上文所指出的c点。为此我们需要在live -samples的输出feature map上添加限制。
给定一个RGB图像
I
I
I作为输入,spoof cue生成器输出一个相同大小的feature map
C
C
C。live samples的feature map回归损失为像素级L1损失,公式如下所示:
L
r
=
1
N
l
∑
I
i
∈
l
i
v
e
∥
C
i
∥
1
(3)
\mathfrak{L}_r = \frac{1}{N_l} \sum_{I_i \in live} \| C_i \|_1 \tag{3}
Lr=Nl1Ii∈live∑∥Ci∥1(3)
基于学习的度量损失被设计为对spoof sample的隐式监督,在特征层上提高live-live类内紧度和live-spoof类间可分性。具体来说,我们通过在从E5层到D4层的特征映射上使用全局平均池(GAP)来获得一组特征向量
V
{V}
V。使用Triplet Loss进行监督,其中anchor属于live类。基于度量学习的损失可以表示为:
L
t
=
1
T
∑
i
=
1
T
m
a
x
(
d
(
a
i
,
p
i
)
−
d
(
a
i
,
n
i
)
,
0
)
d
(
i
,
j
)
=
∥
v
i
∥
v
i
∥
2
−
v
j
∥
v
j
∥
2
∥
2
\mathfrak{L}_t = \frac{1}{T} \sum_{i=1}^{T} max(d(a_i, p_i)-d(a_i, n_i), 0) \\ d(i, j) = \|\frac{v_i}{\|v_i\|_2} - \frac{v_j}{\|v_j\|_2}\|_2
Lt=T1i=1∑Tmax(d(ai,pi)−d(ai,ni),0)d(i,j)=∥∥vi∥2vi−∥vj∥2vj∥2
其中
a
i
,
p
i
,
n
i
{a_i, p_i, n_i}
ai,pi,ni分别表示第i个三元组中的anchor(live)、positive(live)、negative(spoof) , T表示三元组的个数,
d
(
i
,
j
)
d(i, j)
d(i,j)表示GAP输出的两个L2归一化特征向量之间的欧氏距离,m为预定义的边界常数。
Auxiliary Classifier作为spoof cue的放大器,帮助学习更discriminate的spoof cue。在Spoof cue生成器之后,生成的spoof cue
C
C
C与输入图像
I
I
I叠加,形成覆盖的图像
S
S
S。以S作为输入的Auxiliary Classifier的损失函数定义为:
L
a
=
1
N
∑
i
=
1
N
z
i
l
o
g
q
i
+
(
1
−
z
i
)
l
o
g
(
1
−
q
i
)
\mathfrak{L}_a = \frac{1}{N} \sum_{i=1}^{N} z_i logq_i+(1-z_i)log(1-q_i)
La=N1i=1∑Nzilogqi+(1−zi)log(1−qi)
其中N为样本个数,
z
i
z_i
zi为label,
q
i
q_i
qi为网络预测。
Loss Function:
L
=
α
1
L
r
+
α
2
∑
k
∈
{
E
4
−
D
4
}
L
t
k
+
α
3
L
t
\mathfrak{L} = \alpha_1 \mathfrak{L}_r+ \alpha_2 \sum_{k \in \{E4 - D4\}} \mathfrak{L}_t^k + \alpha_3 \mathfrak{L}_t
L=α1Lr+α2k∈{E4−D4}∑Ltk+α3Lt
Test Strategy:
在测试阶段,我们使用生成的feature map代替分类器的输出进行评估。我们将获得的feature map
C
^
\hat{C}
C^的所有元素的平均值作为分数:
s
c
o
r
e
=
∥
C
^
∥
1
‾
score = \overline{ \| \hat{C}\|_1}
score=∥C^∥1
训练集和测试集属于同一数据集。
具体来说,模型在一个数据集上进行训练,然后在另一个数据集上进行测试。跨数据集的评估是一个挑战,因为不同数据集之间的实时和模拟样本的数据分布都有很大的差异。
https://blog.csdn.net/fuwenyan/article/details/77769224 ↩︎
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。