Path: blob/master/site/ko/tutorials/generative/cyclegan.ipynb
25118 views
Copyright 2019 The TensorFlow Authors.
CycleGAN
이 노트북은 CycleGAN이라고도 하는Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks에 설명된 것처럼 조건부 GAN을 사용하여 쌍으로 연결되지 않은 이미지 간 변환을 보여줍니다. 이 논문은 한 쌍의 훈련 예제가 없을 때 하나의 이미지 도메인의 특성을 포착하고 이러한 특성이 다른 이미지 도메인으로 어떻게 변환될 수 있는지 알아낼 수있는 방법을 제안합니다.
이 노트북은 독자가 Pix2Pix 튜토리얼에서 배울 수 있는 Pix2Pix에 익숙하다고 가정합니다. CycleGAN의 코드는 비슷하며, 주된 차이점은 추가 손실 함수와 쌍으로 연결되지 않은 훈련 데이터를 사용한다는 점입니다.
CycleGAN은 주기 일관성 손실을 사용하여 쌍으로 연결된 데이터 없이도 훈련을 수행할 수 있습니다. 즉, 소스와 대상 도메인 사이에서 일대일 매핑 없이 한 도메인에서 다른 도메인으로 변환할 수 있습니다.
이를 통해 사진 향상, 이미지 색상 지정, 스타일 전송 등과 같은 많은 흥미로운 작업을 수행할 수 있습니다. 소스와 대상 데이터세트(단순히 이미지 디렉토리)만 있으면 됩니다.
입력 파이프라인 설정하기
생성기와 판별자 가져오기를 지원하는 tensorflow_examples 패키지를 설치합니다.
Pix2Pix 모델 가져오기 및 재사용하기
설치된 tensorflow_examples 패키지를 통해 Pix2Pix에서 사용되는 생성기와 판별자를 가져옵니다.
이 튜토리얼에서 사용된 모델 아키텍처는 pix2pix에서 사용된 것과 매우 유사합니다. 몇 가지 차이점은 다음과 같습니다.
CycleGAN 논문에서는 수정된
resnet
기반 생성기를 사용합니다. 이 튜토리얼에서는 단순화를 위해 수정된unet
생성기를 사용합니다.
여기서는 2개의 생성기(G 및 F)와 2개의 판별자(X 및 Y)를 훈련합니다.
생성기
G
는 이미지X
를 이미지Y
로 변환하는 방법을 학습합니다. ParseError: KaTeX parse error: Expected 'EOF', got '&' at position 8: (G: X -&̲gt; Y)생성기
F
는 이미지Y
를 이미지X
로 변환하는 방법을 학습합니다. ParseError: KaTeX parse error: Expected 'EOF', got '&' at position 8: (F: Y -&̲gt; X)판별자
D_X
는 이미지X
와 생성된 이미지X
(F(Y)
)를 구별하는 방법을 학습합니다.판별자
D_Y
는 이미지Y
와 생성된 이미지Y
(G(X)
)를 구별하는 방법을 학습합니다.
손실 함수
CycleGAN에는 훈련할 쌍으로 연결된 데이터가 없으므로 훈련 중에 입력 x
와 대상 y
의 쌍이 의미가 있다는 보장이 없습니다. 따라서 네트워크가 올바른 매핑을 학습하도록 강제하기 위해 저자들은 주기 일관성 손실을 제안합니다.
판별자 손실 및 생성기 손실은 pix2pix에 사용된 것과 유사합니다.
주기 일관성은 결과가 원래 입력에 가까워야 함을 의미합니다. 예를 들어 문장을 영어에서 프랑스어로 번역한 다음 다시 프랑스어에서 영어로 번역하면 결과 문장은 원래 문장과 같아야 합니다.
주기 일관성 손실에서,
이미지는 생성기를 통해 전달되어 의 생성된 이미지가 만들어집니다.
의 생성된 이미지는 생성기를 통해 전달되어 의 순환 이미지를 생성합니다.
및 사이에서 평균 절대 오차가 계산됩니다.
위에서 볼 수 있듯이 생성기는 이미지를 이미지로 변환하는 역할을 합니다. ID 손실은 이미지를 생성기에 공급하면 실제 이미지 또는 이미지 에 가까운 이미지를 생성해야 한다고 지시합니다.
말에서 얼룩말-말 모델을 실행하거나 얼룩말에서 말-얼룩말 모델을 실행하는 경우 이미지에 이미 대상 클래스가 포함되어 있으므로 이미지를 많이 수정하지 않아야 합니다.
모든 생성기 및 판별자의 옵티마이저를 초기화합니다.
체크포인트
훈련하기
참고: 이 예제 모델은 이 튜토리얼에 적합한 훈련 시간을 유지하도록 논문(200)보다 적은 epoch(10) 동안 훈련되었습니다. 생성된 이미지의 품질은 훨씬 낮습니다.
훈련 루프가 복잡해 보이지만 네 가지 기본 단계로 구성됩니다.
예측을 얻습니다.
손실을 계산합니다.
역전파를 사용하여 그래디언트를 계산합니다.
그래디언트를 옵티마이저에 적용합니다.
테스트 데이터세트를 사용하여 생성하기
다음 단계
이 튜토리얼에서는 Pix2Pix 튜토리얼에서 구현된 생성기 및 판별자부터 시작하여 CycleGAN을 구현하는 방법을 알아보았습니다. 다음 단계에서는 TensorFlow 데이터세트와 다른 데이터세트를 이용해 볼 수 있습니다.
결과를 개선하기 위해 더 많은 epoch 동안 훈련하거나 여기에 사용된 U-Net 생성기 대신 논문에 사용된 수정된 ResNet 생성기를 구현할 수도 있습니다.