얼굴 정렬 기법(1)

얼굴 인식과 랜드마크 추출

Seunggeun Baek
KLleon
7 min readMar 3, 2023

--

들어가며

실제 인간이든 디지털 휴먼이든, 얼굴은 사람의 가장 중요한 특징 중 하나입니다. 한 사람과 다른 사람을 구별하거나 사람이 어떤 감정을 가지고 있는지를 알 수 있는 가장 중요한 특성이 얼굴에서 나타나기 때문입니다. 분류모델과 생성모델을 가리지 않고, 얼굴에 대한 모델을 학습하려면 데이터가 있어야 합니다. 모델을 효과적으로 학습하기 위해 데이터에 있는 얼굴은 일관된 방식으로 정렬되어야 하며, 동일한 얼굴 정렬 방식이 모델 추론에서도 사용되는 것이 좋습니다. 이번 연재에서는 다양한 얼굴 정렬방식에 대해 알아봅니다.

연재 순서

  1. 얼굴 인식과 랜드마크 추출
  2. 얼굴을 정렬하는 다양한 방법
  3. 얼굴 변환행렬 사용하기: 아핀변환과 마스킹, 얼굴 재정렬 기법

1. 얼굴 인식과 랜드마크 추출

얼굴을 원하는 방식으로 정렬하기 위해서는, 먼저 이미지에 얼굴이 어디 있는지를 인식하여야 하며(얼굴 인식), 얼굴의 각 부위가 어디 있는지를 알아야 합니다(랜드마크). 얼굴 박스와 랜드마크는 AI 모델 등을 이용하여 추출되어, 얼굴 정렬 로직에 정렬 기준으로 사용됩니다.

얼굴 인식

얼굴 인식 모델

얼굴 인식은 전통적인 Object Detection Task의 일종입니다.
얼굴인식 대상 이미지는 임의 크기일 수 있으므로, 이미지가 큰 경우 전체 이미지를 resize하여 모델의 입력 크기로 축소하거나, 전체 이미지를 여러 패치로 나누어 여러 번의 얼굴 인식 inference를 진행하는 방식이 흔히 사용됩니다.

  1. RetinaFace[1]: 얼굴 박스와 5점 랜드마크를 동시에 학습하는 multi-task single-stage self-supervised 얼굴인식 모델로서, mesh decoder 사용, 학습 데이터셋의 랜드마크 지정(extra-supervision) 등을 통해 robustness를 끌어올린 모델.
  2. S3FD(Single Shot Scale-invariant Face Detector)[2]: 전처리 결과를 AI 모델의 배치 크기에 맞게 몇 개씩 묶어 모델 추론을 실행하고, 모델 출력을 후처리한 뒤 파일로 저장한다.anchor 기반 detector 작은 얼굴들에 대해 위양성률을 낮춘 모델.
  3. MTCNN 얼굴인식[3]: P-Net, R-Net, O-Net의 3-stage network를 사용하여, 얼굴 박스와 5점 랜드마크를 동시에 학습하는 multi-task 얼굴인식 모델.
  4. Haar Cascade Classifier[4]: AI모델은 아니지만, 얼굴인식 딥러닝 모델이 출시되기 이전에 주로 사용되었던, 2001년에 발표된 역사가 오래된 classifier.

얼굴 인식 모델의 동작

일반적인 얼굴 인식 AI 모델을 사용하기 위해서는 다음 과정을 거칩니다.

  1. resizing, patching 등을 통해 모델 입력 크기에 맞는 이미지를 얻는다.
  2. AI 모델을 이용하여 얼굴 candidate box 및 accuracy 목록을 얻는다.
  3. 얼굴 candidate box 및 accuracy 목록으로부터, Non-maximum Suppression 알고리즘 등을 통해 동일 얼굴을 인식한 겹치는 candidate box를 하나씩만 남기고 제거한다. 추가로 사용사례에 따라 너무 작은 얼굴 박스 등을 무시할 수 있다.
  4. Multi-stage 모델인 경우 2와 3을 반복할 수 있다.
  5. 1번 단계를 고려하여, 얼굴 박스 좌표를 원래 이미지 좌표로 환산한다.
  6. 필요시, 이미지를 회전하여 위 단계를 반복한다.

