작성자 : 동덕여자대학교 정보통계학과 한유진
<용어 정리>
attribute : 이미지에 내재된 의미있는 feature(특징)를 말합니다. ex) gender, age, hair color,,
attribute value : attribute의 특정한 값입니다. ex) gender의 attribute values -> male/female, hair color -> balck/blond/brown/,,/
domain : 동일한 attribute value를 가지는 이미지 셋 입니다. ex) gender가 male인 image들이 하나의 domain이 됩니다.
(a) D : x → {Dsrc(x), Dcls(x)}, D는 real image나 fake image가 들어오면 real인지 fake인지 구분함과 동시에 real image일때 해당 domain으로 분류해내는 것을 학습합니다. 즉, D는 source와 domain labels에대한 확률분포를 만들어 냅니다.
(b) G의 input으로 {input image, target domain}이 들어갑니다. 여기서 target domain은 label(binary or one-hot vector의 형태)로 들어가게되고, ouput으로 fake 이미지를 생성합니다.
(c) G는 original doamin label(원래 내가 가지고 있던 image의 one-hot vector)을 가지고 fake image를 다시 original image로 reconstruction하려고 합니다. 그래서 output이 원래의 input image와 유사하게끔 만들어진 이미지라해서 Reconstructed image라고 부릅니다.
(d) D를 속이는 과정입니다. G는 real image와 구분불가능하고 D에의해 target domain으로 분류될수 있는 이미지를 생성하려 합니다.(real image처럼 보이려고 노력)
그림에서는 Generator가 2개인것처럼 보이지만 한개의 Generator를 다른 용도로 2번 사용된 것 입니다.
미리보는 full objective! 이제 하나하나씩 살펴보도록 하겠습니다
2-1 domain classification loss of real images used to optimize D
real image가 들어오면 real image에 대한 original 도메인 값으로 분류되게하는 loss입니다. adversarial loss와 같고, 결국엔 이 Loss를 최소화시켜야 합니다.(D를 위해서 사용)
2-2 domain classification loss of fake image used to optimize G
target 도메인으로 바뀌어 생성된 이미지가 target domain으로 분류될 수 있게 이 Loss를 최소화 시켜야 합니다.(G를 위해서 사용)
~c = [c1, ... , cn,m]
(a) Generator : G의 역할은 다른 GAN과 유사하지만 input image x가 들어가면 output으로 G(x,s)가 나옵니다. style vector인 s는 AdaIN(Adaptive instance normalization)을 통해 주입됩니다. s는 도메인 y의 스타일을 대표하도록 밑에 나올 mapping network F나 style encoder E에 의해 만들어집니다.
(b) Mapping network : random latent vector z와 domain y가 주어졌을때 Mapping network인 F는 style vector s=Fy(z)를 만듭니다. 즉, domain y를 대표하는 latent vector z를 style vector s로 mapping해 줍니다. F는 다중출력 MLP로 구성됩니다.
(c) Style Encoder : image x와 domain y가 주어지면 E는 image x 에서 style information을 추출하는 역할을 합니다. s=Ey(x).
(d) Discriminator : D는 다중 출력 Discriminator입니다. D의 각 branch는 이미지 x가 real인지 fake인지 이진 분류할 수 있도록 학습합니다.
이전 method(StarGAN 등)는 input쌍으로 (image, target attribute)를 사용하고 원하는 속성으로 출력 이미지를 생성합니다.
해결방법 : multi-domain image-to-image translation인 RelGAN !
- 선택한 attribute에 대해 원하는 변경을 설명하는 상대 속성(relative attribute)기반 방식을 사용합니다. RelGAN은 각 속성의 변경에 따라 입력 이미지의 전체 속성을 알 수 있습니다.(한계점2 극복)
- 상대 속성(relative attribute)을 조건으로하는 G를 학습하기 위해 input-output 쌍이 상대 속성과 일치하는지 여부를 결정하는 matching-aware discriminator가 등장합니다.
- 이진 속성을 가정하므로 속성 보간용으로 설계되지 X -> 보간 품질을 향상시키기 위해 interpolation discriminator(보간 판별기)를 제안 -> 편집 전후 사이의 부드럽고 사실적인 보간은 각 속성의 강도 (ex. 갈색 비율)를 세밀하게 제어할 수 있습니다.(한계점1 극복)
- relative attribute
- (x,a^) —→ (x,v), v(relative attributes) △= a^ - a
- 상대 속성의 값은 각 속성을 변경하는 데 필요한 양을 직접 인코딩합니다. 특히, 0이 아닌 값은 관심있는 속성에 해당하고 0 값은 변경되지 않은 속성에 해당합니다.
- a : original doamin(n-dim), a^ : target attribute vector(n-dim)
출력 이미지 G (x, v)가 realistic하게 보일뿐만 아니라 x와 G (x, v)의 차이가 상대 속성 v와 일치해야합니다.이 요구 사항을 달성하기 CGAN의 개념을 적용하고 이미지와 conditional variables (x, v)를 입력으로받는 conditional discriminator인 DMatch를 도입합니다.
Dmatch는 real인 (x, v, x') 와 fake인 (x, v, G(x, v))를 구분하는것이 목적입니다.
real triplet (x, v, x') : 2개의 이미지 (x,x')과 relative attribute vector(v = a'- a)
주의! x와 x '는 서로 다른 속성을 가진 서로 다른 identities, training data는 짝을 이루지 않습니다.
wrong triplets을 추가함으로써 DMatch는 real triplet을 +1 (real&matched)로 분류하고 fake/wrong triplet을 모두 -1 (fake or mismatched)로 분류합니다.
3개의 dataset을 이용하여 256*256으로 resize
얼굴속성변환
보간
starGAN : https://hichoe95.tistory.com/39
https://www.youtube.com/watch?v=-r9M4Cj9o_8
https://hichoe95.tistory.com/39
starGAN v2 : https://comlini8-8.tistory.com/13
https://www.youtube.com/watch?v=KO_mOGKdxOw
http://kozistr.tech/deep-learning/2020/02/10/StarGANv2.html
https://wingnim.tistory.com/96
https://skyil.tistory.com/90
RelGAN : 생성모델 컨퍼런스 신민정님 자료
코드 https://github.com/willylulu/RelGAN
https://github.com/elvisyjlin/RelGAN-PyTorch
truncation trick https://myeonghui-deep.tistory.com/6
https://jayhey.github.io/deep%20learning/2019/01/16/style_based_GAN_2/
투빅스 13기 이예지:
이번 강의는 ‘Multi-domain image to image translation’으로, 한유진님이 진행하였습니다.
StarGAN v1
StarGAN v2
RelGAN
Multi-domain에 대한 다양한 접근을 알 수 있었습니다. 또한 어떻게 로스를 구상했는지 살펴보는 좋은 기회가 된 것 같습니다.
좋은 강의 감사합니다 :)
투빅스 14기 정재윤:
오늘은 투빅스 14기 한유진님께서 Multi-domain Image to Image Translation이라는 주제로 강의를 진행해주셨습니다.
지금까지의 image to image translation은 항상 2개의 domain에서 진행됐습니다. 그래서 domain이 3개 이상으로 늘어나게 되면 모델이 안정적으로 동작하지 않게 됩니다.
이런 점을 개선해서 나온 것이 StarGAN입니다. starGAN은 하나의 generator로 여러 domain의 이미지들을 생성해낼 수 있습니다. 알아둬야할 중요한 특징은 2개의 generator를 사용하는 것이 아닌 한 개의 generator를 다른 용도로 2번 사용한다는 점입니다.
starGAN의 loss 중 주의해야할 점은 domain classification loss를 포함한다는 점입니다. 이 loss는 input image와 target domain label을 input으로 넣을 때, 만들어지는 output image가 target domain으로 분류시키기 위한 것입니다.
이런 starGAN 역시 단점이 있었습니다. 각 domain에 대한 결정을 한 번에 하나씩 직접해야한다는 점과 데이터 분포에 대한 다양한 특성을 반영하지 못한다는 점입니다. 그래서 나온 것이 starGAN v2입니다. starGAN v2의 generator는 style vector를 AdaIN을 통해 주입하여 이미지를 만들어줍니다.
이미지 생성에 있어서 많은 발전을 했지만 세세한 조정은 여전히 불가능했습니다. 이를 가능케 한 모델이 바로 RelGAN입니다. RelGAN은 선택한 attribute에 대해 원하는 변경을 할 수 있는 relative attribute 기반 방식을 사용하여 속성 변경에 대해 반영정도를 조절 할 수 있습니다.
특히 interpolation loss가 인상적입니다. 이 loss는 생성된 이미지를 보간되지 않은 출력과 구별할 수 없도록 하는 정규화를 제안합니다. 하여 생성기는 판별기를 속여 생성된 이미지가 보간되지 않는다고 생각하게끔 만듭니다.
Multi-domain에 대한 다양한 모델과 발전과정을 순차적으로 알 수 있는 강의였습니다. 모델의 구조와 로스에 대해 쉽게 이해할 수 있었습니다. 감사합니다 😊
투빅스 14기 박지은
투빅스 14기 박준영
이번강의는 투빅스 14기 한유진님께서 StarGAN /ReIGAN을 주제로 진행해주셨습니다.
도메인수에 따라 Generator수가 증가하기때문에 여러가지 domain에 대한 단일 모델을 만들기 위해
starGan과 REIGAN이 나왔습니다.
StarGan은 단일 모델만을 사용하여 여러가지 domain들에 image-to-image translation가 가능하고 mask ventor를 이용하여 다른 domain을 동시에 학습시킬 수 있습니다.
Training the discriminator에서 real, fake를 구분하는 동시에 real image일때 domin으로 분류하는 것을 학습하여 source와 domain labels에 대한 확률분포를 만든다
original-to-target-domain Generator의 input으로 input image, target domain이 들어가 output으로 fake이미지를 생성하고
Target-to-original-domain Generator에서 domain label을 가지고 원본 이미지로 reconstrucion하는 과정으로 stargan이 이루어진것을 배웠습니다.
stargan의 loss는 adversarial loss, domain classification loss, reconstruction loss로 이루어졌다는 것을 배웠습니다.
domain의 image 한개를 target domain의 여러 다양한 image를 변경하고 특정 도메인에 대한 다양한 style들을 표현 할 수 있게 개선된 Stargan2가 나왔습니다.
stargan2는 Stylegan과 비슷하게 mapping networkF와 style encoder E로 style vector를 만들고 AdaIN으로 style를 입혔다는 점이 흥미로운 부분이었습니다.
RelGAN은 relative attribute 방식을 사용하여 각 속성의 변경에 따라 입력 이미지의 속성을 알 수 있게하였고 relative attribute을 사용하는 Generator를 학습하기 위해 input-output 쌍이 matching-aware discriminator를 사용하여 상대 속성과 일치하는지 판별하는 특징을 가진다는 것을 배웠습니다.
Multi-domain에 대해 많은 것을 배울 수 있었던 강의였습니다. 특히 loss 부분을 자세히 볼 수 있는 좋은 기회였습니다.
감사합니다!!
투빅스 12기 김태한
이번 강의는 투빅스 14기 한유진님이 StarGAN /ReIGAN을 주제로 강의해주셨습니다.
StarGAN과 RELGAN 둘다 domain의 크기가 증가함에 따라 generator의 개수도 증가하는 문제를 해결하기 위하여 탄생하게된 모델입니다.
StarGAN의 특징은 Image to Image translation이 가능하며 여러 domain에 대해 동시에 학습한다는 특징이 있습니다.
여기서 가장 큰 특징으로는 기존의 이미지를 reconstruction하는 loss가 있다는 것 같습니다.
loss가 굉장히 독특하며 adversarial loss, domain classification loss, reconstruction loss 총 3가지로 구성되어 있습니다.
다는 점이 흥미로운 부분이었습니다.
RelGAN의 경우 이미지의 속성을 반영할 수 있도록 generator를 학습하며 matching aware discriminator를 사용하여 input과 output이 대응되는 속성과 일치하는지 판별하는 특징을 가지고 있습니다.
multi-domain에서 loss를 여러 방면에서 조절함으로써 좋은 결과를 낼 수 있다는 것을 알 수 있었습니다.
좋은 강의 너무너무 감사합니다!!
투빅스 11기 이도연
지난 Image to Image Translation에서 다룬 Pix2Pix, CycleGAN에서 더 나아가 Multi-domain을 다루는 StarGAN과 RelGAN에 대해 다룬 강의였습니다. 좋은 강의 감사합니다!!
투빅스 14기 김민경
투빅스 13기 신민정
이번 세미나는 한유진님께서 Multi-domain Image-to-Image transaltion에 관해 강의해주셨습니다.
loss는 adversarial, domain classification, reconstruction loss가 사용됩니다. domain classification loss에서는 ACGAN에서의 class분류같이 domain분류를 하게됩니다.
mask vector를 이용하여 다른 domain을 가진 다른 dataset을 동시에 학습시키는 것이 가능합니다.
notation
RelGAN은 하나의 G와 세개의 D로 이루어져있습니다. G는 세개의 task를 모두 수행하고, 세개의 D는 각각 Task를 수행합니다. 세개의 D는 같은 구조로 이루어져 있습니다. orthogonal regularization으로 overfitting을 방지합니다.
이번 강의는 StarGAN과 RelGAN에 대한 내용을 다루었습니다. StarGAN에서 mask vector로 다른 datset을 한번에 적용하는 부분과, RelGAN의 loss로 multi-domain의 attribute와 interpolation까지 조절하는 부분이 인상깊었습니다.
투빅스 14기 김상현
이번 강의는 multi-domain image-to-image translation에 관련된 논문 리뷰 강의로 투빅스 14기 한유진님이 진행해주셨습니다.
StarGAN v1
StarGAN v2
RelGAN
multi-domain 이미지 변환의 GAN 모델들의 구조 및 손실함수를 통해 각각의 모델들의 학습방법을 전체적으로 이해할 수 있었습니다.
유익한 강의 감사합니다!