Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Research] SyncTalk 논문 리딩 #12

Open
oMFDOo opened this issue Dec 2, 2024 · 7 comments
Open

[Research] SyncTalk 논문 리딩 #12

oMFDOo opened this issue Dec 2, 2024 · 7 comments

Comments

@oMFDOo
Copy link
Owner

oMFDOo commented Dec 2, 2024

SyncTalk: The Devil is in the Synchronization for Talking Head Synthesis
에 대해 읽고 리뷰해볼 것을 제안받았다.

Sync Talk은 음성 데이터에 대해 표정 값으로 변화하는 것이 가능하게 해준 오픈소스이다.
Gaussian Head Avatar를 이용한 얼굴 생성 이후 입력된 표정값을 기반으로 얼굴 변화가 가능한데,
이 값을 Sync Talk로 생성하여 준다면, 사람의 음성 입력에 대해 말과 표정을 통해 제어가능한 결과가 도출될 수 있는 기대효과를 지닌다.

@oMFDOo
Copy link
Owner Author

oMFDOo commented Jan 14, 2025

생성된 mesh의 블렌드 쉐이프를 통한 제어

SyncTalk에서는 생성된 3D 얼굴 모델(메쉬)에 대해 블렌드 쉐이프(Blendshape) 모델을 활용하여 얼굴 표정과 입술 움직임 등 동적인 요소를 제어합니다.

  1. 블렌드 쉐이프 모델 도입

    • SyncTalk는 미리 정의된 3D 얼굴 블렌드 쉐이프 모델을 사용합니다. 이 모델은 여러 가지 표정(예를 들어, 웃음, 찡그림, 눈썹 올림 등)을 나타내기 위해, 각 표정 변화에 해당하는 기저(shape basis)를 미리 학습해두고, 이를 조합해서 최종 표정을 만드는 선형 모델입니다.
    • 보통 52개의 블렌드 쉐이프 계수가 사용되며, 각 계수는 얼굴의 특정 부위(입술, 눈, 눈썹 등)의 미세한 표정 변화를 조절합니다.
  2. Facial Animation Capturer

    • SyncTalk 내부에는 Facial Animation Capturer 모듈이 존재합니다. 이 모듈은 음성 및 영상에서 얻은 특징(특히 lip feature와 표정 feature)을 기반으로, 현재 프레임의 표정 변화(예: 입술의 열림, 눈썹의 움직임 등)를 추출합니다.
    • 이러한 동적인 특징들은 블렌드 쉐이프 모델의 각 계수에 해당하는 값을 결정하는 데 사용됩니다.
  3. 블렌드 쉐이프 계수 적용 및 메쉬 변형

    • 추출된 블렌드 쉐이프 계수는 기존의 3D 얼굴 메쉬(보통 3DMM 기반으로 복원된 정적 메쉬)에 추가적인 변형을 주게 됩니다.
    • 수학적으로는, 기본적으로 3D 얼굴 메쉬에 대해 평균 얼굴 ( \overline{S} )에 블렌드 쉐이프 기저들을 선형 조합(각 계수와 해당 기저값의 곱)을 더하여 최종 얼굴 표정을 생성합니다.
      예를 들어, 최종 메쉬 ( S )는 다음과 같이 표현할 수 있습니다:
      [
      S = \overline{S} + \sum_{i=1}^{52} c_i B_i
      ]
      여기서 ( c_i )는 Facial Animation Capturer가 예측한 블렌드 쉐이프 계수이고, ( B_i )는 각각의 표정 변화를 나타내는 블렌드 쉐이프 기저입니다.
  4. 동기화 및 제어

    • 이처럼 블렌드 쉐이프 계수를 이용하면, 입력된 음성에 따른 입술 움직임과 얼굴 표정, 그리고 일반적인 감정 변화가 자연스럽게 3D 메쉬에 반영됩니다.
    • 동시에 다른 모듈(예: Face-Sync Controller)이 음성과 얼굴 시각 정보 간의 동기화를 보장하므로, 최종적으로 생성되는 말하는 얼굴 영상에서는 얼굴 정체성이 유지되면서도, 실제 사람이 말할 때와 유사한 표정 변화와 입술 움직임이 구현됩니다.

