논문

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

Face De-Spoofing: Anti-Spoofing via Noise Modeling

1 Introduction

기존의 CNN 기반 Anti-spoofing 연구들은 블랙 박스와 같은 binary classification 문제로 다루어졌습니다. 반면 이 논문에서는 원래의 라이브 이미지로부터 어떻게 spoof 이미지가 생성되었는지의 방법을 모델링하였습니다.

논문의 방법은 기존의 전통적인 영상처리 분야의 de-X 문제에서 모티브를 얻었습니다. Spoof 이미지는 기존의 라이브 이미지를 다시 렌더링한 이미지로 볼 수 있으며, 여기에 어떤 환경적인 부분과 spoof medium으로부터의 노이즈가 섞인다고 가정하였습니다. 어떤 spoof 이미지가 주어진다면 원래의 라이브 이미지를 복원할 수 있는가에 대한 질문으로 이어집니다.

논문에서는 이를 Face De-spoofing이라고 하였습니다. 이를 de-X 에서 사용하는 수식 형태로 나타내면 다음과 같습니다.

$$ \mathbf{x = A \hat{x} + n = \hat{x} + (A - I) \hat{x} + n = \hat{x} + N(\hat{x})} $$

여기서 $N(\mathbf{\hat{x}})$는 이미지 종속적인 노이즈 함수입니다. $\mathbf{A, n}$을 구하는 대신 이 노이스 함수를 딥 네트워크로 추정하고 이를 이미지에서 뺌으로써 원래의 라이브 이미지를 추정할 수 있도록 하였습니다.

Face de-spoofing의 이득은, 1) spoofing 과정을 다시 돌릴 수 있기 때문에, 여러 spoof medium에 존재하는 노이즈 패턴을 visualize할 수 있고, 2) spoof 노이즈를 이용하여 라이브 이미지인지 spoof 이미지인지를 구분할 수 있습니다.

이 de-X 문제를 해결하려면 다음의 여러운 점이 있었습니다.

No Ground Truth: 원래의 이미지와 이를 이용하여 합성된 노이즈 이미지가 필요합니다.

No Noise Model: Spoof 노이즈의 분석에 대한 자료가 없엇습니다.

Diverse Spoof Mediums: 각 Medium에 따라 서로 다른 spoof 패턴을 가지기 때문에 이를 생성해 주어야 합니다.

이를 해결하기 위하여 몇가지 가정을 하였습니다.

  1. 라이브 이미지는 노이즈를 가지지 않는다.
  2. Spoof 이미지에서의 Spoof 노이즈는 이미지 전체에서 존재한다. 푸리에 변환을 하면 높은 주파수 영역에서 대표적으로 나타난다.

이러한 가정 아래에서 auxiliary supervision을 위한 별도의 CNN과 GAN에서 사용한 것과 같은 discriminator를 추가하여 한꺼번에 학습하였습니다. 추가된 CNN은 복원된 이미지의 품질을 평가하고, discriminator는 라이브 이미지인지 spoof 이미지인지를 구분하는 역할을 담당합니다.

2 Prior Work

3 Face De-spoofing

3.1 A Case Study of Spoof Noise Pattern

이미지에 입혀지는 노이즈를 다음으로 분류하였습니다.

  1. Color distortion
  2. Display artifacts
  3. Presenting artifacts
  4. Imaging artifacts

3.2 De-Spoof Network

Figure 3은 전체적인 네트워크 구조를 보여줍니다. 네트워크는 3가지 부분으로 구성되어있으며, 각각은 De-Spoof Net (DS Net), Discriminative Quality Net (DQ Net), Visual Quality Net (VQ Net) 의 이름을 가지고 있습니다.

DS Net은 입력 이미지에 대하여 spoof 노이즈 패턴 $\mathbf{N}$을 추정하는 역할을 합니다. 실제 얼굴 $\hat{\mathbf{I}}$은 입력 이미지에서 노이즈를 빼면 복원할 수 있습니다. 이렇게 복원된 이미지는 시각적으로 실제 얼굴 이미지처럼 보여야 하며, 이는 VQ Net과 DQ Net을 통해 검증하는 구조를 가집니다. 네트워크 구조는 표1과 같습니다.

DS Net은 인코더-디코더 구조로 되어잇으며, 입력은 256 x 256 x 6으로 RGB, HSV 색공간 이미지를 사용합니다. 마지막 레이어의 출력은 32 x 32 x 32의 크기를 가지며, spoof 노이즈 패턴의 특징 표현을 나타냅니다. 이 특징은 다시 디코더로 입력되어 256 x 256의 노이즈 패턴을 생성하게 됩니다.

DS Net의 각 컨볼루셔널 레이어는 exponential linear unit (ELU)와 batch normalization을 이용하고 있으며, DQ NEt와 VQ Net의 로스를 합한 로스를 사용합니다.

