하루에도 수만개의 글자를 읽고 있습니다. 하루에도 수백장의 종이를 들춰 읽습니다.
이것은 그 읽기에 대한 일기입니다.
Face Anti-Spoofing Using Patch and Depth-Based CNNs
3월 26th, 2019 Posted by 룬룬
1. Introduction
- Two-stream CNN을 이용하는 print/replay attack을 방어하는 face antispoofing 방법을 제안한다.
- 이미지로부터 로컬 특징과 전체 깊이 맵을을 추출하여 사용한다.
- 로컬 특징은 얼굴 영역 내에서 랜덤하게 선택된 패치로부터 특징을 추출한다.
- 깊이 맵은 실제 얼굴은 3D 얼굴 객체로 가정하고 깊이를 계산하고, 가짜 이미지는 평면 객체로 가정하여 깊이를 계산한다.
- 이렇게 2개의 특징을 혼합하면 다음과 같은 장점이 있다.
- 패치를 이용하면 얼굴 영역 위치에 관계없이 sppof 패턴을 학습할 수 있다.
- 전체 깊이 맵은 입력 영상이 얼굴스러운 깊이를 가지는지 알 수 있다.
- 두 CNN으로부터 각각의 정보를 이용하여 score를 구한 뒤, 두 score를 혼합하여 실제 얼굴인지 spoof 이미지인지를 구분한다.
2. Prior Work
3. Proposed Method
- 이 방법은 패치 기반 CNN과 깊이 기반 CNN의 2개의 스트림으로 구성되어있다.
3.1. Patch-based CNN
- 패치를 사용하게된 이유는 여러가지가 있다.
- 기존 DB들은 적은 수의 샘플을 가지고 있어 패치를 이용하여 학습에 더 많은 DB를 이용할 수가 있다.
- 전체 이미지를 이용하게 되면 기존 이미지를 입력 크기에 맞게 리사이즈 해야하는데, 이런 처리를 거치면서 정보의 손실이 발생한다. 패치를 리사이즈없이 그대로 이용하게 되면 구분력을 유지할 수 있다.
- Spoofing에 대한 정보는 한 곳에만 있는게 아니라 얼굴 영역 전체에 대하여 있으므로, 위치에 관계없이 어떤 공통적인 정보를 이용할 수 있게 된다.
3.1.1 Input features
- Hand crafted 특징에서 주로 사용되는 컬러 공간은 RGB, HSV, YCbCr, 그리고 이들을 조합하는 경우도 있다.
- RGB는 각 컬러 성분마다 서로 높은 연광성(high correlation)을 지니고 있고, luminance와 chrominance를 분리를 완벽하게 하지 못해 사용에 제약이 많다.
- HSV와 YCbCr은 liminance와 chrominance 정보를 분리하기 때문에 구분성 있는 신호를 학습하는데 도움이 된다.
- 논문에서는 HSV와 YCbCr을 모두 사용하여 시도해보았다. 여기에 LBP 맵과 고주파 영역 이미지를 추가로 시도해보았다.
- 실험적으로는 모든 입력들이 spoof 공격을 구분할 수 있는 유용한 정보를 가지고 있었다.
3.1.2 CNN architecture
- 5개의 convolutional 레이어와 3개의 fully connected layer가 이어지는 구조를 가지고 있다.
- 각 convolutional 레이어는 batch normalization과 ReLU, Pooling 레이어를 사용한다.
- 학습에는 Softmax를 사용한다.
- 이미지가 주어지면, 얼굴을 먼저 검출하여 눈 위치를 기준으로 크롭한다.
- 다음 얼굴 영역 내에서 랜덤하게 같은 크기의 패치들을 추출한다.
- 패치를 추출할 때 spoof 패턴을 유지하기 위해 스케일 조절은 하지 않도록 한다.
- 패치가 진짜 얼굴 이미지에서 나왔으면 레이블을 1로 아니면 0으로 설정하고 사용한다.
- 테스트 시에는 패치들의 레이블 스코어를 평균하여 결과로 사용한다.
3.2. Depth-based CNN
- 연구 [12]에 따르면 고주파 성분이 anti-spoofing에서 중요한 정보를 담고 있다.
- 또한 이미지를 리사이즈 하는 것은 고주차 성분을 잃게 만든다.
- 따라서 원래 이미지 크기를 그대로 CNN에 사용하는 방법을 사용한다.
- FCN(fully convolutional network) 구조를 사용하면 입력 이미지 크기에 관계 없도록 구현할 수 있다.
- 실제 얼굴에 대해서는 3D face shape 모델에서 깊이를 계산하여 생성하고, 가짜 얼굴은 평평한 깊이를 가지도록 하였다.
3.2.1 Generating the depth labels
- 얼굴이 주어지면, 3DMM 모델을 이용하여 3D Face shape를 계산하였다.
- 구해진 3D Face shape를 z-buffering 알고리즘을 이용하여 깊이 정보를 구한다.
- 깊이 정보는 min-max로 노말라이즈하여 CNN 학습에 사용한다.
- 가짜 얼굴의 경우 종이를 휘어진 경우가 있을 수 있으나 이를 추정하는 것은 어려우므로 평평한 것으로 간주하고 0 값을 사용한다.
3.2.2 FCN structure
- CNN의 입력으로 HSV + YCbCr을 사용하였다.
- FCN 네트워크는 downsampling-upsampling의 bottleneck structure를 가진다.
- Downsampling 파트는 6개의 convolutional 레이어와 2개의 max-pooling 레이어로 이루어지고 Upsampling은 5개의 convolutional 레이어로 이루어져 있다.
- 각 레이어는 한개의 leaky-ReLU를 사용한다.
- 로스는 픽셀레벨의 유클리디언 로스를 사용하였다.
3.2.3 Depth Map for Classification
- 깊이 맵을 이용하여 실제 얼굴과 가짜 얼굴을 구분하여야 한다.
- 이를 위해 SVM 분류기를 학습시켜 이용하였다.
- SVM의 입력은 고정된 크기이기 때문에, 깊이 맵을 N x N의 셀로 나누는 방법을 사용하였다.
- 각 셀의 평균 깊이를 계산하여 의 벡터를 생성한 뒤 이를 RBF 커널을 사용하는 SVM에 입력으로 사용하였다.
- 깊이 맵을 리사이즈하면 정보가 손실될 수 있기 때문에 여러 N에 대하여 여러 SVM을 준비한 뒤, 입력 샘플에 가장 맞는 N을 선택하여 사용하였다.
- 비디오 입력의 경우 여러 프레임이 대한 정보를 사용하기 위해서 벡터의 표준편차를 구해서 개의 벡터를 만들어 사용하도록 하였다.
4. Experiments
5. Conclusions
6. Acknowledgement
Add a Comment Trackback