요약하면, SyncTalk에서는

  • 사전 학습된 3D 블렌드 쉐이프 모델을 이용해 얼굴의 여러 표정 변화를 표현하고,
  • Facial Animation Capturer 모듈이 음성 및 영상 특징으로부터 블렌드 쉐이프 계수를 추정한 후,
  • 이 계수를 기반으로 기본 3D 얼굴 메쉬에 선형 변형을 적용하여 동적인 표정을 생성합니다.
    따라서, 단일 이미지나 영상으로부터 복원된 정적 얼굴 모델에 동적 표현(입술, 얼굴 표정 등)을 부여하는 역할을 수행합니다.

@oMFDOo
Copy link
Owner Author

oMFDOo commented Jan 14, 2025

논문 요약

아래는 SyncTalk 논문의 기법과 절차를 기술적인 측면에서 상세하게 설명한 내용입니다.


1. 개요

SyncTalk는 NeRF(Neural Radiance Field) 기반의 말하는 얼굴(talking head) 합성 방법으로, 입력된 음성과 얼굴 영상(또는 단일 이미지로부터 추출된 얼굴 정보)을 바탕으로,

  • 정확한 입술 동기화(lip-sync)와
  • 자연스러운 표정 변화,
  • 안정적인 머리 자세(pose)와
  • 세밀한 머리카락 및 배경 디테일 복원을
    목표로 합니다.

핵심 “악마(Devil)”는 바로 동기화(synchronization) 문제인데, 이는 말하는 얼굴 합성에서 얼굴 정체성(identity), 입술 움직임, 표정, 머리 자세 등이 시간적으로 일관되게 유지되어야 함을 의미합니다.

SyncTalk는 세 가지 주요 모듈로 구성됩니다:

  1. Face-Sync Controller:

    • 음성 및 영상 정보를 이용해 입술 움직임과 얼굴 표정(특히, 입술 및 기타 관련 부위)의 동기화를 담당합니다.
  2. Head-Sync Stabilizer:

    • 머리 자세(회전 및 평행 이동)를 안정화시켜, 영상 전반에 걸쳐 머리 움직임이 자연스럽고 연속적으로 보이도록 합니다.
  3. Portrait-Sync Generator (Dynamic Portrait Renderer):

    • NeRF 기반의 3D 얼굴 표현(특히, tri-plane hash 표현)을 사용해 얼굴 영역, 머리카락 등 세밀한 디테일을 복원하며, 전체 얼굴과 상반신을 자연스럽게 결합하여 고해상도 영상을 생성합니다.

2. 각 모듈의 기술적 구성 및 절차

2.1. Face-Sync Controller

① Audio-Visual Encoder

  • 목적: 음성 신호와 얼굴 영상 간의 동기화를 보장하기 위해, 음성 및 시각 정보를 동시에 인코딩하여 입술 움직임에 대한 특징(latent feature)을 추출합니다.
  • 방법:
    • 기존 ASR용 오디오 인코더(DeepSpeech, Wav2Vec 2.0 등) 대신, 말하는 입술 움직임과 밀접한 feature 분포를 얻기 위해, LRS2와 같은 오디오-비주얼 동기화 데이터셋으로 훈련된 오디오-비주얼 인코더를 사용합니다.
    • 오디오와 영상의 컨볼루션 특징을 각각 추출한 후, 이를 결합(concatenation)하여 복원(decoder)을 통해 얼굴 프레임을 재생성하고 L1 재구성 손실과 lip-sync 판단에 대한 binary cross-entropy 손실(코사인 유사도를 기반)을 최적화합니다.
    • 이를 통해 동기화된 입술 특징(latent lip space)을 확보하게 됩니다.

