
PFLD의 논문 : https://arxiv.org/pdf/1902.10859
원래 논문 리뷰는 하지 않으려고 했으나 PFLD 관련 논문 리뷰가 별로 없고 대부분 요약 버전이라 이참에 리뷰해보려고 한다.
Introduction에서 주된 내용은 해당 task의 어려움이다. face landmark 특성상 주어진 환경에 따라 많은 어려움이 따라오기 때문이다. 포즈, 표정, 가려지는 상황 등등으로 인해 완벽한 얼굴 데이터를 확보하는 것이 매우 어렵다. 따라서 탐지 정확도를 높이기 위해 4가지 과제를 해결하려고 노력했다.
expression(표정), local extreme lighting(조명), occlusion(폐색, 가려지는 현상)은 얼굴 이미지에 부분적인 변화/방해를 가져온다. 이로인해 일부 landmark는 정상 위치에 벗어나거나 사라질 수 있다.
얼굴이 좌우로 회전하거나 위아래로 기울어진 경우이다. 또한, resolution(해상도)가 낮거나 노이즈가 많은 경우 landmark가 부정확한 위치에 놓여지는 경우가 잦아진다.
데이터 불균형으로 인해 overfitting(과적합)이 발생할 여지가 있다.
위의 3가지 문제들로 인해 detector가 더 robustness해지길 원하는 상황이다.
Face landmark task 특성상 스마트폰, 임베디드 제품에 사용될 가능성이 높으므로 model 크기가 작고 처리 속도가 빠른 detector가 필요했다. 이를 MobileNet V2를 사용하여 해결하였다.
최신 성능을 유지하면서 많은 자원을 절약할 수 있는 방법론이다.
일반적으로 local variation보다 Global variation이 landmark에 더 큰 영향을 준다. (local variation은 표정이나 표현 혹은 폐색으로 정상적인 얼굴(정면)인 상태이지만 Global variation은 얼굴의 회전 혹은 위아래로 숙이는 행동으로 인해 landmark가 사라지는 현상이 있기 때문) 따라서 network 분기( Auxiliary Network)를 사용하여 각 얼굴 샘플에 대한 기하학 정보를 추정하여 landmark 위치를 추정한다.
훈련 세트에는 정면 얼굴 샘플이 많고 large pose(얼굴이 회전된 상황)의 data는 부족하기 때문에 부족한 샘플에 대해서는 오차를 더 크게 주는 패널티를 부여한다.
receptive field를 확장하여 얼굴의 global 구조를 더 잘 포착하기 위해 MS-FC layer를 추가했다.
loss function 설계와 Network, sub Network에 대해서 설명한다.
train_data가 많지 않을 경우 loss function 설계가 정말 중요하다. 
X는 input landmark이고 Y는 ground truth landmark이다. loss를 구하려면 단순히 L2 loss, L1 loss를 이용해서 차이를 구하면 된다. 하지만 이 방법은 기하학적 요소가 반영되지 않는다.(얼굴은 3D인데, 이미지는 2D이기 때문에 기하학적 요소가 반영되어야 정확한 landmark 구현이 가능해짐.) 따라서, 기하학 정보를 loss function에 추가해야 했다.
이해를 쉽게 하기 위해서 WFLW Dataset landmark 정보를 참고하자.

WFLW Dataset의 landmark 정보를 보면 총 98(0~97)개의 landmark가 존재한다. X의 정보에는 98개의 x,y 좌표 정보값이 들어가 있으므로 전체 실수에 대해서 2 x N인 것을 알 수 있다.
3D 투영행렬은 U ∈ R^4×N 으로 표현할 수 있는데, 여기서 4는 [ui, vi, zi, 1]의 정보가 담겨져 있다.
3D 투영행렬을 2D 이미지에 투영하려면 projection Matrix를 사용하는데, 식은 다음과 같다.

