작성자 : 숙명여자대학교 IT공학전공 이도연
지난 강의들에서 Image-to-Image Translation(pix2pix, CycleGAN), Multi-domain Image-to-Image Translation(StarGAN, RelGAN)을 다뤘습니다. 오늘은 Unsupervised Image-to-Image Translation을 주제로 UNIT, MUNIT, FUNIT 등의 논문들을 요약 정리해보며 Image-to-Image Translation에 대해 조금 더 이해해 보고자 합니다. (참고로 여기서 말하는 unsupervised는 unpaired dataset을 의미)
이는 서로 다른 도메인의 이미지 pair가 하나의 동일한 latent space로 mapping 될 수 있다는 가정으로 아래와 같은 식들로 표현할 수 있다.
위 식에서 shared latent space를 통해 cycle-consistency도 설명할 수 있다.
Encoder-Generator pair는 VAE를 구성하고 있다. Encoder를 통해 image를 latent space z에 mapping 시키고 Generator를 통해 z에서 image를 복원한다.
두 VAE를 연관시키기 위해서 weight-sharing을 사용한다. 위의 (b) 그림에서 점선에 해당하는 부분이다. 하나의 latent space z를 공유하기 위해서 두 Encoder의 last few layers와 두 Generator의 first few layers에서 weight를 공유한다. 이것만으로는 같은 latent space를 공유한다는 것을 보장할 수 없지만 여기에 adversarial training을 통해서 하나의 latent space를 공유하게 된다.
Generator는 reconstruction stream에서의 이미지와 translation stream에서의 이미지를 생성하는데 reconstruction stream은 지도식으로 학습할 수 있기 때문에 translation stream에 대해서만 adversarial training을 한다.
E1, E2, G1, G2를 고정시키고 D1, D2를 학습하고 D1, D2를 고정시키고 E1, E2, G1, G2를 학습한다.
우리가 앞서 배웠던 GAN, VAE loss와 같다.
Multimodal을 위해 이미지에 대한 latent space가 content space와 style space로 decomposed 된다. 여기서 content space는 domain에 상관없이 공유하고 style space는 domain-specific 하다고 가정한다. 이를 통해 다양한 style을 입힌 결과를 보여줄 수 있다.
앞의 강의에서 다룬 내용들..(생략)
content와 style에 대해 content-the underling spatial structure, style-the rendering of the structure 라고 말한다. 두 도메인이 같은 content distribution을 공유하지만 다른 style distributions을 가진다.
(a) x1, x2 각각의 이미지가 style과 content로 나누어지고 다시 원래 이미지를 복구하는 Encoder, Decoder 구조
(b) x1에서 뽑아낸 content를 x2에서 뽑아낸 style을 입히면 x1->x2 image translation이 이루어진다.
한 domain 내에서 이미지가 content, style space로 mapping 되는 Encoder와 latent space가 다시 이미지로 mapping 되는 Decoder를 학습 시키기 위해 L1 reconstruction loss를 사용한다.
image - latent - image
latent - image - latent
기존의 GAN loss와 동일
여기서 λ 람다 값들은 reconstruction term의 중요도를 조절하는 weight이다.
bidirectional reconstruction loss와 같은 내용이지만 어떤 데이터 셋에서는 이걸 명시적으로 사용했을 때 유용하다.
several strided convolutional layers to downsample the input, several residual blocks to further process it
모든 convolutional layer들이 Instance Normalization(IN)을 한다. 즉 content 정보만 남긴다.
several strided convolutional layers, global average pooling layer and fully connected layer
Instance Normalization을 사용하지 않는다. IN 이 original feature의 평균, 분산 등 중요한 스타일 정보를 나타내는 것들을 없애기 때문에
AdaIN을 통해 style 정보를 content에 입힌다
AdaIN Parameters = (N, ) Shape Vector, β = mean(AdaIN Params), γ = std(AdaIN Params)
앞서 설명한 MUNIT에 기반해 few-shot을 가능하게 한 모델이다.
1. many source class images but few target class images
2. few target class images는 test time에만 존재하고 많은 다른 class로 이루어질수도 있다.
FUNIT의 목표는 source class의 image를 few target class image들로 본 적 없는 target class로 mapping 시키는 것이다. FUNIT을 학습시키기 위해서 object classes 이미지(class 간의 pair 등은 고려하지 않은 다양한 동물들의 이미지) 데이터를 사용했고 이를 source classes라고 한다. 그리고 test 때는 새로운 object class에 대한 few images를 target class로 한다.
어떤 source class든 target class의 이미지들에 맞게 변환되어야 한다.
conditional image generator G와 multi-task adversarial discriminator D로 이루어져 있다.
Generator의 경우 아래와 같이 content image x와 sef of K class images를 input으로 받는다.
Training을 할 때는 source classes에서 겹치지 않게 random으로 두 개의 class를 뽑아서 학습시킨다.
few-shot image translator G의 구조는 MUNIT에서 봤던 것과 매우 유사한데,
content encoder와 class encoder, decoder로 이루어져 있다.
content encoder는 input content image를 content latent code z로 mapping 시키고
class encoder는 각각의 class image 들에 대해 intermediate latent vector를 구한 후 mean을 구해 final class latent code z를 만든다.
Decoder에서는 역시 AdaIN을 사용한다.
class image들은 global look(object appearance), content image는 local structure(locations of eyes)를 조절하도록 한다.
Generator가 더 많은 source classes(more species of animals)로 학습할수록 few-shot 성능이 더 좋아진다.
논문에 나와있는 Discriminator 구조!
Discriminator가 multiple adversarial classification을 하는데 각각이 binary classification task로 input image가 real인지 판단한다.
S개의 source class가 있을 때 Discriminator에서 S개의 output이 나오는데 real 이미지에 대해서는 해당 class의 output이 false일때만, translation fake 이미지에 대해서는 해당 class의 output이 true일때만 D를 penalize한다.
Generator도 해당 클래스의 output이 false일때만 update 된다.
GAN loss, content reconstruction loss, feature matching loss로 이루어져 있다.
GAN loss에서 D 위의 첨자는 object class를 의미하고 loss는 오직 class의 binary prediction score에 의해 계산된다.
input content image와 input class image(K=1)로 같은 image를 사용해 input과 동일한 output image를 생성하도록 한다.
Discriminator에서 마지막 prediction layer를 제거한 feature extractor Df로 translation output과 class image들 사이의 특징(feature map)의 차이가 최소화 되도록 학습한다.
여기서 더 다루지는 못했지만,
이후 NVIDIA에서 이어서 나온 COCO-FUNIT과 이외에도 TUNIT, DUNIT 등이 있다.
간단하게 그림으로만 소개하자면,
COCO-FUNIT(Few-Shot Unsupervised Image Translation with a Content Conditioned Style Encoder)은 style code를 뽑을 때 content에 대한 정보를 함께 줘서 input image의 구조를 더 잘 보존한다.
TUNIT(Rethinking the Truly Unsupervised Image-to-Image Translation)은 지금까지 unpaired의 의미를 가지고 있던 unsupervised의 정의를 다시해서 아무런 label도 없이(domain label도 없이) image-to-image translation 하는 모델이라고 소개한다. Guiding network E를 통해 pseudo label을 만들어(Mutual Information 기반) 같은 pseudo label 이미지들은 비슷한 이미지가 생성되도록 한다.
DUNIT(Detection-based Unsupervised Image-to-Image Translation)은 이미지 전체를 하나로 보지 않고 detection을 통해 해당 부분의 디테일을 보존한다.
지금까지 UNIT에 대해 다뤄봤습니다!
더 알아보고 싶다면 아래 논문들을 참고하세요~
[UNIT] https://arxiv.org/abs/1703.00848 코드 : https://github.com/mingyuliutw/UNIT
[MUNIT] https://arxiv.org/abs/1804.04732 코드 : https://github.com/NVlabs/MUNIT
[FUNIT] https://arxiv.org/abs/1905.01723 코드 : https://github.com/NVLabs/FUNIT
[COCO-FUNIT] https://arxiv.org/abs/2007.07431
[TUNIT] https://arxiv.org/abs/2006.06500
[DUNIT] https://openaccess.thecvf.com/content_CVPR_2020/html/Bhattacharjee_DUNIT_Detection-Based_Unsupervised_Image-to-Image_Translation_CVPR_2020_paper.html
투빅스 14기 김상현
이번 강의는 UNIT(unsupervised image-to-image translation)관련 논문 리뷰로 투빅스 11기 이도연님이 진행해주셨습니다.
UNIT과 이를 발전시킨 unsupervised image-to-image translation model들에 대해 전반적인 이해를 할 수 있었습니다.
유익한 강의 감사합니다.
투빅스 13기 이예지:
이번 강의는 ‘Unsupervised Image to Image Translation’ 강의로, 이도연님이 진행하였습니다.
여기서의 unsupervised는 unpaired dataset을 의미함.
UNIT
MUNIT
FUNIT
이외로, COCO-FUNIT, TUNIT 그리고 DUNIT 등등이 있다.
UI2I에 대해 잘 정리해주셔서 너무 좋았습니다.
좋은 강의 감사합니다 :)
투빅스 12기 김태한
이번 강의는 unsupervised image to image translation에 대하여 이도연님께서 진행하여 주셨습니다.
좋은 강의 감사드립니다 !!
투빅스 14기 김민경
투빅스 14기 박준영
이번수업은 UNIT(Unsupervised Image-to-Image Translation)으로 투빅스 11기 이도연님께서 진행해주셨습니다.
UNIT은 unsupervised(unparied dataset) 문제를 다룬다.
두개의 도메인 이미지(x1, x2)를 각의 VAE에 데이터 셋을 넣고 이미지를 latent codes에 매핑시킨 뒤 이 공통된 latent codes를 각각의 generator에 넣어 x1 이미지는 x2로 만들고 x2이미지는 x1을 생성하게 한다.
이때 두 VAE를 연관시키기 위해서 weight -sharing을 사용하는데 두 encoder에 last few layers와 두 generator의 first few layers에서 weight를 공유한다. 여기에 adversarial training을 통해 하나의 latent space를 공유하게 된다.
Munit(Multimodal Unsupervised Image-to-Image Translation)은 latent space가 content space와 style space로 decomposed 되어 다양한 stlye을 입힌 결과를 만든다
loss는 기존의 gan loss와 동일한 adversarial loss, image-to-image하기 위한 loss, 변환된 이미지가 input 이미지에 대한 의미적 content를 보존하기 위한 content_loss, 주어진 다른 style code 들에 대해 다양한 결과를 내기위한 style_loss로 이루진다.
content decoder와 style encoder를 통과시키고 ADAIN을 통해 style 정보를 content에 입히는 decoder를 통해 이미지 생성
FUNIT(Few-Shot Unsupervised Image-to-Image Translation)는 MUNIT에 few-shot을 가능하게 했다.
FUNIT은 few target class image들로 본 적 없는 target class로 mapping 시키는 것이다. conditional image generator와 multi-task adversarial discriminator로 이루어져 있다.
conditional image generator는 input content image를 content latent code z로 mapping 시키기 위한 content encoder와 각각의 class image 들에 대해 intermediate latent vector를 구한후 mean을 한 final class latent code z를 위한 class encoder로 구성되어있다.
multi-task adversarial discriminator는 ADAIN을 사용하여 class image(apperance)에 content image(location of eyes)를 입힌다.
이외에도 coco-FUNIT, TUNIT, DUNIT 등 다양한 UNIT들이 있다
이번 시간에는 UNIT과 MUNIT FUNIT에 대해 배워보는 시간을 가졌습니다. Unsupervised Image-to-Image Translation에 대해 자세히 알 수 있는 유익한 강의였습니다. 감사합니다.
투빅스 13기 신민정
이번 세미나는 unpaired한 데이터셋에 대한 Unsupervised Image-to-Image Translation에 관한 내용이었습니다.
Shared Latent Space(서로 다른 도메인의 이미지가 동일한 latent space의 지점으로 mapping될 수 있다) 가정이 필요합니다. Image를 shared latent space로 mapping하는 Encoder와 shared latent space의 z에서 이미지로 복원하는 Generator의 구조로(VAE) 이루어져있습니다. 서로 다른 두 도메인이라면 두개의 VAE(E,G 도메인에 맞게 2개씩)와, Discriminator도 두개가 필요합니다. 두 VAE는 weight sharing을 합니다.두개의 E의 뒤쪽 layer들이 서로 weight sharing을 하고, 두개의 G의 앞쪽 layer들이 서로 weight sharing을 합니다. G와 D는 적대적학습을 하게됩니다. VAE와 D는 독립적으로 학습합니다.
multimodal UNIT은 latent sapce z가 아닌, domain에 상관없이 공유되는 "content space"와 domain specific한 "style space"가 존재합니다. 한 이미지에서 content와 style을 각각 뽑아냅니다.이를 인코딩이라고 하고, content와 style을 조합하여 이미지를 생성하는 것을 디코딩이라고 합니다. 두개의 이미지 ,가 있다면 두개의 content와 두개의 style이 뽑힙니다. 에 을 입히면 translation입니다. translation된(디코딩) 이미지에서도 contet와 style을 뽑아내어(인코딩) reconstruction을 확인합니다. image reconstruction과 latent(content/style) reconstruction을 모두 확인합니다.
FUNIT은 MUNIT에 few-shot learning을 적용한 모델입니다. 학습에 이용된 image clases를 source classes, 새로운 object class를 target class라고 합니다. 알고있는 source class의 이미지가 새로운 target class에 의 특성에 맞게 변환됩니다. G는 content encoder와 class encoder,decoder로 이루어져 있습니다. class class image 들에 대해 intermediate latent vector를 구한 후 mean을 구해 final class latent code z를 만들고, decoder에서는 AdaIN으로 class의 스타일을 입혀 이미지를 변환합니다.
이번 강의는 UNIT의 개념과, 발전한 MUNIT, FUNIT 등 다양한 unsupervised image-to-image translation에 관해 알 수 있는 유익한 시간이었습니다. 감사합니다.
투빅스 14기 박지은
투빅스 14기 정재윤
이번 주는 unsupervised image to image translation을 주제로 이도연님께서 강의해주셨습니다.
또한 coco-funit, tunit 등 여러 모델들을 쉽게 설명해주셨습니다. 좋은 강의 감사합니다.
투빅스 14기 한유진
이외에도 content와 style을 함께 넣어 style code를 뽑아낸 COCO-FUNIT, label없이 이미지 변환이 가능한 TUNIT, detection을 적용하여 선명한 이미지 변환을 시도한 DUNIT까지 그동안 배워보지 못했던 모델들을 접할 수 있었고 예시를 쉽게 들어주셔서 더욱 이해하기 수월했습니다. 유익한 강의 정말 감사합니다!