논문

하루에도 수만개의 글자를 읽고 있습니다. 하루에도 수백장의 종이를 들춰 읽습니다.
이것은 그 읽기에 대한 일기입니다.

Deep Tree Learning for Zero-shot Face Anti-Spoofing

1. Introduction

기존 제안된 모델들은 알고 있는 학습할 때 사용했던 것과 동일한 spoof 패턴만을 대상으로 했다. 모델을 일반화하여 학습 때 보여주지 않은 패턴도 검출할 수 있는지에 관심이 증가했다. 이러한 문제를 여기서는 Zero-Shot Face Anti-spoofing (ZSFA)라고 정의하였다.

Handcrafted feature를 이용한 방법은 다음의 단점을 가지고 있었다.

  1. 사람이 고려할 수 있는 spoof 패턴이 너무 적고,
  2. 기존의 spoof 패턴에서도 보여주지 않았지만 앞으로 보여질 spoof 패턴에 대한 유용한 정보를 얻을 수 있음에도 그것보다는 live 패턴에 집중하고 있다.
  3. 사람으로는 feature의 선택에 한계가 있었다.

이를 해결하기 위해 먼저 여러 spoof 패턴에 대해 조사를 하고 이를 이용하여 Sppof in the Wild database with Multiple Attack Types (SiW-M) DB를 제작하였다.

그리고 ZSFA를 위해서는 Deep Tree Network (DTN)을 제안하였다. spoof 타입마다 공통된 feature도 있고, 서로 구분되는 feature도 있기 때문에 tree 방식의 모델은 이를 처리하기에 알맞다. 공통된 feature는 먼저 등장하는 트리 노드에서 학습되고 구분되는 feature는 말단 트리 노드에서 학습된다.

별다른 auxiliary label 없이 DTN은 unsupervised 방식으로 학습된다. 각 노드는 데이터를 가장 큰 데이터 분산을 가지는 축을 찾아 데이터를 분리해 나간다. 이를 진행하면 각 단말 노드에 여러 서브그룹으로 데이터가 나뉘게 되며, 각 서브그룹에 independently하게 spoof 공격을 감지하도록 학습된다.

2. Prior Work

ZSFA는 새로운 방법으로 다음의 차이가 있다.

  1. 특정한 spoof 타입을 인식하는 대신, spoof 공격을 탐지하도록 하였다.
  2. 객체 검출은 더 시맨틱한 임베딩을 얻게 되지만, spoof 패턴은 명시적으로 잘 정의된 시맨틱 임베딩이 없다.

3. Deep Tree Network for ZSFA

DTN의 목적은 두가지 이다.

  1. 알려주는 spoof 에 대한 시맨틱 서브그룹을 발견하기
  2. 계층적인 방법으로 feature를 학습하기

DTN의 각 트리 노드는 Convolutional Residual Unit (CRU)와 Tree Routing Unit (TRU)로 이루어져 잇고, 단말 노드는 CRU와 Supervised Feature Learning (SFL) 모듈로 구성된다. CRU는 컨볼루셔널 레이어와 숏컷 커넥션으로 이루어진 블럭이다. TRU는 데이터 샘플을 받아 자식 노드로 보내는 함수를 가지는 노드이다. SFL 모듈은 classification supervision과 pixel-wise supervision을 합쳐 spoofing feature를 학습한다.

3.1. Unsupervised Tree Learning

3.1.1 Node Routing Function

데이터 입력을 $\mathbf{I}$, 이전까지 있었던 CRU의 파라미터를 $\theta$라고 하고 TRU에 입력되는 feature를 $x$라고 하자. Feature를 함수 $\varphi(x) = x^T \cdot v + \tau$ 에 통과시켜 0을 threshold로 어느 노드로 갈지 결정하게 된다. 기존 [44] Xiong의 연구에서는 로스를,

$ \mathcal{L} = \frac{(\frac{1}{N} \sum_{I_k \in S} \varphi(x_k))^2}{(\frac{1}{N_l} \sum_{I_k \in S_{\text{left}}} \varphi(x_k) - \frac{1}{N_r} \sum_{I_k \in S_{\text{right}}} \varphi(x_k))^2}$

로 놓고 학습하여 $v$와 $\tau$를 학습하였다. 하지만, 이 방법은 다음의 문제가 있다.

  1. 이 로스는 $v$나 $x$의 놈을 증가시켜 로스를 줄이려는 경향이 있고,
  2. $v, x$의 놈에 제한을 주더라도 아웃라이어에 민감하다.

따라서 로컬 미니마에 빠지게 되면 트리는 적은 몇개의 노드로 집중될 가능성이 있다.