여기서 투영행렬 P는 총 6가지의 자유도를 갖는데,
하지만 여기서 총 3가지의 자유도만 학습된다. Yaw, Pitch, Roll 이 3가지만 말이다. 그 이유에 대해서 논문의 저자는 이렇게 말한다. 얼굴이 잘 정규화 되어 있다면 얼굴의 z축 깊이를 일정부분 무시할 수 있으며, scale도 적절히 맞춰진 상태이고 x,y 방향으로 이동도 학습할 필요가 없다고 한다.
이를 Weak Perspective Model이라고 말하고 있다.
일반적으로 3D -> 2D로 투영하려면 z축에 대한 정보도 매우 중요하다. 원근감을 무시할 수 없기 때문이다.여기서 중요한 점은 z축 깊이를 무시했다는 데에 있다.
WFLW dataset만해도 대부분이 서양 사람들이라는 것이다. 서양 사람들과 동양 사람들의 얼굴구조는 매우 다르다. 서양 사람들의 얼굴 특징은 코가 높고 눈이 쏙 들어가있으며, 입도 들어가있다. 하지만 동양 사람들의 얼굴 특징은 코가 낮고 눈이 서양 사람들에 비해 상대적으로 튀어나와 있으며 입이 튀어나와 있는 상태이다.즉, Dataset이 동양과 서양 골고루 분포되어야 학습 성과가 뛰어날 가능성이 높다.(해당 PFLD 논문은 Z축을 무시하는 가설을 세웠으므로..)

일반적인 loss function은 위와 같다.
PFLD에서 제안한 loss function은 다음과 같다.

기존의 loss function에서 추가되었는데, 추가된 부분만 살펴보면
--> 각도의 오차가 클수록 penalty를 크게 부여하는 방식이다. (landmark 별로 다양한 class측면 얼굴, 정면 얼굴, 고개 숙임, 표정 등에 따라 가중치가 다름.)
PFLD 논문의 저자는 Backbone으로 MobileNet V2를 사용했다. Mobilenet V2의 경우 성능이 좋을 뿐더러 모델이 가볍고 빠른 추론이 용이하다.
BackBone architecture는 다음과 같다.

MobilnetV2에서는 Inverted Residual Block을 사용했는데, 이는 나중에 scratch를 할 예정이므로 따로 빼두려고 한다.
landmark 위치 예측을 위해서 사용했다. 회전정보 Yaw, Pitch, Roll을 예측하는 것이 목표이다. 또한, 저자는 하나의 질문을 하고 답변을 했었는데 질문 내용은 아래와 같다.
Q : "예측된 landmark와 실제 landmark가 주어졌을때, 왜 이때 Euler 각도를 구하지 않는가?"
A : "landmark 예측은 학습 초기 단계에서 부정확할 가능성이 높다. 이로 인해 Euler 각도의 측정 quality가 떨어지며 과대적합(over-penalization)과 느린 수렴(convergence)이 발생하기 때문이다."
즉, 이 말은 하나의 backbone으로 Euler 각도까지 추론하게 되면 landmark의 예측이 부정확해질 가능성이 높고 학습 시간이 늘어나며 이에 따라 추론시간에도 영향을 미칠 수 있기 때문이다. 실제로 Auxiliary Network는 추론할 때에는 실행되지 않는다.
PFLD의 전체 Backbone은 다음과 같다. 해당 모델도 scratch를 할 예정이니 자세한 내용은 패스.

훈련 중에는 모든 얼굴 이미지는 BBox 기준으로 자르고 112 x 112로 resize했다. 각 샘플을 좌우반전(flip), -30 ~ +30도 까지 5도 간격으로 회전시켰으며 얼굴 크기중 20%영역이 랜덤하게 가려지는 occlusion을 사용하여 Data Augmentation을 진행했다.
이 이후부턴 실험 결과에 대한 내용이므로 패스. 중요한 내용들은 위에 적힌 내용이 전부이다.