② Facial Animation Capturer

  • 목적: 단순히 입술만이 아닌, 전체 얼굴의 표정(눈, 눈썹, 이마 등)을 사실적으로 표현하기 위함입니다.
  • 방법:
    • 3D 얼굴 blendshape 모델(예: 52개의 blendshape 계수 사용)을 활용하여, 표정 정보를 캡처합니다.
    • 이 모델은 얼굴의 특정 부위(예: 눈썹, 이마 등)에 대해 독립적인 제어를 가능하게 하며, 음성이나 기타 입력에 따라 적절한 표정 변화를 유도합니다.

③ Facial-Aware Masked-Attention

  • 목적: 입술 관련 feature와 얼굴 나머지 영역(예: 표정 관련 정보) 간의 상호 간섭을 줄여, 각각의 영역이 독립적으로 잘 학습되도록 합니다.
  • 방법:
    • 영상 내에서 입술 영역(M_lip)과 표정 영역(M_exp)을 위한 attention mask를 설계하여, 해당 영역의 attention을 분리시킵니다.
    • 이를 통해 입술 sync와 표정 컨트롤이 서로 영향을 주지 않고 독립적으로 최적화됩니다.

2.2. Head-Sync Stabilizer

① Head Motion Tracker

  • 목적: 입력 영상에서 머리의 대략적인 회전(R)과 평행 이동(T)을 추정하여, 머리 자세의 불안정(jitter)을 줄입니다.
  • 방법:
    • 여러 후보 focal length에 대해 3DMM을 사용한 2D 랜드마크 재투영 오류(Mean Squared Error)를 계산하여, 최적의 focal length를 선택합니다.
    • 이 최적 focal length를 사용해 각 프레임의 머리 회전 및 평행 이동을 초기 추정합니다.

② Head Points Tracker

  • 목적: 머리의 정확한 자세를 결정하기 위하여, 더 세밀하게 얼굴의 dense keypoint(키포인트)를 추적합니다.
  • 방법:
    • Optical Flow 기반의 모델을 활용하여, 얼굴 영역 내에서 중요한 keypoint들의 움직임을 추적합니다.
    • Laplacian 필터나 기타 방법으로 흐름 변화가 큰 keypoint를 선별하여, 각 keypoint의 motion trajectory를 획득합니다.

③ Bundle Adjustment

  • 목적: 추정된 keypoint 정보와 머리 pose(R, T)를 통합하여, 전체적인 머리 자세 추정의 정확도와 연속성을 높입니다.
  • 방법:
    • 두 단계의 최적화 과정을 거칩니다.
      • 첫 단계: 각 keypoint의 초기 3D 좌표를 임의로 설정하고, 프로젝션된 2D keypoint와의 차이를 최소화하도록 최적화(L_init).
      • 두 번째 단계: 전체 keypoint와 머리 pose(R, T)를 동시에 최적화(예: Adam optimizer 사용)를 진행하여, 각 프레임의 3D 머리 pose를 안정적으로 조정합니다.

2.3. Dynamic Portrait Renderer (Portrait-Sync Generator)

① Tri-Plane Hash Representation

  • 목적: NeRF 기반의 3D 얼굴 표현을 보다 효율적이고 정밀하게 모델링하기 위해 사용합니다.
  • 방법:
    • 3D 공간의 얼굴을 tri-plane(세 개의 2D 평면)으로 표현하며, 각 평면은 2D hash grid를 통해 다중 해상도 정보를 인코딩합니다.
    • 각 평면에서 추출된 hash feature들을 concatenation(합치기)하여 최종적인 geometry feature를 생성하고, 이를 통해 NeRF 함수 (F : (x, d) \rightarrow (c, \sigma))를 구성합니다.
    • 이 과정에서 Gaussian 노이즈 손실과 LPIPS 등의 perceptual loss를 함께 사용하여, NeRF 기반의 Rendered 결과의 디테일을 보존합니다.

