Scale-aware face detection
1. Introduction
- CNN은 기본적으로 scale invariance를 가지지 않는다.
- 대신 scale invariance의 어느 정도 범위 내에서는 scale invariance를 가지도록 학습할 수 가 있다.
- 하지만 더 많은 파라미터와 더 복잡한 구조를 가지게 된다.
- 그럼에도 scale 문제를 풀기 위한 연구는 거의 없어왔다.
- 이유는 학계에서는 이미지 피라미드가 룰륭한 대체 방법이기 때문이다.
- 하지만 이는 많은 계산을 요하며 모델의 크기와 계산 또한 많아지게 된다.
- 이를 해결하기 위해 명시적으로 스케일을 추정하는 방법을 사용하였다.
- 만약 각 이미지의 얼굴의 스케일을 알 수 있다면, 얼굴 크기가 얼굴 검출기에 알맞도록 이미지를 리사이즈 할 수 있다.
- 이로써 더 작은 얼굴 검출기를 사용하면서도 더 좋은 성능을 낼 수 있게 된다.
- 이 방법을 사용하기 위해 얼굴 검출기는 두개의 절차로 나누어, 얼굴 스케일 추정과 얼굴 검출 단계로 나눌 수 있다.
- 스케일 제안 단계는, 가볍고 fully-convolutional 네트워크로 Scale Proposal Network (SPN)이라고 부른다.
- 이 네트워크는 이미지 전체에 대해 face scale histogram을 생성한다.
- 이 히스토그램은 해당 스케일의 얼굴이 존재하는지에 대한 확률을 값으로 가진다.
- 입력 이미지는 히스토글매에 나타나 있는 모든 크기의 이미지에 맞게 리사이즈 되어 검출 단계로 입력된다.
- SPN은 이미지와 히스토그램 벡터를 통해 지도학습으로 학습되나 얼굴 위치에 대한 정보는 존재하지 않아도 된다.
- 두번째 단계는 single-scale face detection이다.
- 얼굴의 크기는 전단계의 결과로 이미 같은 크기로 조절되어있기 때문에 얕고 간단한 검출기로 성능을 낼 수 있었다.
- 이를 Region Proposal Network (RPN)이라고 한다.
- 두개의 SA-RPN 방법을 거쳐 좋은 결과를 낼 수 있었다.
2. Related works
3. Scale-aware detection pipeline
3.1 Scale Proposal Network (SPN)
- SPN은 fully convolutional network로 global max-pooling 층이 마지막 컨볼루션 레이어 뒤에 등장한다.
- 이를 이용하여 입력 이미지의 크기가 다르더라도 고정된 길이의 히스토그램 벡터를 얻을 수 있게 된다.
- 입력 이미지가 크기 w x h x n의 scale response (heatmap)을 생성하게 되면 global max-pooling을 통과하면서 1 x 1 x n의 벡터로 줄어들게 되고 각 요소들은 해당하는 스케일의 얼굴이 존재할 확률을 의미한다.
- 히스토그램은 Sigmoid 함수를 통해서 각 요소가 [0, 1]의 범위를 가지게 되고 이를 확률로 이용할 수 있게 된다.
- $n$개의 스케일 히스토그램을 생성하고 히스토그램의 각 빈은 로그 스케일로 생성된다.
- 따라서 가장 히스토그램의 왼쪽 끝은 $s_0$ 오른쪽 끝은 $s_n$이다.
- 히스토그램 벡터는 다음과 같이 정의된다.
$$ h = [ a_1, a_2, \cdots, a_n] $$
$$ a_i = P(\exists \mathbf{x} | s_i^l \le \log_2 (\text{size} ( \mathbf{x} )) \lt s_i^r ), i=1,2,\cdots,n$$
- 여기서 $d$는 2- logarithmic 스케일의 폭으로 $d=(s_n - s_0)/n$이다.
- $s_i^l$, $s_i^r$는 $i$번째 빈의 왼쪽 끝 오른쪽 끝 값으로, $s^l_i = s_0 + (i-1)d$, $s^r_i = s_0 + id$이다.
- $\mathbf{x}$는 얼굴을 나타내며 $\text{size}(\mathbf{x})$는 얼굴의 크기를 나타낸다.
- 다시 말하자면, $i$번째 히스토그램은 얼굴 크기가 $[2^{2_0 + (i-1)d}, 2^{s_0 + id}) $ 범위에 해당한다.
- Global max-pooling 층은 response에서 위치 정보를 제거하고, 가장 큰 response만 뽑아 낸다.
- 기존 표준 RPN의 기능에서 위치 정보를 뺀 것은 큰 장점이 있다.
- 기존 히트맵 방식의 RPN의 경우, 얼굴 부분에서 가까이 갈 수록 높은 response를 얻게 되겠지만, 위치 정보를 제거한 SPN은 위치에 관계 없이 response를 생성하기 때문에 얼굴이 receptive field보다 크거나 작아도 검출이 가능하다.
- 또한 여러 얼굴이 존재하여도 이에 무관하게 작동한다.
3.2 Scaling strategy generation
- $2^3$부터 $2^9$까지를 60개의 빈으로 나누고 히스토그램을 계산하면, 매우 노이즈가 많은 것을 알 수가 있다.
- 또한 이미지에 얼굴이 존재할 경우, 해당 빈에서 높은 respose를 갖지만, 그 주변에서도 매우 큰 값을 얻게 된다.
- 단순히 스레스홀딩으로는 이를 검출하기가 어렵다.
- 따라서 검출기가 커버하는 얼굴 크기의 반 크기로 moving average를 계산한 다음, 1차원 NMS를 적용하여 피크를 뽑아낸다.
- NMS의 윈도우 크기는 검출길의 커버 범위보다 야각 ㄴ작게 하면 된다.
- NMS가 적용되고 나면 적은 수의 스케일 후보만 남게 된다. 여기서 스레스홀드보다 큰 후보만 선택하여 마지막 단계로 넘어가게 된다.
3.3 Single-scale RPN
- RPN은 두개의 브랜치로 나뉘어진 fully convolutional 네트워크인데, classification 브랜치와 bounding box regression 브랜치이다. RPN은 Faster R-CNN을 참고하였다.
- 이미 얼굴의 개략적인 크기가 정해졌기 때문에 RPN은 하나의 anchor에 대해서만 구현하면 된다.
- 가장 큰 얼굴 크기는 가장 작은 얼굴 크기의 두배가 되게끔 하면 될 것이다.
4. Implementation details
4.1 Global supervision
- SPN의 히스토그램은 sigmoid cross entropy loss를 사용한다.
4.2 Ground trth preparation
Ground truth generation
- 히스토그램이 단순히 multiple binary classifier 형태를 띌 경우 근접한 이웃이 노이즈에 취약하게 될 수 있다.
- 그렇다고 여러 빈에 걸치도록 할 경우 성능이 떨어지게 된다.
- 이런 이유로 히스토그램 벡터의 Ground-truth를 만들 때 가우시안을 이용하여 생성하였다.
- 얼굴 크기가 $s$일 경우, $ f(x) = e^{- \frac{(x- \log_2 s)^2}{2 \sigma^2}} $ 함수를 이용하여, 각 빈 $i$의 값을 $a_i = f((s_i^l + s_i^r) / 2)$로 계산하엿다.
- 얼굴이 하나가 아닐 경우 여러 가우시안이 겹치게 되는데, 그 중 가장 큰 값을 사용하여 히스토그램을 생성하였다.
4.3 Receptive field problem
4.4 Training RPN
5. Experiments
Network struture
- SPN과 RPN모두 GoogleNet에서 inception-3b 까지만을 사용하였고, 그 채널을 1/4로 줄여 사용하였다.
- 또한 학습 시 Batch Normalization을 사용하였다.