얼굴 데이터 전처리 기법
안녕하세요. 클레온 연구팀입니다.
다른 딥러닝 모델과 같이, 얼굴 데이터를 처리할 때 모델 또한 입력되는 이미지를 적절히 전처리하는 것이 중요합니다. 특히, 얼굴 데이터를 처리하는 경우, 입력되는 얼굴 이미지의 정렬법을 잘 선택하는 것이 중요한데요. 오늘은 서로 다른 각도와 크기의 얼굴을 통일되게 정렬하는 방법에 대해 알아보도록 하겠습니다.
딥러닝에서 데이터의 전처리는 매우 중요합니다.
낮은 퀄리티의 데이터 전처리 후 모델을 학습하면, 때때로 모델의 성능이 저하되고, overfitting과 bias 등의 문제를 겪기도 합니다.
일반적인 딥러닝 모델의 학습 전에 수반되어야 할 데이터 전처리로 1) 누락 또는 손상된 데이터를 처리하는 data cleaning, 2) 데이터의 scale을 임의의 범위로 통일시키는 data normalization, 3) 데이터셋의 class imbalance를 조정하는 data balancing 등이 있습니다. 특히 data normalization과 같은 전처리는 모델의 추론 과정에서도 동일하게 적용을 해야 적합한 성능을 얻을 수가 있습니다.
이미지를 처리하는 모델에 특화된 전처리로 이미지 정렬이 있습니다. 데이터셋에 존재하는 이미지는 각각 서로 다른 scale, rotation, translation 후에 얻어진 것일 수 있기 때문입니다. 따라서, 공통된 reference frame을 미리 선택한 후, 다른 입력 이미지들을 미리 정해둔 reference로 이동시켜 이미지를 정렬하여 다양한 variability를 해결합니다.
그렇다면 얼굴 이미지는 어떻게 정렬할까요? 눈을 찾아서 눈의 위치를 미리 정해둔 지점에 고정할 수도 있고, 귀의 위치를 고정할 수도 있을 것입니다. 다양한 선택지가 있지만, 주로 사용하는 얼굴 정렬 방식은 1) 얼굴의 턱선을 딴 후, 이를 2) Umeyama algorithm [1] 을 이용해 미리 정해둔 얼굴의 턱선과 비슷한 위치로 정렬하는 방식을 주로 사용합니다. 턱선이 얼굴이 경계를 결정하기 때문에 해당 방법이 이미지마다 얼굴 크기를 통일시킬 수 있는 좋은 방법이 될 수 있기 때문입니다.
얼굴 이미지에서 턱선을 찾기 위해서 주로 face_alginment [2] 혹은 dlib 라이브러리에 존재하는 딥러닝 모델을 사용합니다. 아래 이미지는 dlib 라이브러리를 이용해 클레온의 가상 인간의 턱 부분의 점 17개를 이은 결과입니다.
그 후, Umeyama algorithm을 사용해서 턱선을 정렬합니다. Umeyama algorithm은 두 점들의 집합 {x_i}, {y_i}; i=1, …, n 가 주어졌을 때, 두 집합의 점들 사이의 거리의 합을 최소화 하도록 하고 싶을 때, set of points를 어떻게 변환시킬지를 알아내는 방법입니다. 즉, {x_i}를 어떻게 회전, 이동, 크기 조절 (R: rotation, t: translation, c: scaling)을 해야 변환된 {x_i}’과 {y_i} 사이의 거리를 최소화할지 찾습니다. 수식으로 정리하면, 다음 최적화 문제를 풉니다.
이때, 이 문제의 해법인 최적의 R, c, t는 다음과 같은 방식으로 구해집니다.
- 두 set of points의 covariance matrix H를 계산합니다.
- H에 singular value decomposition을 적용해 H = UDV^T을 만족하는 행렬 U, D, V를 얻습니다.
- 그러면 이를 이용해서 다음과 같이 R, c, t를 찾을 수 있습니다. 이 때, \mu_y와 \mu_x는 각각 {y_i}와 {x_i}의 평균 좌표값을 나타냅니다.
그리고 이렇게 구한 R, c, t 값을 가지고 이미지에 적용을 시켜서 변환을 하면, 최종적으로 정렬된 이미지를 얻을 수가 있습니다.
정리하면, reference로 사용할 정면을 바라보고 있는 이미지 하나만 임의로 선택한 후, 모든 얼굴 이미지를 턱선을 구한 후 reference image의 턱선과 Umeyama algorithm으로 정렬하면 잘 정렬된 데이터셋을 얻을 수가 있습니다.
아래 그림은 왼쪽의 클레온의 가상인간 이미지를 정렬해서 오른쪽 이미지를 얻은 결과입니다.
출처:
[1] Umeyama, S. (1991). Least-squares estimation of transformation parameters between two point patterns. IEEE Transactions on Pattern Analysis and Machine Intelligence, 13(4), 376–380.
[2] Bulart et al., How far are we from solving the 2D \& 3D Face Alignment problem? (and a dataset of 230,000 3D facial landmarks), International Conference on Computer Vision 2017