요약
중간발표이후 실제 논문리딩과 모인간 설계 명세를 토대로 TEXT TO IMAGE GAN과 IMAGE TO TEXT GAN의 연결과 관련하여 KERAS 기반으로 모델링 하고 학습을 시키고 있습니다.
TEXT TO IMAGE GAN의 경우 최초 256 * 256의 OUTPUT FEATURE를 만들어보려고 하였으나 파라미터의 수가 기하급수적으로 증가 64 * 64로 FEATURE 를 뽑은 후 STACKGAN을 하는 방향으로 선회 하였습니다.
word2vec을 이용한 문장 embedding에 대한 그 한계점을 실험적으로 체감하였고 그 한계점에 대한 개선가능성을 탐색중에 있습니다
text to image와 image to text GAN, 둘을 합치는데 필요한 로스함수의 정의 및 모델링은 두 모델의 결과를 확인한 후 TRANSFER LEARNING하기로 하였습니다.
향후 계획은 두가지의 역 도메인을 갖고있는 GAN을 연결하여 서로 경쟁학습을 유도해보는 것 까지를 생각하고 있습니다. 기존에 IMAGE TO IMAGE로는 관련 논문이 많이 있어서 그런것들을 기반으로 두개의 다른 DOMAIN이 아닌 두개의 다른 MODALITY를 갖는 모델간의 학습도 서로에게 성능개선을 제공할수있느지에 관련하여 실험해볼 생각입니다.
모델링 과 실험 결과 요약
TEXT TO IMAGE 모델의 학습은 MSCOCO DATASET을 기반으로 진행하였고 무작위 문장에 대해 학습하는 방식으로 진행하였습니다.
ex)
Two birds standing on the back of a giraffe. A tabby cat standing in a partially closed brown suitcase. A person holding a doughnut in their hand. Woman looking at lot that is filled with motorcycles A stoplight with a speed radar on top. An army airplane parked at the airport beside another airplane A train arrives in a residential area on a sunny day, THERE ARE TWO WHITE TOILETS THAT ARE IN THE BATHROOM a silver fork and some sliced carrots and fish There are people skiing down the snowy hill. Three zebra are grazing on grass in the field A train station with an eagle statue at the top. A man in a park area flying a kite A person is getting ready to serve a tennis ball. A group of basket ball players jumping into the air. Two fake zebras are composed of materials and placed on grass.
이런형태의 caption과 그것에 해당하는 이미지로 구성되어있습니다.
최조 모델의 경우 DCGAN의 틀을 따랐고 normalization의 경우 batchnormalization을 사용, optimazer는 SGD를 사용하여 모델링 하였습니다.
첫번째 text to image model 실험 결과 학습이 진행되는 과정에서 이미지가 사진의 형태를 거의 갖추게 되는 순간즈음 mode collapse 발생으로 학습을 중지하였습니다.
100 epoch
1000 epoch
1200epoch
두번째 시도한 모델의 경우 DCGAN의 틀을 따른상태에서 더 딥하게 쌓아올려보았습니다. normalization의 경우 batchnormalization을 사용, optimazer는 SGD를 사용 모델링 하였습니다.
epoch 100
epoch 300
학습간 mode collapse가 더 빨리 찾아왔는데 그 이유로 추측중인것은 일반적으로 GAN설계시 마지막 activation function을 tanh로 쓰는게 실험적으로 성능이 가장 좋다는것이 밝혀진것을 알고 있었습니다. 그것을 기반으로 최초 모델에서는 모델이 얕고 필터가 컸기때문에 activation을 마지막레이어를 제외하고도 tanh로 썻었고 학습에 무리없었음, 그런데 모델이 깊어짐에 따라 Vanishing gradient problem이 발생한것으로 보임니다.
세번째 시도한 모델의 경우 DCGAN의 틀을 따른상태에서 image to image translation분야에서 시도되고 있는 여러 스킬들을 조합해 보았습니다. normalization의 경우 Instance normalization을 사용, optimazer는 Adam를 사용 모델링 하였습니다. 모델의 깊이는 원래와 비슷한 수준으로 줄이고 필터사이즈를 늘렸습니다.
style transfer, pix2pix 등 cross domain gan과 관련된 시도들에서 BatchNormalization으로 들어오는 노이즈가 GAN 학습에 좋은 영향을 끼칠지 않좋을 영향을 끼칠지 장담하지 못하는 분위기인것으로 보이고 그 대용으로 Instance Normalization을 사용합니다. 전반적인 개선이 있었고
epoch 100
epoch 1000
기본적으로 성능에서는 가장 만족할만한 성적을 보이며 학습되고 있는 중이였고 1000epoch 즈음에 차앞에 서 사람이 서있는 보습을 흐릿하게나마 확인이 가능한 정도로 학습 성능이 개선되었습니다.
네번째 시도한 모델의 경우 세번쩨 모델과 image size와 resolution을 키우는 GAN 또는 VAE를 스택하려는 것을 시도하고 있습니다. 보시는 것처럼 모델의 아웃풋이미지가 상당이 작은데 그 이유는 컴퓨팅파워의 한계때문입니다. 따라서 64*64를 output feature로 하고 그것을 다시 인풋으로 받아 224* 224 또는 256 * 256으로 키우는 모델을 stack해서 stack GAN의 형태로 만들고 있는 중입니다.
해당 모델까지 테스트후 MSCOCO로 학습하는데 어떤 제한사항과 학습간 차이가 있을까라는 의문이 발생 조금더 좁은 차이를 보이는 데이터 도메인으로 바꾸어 학습하려고 시도하여 CVPRFLOWER 데이터를 활용 꽃사진과 꽃 설명을 가지고 TEXT TO IMAGE를 학습하였습니다.
ex)
the flower has yellow petals with orange mixed in the middle near the stigma
this small yellow flower has petals that are mostly yellow with small orange markings near the bottom of the petal.
this flower is yellow and red in color, and has petals that are small and rounded.
the yellow flower is seated one another and the red in the middle and there is a black round looking so pretty
these flat yellow flowers have rounded petals with orange centers.
there are smooth petals, which are mostly yellow with small areas of orange near the center of the flower.
this flower is yellow and orange in color, with multi colored petals.
a cluster of golden yellow flowers with a dark tan center.
a yellow flower with a red center and small yellow pistil.
this flower has yellow petals with orange dots in the center
이런 형태의 caption과 해당 이미지로 구성되어있습니다.
첫번째 시도에서는 D2GAN으로 명명되는 discriminator를 두개를 사용하여 학습하는 모델을 기본적인 틀로 사용하여 학습을 진행하였는데 discriminator를 늘릴수록 그 분해능이 늘어났더라는 실험적 논문을 읽고 테스트 해보았습니다.
BATCH_SIZE는 512로 하였고 output feature를 64*64*3이 되게 모델을 작성하였고 여러번의 실험을 진행하였는데 실험간 내부 convolution layer의 파라미터 설정 및 optimizor설정에 따라 결과가 민감하게 바뀌고 mode collapse도 더 자주 발생 온전한 결과를 보기 쉽지 않았습니다.
두번째 시도에서는 SNGAN을 이용하여 설계하였는데 discriminator부분을 SNGAN의 discriminator형태로 하고 generator부분을 deep convolutonal하게 설계하였고 기존에 시도와는 다르게 generator에서 앞단에 convolution레이어에 입력하기 전에 한번 normalization해주고 매 convolution레이어 이후에 넣었던 normalization부분을 여러 실험을 통해 빼보게 되었고 activation부분을 elu, leaky relu를 사용하던것을 다시금 tanh로 바꾸어 학습을 진행해보았습니다. 해당 모델에 따라 학습을 진행하였습니다.
600 epoch
3000epoch
두번째 시도의 경우 결과가 가장 자연스럽게 나오는 편이였는데 학습간 중요한 문제점을 발견하였습니다. word2vec 기반으로 sentence embedding을 만들어 해당 embedding vector를 input feature로 활용하였는데 해당 방법은 red petal with white stamen와 white patel with red stamen을 구별하지 못합니다. 엄밀히는 둘의 sentence embedding 값은 동일하게 생성되어버려서 이미지에서도 구별하기 어렵게 되버리는 문제가 있음을 확인하였고 해결 방법에 대해 고민중에 있습니다.
이 이유는 word2vec으로 phrase를 만드는 원리에서 비롯하는데 각 embedding간 더하기 빼기로 각 단어가 의미하는 차이를 구별, 바꿀수있는데 이런 원리를 이용해서 특정 phrase의 embedding을 구할때 각 벡터의 합 또는 평균으로 표현하기도 그런 이유로 같은 words 집합으로 표현되는 다른 이미지들의 경우 같은 embedding을 갖게 되어버리는 문제가 발생합니다. 추후 해당부분에 대해 더 개선된 방법의 embedding 방법을 찾아보고 있습니다.
비슷한 이유로 MSCOCO set을 학습하는데 있어서 많은 어려움이 발생했으리라고 보았고 또한 단순한 generator로는 불연속적인 sentence vector를 GAN으로 학습하는데 있어서의 한계점도 어느정도 있는 것으로 느껴집니다.