이 사이트의 콘텐츠는 인공지능(AI) 또는 기계 번역 기술을 사용하여 번역되었으며 오류가 있을 수 있습니다.

Skip to content

아바타를 위한 실시간 얼굴 애니메이션

표정 구현은 자연스럽고 사실적인 아바타 상호작용을 통해 메타버스를 사람들의 일상생활의 일부로 만들기 위한 로블록스의 여정에서 중요한 단계입니다. 그러나 가상 3D 캐릭터의 얼굴을 실시간으로 애니메이션화하는 것은 엄청난 기술적 과제입니다. 수많은 연구 성과가 있었음에도 불구하고, 실시간 얼굴 애니메이션이 적용된 상용 사례는 제한적입니다. 특히 로블록스에서는 다양한 사용자 기기, 실제 환경 조건, 그리고 개발자들이 제시하는 창의적인 활용 사례를 모두 지원해야 하기 때문에 이 과제는 더욱 까다롭습니다.

이 글에서는 이러한 과제를 해결하고 향후 다양한 기회를 열어줄, 영상에서 얼굴 애니메이션 제어값을 회귀하는 딥러닝 프레임워크를 설명합니다. 이 블로그 게시물에 소개된 프레임워크는 SIGGRAPH 2021에서도 발표된 있습니다.

얼굴 애니메이션

3D 얼굴 리그를 제어하고 애니메이션을 적용하는 데는 다양한 방법이 있습니다. 저희가 사용하는 방법은 FACS(Facial Action Coding System)라고 불리며, 이는 3D 얼굴 메쉬를 변형하기 위한 일련의 제어 요소(안면 근육 위치 기반)를 정의합니다. 40년이 넘은 기술임에도 불구하고, FACS 제어 방식은 직관적이고 리그 간에 쉽게 적용할 수 있다는 장점 덕분에 여전히 사실상의 표준으로 자리 잡고 있습니다. FACS 리그가 작동하는 예시는 아래에서 확인할 수 있습니다.

방법

이 방법의 핵심은 딥러닝 기반 모델이 동영상을 입력으로 받아 각 프레임에 대한 FACS(얼굴 동작 코드) 집합을 출력하도록 하는 것입니다. 이를 위해 얼굴 인식과 FACS 회귀라는 두 단계로 구성된 아키텍처를 사용합니다.

얼굴 인식

최상의 성능을 달성하기 위해, 비교적 잘 알려진 MTCNN 얼굴 인식 알고리즘의 고속 변형을 구현했습니다. 원래의 MTCNN 알고리즘은 꽤 정확하고 빠르지만, 우리 사용자들이 사용하는 많은 기기에서 실시간 얼굴 인식을 지원하기에는 충분히 빠르지 않습니다. 따라서 이 문제를 해결하기 위해, 우리는 특정 사용 사례에 맞게 알고리즘을 조정했습니다. 즉, 얼굴이 한 번 감지되면, 이후 프레임에서 MTCNN 구현은 최종 O-Net 단계만 실행하여 평균 10배의 속도 향상을 달성합니다. 또한 후속 회귀 단계에 앞서 MTCNN이 예측한 얼굴 랜드마크(눈, 코, 입가 위치)를 사용하여 얼굴 바운딩 박스를 정렬합니다. 이러한 정렬을 통해 입력 이미지를 정밀하게 크롭할 수 있어, FACS 회귀 네트워크의 연산량을 줄일 수 있습니다.

FACS 회귀 

당사의 FACS 회귀 아키텍처는 특징 추출기로서 공유 백본(인코더라고도 함)을 사용하여 랜드마크와 FACS 가중치를 공동 훈련하는 멀티태스크 설정을 사용합니다.

이러한 설정을 통해 합성 애니메이션 시퀀스에서 학습된 FACS 가중치를, 미묘한 표정 변화를 포착한 실제 이미지로 보강할 수 있습니다. 랜드마크 회귀기와 함께 훈련되는 FACS 회귀 서브네트워크는 인과적 컨볼루션을 사용합니다. 이러한 컨볼루션은 인코더에서 볼 수 있는 것처럼 공간적 특징에만 작용하는 컨볼루션과 달리, 시간에 따른 특징에 작용합니다. 이를 통해 모델은 얼굴 애니메이션의 시간적 측면을 학습할 수 있으며, 지터(jitter)와 같은 불일치에 덜 민감해집니다.

훈련

우리는 초기 단계에서 실제 이미지와 합성 이미지를 모두 사용하여 랜드마크 회귀만을 위해 모델을 훈련시킵니다. 일정 단계가 지나면 시간적 FACS 회귀 서브네트워크의 가중치를 학습하기 위해 합성 시퀀스를 추가하기 시작합니다. 이 합성 애니메이션 시퀀스는 아티스트와 엔지니어로 구성된 우리 학제간 팀이 제작했습니다. 모든 서로 다른 정체성(얼굴 메쉬)에 사용되는 표준화된 리그(rig)는 우리 아티스트가 설정했으며, FACS 가중치가 포함된 애니메이션 파일을 사용하여 자동으로 실행 및 렌더링되었습니다. 이 애니메이션 파일들은 얼굴 체조(face-calisthenics) 동영상 시퀀스에서 실행되는 고전적인 컴퓨터 비전 알고리즘을 사용하여 생성되었으며, 체조 동영상에서 누락된 극단적인 얼굴 표정을 표현하기 위해 수작업으로 제작된 애니메이션 시퀀스로 보완되었습니다. 