② Portrait-Sync Generator

  • 목적: 생성된 얼굴 부분 외에도 머리카락, 목, 배경 등의 디테일을 보완하여, 전체 영상의 해상도와 시각적 품질을 높입니다.
  • 방법:
    • NeRF가 렌더링한 얼굴 영역(Fr)과 함께, Gaussian blur 등을 사용해 부드러운 버전 G(Fr)를 생성하고, 원본 이미지(Fo)와 결합하여, 머리카락과 배경 등 세밀한 부분을 복원합니다.
    • 만약 말하는 동안 얼굴과 상반신 사이에 어두운 영역이 생기는 경우, 평균적인 목 색상(Cn)을 채워넣어 자연스러운 합성을 수행합니다.

3. 전체 파이프라인의 흐름

  1. 입력 전처리:

    • 얼굴 영역을 crop하고, 필요한 경우 정렬 및 얼굴 랜드마크 추출을 수행합니다.
  2. Face-Sync Controller:

    • 입력 영상과 음성 신호를 받아, 오디오-비주얼 인코더로부터 동기화된 입술 및 표정 관련 feature(특징 벡터)를 추출합니다.
    • Facial Animation Capturer와 Masked-Attention 모듈을 통해, 입술 및 표정 정보가 명확하게 분리되어 학습됩니다.
  3. Head-Sync Stabilizer:

    • 얼굴의 전체적인 머리 pose를 추정하기 위해, rough head motion tracking과 keypoint 트래킹, bundle adjustment를 진행하여 안정적인 머리 자세 정보를 확보합니다.
  4. Tri-Plane Hash 기반 NeRF 및 Portrait-Sync Generator:

    • 앞서 얻은 lip, head pose, 표정 feature 등과 결합하여, NeRF 기반의 tri-plane hash representation으로 3D 얼굴을 모델링합니다.
    • 최종적으로, Portrait-Sync Generator 모듈을 사용하여 머리카락, 배경 등 세밀한 디테일을 보완하고 고해상도 영상(52 FPS 이상)을 생성합니다.

4. 결론

SyncTalk의 기술적 핵심은

  • 동기화(Synchronization) 문제에 집중하여,
    • Face-Sync Controller로 음성과 입술, 표정의 동기화를 보장하고,
    • Head-Sync Stabilizer로 안정적인 머리 자세를 유지하며,
    • Portrait-Sync Generator로 최종 고해상도 영상의 세밀한 디테일까지 복원하는 것입니다.

특히, tri-plane hash 표현을 활용한 NeRF 기반 얼굴 모델링과, 영상과 음성의 동기화를 위해 별도로 학습된 audio-visual 인코더, 그리고 keypoint 기반의 head pose 최적화 방식이 이 방법의 주요 혁신 포인트입니다.

이러한 구성 요소들이 모두 합쳐져, SyncTalk는 기존의 GAN 기반 방법이나 일반적인 NeRF 방법보다 더 정확하고, 일관되며, 고해상도에서 동기화가 잘 맞는 talking head 비디오를 생성할 수 있습니다.

@oMFDOo
Copy link
Owner Author

oMFDOo commented Jan 14, 2025

상세 파이프라인

SyncTalk 시스템은 단일 이미지(또는 짧은 영상 클립)와 음성 입력으로부터 3D 얼굴을 복원할 뿐 아니라, 그 얼굴의 표정을 제어할 수 있는 블렌드 쉐입(Blendshape) 정보까지 생성합니다. 이를 어떻게 달성하는지 주요 과정을 아래에 설명드립니다.


1. 입력과 기본 아이덴티티 추출

  • 단일 정면 얼굴 이미지
    SyncTalk은 입력 영상(예를 들어, 단일 정면 이미지 또는 짧은 클립)을 받아 얼굴의 정체성(identity)과 구조적인 3D 정보(예: 얼굴 형상)를 추정합니다. 이 과정에서는 NeRF 기반의 tri-plane hash 표현과 딥러닝 기반 네트워크(예: 인버전 및 Face-Sync Controller 모듈)를 활용하여 얼굴의 기본 3D 메쉬를 생성합니다.

