영상처리/딥러닝

CycleGAN

sumiin 2022. 7. 8. 09:18
반응형
SMALL

CycleGAN

 

CycleGAN의 문제 상황 : Unpaired 데이터셋 상황에서 GAN 손실 함수만 사용한다면?

  • 특정한 이미지 x가 주어졌을 떄, target domain Y 의 그럴싸한 이미지로 바꾸도록 학습할 수 있음
    • (x랑 y는 서로 매칭되어 있지 않은 상태 )
  • 매칭되는 y없이 단순히 이미지 x의 특성을 타겟 도메인 Y의 특성으로 바꾸고자 함 
  • 어떤 입력이든 y 도메인에 해당하는 하나의 이미지만 내보내려고 학습이 될 수도 있음 
  • 결과적으로 , 추가적인 제약조건이  필요

CycleGAN의 핵심 아이디어

  • Cycle-consistency loss를 사용
    • 이미지를 translation 시킬 때, 다시 원본으로 돌아올 수도 있도록 함 
    • CycleGAN은 G(x)가 다시 원본 이미지 x로 재구성될 수 있도록 함 
      • 원본이미지의 content는 보존하고 도메인과 관련한 특성을 바꾸도록 함 
      • G: X -> Y   F: Y -> X  (G와 F는 역함수 관계)
      • 목표 : F(G(X)) ~~ X    G(F(Y))~~Y
      • 한 쌍으로 묶이지 않은 데이터를 학습하기 위하여 사이클 손실을 이용
    • Gan loss는 일반적인 conditional loss와 동일
      • 그림 1-1) x가 생성자 G에 들어갔을 떄 y 도메인에 그럴싸한 이미지가 될 수있도록 생성자 G를 학습
    • Cycle loss는 원본 이미지로 다시 돌아올 수 있도록 가능한 특정 이미지와 매칭되는 Y이미지를 내보낼 수 있도록 하는 방식  
      • x domain으로 다시 돌아올 수 있도록 하는 방식 - Forward cycle consistency loss
      • y domain으로 다시 돌아올 수 있도록 하는 방식 - Backward cycle consistency loss

그림 1-1)

CycleGAN의 전체 목적 함수

  • Adversarial loss (GAN loss): target domain의 있을 법한 이미지를 생성하도록
  • Cycle-consistent loss : 입력과 매칭되는 image-to-image translation 결과 이미지를 찾을 수 있도록

  •  cycle loss는 말을 얼룩말로 바꾸고 이 변환한 얼룩말을 다시 말로 복원한 이미지와 진짜 말의 이미지의 차이
  • identity loss는 input을 얼룩말로 바꾼 generator 여기서는 즉 F에게 input으로 그냥 얼룩말을 주게 되었을 때 얼마나 똑같은 얼룩말이 나올것인지 그 두 이미지의 차이를 계산한것
  • identity loss를 추가해준 것이 진짜 이미지와 더욱 비슷한 색감을 가진 output을 냄

Identity mapping : when an image from the other domain is provided Generator, it is expected to generate

the same Image.

CycleGAN의 구현 (Architecture)

  • 네트워크 아키텍처
    • 잔여 블록을 활용하는 아키텍처 및 instancenormalization을 사용
    • 이미지 내 패치 단위로 진위 여부를 판별하는 판별자를 사용
  • 학습 방법
    • Least-squares loss : 기존의 cross-entropy 기반의 loss 대신에 MSE 기반의 loss를 사용
      • 실제 이미지 분포와 더욱 가까운 이미지를 생성할 수 있으며 학습이 안정화
    • Replay buffer : 생성자가 만든 이전 50개의 이미지를 저장해 두고, 이를 이용해 판별자를 업데이트
      • 모델의 oscillation을 개선

 

반응형
LIST