손실 함수

딥러닝 네트워크를 훈련하기 위해, 우리는 랜드마크와 FACS 가중치를 회귀하기 위해 여러 가지 손실 항을 선형적으로 결합했습니다: 

  • 위치 손실. 랜드마크의 경우 회귀된 위치의 RMSE(Llmks), FACS 가중치의 경우 MSE(Lfacs)를 사용합니다. 
  • 시간적 손실. FACS 가중치의 경우, 합성 애니메이션 시퀀스에 대한 시간적 손실을 사용하여 지터(jitter)를 줄입니다. [Cudeiro et al. 2019]에서 영감을 받은 속도 손실(Lv)은 목표 속도와 예측 속도 간의 MSE입니다. 이는 동적 표정의 전반적인 부드러움을 촉진합니다. 또한, FACS 가중치의 지터를 줄이기 위해 가속도에 대한 정규화 항(Lacc)이 추가됩니다(반응성을 유지하기 위해 가중치는 낮게 유지됨). 
  • 일관성 손실. 우리는 [Honari et al. 2018]과 유사하게, 주석이 없는 실제 이미지를 비지도 학습 일관성 손실(Lc)에 활용합니다. 이는 랜드마크 예측이 다양한 이미지 변환 하에서도 불변성을 갖도록 유도하여, 훈련 이미지의 일부에 대해 랜드마크 라벨을 요구하지 않으면서도 프레임 간 랜드마크 위치의 일관성을 향상시킵니다.

성능

정확도를 저하시키거나 지터(jitter)를 증가시키지 않으면서 인코더의 성능을 향상시키기 위해, 우리는 특징 맵 크기를 줄이기 위해 패딩 없는 컨볼루션(unpadded convolutions)을 선택적으로 사용했습니다. 이를 통해 스트라이드 컨볼루션(strided convolutions)보다 특징 맵 크기를 더 정밀하게 제어할 수 있었습니다. 잔차(residual)를 유지하기 위해, 패딩 없는 컨볼루션의 출력에 특징 맵을 더하기 전에 특징 맵을 슬라이스합니다. 또한, AVX 및 Neon FP16과 같은 벡터 명령어 세트를 사용하여 메모리를 효율적으로 활용하고 성능을 1.5배 향상시키기 위해, 특징 맵의 깊이를 8의 배수로 설정했습니다.

최종 모델은 110만 개의 파라미터를 가지며, 실행에 2,810만 번의 곱셈-누적 연산이 필요합니다. 참고로, 본 아키텍처의 기반이 되는 기본 Mobilenet V2는 실행에 3억 번의 곱셈-누적 연산이 필요합니다. 우리는 온디바이스 모델 추론을 위해 NCNN 프레임워크를 사용하며, 비디오 한 프레임에 대한 단일 스레드 실행 시간(얼굴 탐지 포함)은 아래 표에 나와 있습니다. 16ms의 실행 시간은 초당 60프레임(FPS) 처리를 지원한다는 점에 유의해 주십시오. 

향후 계획

저희의 합성 데이터 파이프라인을 통해 훈련된 모델의 표현력과 견고성을 반복적으로 개선할 수 있었습니다. 누락된 표정에 대한 반응성을 높이기 위해 합성 시퀀스를 추가했으며, 다양한 얼굴 정체성에 걸쳐 훈련의 균형을 맞췄습니다. 아키텍처와 손실 함수의 시간적 구성, 세심하게 최적화된 백본, 그리고 합성 데이터에서 얻은 오류 없는 정답 데이터 덕분에 최소한의 연산으로 고품질 애니메이션을 구현할 수 있었습니다. FACS 가중치 서브네트워크에서 수행되는 시간적 필터링을 통해 지터(jitter)를 증가시키지 않으면서 백본의 레이어 수와 크기를 줄일 수 있습니다. 비지도 학습 방식의 일관성 손실(consistency loss)을 활용함으로써 방대한 양의 실제 데이터로 훈련하여 모델의 일반화 능력과 견고성을 향상시켰습니다. 우리는 더욱 표현력이 풍부하고, 지터가 없으며, 견고한 결과를 얻기 위해 모델을 지속적으로 정교화하고 개선해 나가고 있습니다. 

실시간 얼굴 추적 및 머신러닝 분야의 최전선에서 이와 유사한 과제에 도전해 보고 싶으시다면, 저희 팀의 채용 공고를 확인해 주시기 바랍니다.