데이터를 더 좋게 분리하기 위하여 논문에서는 다른 방법을 사용한다. $v$는 $x$를 내적하는 것이기 때문에 일종의 투영으로 보고, 투영 후 $x$가 넓은 분포를 지니도록 하였다. 이는 PCA와 같은 방법이며, 함수를 다음과 같이 다시 작성하였다.

$$ \varphi(x) = (x - \mu)^T \cdot v, ||v|| = 1 $$

여기서 $v$를 찾기 위해서는 PCA를 적용하여 $x$의 covariance matrix를 계산, eigen value가 가장 큰 것을 찾으면 된다. 이를 로스에 적용하였다.

$$ \mathcal{L}_\text{route} = \exp(\alpha v^T\bar{X}^T_S \bar{X}^T_S v) + \beta Tr(\bar{X}_S^T \bar{X}_S )$$

$\alpha, \beta$는 스칼라 값이고, $\exp$를 통해 최대화 문제를 해결하도록 변경해주었다. 두번째 항은 trivial solution을 막기 위한 regularizer이다.

3.1.2 Tree of Known Spoofs

앞에서 말한 것과 같이 각 노드들은 spoof 패턴의 서브 그룹을 탐지하도록 의도되었다. 이와는 반대로 live 트리나 general 데이터에 대한 트리도 구성해보았는데, 다음과 같은 단점이 있었다. Live 트리는 spoof에 대한 시맨틱을 전달하지 않고 spoof 를 탐지하는데 도움을 주지 못한다. General 트리는 서브그룹의 imbalance를 만들어 내어 다음에 있을 supervised learning에 bias된 영향을 주었다.

따라서 routing 함수를 학습하기 위해 spoof 샘플만을 이용하여 $X_S$를 만들었고, 각 단말의 서브그룹의 밸런스를 맞추기 위해 live 데이터의 response를 0으로 만들어 모든 데이터는 child node에 균등하게 배분되도록 하였다. 또한 해당 노드에 방문하지 않은 다른 데이터들도 response를 0으로 만들어 모든 노드의 분포가 동일하도록 하였다.

$$ \mathcal{L}\text{uniq} = -\frac{1}{N} \sum{I_k \in S}||\bar{x}^T_k v||^2 + \frac{1}{N^-}\sum_{I_k \in S^-} || \bar{x}_k^Tv||^2 $$

3.2. Supervised Feature Learning

Routing 함수에 의해 데이터가 하나의 말단에 할당되면, 각 말단에서는 이를 이용하여 supervised task를 수행한다. 이 task는 live와 spoof를 구분하는 binary classification 작업과, local feature를 이용하여 pixel-wise mask regression을 수행하는 두개의 작업을 학습시킨다.

Classification supervision 마지막 feature에 2개의 convolution layer를 추가하고 2개의 fully connected layer를 거쳐서 feature vector $c_k \in \mathbb{R}^{500} $의 벡터를 생성하였다. 이를 softmax cross entropy loss를 이용하여 학습시켰다.

Pixel-wise supervision 또 다른 convolution layer를 추가하여 32 x 32크기의 map response를 생성하고, spoof 영역의 위치를 regression하여 mask를 생성하도록 하엿다.

Overall loss $p$개 말단 노드와 $q$개 TRU 노드에서의 최종 로스는 다음과 같다.

$$ \mathcal{L} = \sum_{i=1}^p (\alpha_1 \mathcal{L}{\text{class}}^i + \alpha_2 \mathcal{L}{\text{mask}}^i ) + \sum_{j=1}^q (\alpha_3 \mathcal{L}{\text{route}}^j + \alpha_4 \mathcal{L}{\text{uniq}}^j ) $$

3.3. Network Architecture

Deep Tree Network (DTN) DTN의 입력은 256 x 256 x 6으로 RGB와 HSV를 모두 사용하였다. 3개의 3 x 3 x 40 convolution layer와 1개의 max-pooling 을 한 그룹으로 CRU로 사용하였으며, ReLU와 group normalization을 사용하엿다. 각 트리 노드에서는 CRU와 TRU를 같이 사용하였다. 말단 노드에서는 32 x 32 x 40의 출력을 내도록 하였으며, binary mask map은 1x1 convolution layer를 이용하였다.

Tree Routing Unit (TRU) TRU는 입력된 feature는 1x1 convolution layer를 이용하여 압축된 다음 리사이즈한다. 루트 노드에서는 32 x 32 x 10, 이후 트리 노드는 16 x 16 x 20의 크기를 가지게 된다. 이 압축은 covariance matrix를 계산하는데 부담을 줄이기 위함이다. CRU에서는 batch norm의 moving average를 이용하여 평균을 계산하였다.

Implementation details DTN 모듈과 TRU 모듈은 번갈아가며 학습하도록 하였다.

4. Spoof in the Wild Database with Multiple Attack Types

5. Experimental Results

6. Conclusions


Add a Comment Trackback