프로젝트 3일차

Doya·2025년 5월 21일

ESTSOFT_AI개발7기

목록 보기
41/43

개요

  • 자료 구조 파악
  • CodeTalker 코드 분석

자료 구조 파악

AI HUB에서 받은 음성 기반 3D 발화 얼굴 데이터 자료 정리

대상항목제공형식개수
원청데이터오디오 데이터wav5000
라벨데이터3D 메쉬 데이터Obj57만 개 이상
라벨데이터메타 데이터Json57만 개 이상
라벨데이터텍스처 데이터Png10개

AI 모델 파일 확인

Code

  • stage1_vocaset.py
  • stage2.py

AI 학습모델 파일

  • model_epoch100.pth.tar

도커 이미지

  • nia_codetalker37.tar

주요 코드 정리

1.stage1_vocaset.py

  • VQ-VAE(백터 양자화 자동 인코더)구조를 pytorch로 구현
  • 구성: Transformer 기반 인코더 → 양자화 → 디코더 → 3D 복원

주요 클래스
1. VQAutoEncoder – 전체 모델 클래스
입력된 3D 얼굴 모션을 인코딩 -> 양자화-> 디코딩을 통한 재구성
2. TransformerEncoder
3D 정점 정보를 Transformar 입력에 맞게 변환 후 인코딩 수행

  1. TransformerDecoder
    양자화된 latent 코드로부터 3D 포인트 복원
  1. stage2.py
    음성에서 3D 얼굴 애니메이션 예측을 담당
    음성과 스타일 정보를 받아 3D얼굴 애니메이션을 생성
    주요 클래스
  2. CodeTalker
    입력: wav 오디오 파일, 스타일(one-hot)
    출력: 3D facial animation
    내부 : 음성 특징 추출 + Transformer 디코더 + VQ-VAE 디코딩

구성 요소별 역할 요약

  1. Wav2Vec2 기반 오디오 인코더
    원시 오디오(raw waveform)를 프레임 단위의 feature 시퀀스로 변환
    사전학습된 Wav2Vec2Model을 사용
    출력은 [batch, frame, feature_dim] 형태의 시계열 특징

  2. 스타일 임베딩 (Style Embedding)
    one-hot으로 입력된 화자 정보 → 학습 가능한 벡터로 변환
    스타일 간 선형 보간(one_hot2, weight)도 지원

  3. Transformer 디코더
    음성 특징을 memory로 사용하고, 과거의 정점 시퀀스를 입력으로 받아다음 프레임 예측
    시계열 예측을 위한 attention mask(biased_mask)와 enc-dec cross attention 사용

  4. 정점 시퀀스 매핑 및 위치 인코딩
    이전에 생성된 정점(혹은 ground-truth)을 latent feature로 매핑
    주기 기반 위치 인코딩(PeriodicPositionalEncoding) 적용

  5. VQ-AutoEncoder 호출 (Stage1)
    stage1_vocaset.py에서 정의된 VQAutoEncoder 사용
    Transformer 출력 → quantize → decode를 통해 3D 정점 시퀀스 복원

전체 흐름

[ Audio ]
   ↓ wav2vec2
[ Audio Feature ] ←──┐
                     │
[ Style Embedding ] ─┼──> Transformer Decoder (Auto-regressive)
[ Prev Vertices ] ───┘
   ↓
[ Latent Feature ]
   ↓ VQ
[ Quantized Feature ]
   ↓ VQ Decoder (Stage1)
[ Predicted 3D Vertices ]
   ↓ + Template
[ Final Output ]

진행중 막힌 상황

  1. 가중치 모델의 부재
    • stage1_vocaset.py 에서 사용한 model 가중치 파일이 없음
    • 해당 model을 학습하기에는 1.87TB데이터를 학습하기에는 물리적으로 힘듬

-> 일시적 해결방안
CodeTalker에서 제공하는 test용 가중치 사용
정확한 출력을 기대하긴 힘듬
기능적으로 테스트 하는데는 문제가 없을 것으로 예상

profile
안녕하세요. 도야입니다

0개의 댓글