2. 블렌드 쉐입을 통한 표정 제어

  • 블렌드 쉐입 모델의 사용
    SyncTalk는 미리 정의된 3D 얼굴 블렌드 쉐입 모델을 포함합니다. 이 모델은 여러 가지 얼굴 표정(예: 웃음, 찡그림, 놀람 등)을 나타내기 위해 각 표정에 해당하는 계수(예: 52개의 blendshape 계수)를 사전에 학습한 모델입니다.

    • 역할:
      • 입력 음성과 영상에서 동기화된 얼굴 표정 변화를 캡처하여, 어느 부분(예: 입술, 눈썹, 눈 주위 등)이 어떻게 움직여야 하는지를 제어합니다.
      • 이 블렌드 쉐입 계수들은 얼굴 표정의 변화(예: 입술의 움직임, 눈썹의 올림 등)를 세밀하게 조절할 수 있게 해주므로, 결과적으로 더욱 자연스럽고 생동감 있는 talking head 영상을 생성할 수 있습니다.
  • 얼굴 애니메이션 캡처 모듈(Facial Animation Capturer)

    • SyncTalk 내부에는 Facial Animation Capturer라는 모듈이 포함되어 있습니다.
    • 이 모듈은 오디오-비주얼 인코더로부터 추출한 lip feature(입술 움직임 정보) 및 기타 얼굴 표현 관련 feature를 이용해, 블렌드 쉐입 모델의 계수를 계산합니다.
    • 그러므로, 단일 이미지로부터 추출한 고유 얼굴 정보를 기반으로, 음성 신호와 동기화된 동적인 표정(예: 입술 동기화, 눈썹 움직임 등)을 블렌드 쉐입 계수로 만들어내어 3D 얼굴 모델에 적용합니다.

3. 종합적으로 어떻게 가능한가?

  1. 단일 이미지에서 정적 3D 얼굴 생성:

    • 입력된 정면 이미지로부터 얼굴의 고유 정체성과 3D 기하학(예: 3D 메쉬)을 복원합니다.
  2. 음성 및 영상 동기화로 동적 표정 생성:

    • 음성 신호와 함께 동기화된 입술 움직임 등 동적 특징을 추출하는 오디오-비주얼 인코더를 사용합니다.
  3. 블렌드 쉐입 모델의 역할:

    • 위의 동적 정보를 기반으로, 미리 구축된 3D 얼굴 블렌드 쉐입 모델에서 대응되는 표정 계수를 추정합니다.
    • 이 추정된 계수를 통해, 원래 정적인 3D 얼굴에 다양한 표정(입술 모양, 눈썹, 눈 주위 등)을 부여하여 talking head 비디오에서 자연스러운 표정 변화와 동기화된 입술 움직임을 생성합니다.

결과적으로, SyncTalk은 단일 정면 이미지(또는 짧은 영상)와 음성 입력만으로도 얼굴의 기본 3D 구조를 복원하고, 동시에 블렌드 쉐입 계수를 활용하여 시간에 따른 동적인 표정 변화를 만들 수 있게 됩니다.


결론

즉, SyncTalk은 단일 이미지에서 3D 얼굴의 기본 형태를 추정한 후, 미리 학습된 블렌드 쉐입 모델을 사용하여 음성 및 영상 동기화를 통해 동적인 표정 변화(예: 입술 움직임 등)를 생성합니다. 이런 구성 덕분에 단일 입력으로도 3D 얼굴에 자연스러운 표정과 애니메이션을 추가할 수 있게 되는 것입니다.

@oMFDOo
Copy link
Owner Author

oMFDOo commented Jan 14, 2025

머리 자세의 안정성 확보

