https://github.com/happy-jihye/Cartoon-StyleGAN
FINE-TUNING STYLEGAN2 FOR CARTOON FACE GENERATION 논문 리뷰
1. Introduction
StyleGAN모델은 이미지의 속성뿐만 아니라 확률적인 부분까지 학습하여 고해상도 이미지를 생성해냄
저해상도에서 고해상도로 순차적으로 학습하기 떄문에 간단한 모델 조정으로 source(원본) 이미지를 target 이미지로 쉽게 전달할 수 있음
이 연구는 source 이미지와 target 이미지를 유사하게 만드는 두 가지 방법 제안
- 스타일 벡터, generator의 초기 block을 freeze하는 FreezeSG모델 사용
- source generator, target generator 사이의 구조 손실 함수 사용
⭐️ 스타일 벡터, generator block을 freeze 효과?
styelgan2의 generator, 스타일 벡터의 초기 블록은 저해상도 이미지 생성을 담당
학습 중에 고품질 이미지를 생성하기 위해 생성기 및 스타일 벡터의 가중치를 학습
FreezeSG 기술을 사용하는 경우 생성기 및 스타일 벡터의 초기 블록이 동결되므로 가중치가 업데이트되지 않음
초기 블록을 동결함으로써 미세 조정된 모델은 소스 이미지의 새로운 스타일에 적응하면서 사전 훈련된 모델의 학습된 구조를 사용할 수 있음 (전이학습)
2. Related work
- Image to Image
stylegan2는 cGAN, CycleGAN의 한계를 극복하고자 연구된 새로운 비지도 방식의 이미지 간 변환 방법
- 전이학습
전이학습은 사전 학습된 모델의 가중치를 사용하여 새 모델을 학습하는 방법 → 시간, 자원 줄일 수 있음
원본 이미지에서 target 이미지로의 변환을 효율적으로 수행할 수 있음을 보여줌
사례)
- FreezeD : Discirminator의 최고 해상도 레이어를 동결
- stylegan2-ada(적응형 판별자 증강 메커니즘): 제한된 데이터에서 훈련을 안정화 하는 메커니즘으로 GAN의 전이학습된 결과로 볼 수 있음
- FreezeG : generator 의 저해상도 계층을 동결하면 원본 이미지의 구조를 유지하는데 도움이 됨
- FFHQ generator 의 고해상도 레이어와 애니메이션 generator의 저해상도 레이어를 결합하는 스와핑 방법 제안
3. Method
3.1 FreezeSG
generator, style 초기(저해상도) 블록 freeze
FreezeSG가 FreezeG보다 원본 이미지의 구조를 더 잘 반영함을 보여줌
또한 FreezeSG + Layer swapping(스타일 혼합)이 FreezeG + ADA 보다 원본 이미지 구조 더 잘 반영
3.2 structure loss
FreezeSG 는 generator 의 저해상도 레이어의 가중치를 고정하기 때문에 저해상도 레이어에서 target generator의 layer와 layer swapping 을 할 때 좋은 품질의 이미지를 얻기 힘들다는 문제 해결하기 위해 사용
<adversarial loss (적대적 손실 함수)>
Generator는 loss function을 -∞로 최소화하려고 하고 Discriminator는 0으로 loss function을 최대화 하려고 함
<structure loss>
stylegan2의 아키텍처 중 input/output skip 를 채택하여 structure loss 구현
structure loss 는 다른 해상도에 해당하는 RGB 출력을 upsampling 하여 더하는 것
저해상도 layer 에 구조 손실 값을 적용하여 생성된 이미지가 원본 이미지와 유사하도록함
sturcture loss 함수는 source(원본 이미지) generator 의 RGB출력이 훈련중인 target 이미지 generator RGB출력과 유사한 값을 갖도록 조정하는 역할을 한다
- structure loss를 n번째 style block에 적용하고 싶을 때 먼저 각 해상도에 대해 source generator 와 target generator의 RGB출력을 모두 추출해야함
- n개의 style block이 있을 때 첫번째 항은 source generator의 k번째 style block의 RGB출력, 두번째 항은 target generator 의 k번째 스타일 block의 RGB 출력임. k는 style block의 인덱스임
즉, 모든 스타일 블록에 대해서 source generator RGB 출력- target generator RGB출력의 차이 평균을 구한 것이 sturcture loss 이다.
structure loss를 generator 손실 함수에 적용
discirminator의 손실함수는 적대적 손실함수에 - 를 붙인 값이고
generator 의 손실함수는 적대적 손실함수 + λ*구조손실함수
여기서 λ는 source 이미지의 상대적인 중요성을 조절하는 하이퍼 파라미터로 이 연구에선 1로 설정
sturcture loss 함수로 source generator, target generator 의 초기 레이어에 대한 학습이 잘 이루어져 최적화 되었기 때문에 턱, 머리와 같은 영역의 이미지가 FreezeD+LS 보다 잘 이루어진 것을 볼 수 있음
4. experiment
4.1 datasets
<source domain dataset>
FFHQ 데이터 세트, 사람의 고품질 이미지 데이터 셋, 70,000개, 256 x 256 해상도로 모델 사전 훈련
<target domain dataset>
Naver webtoon, Metface, Disney 데이터셋 이용, 모든 데이터를 256 x 256 해상도로 모델 사전 훈련
4.2 training details
generator 와 style 벡터의 초기 block을 freeze한 다음(freeze SG) stylegan2 모델을 미세 조정하여 모델을 훈련시킴
discriminator의 loss function은 stylegan2와 동일하게 사용
256 x 256 이미지를 생성하는데는 generator의 2개의 스타일 블록(4x4, 8x8)을 고정
layer swapping을 적용할 때는 source generator의 저해상도 레이어(4x4 -64x64)와 target generator의 고해상도 레이어(64x64-256x256)을 혼합
또한 구조손실함수를 generator에 적용하여 학습
구조 손실함수는 source, target generator의 3개의 레이어에 적용하고 mse-loss를 손실함수로 채택
구조손실함수를 적용한다면 저해상도 레이어끼리도 swapping을 할 수 있기 때문에 단지 freezeSG 에 layer swapping을 했을 때보다 freezeSG + 구조손실함수 + layer swapping 했을 때의 결과물이 더 좋음
4.3 Result
해당 연구가 FreezeD+ ADA, Freeze G 보다 효과적이며 Freeze SG + LS(layer swapping)보다는 FreezeSG+structure loss+LS 를 한 것이 훨씬 자연스러운 이미지를 생성
5. Conclusion
향후 작업에서 레이어에 대한 조정이 필요할 것으로 보임
'데이터 > 딥러닝' 카테고리의 다른 글
[Code Review] Cartoon-StyleGAN: Fine-tuning StyleGAN2 for Cartoon Face Generation (0) | 2023.04.01 |
---|---|
[모두의 딥러닝] Chapter 5 | 딥러닝 활용하기 - 자연어처리(NLP) (0) | 2023.02.21 |
[모두의 딥러닝] Chapter 5 | 딥러닝 활용하기 - 컨볼루션 신경망(CNN) (0) | 2023.02.20 |
[모두의 딥러닝] Chapter 4 | 딥러닝 기본기 다지기 - 모델 성능 향상시키기 (0) | 2023.02.14 |
[모두의 딥러닝] Chapter 4 | 딥러닝 기본기 다지기 - 모델 성능 검증하기 (0) | 2023.02.14 |