얼굴 랜드마크 추출

랜드마크의 종류
얼굴 랜드마크는 얼굴의 각 부분의 위치에 대응하는 2차원 또는 3차원의 기준점 집합입니다. 아래와 같은 기준점 집합들을 생각해 볼 수 있습니다.

  1. 3점 랜드마크: 양쪽 눈, 입 중앙
  2. 5점 랜드마크: 양쪽 눈, 입의 양 끝, 코 끝
  3. 68점 랜드마크: 턱선(0–16), 눈썹(17–26), 코(27–35), 눈(36–47), 입(48–67)
  4. Face Mesh

실무에서는 다양한 얼굴 부분을 표시할 수 있는 68점 랜드마크를 많이 사용합니다. 68점 랜드마크는 과거 ibug 데이터셋과 dlib 얼굴인식 라이브러리[5] 등에 이용되면서 보편화되었고, FAN2D/3D[6] 등의 AI 모델이 68점 랜드마크 추출을 지원하고 있습니다.

Face Mesh는 CG 등에서 얼굴 모델링을 하거나 얼굴 텍스쳐를 입히는 데 직접적으로 활용할 수 있을 정도로 조밀성이 높은 랜드마크입니다. 얼굴을 움직이거나 움직임을 인식하는 데에도 Blendshape를 Face Mesh로, 혹은 그 반대로 변환하여 이용할 수 있습니다. Google MediaPipe에서는 468점 3D Face Mesh 인식 기능을 제공하고 있습니다[7].

랜드마크 점들은 의미상으로 호환되므로, 랜드마크를 더 적은 개수의 점을 가진 랜드마크로 변환하는 것이 쉽게 가능합니다.

(좌) 68점 랜드마크, (우) Google MediaPipe의 3D Face Mesh (Upgrade 이전 매뉴얼 기준)[7]

랜드마크 추출 모델

랜드마크 추출만을 위한 여러 다른 AI 모델 구현이 있을 수 있으나, heatmap 기반의 모델에서는 다음 과정을 거칩니다.

  1. AI 모델에 넣을 수 있도록 얼굴 박스를 이용하여 얼굴을 정렬한다.
  2. AI 모델을 이용하여 각 점에 대해 heatmap을 구한다.
  3. Heatmap을 후처리하여, 그 최대값이 위치하는 좌표를 구한다.
  4. 얻은 좌표를 이미지 원본 프레임 좌표계로 변환한다.

RetinaFace[1], MTCNN[3] 얼굴인식과 같이 multi-task 학습에서 랜드마크 loss를 계산하여 활용하는 경우에는, 얼굴인식 모델에서 랜드마크를 부산물로 얻을 수 있는 경우도 있습니다.

[1] Deng, Jiankang, et al. “Retinaface: Single-shot multi-level face localisation in the wild.” Proceedings of the IEEE/CVF conference on computer vision and pattern recognition. 2020.
[2] Zhang, Shifeng, et al. “S3fd: Single shot scale-invariant face detector.” Proceedings of the IEEE international conference on computer vision. 2017.
[3] Zhang, Kaipeng, et al. “Joint face detection and alignment using multitask cascaded convolutional networks.” IEEE signal processing letters 23.10 (2016): 1499–1503.
[4] Viola, Paul, and Michael Jones. “Rapid object detection using a boosted cascade of simple features.” Proceedings of the 2001 IEEE computer society conference on computer vision and pattern recognition. CVPR 2001. Vol. 1. IEEE, 2001.
[5] DLib C++ Library. http://dlib.net/
[6] Bulat, Adrian, and Georgios Tzimiropoulos. “How far are we from solving the 2d & 3d face alignment problem?(and a dataset of 230,000 3d facial landmarks).” Proceedings of the IEEE international conference on computer vision. 2017.
[7] MediaPipe Face Mesh. https://github.com/google/mediapipe/blob/master/docs/solutions/face_mesh.md

--

--