1. focal length를 최적화하여 2D 랜드마크 재투영 오류를 최소화

  • 의미:
    • 주어진 3DMM 파라미터를 이용해 얼굴의 3D 구조를 복원한 뒤, 이를 카메라 매트릭스(특히 초점 거리 (f))를 사용하여 2D 랜드마크로 재투영합니다.
    • 이 재투영된 랜드마크 위치와 실제 이미지에서 관찰된 2D 랜드마크 위치 간의 **Mean Squared Error (MSE)**를 계산하여, 재투영 오류가 최소화되는 최적의 focal length를 찾습니다.
  • 목적:
    • 정확한 (R) (회전)과 (T) (평행 이동)를 추정하기 위해, 올바른 카메라 파라미터(특히 초점 거리)를 설정하는 것입니다.
    • 잘못된 focal length는 3D 얼굴 모델을 2D 이미지에 투영할 때 왜곡을 초래할 수 있습니다.

2. 머리 회전(R)과 평행 이동(T) 추정을 통해 머리 자세의 안정성 확보

  • 의미:
    • 초기 focal length 최적화 이후, keypoint 트래킹bundle adjustment를 통해 더 세밀하게 머리 자세를 최적화합니다.
    • 영상의 여러 프레임에서 머리 움직임의 일관성을 유지하고, 머리의 jitter(불규칙한 떨림 현상)를 줄이는 것이 목표입니다.
  • 목적:
    • 영상 내 연속된 프레임 간에 머리 자세가 자연스럽게 연결되도록 보장합니다.
    • (R)과 (T)가 불안정하면 머리가 떨리는 것처럼 보이거나, 머리와 몸의 연결이 어색해질 수 있습니다.

결론: 두 접근법의 관계

  • focal length 최적화는 (R)과 (T)를 계산하기 위한 기초 작업으로, 올바른 카메라 매트릭스를 설정하는 과정입니다.
  • 이후 keypoint 트래킹bundle adjustment는 추정된 (R)과 (T)를 더 안정적으로 보정하여, 머리 움직임이 일관되고 자연스럽게 보이도록 만듭니다.
  • 결국, 머리 자세의 안정성 확보라는 같은 목적을 달성하기 위한 연속적인 단계들입니다.

@oMFDOo
Copy link
Owner Author

oMFDOo commented Jan 14, 2025

Keypoint

"Laplacian 필터나 기타 방법으로 흐름 변화가 큰 keypoint를 선별하여, 각 keypoint의 motion trajectory를 획득합니다"를 차근차근 풀어 설명하면 다음과 같습니다:


1. Keypoint란?

  • Keypoint는 영상에서 특정한 특징적인 지점을 의미합니다.
    • 예: 얼굴의 랜드마크(눈, 코, 입), 경계선, 코너 등.
  • 여기서는 얼굴 영역에서 추출된 **특징적인 점들(landmarks)**입니다.

2. Optical Flow를 사용해 Keypoint의 움직임 추적

  • Optical Flow:
    • 영상의 연속된 두 프레임에서 픽셀들이 어떻게 움직였는지를 나타내는 벡터 필드.
    • 예를 들어, 사람이 고개를 움직이면, 각 픽셀의 이동 방향과 크기(속도)를 계산할 수 있습니다.
  • 흐름 변화가 큰 Keypoint 찾기:
    • Optical Flow로 계산한 움직임 데이터에서, 움직임 변화가 특히 큰 지점을 찾습니다.
    • 이 지점은 고개를 돌릴 때나 얼굴이 움직일 때 중요한 움직임의 단서가 될 가능성이 높습니다.

3. Laplacian 필터를 사용해 변화가 큰 지점 선별

  • Laplacian 필터:
    • 이미지를 분석할 때, 픽셀 간 밝기 변화(gradient)가 큰 영역을 강조하는 필터.
    • 밝기 변화가 크다는 것은 영상에서 경계선이나 특징적인 점을 나타냅니다.
    • Optical Flow 데이터에 Laplacian 필터를 적용하면, 흐름(움직임) 변화가 큰 지점을 효과적으로 추출할 수 있습니다.
    • 예: 얼굴의 경계선, 눈가, 입술 주변 등.

