Postech 24-WURF 연구 노트(1/15~1/16)
“연구를 진행하며 정리한 공부 내용과 생각들”
1/15:
1. Neutral Talk에 대한 Training
2. ‘Dyadic conversation에서 발생하는’ sound가 동반된 non-verbal signals에 대해서 training(Data취득이 다소 어려울 것으로 판단)
또는 Rich Emotion Video에 대해 training(emtion level annotation)
- Dyadic conversation에서 expression이 어색하다고 느껴지는 이유는, 이전 대화의 분위기를 expression하지 못하는 것도 있지만, ‘dyadic conversation’의 특성 상 speech에서 드러나는 감정에 비해 조금 더 과장된 expression을 하는 경우가 많은 것 같다.
(motion단위로 emotion recognition model을 사용하여 loss 설정하는 것도 괜찮을 수 있을 것 같다.)
3. Dyadic conversation자체를 Condition으로 training
- 한마디씩의 대화가 주어졌을 때, 앞부분의 speech가 condition, 뒷부분의 speech가 input audio
- condition을 어떻게 부여해야 할지 감이 잘 오지는 않는 것 같다.
어려움을 느끼는 점
가설들이 맞는지 확인해보려면, dataset을 통해서 training을 시키고 유의미한 결과가 나오는지 확인해보아야 할 것 같은데, 가설마다 training결과를 확인하는 것은 쉽지 않은 것 같다.
CREMA-D
https://github.com/CheyneyComputerScience/CREMA-D
- CREMA-D dataset은 audio와 video가 각각 emotion: ‘anger’, ‘disgust’, ‘fear’, ‘happy’, ‘neutral’, ‘sad’와 emotion level: ‘high’, ‘medium’, ‘low’로 annotation되어있다.
- ‘Dyadic conversation’에서는 공감을 위한 충분한 expression이 필요하다고 생각이 든다. 공감을 충분하게 하기 위해서는 expression의 풍부함이 중요하다. 따라서 ‘emotion level’이 ‘high’인 dataset을 학습하여 이용하면 조금 더 expressive한 talking head를 만들 수 있을 것이라는 생각을 했다.
- 결국 앞에서 ‘umm’, ‘yes’ 등 speech가 아닌 ‘non-verbal signals’에 대한 학습을 따로 진행하는 것은 필요하다고 판단된다.
- 앞의 speech를 condition에 대한 reactive speech를 학습하는 것은 따로 진행해야 할 것 같다는 생각이 든다.
- previous speech에 대한 적절한 반응은, ‘previous speech, video’를 condition으로 부여하고, 그에 대한 적절한 speech expression을 따로 학습해야 할 것이라고 생각했다.
결론적으로,
- Dyadic conversation에서 자주 등장하는 ‘non-verbal signals’에 대한 facial expression, pose등을 따로 학습(LaughTalk에서 Laugh dataset에 대해서만 따로 학습했던 것 처럼)
- Dyadic conversation에서 ‘condition(previous speech)’에 대한 ‘input audio(responsor’s speech)’의 facial expression, pose 등을 따로 학습
- 여기서 한가지 더 생각이 든 것은 ‘previous speech’가 진행되는 동안의 ‘listener’s motion’또한 ‘responsor(=listener)의 speech’에 연관이 있을 것이라고 생각이 들었다.
- 따라서 learning2listener의 ‘listener’s motion’정보를 함께 사용한다면 더 좋은 expression을 할 수 있지 않을까? 라는 생각을 했다.
- learning2listener에서 ‘speaker’s motion, audio’를 condition으로 사용하였는데, 이 방법을 활용해보는 것도 좋은 결과를 낼 수 있을 것 같다는 생각을 했다.
CodeTalker
- learning2listening과 같이 Codebook을 사용하여서 함께 사용할 수 있을 것 같다.
CodeTalker 가상환경 설정
위와 같은 오류가 발생하면,
‘anaconda3/envs/CodeTalker/lib/python3.8/site-packages/OpenGL/platform/ctypesloader.py’에서 수정이 필요하다.
- 위와 같이 “fullName =util.find_library( name )”를 “fullName = ‘/System/Library/Frameworks/OpenGL.framework/OpenGL’”로 수정해주어야 한다.
새로운 연구주제(Multilingual 3D Talking Head Generation)
Motivation
- Recent progress in 3D talking head ⇒ mainly focus on the English data
- Would they work on other languages?
- They might work, but are they good enough?
Reference check!!
- [1] 3D talking head
- multilingual 관련 연구 확인 필요
https://arxiv.org/pdf/2006.11610.pdf
- 기존에 모델이 다른 언어에도 generalize된다고 데모를 보여주긴 함
- Explicit하게 multilingual을 타케팅한 연구가 있는가?
- 기존 모델의 정확도 측정 필요 (qualitative results)
- 한가지 언어에 대해서도 다양한 샘플을 넣어서 확인 해봐야함
- Faceformer, Emotalk, Codetalker, …, EMOTE 등등 기존 연구에 “한국어”, “영어”, “일어” 등 다양한 언어를 입력하여 동작을 잘하는 지 확인 필요
Emotalk: 세팅완료Faceformer: 세팅완료(pth파일 찾았음)CodeTalker: 세팅완료VOCA: 세팅완료
FaceFormer등 audio가 포함되지 않고 Inference되는 모델들은 emotalk(구현되어 있음) 참고하여 코드 짜기
- Faceformer, Emotalk, Codetalker, …, EMOTE 등등 기존 연구에 “한국어”, “영어”, “일어” 등 다양한 언어를 입력하여 동작을 잘하는 지 확인 필요
- 한가지 언어에 대해서도 다양한 샘플을 넣어서 확인 해봐야함
- [2] 2D talking head
- multilingual 관련 연구 확인 필요
- 만약 존재한다면, 어떤식으로 문제를 define했고, 해결했는지 참고해야함
- AV2AV 논문에서 데이터셋들 확인 필요
- multilingual 관련 연구 확인 필요
[3] Collecting dataset
- 2D video dataset source를 찾아야 함
- 문장단위로 끊던가, 시간 단위로 끊던가
- 언어가 아주 다양하지 않아도 되고 적당히 span 할수 있으면 될것 같음 (약 3-5개?!)
- 5개의 언어라고 가정했을 때, 대략 1000개의 dataset
- 데이터가 있는거 위주로 해야함
- 후보: 영어(기본으로 들어감), 한국어, 프랑스어, 스페인어, 일어, 중국어 등등
~수요일: [1] 수행 오후 10:00
~금요일: [2], [3] 수행 오후 10:00
1/15: Speech-driven 3D talking head model가상환경 설정-1
오늘은 세미나가 4시간이라서 FaceFormer에 대한 가상환경 세팅만 완료했다..
FaceFormer
- OpenGL import문제 발생 해결책은 아래에 있다.
아래 방법대로 하면 해결되었다.
$CONDA_PREFIX/include
는 ‘해당 conda env경로’
- pyglet, python버전 호환 문제
pyglet==1.4.10이 3.7에 호환된다.
- psbody module문제
아래와 같이 설치를 해주면 된다.
pip install git+https://github.com/MPI-IS/mesh.git
- pyrender문제
pyrender가 pyopengl==3.1.0에 맞다고 오류가 뜨더라도, ‘pyopengl==3.1.4
’를 설치해서 돌리면 해결된다…(이거 때문에 2시간 날렸다.)
- VOCASET의 download files위치
아래 VOCA의 “Training Data”에 있다.
1/16:
(1) Speech-driven 3D talking head model가상환경 설정
CodeTalker
- CodeTalker에서는 github를 그대로 따라해서 되었는데, 오류가 발생한 부분은 FaceFormer 가상환경을 설정할 때와 같아서 수월하게 해결했다.
VOCA
(2) Dataset조사 및 Inference결과 비교
- 아래 ‘AV2AV’논문에서 사용된 dataset들을 살펴보고, 언어 5개에서 각각 200개 정도의 data를 뽑을 수 있는지 살펴보아야 한다. 영어는 매우 많기 때문에, 다른 언어들(한국어, 일본어, 중국어, 불어 등)에서 데이터셋 확보가 되는지 살펴보아야겠다.
Dataset
1) VoxCeleb
2) AVSpeech
AVSpeech: Audio Visual Speech Dataset
https://github.com/naba89/AVSpeechDownloader
데이터 취득시에 muavic으로 speech2text한 후, text로 language를 추정?(language annotation이 안되어 있다.)
speech-to-text model
https://github.com/facebookresearch/muavic
- Loss 설정할 때 사용할 수 있지 않을까?
- 만약 사용한다면, muavic에 학습된 language를 사용해서 평가하면 성능이 좋을 것 같다는 예상을 한다.
https://github.com/facebookresearch/av_hubert
Youtube영상으로 취득할 경우
- Data Filtering이 매우 중요하다. 그 외에도, Korean 또는 Japanese는 따로 구해야 한다.
[Some languages]
⇒ 다양한 언어가 있지만(korean, japanese), 언어별 유튜브 채널이 있는 언어들보다는 data가 적다.
Korean의 경우에는 약 1분 당 5문장, 1개의 영상 당 5분이므로 25개의 video clip이 나올 것이고, 50개 정도의 영상이 있으므로, 3-5초 정도의 video clip이 500개 정도 나올 것으로 예상된다. 낮게 잡아도 300개 정도는 나올 것 같다.
https://www.youtube.com/@easylanguages
아래 유튜브 채널들 외에도 언어가 있으며, 인터뷰 형식으로 다양한 사람들이 등장한다.
[Spanish] (Script o)
https://www.youtube.com/@EasySpanish
[French] (Script o)
https://www.youtube.com/@EasyFrench
[German] (Script o)
https://www.youtube.com/@EasyGerman
[Chinese(Mandarin)] (Script x)
https://www.youtube.com/@EasyMandarin
[Italian] (Script o)
https://www.youtube.com/@EasyItalian
Script정보가 sentence별로 있다.
https://github.com/jdepoix/youtube-transcript-api
- Data collection pipeline생각할 때 참고
https://arxiv.org/pdf/1809.00496.pdf
Data Pipeline
- Video Script extraction
- video clip extraction(per sentence)
- Data filtering
Data Collection / Filtering이 필요한 부분(해당 기술(github)들 모두 찾아보고 실제로 적용해보기)
영상에서 말하는 사람이 아닌, 외부에서 말소리가 들리는 경우
https://github.com/TaoRuijie/TalkNet-ASD
주변 noise가 심한 경우(+배경 음악 소리가 너무 큰 경우)
audio separation
video clip 하나에 1-2개의 sentence가 들어가도록
https://github.com/jdepoix/youtube-transcript-api
scene이 바뀔 때
https://github.com/Breakthrough/PySceneDetect?tab=readme-ov-file
Dataset에서 취득
Chinese
https://www.vipazoo.cn/CMLR.html
Spanish, Portuguese, German, and French
http://multicomp.cs.cmu.edu/resources/cmu-mosei-dataset/
Korean (AI hurb)
Annotation
“Sentence_info”: [ { “ID”: 1, “topic”: “health/diet”, “sentence_text”: “믿어도 될지 의심스럽고 불안해.”, “start_time”: 3.041814, “end_time”: 5.921088435374149 },
English, Portugese, Russian …(AV Speech, VoxCeleb2)
- unlabeled data
https://looking-to-listen.github.io/avspeech/
https://mmai.io/datasets/lip_reading/
+) 논외
speech-to-text model을 사용해서, text-condition을 같이 주면 더 정확한 발음이 가능하지 않을까? 라는 생각..