3.3 DQ Net and VQ Net

사실 spoof 노이즈 패턴에 대한 ground truth를 가지지 않기 때문에 이를 지도 학습을 통하여 만들어 내는것은 쉽지 않습니다. 때문에 Discriminative Quality Net (DQ Net)과 Visual Quality Net (VQ Net)을 이용하였습니다. VQ Net은 복원된 이미지가 자연스러운 사진인 것 처럼 보이게끔 하도록 유도하고, DQ Net은 가짜 얼굴이 아닌 실제 얼굴 사진인지를 판단하도록 합니다.

**Discriminative Quality Net: ** [18]의 연구에서 구조를 차용하였습니다. DQ Net은 입력된 이미지가 실제 얼굴이면 얼굴의 pseudo-depth map을 추정하도록 학습하고 가짜 얼굴이면 평평한 깊이를 추정하도록 학습합니다.

DQ Net를 미리 학습하여 실제 얼굴과 가짜 얼굴의 시맨틱 지식을 얻도록 한 뒤, DS Net을 학습할 때에는 DQ Net을 고정하여 사용합니다.

DS Net의 학습 중 복원된 이미지 $\mathbf{\hat{I}}$는 실제 이미지이어야 하므로 출력된 pseudo-depth $\mathbf{D}$는 얼굴의 형태를 띠어야 합니다. 따라서 DQ NEt의 에러는 DS Net이 spoof 노이즈 패턴을 잘 추정하도록 유도됩니다. 로스는 아래와 같습니다.

$$ J_{DQ} = || \text{CNN}_{DQ} (\mathbf{\hat{I}}) - \mathbf{D}||_1$$

Visual Quality Net: VQ Net은 실제 이미지 $\mathbf{I_\text{live}}$와 만들어진 이미지 $\mathbf{\hat{I}}$을 구분하도록 학습됩니다. DS Net은 복원된 이미지가 VQ Net에 의해 만들어낸 이미지가 아닌 것으로 판단하도록 학습될 것입니다. VQ Net의 출력은 2D 벡터 형태로 내보내며 각각은 입력 이미지가 실제인지 합성된 이미지인지의 확률을 나타냅니다. VQ Net은 두번의 배치 마다 평가됩니다. 첫번째 배치는 DS Net을 고정시키고, VQ Net을 업데이트합니다.

$$ J_{VQ_\text{train}} = -\mathbb{E}{I \in \mathcal{R}} \log (\text{CNN}{VQ}(\mathbf{I})) - \mathbb{E}{I \in \mathcal{S}} \log (1 - \text{CNN}{VQ}( \text{CNN}_{DS}(\mathbf{I})))$$

여기서 $\mathcal{R}, \mathcal{S}$는 각각 실제 이미지와 생성된 이미지를 나타냅니다.

다음 배치는 VQ Net을 고정시키고 DS Net을 업데이트합니다.

$$ J_{VQ_\text{test}} = - \mathbb{E}{I \in \mathcal{S}} \log (1 - \text{CNN}{VQ}( \text{CNN}_{DS}(\mathbf{I})))$$

3.4 Loss functions

Magnitude Loss, Zero\One Map Loss, Repetitive Loss의 3가지를 시도해보았습니다. 결과적으로는 세가지 로스를 다 사용하는 것이 결과가 좋았습니다.

**Magnitude Loss: ** 복원된 이미지는 원래 이미지에서 노이즈를 빼서 만드므로 단순히 그 차이를 로스로 사용하는 방법입니다.

$$ J_m = || \mathbf{N} ||_1 $$

Zero \ One Map Loss: DS Net의 서브태스크로 픽셀마다 실제 이미지인지 아닌지를 나타내는 0\1 맵 $\mathbf{M}$을 추정하도록 하여 이를 사용하는 방법입니다.

$$J_z = || \text{CNN}_{01 map} ( \mathbf{F}; \Theta) - \mathbf{M} ||_1$$

Repetitive Loss: 노이즈 패턴은 주로 푸리에 공간에서 고주파 부분에 나타난다는 이전 연구를 참고하여 고주파 부분의 피크를 로스로 사용하는 방법입니다. $\mathcal{F}$은 푸리에 변환을, $H$는 저주파 성분을 마스킹하는 연산을 나타냅니다.

$$ J_r = \cases{ - \max (H(\mathcal{F}(\mathbf{N}), k), \mathbf{I} \in Spoof, \ ||\max(H(\mathcal{F}(\mathbf{N}), k)||_1, \mathbf{I}\in Live)} $$

최종 로스는 아래와 같습니다.

$$ J_T = J_z + \lambda_1 J_m + \lambda_2 J_r + \lambda_3 J_{DQ} + \lambda_4 J_{VQ_{test}}$$

4 Experimental Results

5 Conclusions


Add a Comment Trackback