말랑코딩
[논문 리뷰] Stitch it in Time: GAN-Based Facial Editing of Real Videos 본문
- 아래 비디오는 유튜브에서 남주혁 인터뷰 동영상을 5초정도로 잘라서 테스트 용도로 써본 것임.
-> 동영상 출처
들어가기 전에
- 지난 1년동안 GAN 기반의 이미지 editing 분야는 엄청난 발전을 이뤘고, 특히 styleGAN2를 이용한 고도로 분리된 스타일과, 의미있는 잠재공간을 활용한 이미지 editing 이 이루어졌다.
- 그러나 비디오 editing 분야에서는 시간적 일관성(temporally consistency, 여기서는 시간적 일관성이라고 번역하겠음) 을 유지해야하는 제약으로 인해 쉽지 않았다.
- 최근에 제안된 styleGAN-V 는 높은 프레임 속도로 일관된 비디오 생성 가능하지만, 고해상도 합성에는 어려움이 있었다.
- 본 논문에서 저자는 원본비디오가 항상 존재하기 때문에 생성할 필요 없이 "시간적 일관성"만 유지하면 된다고 말했고, 다음 두가지 인사이트를 제시했다.
- 생성자는 일반적으로 low frequency function 을 학습하는 경향이 있는데, 약간 다른 latent code로 edited frame 의 일관성을 유지하기 위한 이점으로 사용된다.
-> low frequency function 을 학습하는게 일반적으로 단점으로 여겨진다고 하는데 왜인지 공부 필요 - 미세 조정된 생성기는 잠재공간을 손상시키지 않고 미세조정 가능하므로, 부드럽게 변경되는 latent code set 을 생성 가능하다.
- 생성자는 일반적으로 low frequency function 을 학습하는 경향이 있는데, 약간 다른 latent code로 edited frame 의 일관성을 유지하기 위한 이점으로 사용된다.
메인 아이디어
- Alignment(정렬)
- 내부적으로 landmark detection을 통해 얼굴을 찾고 가우시안 필터를 적용
- 얼굴 landmark detection 에 대한 민감도를 줄이고, 시간적 일관성을 높이기 위함.
- 필터 적용 후에는 비디오 프레임으로부터 얼굴을 crop 및 align 함.
- Inversion
- crop, align 된 얼굴은 PTI 로 반전되는데, 예외적으로 최적화 기반의 반전은 PTI가 아니라 e4e 인코더로 대체된다.
- -> e4e, PTI
- e4e 인코더는 서로다른 프레임 간에 많이 변경되지 않고 더 부드럽게 전환되도록 low frequency function 에 더 집중하기 때문이다.
- inversion 하기 위해 첫번째로 "피벗"을 찾음.
- "피벗" 은 입력이미지의 근사치를 찾기 위해 생성기를 통홰 초기 latent code(잠재코드)를 생성한다.
- 그런 다음 특정 "피벗" 코드가 대상을 더 잘 재현할 수 있도록 생성기 가중치를 미세조정함.
- PTI 는 각 프레임의 모든 latent code에 동시 적용된다.
- Editing
- 다행히, 기존의 linear editing 기술은 드롭인방식(조금만 수정해서 사용가능)으로 작동
- style code 를 부드럽게 변경하기 위한 시간적 일관성 edit 이 필요 없음.
- Stitching Tuning
- edited face 를 원래프레임에 그냥 붙여넣으면 테두리 주위에 아티팩트가 발생 -> 두번째 튜닝 필요
- 사전훈련된 segmentation network를 사용해 edited face 에 대한 segmentation mask 를 얻음
- 경계 영역을 생성하기 위해 마스크를 경계를 팽창시킴(dilation)
- edited face 를 원본 프레임에 붙여넣음
- 원본 이미지와 더욱 유사한 경계 영역을 더 만들기 위해 각 프레임에 대한 생성기를 미세 조정(finetune)
핵심 요점
- Stitch in time 은 도메인이 달라도, 그리고 어려운 비디오에서도 작동함(애니메이션에서도 가능)
- editing 은 interFaceGAN, StyleCLIP 으로 수행되었음
- PTI 는 local score와 비교해서 global score 에서 꽤 성능이 안좋음.
->여기서 말하는 local score, global score 뭔지 공부 필요 - encoder 가 없으면 얼굴이 크게 움직이거나 표정 변화 시 편집된 프레임이 일치하지 않게 됨
- PTI 가 없으면 스티칭 성능이 저하됨
- 스티칭 하지 않으면 segmentation mask 의 머리카락, 테두리 주위에 아티팩트 발생함.
개선해야할 사항
- 속도. 이 방법은 실시간작동이 안됨. 5초 비디오 편집 시 1시간 30분 정도가 걸림(위 남주혁 비디오 편집 시 실제로 그랬음)
- Hyperstyle + Stitch in time 이 다음 단계라고 생각함
- 머리카락이 잘못 잘리거나 편집영역 밖으로 나가는 경우가 더러 있음
코드 구현 결과
1. 데이터 다운로드(필요 시)
2. pretrained model download
-> 1,2 다운 링크 포함된 git
3. Training
- Train 결과로 개별 비디오에 맞춘 model 파일과 inversion, 및 pivot 된 비디오가 자동 생성됨
- pivot 의 결과로는 전혀 다른 얼굴이 생성이 되는데, 이는 생성자가 초기 latent code가 input image 의 근사치를 찾기 위해 생성되는 이미지임. 여기서 생성자의 가중치를 미세조정하여 타겟을 생성하기 위한 inversion 이 더욱 잘 생성됨.
- inversion 결과를 보면 원본 비디오 같은데 원본이 아님. pivot 이미지를 생성해내고 나서, 여기서 생성자 가중치를 미세조정해서 원본과 거의 유사하게 만들어낸 것임. 남주혁 이미지에서는 배경이 안보이는데, 오바마 예시를 보면 얼굴 주변이 블러돼있는 것을 볼수 있음. 이건 얼굴 주변까지 생성자가 생성해냈기 때문임.
- 교정기를 낀 이미지를 확인하니 확실히 알 수 있었음. 원본에선 교정기를 착용했는데, inversion 에서는 교정기까지 똑같이 생성자가 만들어내지 못해서 교정기가 없음.
4. Edit and Stitch
- 학습된 모델을 가지고 age, smile, gender 등을 변경할 수 있음.
링크
'논문' 카테고리의 다른 글
StyleGAN은 얽힘(entanglement)을 어떻게 해결했을까? (0) | 2022.03.10 |
---|
Comments