4. Motion Trajectory(운동 궤적) 획득

  • Motion Trajectory란?
    • 특정 Keypoint가 영상의 연속된 프레임에서 어떻게 움직이는지를 나타낸 궤적.
    • 각 Keypoint에 대해 Optical Flow를 기반으로 시간(t)에 따른 위치(x, y, z)를 추적합니다.
  • 왜 필요한가?
    • 머리의 자세(회전 및 이동, (R)과 (T))를 정확하게 추정하기 위해서는, 얼굴의 특정 Keypoint가 어떻게 움직이는지를 추적해야 합니다.
    • 이 데이터가 안정적일수록 머리 자세를 더 정확하게 복원할 수 있습니다.

요약

  1. Optical Flow로 각 프레임 간의 픽셀 움직임을 계산합니다.
  2. 움직임 데이터에서 Laplacian 필터로 흐름 변화가 큰 Keypoint를 선별합니다.
    • 여기서 중요한 움직임의 단서를 가진 지점들이 선택됩니다.
  3. 이렇게 선별된 Keypoint들의 위치를 연속된 프레임에서 추적하여 Motion Trajectory를 얻습니다.
  4. 이 Trajectory 데이터는 머리 자세(Head Pose)의 회전 및 이동을 안정적으로 추정하는 데 사용됩니다.

@oMFDOo
Copy link
Owner Author

oMFDOo commented Jan 14, 2025

입력값

SyncTalk에서 음성 기반의 동기화된 동적 표정 영상을 생성하는 과정에서, 입력 데이터(음성 및 영상)와 관련된 구성은 다음과 같습니다:


1. 음성은 유저가 제공

  • 유저 입력: 유저가 제공한 음성 파일이나 실시간 오디오 스트림이 시스템의 입력으로 사용됩니다.
  • 음성 데이터는 모델이 **음성과 립 싱크(Lip Sync)**를 생성하는 데 필요한 핵심 신호로 사용됩니다.

2. 영상은 어디서 가져오나?

(1) 단일 참조 이미지 또는 영상

  • SyncTalk는 단일 참조 이미지 또는 짧은 참조 영상(reference video)에서 얼굴의 정적 데이터를 가져옵니다.
    • 단일 참조 이미지의 경우:
      • 유저가 입력한 하나의 얼굴 사진을 기반으로 3D 얼굴 구조 및 초기 표정 데이터를 추정합니다.
      • 3DMM(3D Morphable Model) 기반으로 얼굴의 기하학적 특성과 텍스처를 재구성합니다.
    • 참조 영상의 경우:
      • 짧은 영상에서 사용자의 얼굴 움직임과 표정을 학습하여 초기 기준 모델로 활용합니다.
      • 영상 속 프레임을 분석해 얼굴의 자세(Head Pose)와 표정 데이터를 추가로 보강할 수 있습니다.

(2) 사전 학습된 데이터

  • SyncTalk는 대규모의 학습 데이터셋(LRS2, VoxCeleb 등)을 사용하여 사전 학습되었습니다.
    • 이런 데이터셋에는 다수의 음성-영상 동기화 샘플(예: 사람이 말하는 장면)이 포함되어 있습니다.
    • 학습 단계에서 이런 데이터를 사용해 음성에서 립 모션, 표정 변화 등을 생성하는 규칙을 학습합니다.

3. 최종 생성 과정

  • SyncTalk는 유저가 제공한 음성과 참조 이미지/영상을 결합하여, 새로운 영상을 생성합니다.
    • 음성 기반: 입력된 음성을 분석해 립 싱크(Lip Sync)와 표정 변화를 계산.
    • 영상 기반: 참조 이미지/영상의 얼굴 데이터를 활용해 얼굴의 정체성을 유지하며 영상 생성.
    • 3D 블렌드쉐입 사용: 음성 신호를 기반으로 표정의 동적 변화를 블렌드쉐입으로 구현.
    • NeRF 기반: 얼굴의 3D 모델과 텍스처를 통합하여 고품질의 영상을 출력.

결론적으로

  • 음성은 유저가 제공하고, 영상은 유저의 단일 참조 이미지(또는 짧은 참조 영상)와 사전 학습된 데이터셋을 조합해 만들어집니다.
  • 유저의 이미지/영상 입력은 생성된 영상의 얼굴 정체성을 유지하는 데 사용됩니다.

@oMFDOo
Copy link
Owner Author

oMFDOo commented Jan 14, 2025

Mesh 제어법

SyncTalk에서는 생성된 3D 얼굴 모델(메쉬)에 대해 블렌드 쉐이프(Blendshape) 모델을 활용하여 얼굴 표정과 입술 움직임 등 동적인 요소를 제어합니다. 구체적인 과정은 다음과 같습니다:

  1. 블렌드 쉐이프 모델 도입

    • SyncTalk는 미리 정의된 3D 얼굴 블렌드 쉐이프 모델을 사용합니다. 이 모델은 여러 가지 표정(예를 들어, 웃음, 찡그림, 눈썹 올림 등)을 나타내기 위해, 각 표정 변화에 해당하는 기저(shape basis)를 미리 학습해두고, 이를 조합해서 최종 표정을 만드는 선형 모델입니다.
    • 보통 52개의 블렌드 쉐이프 계수가 사용되며, 각 계수는 얼굴의 특정 부위(입술, 눈, 눈썹 등)의 미세한 표정 변화를 조절합니다.
  2. Facial Animation Capturer

    • SyncTalk 내부에는 Facial Animation Capturer 모듈이 존재합니다. 이 모듈은 음성 및 영상에서 얻은 특징(특히 lip feature와 표정 feature)을 기반으로, 현재 프레임의 표정 변화(예: 입술의 열림, 눈썹의 움직임 등)를 추출합니다.
    • 이러한 동적인 특징들은 블렌드 쉐이프 모델의 각 계수에 해당하는 값을 결정하는 데 사용됩니다.
  3. 블렌드 쉐이프 계수 적용 및 메쉬 변형

    • 추출된 블렌드 쉐이프 계수는 기존의 3D 얼굴 메쉬(보통 3DMM 기반으로 복원된 정적 메쉬)에 추가적인 변형을 주게 됩니다.
    • 수학적으로는, 기본적으로 3D 얼굴 메쉬에 대해 평균 얼굴 ( \overline{S} )에 블렌드 쉐이프 기저들을 선형 조합(각 계수와 해당 기저값의 곱)을 더하여 최종 얼굴 표정을 생성합니다.
      예를 들어, 최종 메쉬 ( S )는 다음과 같이 표현할 수 있습니다:
Image
 여기서 \( c_i \)는 Facial Animation Capturer가 예측한 블렌드 쉐이프 계수이고, \( B_i \)는 각각의 표정 변화를 나타내는 블렌드 쉐이프 기저입니다.
  1. 동기화 및 제어
    • 이처럼 블렌드 쉐이프 계수를 이용하면, 입력된 음성에 따른 입술 움직임과 얼굴 표정, 그리고 일반적인 감정 변화가 자연스럽게 3D 메쉬에 반영됩니다.
    • 동시에 다른 모듈(예: Face-Sync Controller)이 음성과 얼굴 시각 정보 간의 동기화를 보장하므로, 최종적으로 생성되는 말하는 얼굴 영상에서는 얼굴 정체성이 유지되면서도, 실제 사람이 말할 때와 유사한 표정 변화와 입술 움직임이 구현됩니다.

요약하면, SyncTalk에서는

  • 사전 학습된 3D 블렌드 쉐이프 모델을 이용해 얼굴의 여러 표정 변화를 표현하고,
  • Facial Animation Capturer 모듈이 음성 및 영상 특징으로부터 블렌드 쉐이프 계수를 추정한 후,
  • 이 계수를 기반으로 기본 3D 얼굴 메쉬에 선형 변형을 적용하여 동적인 표정을 생성합니다.
    따라서, 단일 이미지나 영상으로부터 복원된 정적 얼굴 모델에 동적 표현(입술, 얼굴 표정 등)을 부여하는 역할을 수행합니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Development

No branches or pull requests

1 participant