반응형

WGAN에서 Wasserstein distance라는 거리를 측정하는 것이 나오는데,

이게 어마어마하게 낯설고 겁이나는 개념이다.

그래서 한번 정리가 필요하다고 생각이 되어서,

용기를 내어 공부를 시작을 하였다.

시작을 하기전에 한국어 자료로 이렇게 엄청난 자료를 만들어주신 임성빈님에게 정말 감사하다. (자료: https://www.slideshare.net/ssuser7e10e4/wasserstein-gan-i )

 

 

 

GAN에서 discriminator가 학습 도중에 잘 죽는 현상이 나타나느데, 이를 해결하고자 하는 것이 이 논문의 내용이다. 그 해결법은 wasserstein distance라는 개념을 가져다가 사용을 한다. wasserstein distance가 뭐냐??

 

 

 

위의 내용이 Wasserstein distance의 정의다.

여기에서 는 두 확률분포 , P,Q의 결합확률분포(joint distribution)들을 모은 집합이고, 그 중에 

 

는 그 중 하나입니다. 즉 모든 결합확률분포  중에서 d(x,y)의 기댓값을 가장 작게 추정한 값을 의미합니다.

즉 두 확률분포의 연관성을 측정하여 그 거리의 기대값이 가장 작을때의 distancewasserstein distance라고 얘기를 합니다.

 

 

 

 

논문에 나와있는 Wasserstein distance의 정의는 다음과 같다.

위의 내용과 거의 흡사하다.

 

논문에서는 여러 가지의 distance들을 비교를 하는데, Z~U[0,1]인 것을 예를들어서 설명을 한다.

진짜 뭔말인지 모르겠었는데,

임성빈님의 슬라이드에서 정말 자세히 나와 있어서 다행이다.

결합 확률분포는 두 분포가 동시에 일어날 때의 사건에 대한 확률분포를 말한다.

이렇게 동시에 일어나는 확률에 대해서 우리가 그 각각의 거리가 최소가 될 때를 wasserstein distance라고 한다.

아래는 임성빈님의 슬라이드다. 한번 참고를 해보자.

 

 

Wasserstein GAN은 이 Wasserstein distance를 이용해서 GAN의 문제를 푸는 것을 특징으로 한다.

 

반응형
반응형

EBGAN


-Abstract

1. Introduction

1.1 ENERGY-BASED MODEL

LeCun 아저씨가 만든 개념. 

input space의 각 포인트를 single scalar로 mapping시키는 것을 energy라는 단어를 사용함.

학습이 제대로 되면 low-energy를 생성하고, 제대로 되지 않으면 high-energy를 뱉어낸다.

우리가 흔히 알고있는 supervised learning이 이 energy모델을 따르고 있다. 예를들어 학습을 시키려는 CNN의 경우에는 우리는 cross-entropy가 작아지는 방향으로, 즉 에너지가 작아지는 방향으로 학습이 진행을 시킨다. 이를 unsupervised learning에서도 적용을 하는것이다. low energy가 the data manifold에 영향을 준다.   contrastive sample이라는 용어가 종종 사용이 되는데 이 용어는 energy를 상승 시키는 특정 데이터 포인터를 말한다.

(CONTRASIVE SAMPLE 이라는 용어에 대해 좀 더 알아볼 필요가 있음)

supervised learning에서는 잘못된 Y를 지칭할테고, unsupervised learning에서는 low data density region을 얘기를 한다.



1.2 GENERATIVE ADVERSARIAL NETWORKS


GAN에 대한 설명을 함. GAN을 학습시킬때의 수렴에 대한 내용이 나오는데 원래의 GAN에서는 discriminator가 probability를 뱉어낸다. 그리고 게임이론의 관점에서 GAN을 바라보면, GAN의 convergence는 generator와 discriminator가 NashEquilibrium이 될때에 수렴을 한다고 해석을 한다.



1.3 ENERGY-BASED GENERATIVE ADVERSARIAL NETWORKS


위에서 설명한 Energy-model과 GAN을 합친게 이번 논문이다.

핵심은 discriminator를 기존의 probability로 바라보는것이 아닌, energy function으로 바라본다. 그렇게 되면, discriminator는 generater의 우리가 기존에 알고있는 cost function으로 된다. 그렇게 되면 discriminator는 데이터가 밀집되어 있는 곳에서는 low energy를 뱉어내고, 이런 region이 아닌 곳에서는 higher energy를 뱉어낸다.

generator의 관점에서 이 아키텍처를 바라보면은 generator는 discriminator가 low energy로 판별을 하는 data들을 생성을 해내는 학습이 가능한 파라미터가 있는 function으로 볼 수가 있다.


normalization이 이 에너지 모델에서는 없는데, 이게 아키텍쳐 측면에서나 트레이닝 측면에서 꽤나 큰 유연성을 가져다 준다.



이 논문의 contribution은 다음과 같다.

1) GAN 트레이닝시에 energy-based model을 사용함.

2) EBGAN의 generator는 내재된 데이터 분포를 따르는 지점을 생성한다. (hinge loss 의 증명에 따라)

3) energy가 reconstruction error인 auto-encoder architecture를 사용한 discriminator를 가진 EBGAN Framework.

4) EBGAN과 probabilistic GAN의 좋은 결과를 가져다준 hyper-paramerter 선택과 architectural 선택을 systematic하게 하였다.

5) ImageNet dataset(256x256)을 통해서 생성된 high-resolution 이미지 generation을 보여준다. (어떠한 multiscale approach 없이.)



2. THE EBGAN MODEL


2.1 OBJECTIVE FUNCTIONAL

objective function에 대해서 설명을 한다.

(Discrimination loss와 generator loss 두개)





2.2 OPTIMALITY OF THE SOLUTION

이 챕터에서 2.1섹션에서 말한 내용에 이론적으로 분석을 한다.

증명할 내용은 NashEquilibrium에 도달하면, Generator에서 

생성한 data들은 실제 dataSet에서 나온것들과 분포상으로 구별이 불가능하다는 것을 보여줄 예정이다. 



Theorem1, Theorm2를 통해서 증명을 하는데 겁나 어려움. 일단은 패스. 

아마도 NashEquilibrium이면 Generation된 부분과 실제 dataSet에서 차이가 없다는 것을 말한다.


NashEquilibrium : 게임에 참여하는 누구도 기존에 가지고 있던 전략을 바꿀 필요가 없는 상태를 말함



2.3 USING AUTO-ENCODERS





이 논문에서 Discriminator를 auto-encoder로 사용을 하였다.

(위에서 discriminator를 enery-model로 바꾼다고 했는데, 그것의 표현방법이 auto-encoder란다.ㅎㅎ)

논문에서 대충봤을때는 auto-encoder를 그냥 임의로 정했다고 생각이 들까봐 나름의 변명아닌 변명 2가지를 제시하였다.


첫번째는 auto-encoder를 사용을 하면 기존의 a single bit을 사용하는 것이 아닌, the reconstruction-based output을 제공하는데 이게 다양한 타겟을 제공을 할수가 있다는거다. 좀 더 쉽게 말하면 기존에 사용했던 binary logistic loss를 사용을 하면 두가지의 결과(두가지의 타겟을 의미)만 나타낼수 있는데, the reconstruction-based output은 더 많은 것들을 타겟으로 잡을수가 있다는 의미이다. 

binary logistic loss는 트레이닝시에 비효율성과 미니배치 사이즈를 줄여야 하는 단점이 존재한다.

그에 비해 reconstruction loss는 미니배치상에서 다양한 gradient direction을 생성을 하고, loss efficiency의 손실없이 큰 미니배치 사이즈를 가능하게 한다.


두번째 이유는 Auto-encoder는 전통적으로 energy-based model이라는 점이다.  나중에 우리가 볼 regularization term(2.3.1에 제시)을 학습을 시킬때에, auto-encoder는 supervision과 negative 예제없이 energy manifold를 배울수가 있다는것이다.(여기서 energy manifold는 latent space라고 얘기를 하면된다) 조금더 쉽게 설명을 하면 EBGAN의 auto-encoding model은 실제 샘플을 reconstruction하께끔 구성이 된다는 말이된다. 





2.3.1 CONNECTION TO THE REGULARIZED AUTO-ENCODERS


Auto-Encoder를 학습시킬때의 가장 일반적인 문제는 대부분의 값들이 0이 되는것이다. 이러한 문제를 없애기 위해서, 모델은 학습을 할때의 data manifold 밖에 있는 부분의 에너지가 높도록 학습이 강요한다. 

이론적으로나 실험적인 결과들은 이러한 것들을 regularizing the latent representation으로 해결을 하려고 한다. 

이 regularizer의 목표는 auto-encoder의 reconstruction power를 제한하는데 있다. 

그래서 input point의 작은부분에서만 low energy가 영향을 미치게 한다.


논문에서는 generator가 contrastive sample을 생성하면서 discriminator가 regularized 된다고 생각하고 있다.

이러한 관점에 논문에서 소개하는 EBGAN framework는 더욱 유연한 프레임웍이라고 말하는데, 이를 뒷받침하는 두가지 얘기를 한다.

1)) regularizer라고 말할수 있는 generator는 완벽하게 trainable되기 때문이고 (사람의 조작하는 부분이 전혀 없다)

2)) adversarial 훈련 방법은 contrastive sample이 만들어내는 이중성과 energyFunction의 학습 사이에 직접적인 상호교환을 가능케 한다.

 


2.4 REPELLING REGULARIZER


논문에서는 'REPELLING REGULARIZER'라는 것을 제안하는데,

한국어로 regularizer 격퇴하기(?) 쫓아내기(?) 뭐 이런 느낌으로 번역이 된다. (왜 쫓아내지????????)

이게 EBGAN의 auto-encoder model에 잘 어울린단다...뭔소리인지...

이 방법은 Pdata의 몇가지 모드나 한가지 모드에서안에서 clustered된 sample을 생성된 모델을 유지하면서 'REPELLING REGULARIZER"을 하도록 한다. (똑같은 철학으로 만들어진 또다른 방법인 "minibatch discrimination"이라는 것도 존재한다.)

repelling regularizer는 구현하는데 있어서 이는 Pulling-away Term(PT)이라고 불리우는 것과 연관이 있다.

논문에서는 PT Function이 나와있는데. (겁나 어렵게 생겼다....)

우리는 notation "EBGAN-PT"라는 notation을 여기서 사용을 합니다.  PT는 generator loss에서 사용이 되고, discriminator loss에서는 사용을 안합니다.








3. RELATED WORK

4. EXPERIMENTS

-4.1 EXHAUSTIVE GRID SEARCH ON MNIST

-4.2 SEMI-SUPERVISED LEARNING ON MNIST

-4.3 LSUN & CELEBA

-4.4 IMAGENET

5. OUTLOOK


APPENDIX A: TECHNICAL POINTS OF SECTION 2.2

APPENDIX B: MORE INTERPRETATIONS ABOUT GANS AND ENERGY-BASED LEARNING


APPENDIX C: EXPERIMENT SETTING

APPENDIX D: SEMI-SUPERVISED LEARNING EXPERIMENT SETTING


반응형
반응형

논문 : https://arxiv.org/abs/1703.10593


Cycle Gan이라고 불리우는 논문이다.

논문제목이 길어서 많이 놀랬는데, 그냥 CycleGan이라고 하면 나올줄 알았지만 그렇지가 않았다.

논문의 제목을 보자면 Unpaired와 Cycle Consistent가 눈에 띈다.

기존 도메인이 X라고 하면은 그것을 Y 도메인으로 넘기는 역할을 하는데 그때에 데이터를 생성하는 방법을 GAN으로 하겠다는게 이 논문의 골자이다. 그런데 우리가 기존에 살펴 봤었던 GAN의 문제점인 mode collapse를 cycle consistency 라는 방법을 통해서 해결(?)을 한것처럼 이 논문에서 보인다. 

우리가 고등학교때 배운 역함수의 개념이 여기서도 적용이 되는데,

G라는 함수에 X를 넣었을때 Y가 나온다면.

F라는 함수가 G함수의 역함수가라면 Y를 넣었을 때에 X가 나온다. 그래서 여기서는 Cycle consistency loss라는 개념을 사용해서 해당 함수가 역함수가 되도록 하는게 가능하게끔 한다.


여기서 paired training data 와 unpaired training data의 정의가 뭐냐면 해당 데이터 셋을 정의를 할 때, 짝이 존재를 하면 paired training data이고 짝이 존재하지 않고 홀로 존재를 하면 unpaired라는 단어를 사용한다.


 :  paired training data (supervised learning)

 : unpaired training data (unsupervised learning)



Cycle consistency 라는 것에 대해서도 좀 더 자세히 알아보자. 이 논문에서는 cycle consistency loss라는 것을 사용을 하는데, 이를 보면은 더욱 이해가 쉬울 것 같다.





위의 사진에서 (a)를 먼저 보자.  cycle consistency라는 X에서 Y로 바꾸는 함수를 G, Y에서 X로 바꾸는 것을 F라고 하면

X가 G를 통과하고 다시 Y를 통과했을 다시 X가 나오는 것을 cycle consistency라고 한다.

그런데 mode collapse라는 문제때문에 GAN에서는 이런 cycle consistency가 힘이 든다.

다시 사진에서 (b)를 보자. X가 G를 통과하고 다시 F를 통과했을 때의 상황을 보면, X가 나와야 되는데 그러지를 못하고 조금 다른 X2와 같은 것이 나오게 된다. 이때 원래의X와 X2의 차이를 우리는 cycle-consistency loss라고 부르고, 학습할때에 이 값도 포함한 objective function을 구성해서 학습을 진행을 하게 된다.



이 두가지 개념이 이 논문의 주축이다.

그러면 전체의 objective function은 어떻게 될까.

우리가 풀려는 식은 다음과 같다.



그리고 해당의 세부적인 함수의 모양은 다음이다.



이 식으로 학습이 시키면 cycle Gan이 학습이 된다고 한다.

(자세한 학습 파라미터와 같은 것들은 해당 논문의 implementation 부분을 참고하기 바람)







반응형
반응형


8장의 내용은 Optimization에 관한 여러가지 이론들을 소개하는 챕터이다.


학습에서 최적화문제라고 하는것은 제일 중요하고, 예전부터 있었던 딥러닝이라는 개념자체가 발전하지 못했던 이유가 

이 최적화 문제에 따른 여러가지 문제라고 생각이 된다.

많은 학습 방법론들이 나오는데, 기존에 알고 있었던것들도 있고 잘 몰랐던 부분들도 있고 정리를 하는것이 의미가 있어 보인다.






반응형
반응형

https://wiki.tiker.net/PyCuda/Installation/Linux/Ubuntu


홈페이지에 나와 있는 방법대로 하면됨



sudo apt-get install nvidia-cuda-toolkit nvidia-cuda-dev python-pycuda



pip install pycuda


반응형
반응형

논문 :  https://arxiv.org/pdf/1703.05192.pdf


공식소스:  https://github.com/SKTBrain/DiscoGAN



최근들어 많은 사람들에게 관심을 받는Gan의 한 종류인 DiscoGan 논문을 봤다.

한국의 sk-Tbrain의 논문인데 세계적으로 관심을 많이 받는 논문이여서 언젠가 꼭 한번은 공부하고 싶었는데

생각보다 늦게 논문을 접하게 되었는데 이제라도 보게 되서 다행이라는 생각이 든다.


GAN에 대해서 정확히 알지는 못하지만, 해당 논문을 어렴풋이 이해를 할수 있었는데 아이디어에 대한 발상과 구현이 참으로 재밌게 느껴진 논문이었다.


GAN을 만든 Goodfellow의 발상도 독특한데, Gan자체가 어찌보면 수학적으로 증명하기보다는 발상적인 접근으로 발전을 하고 있는것은 아닌지라는 생각을 가지게 된다. 그렇기에 학습을 시키기에는 어렵지만 효과는 좋은게 아닐까?? 그냥 내 생각을 주저리주저리 쓴다.


처음에 DiscoGan이라고 하기에, 뭐지 라고 생각을 했는데 Discovery-Gan의 준말이다. 논문 내용도 좋고 네이밍센스가 좋으니깐 더 이슈가 된건 아닐까 한다.


기존의 GAN은 새로운 무언가를 unsupervised하여 생성해내는 녀석이다.

그 새로운 무언가를 학습을 시키는데 사용되는 테크닉이 Generator와 Discriminator라는 툴을 이용해서 학습을 시킨다.

누군가는 그것을 만들고 그리고 그걸 감시하는 녀석이 존재하는 것이다.

여기서 우리는 한단계를 더 호기심을 가지고 들어가보자.

내가 어떠한 특징을 가지고 있는데, 그 특징을 가진 다른 영역의 물체를 만드는 것이다.

예를들어, 사자의 갈퀴가 너무나 마음에 들어서 그것을 내가 좋아하는 강아지도 이식을 시켜본다는 개념이다.

다른 영역에 존재하는 특징을 우리 영역으로 가져오는걸 말하는데 이를 cross-domain relations 이라고 얘기를 한다.


discoGan은 cross-domain을 GAN에다 적용을 한것이다.


늘 그래왔듯이 결론을 먼저보면 더욱 호기심이 자극되지 않을까?ㅎㅎ





INPUT을 특정스타일의 갖춘 가방을 넣어준다면 OUTPUT은 그 가방과 같은 스타일의 신발을 만들어내는것이다.

딱봐도 해당스타일의 옷과 스타일이 같은 다른 종류의 악세사리나 그런것에다 사용을 할 수있지 않을까?

이 재질로 옷을 만들거나, 다른 악세사리를 만들면 어떨까할때 우리가 데모로 테스를 하거나 할 수 있는 새로운 방법이 생긴것이다.

이외에도 정말 많은곳에 쓰일수 있겠지만, 이는 추후에 논의를 하고, 논문의 내용에 조금은 더 집중을 해보자.



위와 같은 cross-domain문제는 우리 인간에게는 생각보다 쉬운일이다. 누군가의 작품을 베껴서 나만의 새로운 작품을 만드는것은

생각보다 어렵지는 않다. 하지만 이를 컴퓨터에게 시키는 것은 생각보다 쉽지않은 일이다.

인공지능이 해당 기능을 하는 function을 만들어내는 일이라면, 수많은 어려움이 우리앞에 존재한다.

그래서 다른 도메인에 변환시키는 특정한 함수를 찾아내는것이라는 의미에서 discovery 라는 단어로 논문에서는 해당 네트워크를 설명을 한다.


논문에서는 몇가지의 믿음(?)이라고 할 수 잇는 것이 있는데,

우리가 현재 가지고 있는 input들은 바뀌려는 해당 domain을 나타낼수 있는 함수로 온전히 바뀔수 있다는 것이다.

다시 말하면, 우리가 가방을 신발영역으로 바꾼다고 했을때 모든가방도메인의 그림은 그의 대응하는 모든 신발도메인의 그림이 존재한다는것이다. 이러한 믿음(?)을 논문은 몇가지 실험을 통해서 증명해주고 있다.


모델에 대해 조금 더 알아보자.

 라는 notation이 나오는데, 이는 domainA에서 domain B로 바뀌주는, 즉 생성해주는 generator와 그 반대인 domainB에 있는 것을 domain A로 바꿔주는 Generator 함수를 각각 말한다. 이 두 함수는 서로 역함수의 관계를 가지기때문에 다음과 같은 연산이 성립이 가능하다.




입력이미지 x1를 B도메인으로 바꾸고, 다시 도메인 B에서 도메인A로 바꾼다면 원래의 input xA가 나온다는 것을 의미한다.

따라서 우리의 Generaor의 Loss Function은 원래 이미지xA와 위의 함수(A domain->B domian -> A domain)의 결과인 xA와의 차이를 줄이는 방향으로 generator를 학습을 시키면 된다.


 

 를 줄이는 방향으로 학습이 될텐데, Loss함수의 종류는 L1,L2, Huber loss가 있을것이다.


그런데 이렇게 쌩으로 distance를 줄이는 방향으로 학습이 진행이 되면

생각보다 학습이 안된다고 논문에서 말한다. 그래서 우리는 그대신 generative adversarial loss를 줄이는 방향으로 해당 lossFunction의 제약을 조금 덜고 학습을 시키게 되는데 그 식은 다음과 같다.




위와 같이 학습을 하려고 한다고 했을때에

조금은 큰 그림으로 DiscoGan을 바라보자.


일반적인 GAN모델에서 DISCO-GAN까지 큰 구조로 바라보고자 한다.


그러면 GAN-> GAN with reconstruction loss -> DiscoGAN의 방향에서 논문은 설명을 하고 있다.



(a)는 stand Gan의 구조를 설명을 한다. 입력이미지 xa가 generator를 통과해서 나온 Xab를 discrimator가 구별을 할수 있는지 판별을 하는것이다. 그리고 Disciminator를 학습하기 위해서 진짜이미지인 xb를 간간히 넣어줘서 discriminator를 학습을 시키기도 한다.




다음은 위의 Gan에서 조금은 cross-domain을 위해서 향상된 gan 네트워크이다.

위의 standard Gan과 달라진점은 GeneratorAB에 의해서 생성된 Xab를 다시 원래의 도메인영역으로 만들어주는 GeneratorBA에 집어넣고

이렇게 생긴 Xaba를 얼마만큼 기존의 Xa와 비슷한지 체크하지 위한 LossFuction인 LconstA를 측정하는 거다.

그래서 GeneratorAB의 lossfuction은 달라지게 된다.  기존에 얼마큼 잘 만들어졌는지 Discriminator에 의해서 얻게 되는 LOSS와 Reconstruction을 잘했는지 나타내는 LconstA의 합으로 나타난다.





그리고 Disriminator는 다음과 같은 LossFunction을 가진다.




그런데 이렇게 학습을 시키게 되면 도메인A->도메인B로 가는것은 제대로 되는데

도메인B->도메인A로 가는 방향에서는 mapping에 대한 부분에는 보장을 하지 못하는 문제가 발생을 한다(?)


이를 논문에서는 gan에서 자주 발생하는 mode collapse problem이라고 얘기한다.

논문에서 나와 있는 예시를 한번 보자.




우리가 생각하는 가장 이상적인 gan의 domain-change된 학습된 상태는 (a)의 상태이다.

자동차가 왼쪽을 바라보고 있다면, 얼굴을 가지고 있는 domain으로 변형을 한다면 얼굴도 왼쪽을 바라보고,

자동차가 오른쪽을 바라보고 있다면, 얼굴을 가지고 있는domainB에서는 오른쪽을 바라보는것이 딱딱 뭔가 맞아 떨어지고 기분이 좋은 완벽한 학습된 상태가 된다. 하지만 세상 일이 우리 맘처럼되면 모두가 행복해지겠지만, 이는 잘 일어나지 않는 일이다.

그래서 우리의 학습된 상태는 자동차가 왼쪽이나 오른쪽을 보는 두가지 상태 모두 그림(b)처럼 얼굴이 오른쪽을 바라보는 방향으로 바뀌는 것을 알수있다. 대략난감.......................... 어떻게 학습을 하는건데 이렇게 나와 버리면 짜증날것 같다.

이러한 문제가 reconstruction Loss를 추가한 업그레이드된 GAN의 네트워크에서도 나타난다.

왼쪽을 보는 자동차이던, 오른쪽을 보는 자동차이던 오른쪽을 바라보는 사람의 영역으로 바뀌게 되고,

사람을 다시 자동차의 영역으로 바꿀때 (우리가 위에서 말한 Gaba로 나온 결과를 말함) 한쪽 방향의 결과만 나오게 되어

이 아키텍처는 mode collapse를 탈출하지 못한다.ㅠㅠㅠㅠㅠㅠ


그래서 우리는 최적의 함수를 찾기위한 discovery가 필요하여 discoGAN이 나온다ㅋㅋㅋㅋ


다음은 DiscoGAN의 아키텍처 구조이다.


기존의 reconstruction loss를 가진 네트워크의 문제점은 뭐였나면, 한쪽 방향은 가능했는데, 양쪽이 안됐다는 거다. 그래서 고안한게

양쪽 방향이 가능하게, 즉 두가지의 const Loss를 가지면 어떨까하는 발상인거 같다.

위의 아키텍처를 보자.  

학습을 시킬때 두가지 네트워크를 가지는데 

Xa에서 부터 시작해서 Xab 그리고 다시 Xaba를 뱉어내는 네트워크와

Xb에서 부터 시작해서 Xba 그리고 다시 Xbab를 뱉어내는 네트워크를 동시에 학습을 시킨다.

그러면 각각 Gab와 Gba가 두개씩 생기는 이들은 서로 paramerter를 학습을 시킬때 공유를 하면서 학습을 하게 된다.

Generator는 이렇게 학습이 된다고 하면,

Discriminator는 어떻게 학습이 될까?

진짜 Xb인 그림과 Gab를 통해서 만들어진 Xab인 그림을 DiscriminatorB에 넣고 학습을 시키고,

진짜 Xa인 그림과 Gba를 통해서 만들어진 Xba인 그림을 DiscriminatorA에 넣고 학습을 시키는걸로 Discriminator도 학습 로직을 완성한다.


다음은 최종적인DiscoGan의 LossFunction 이다.




이 논문에서 사용한 LossFunction은 두개의 Loss GAN과 두개의 Loss const가 존재하기에

bijective mapping이 가능하고 일대일 대칭이 가능하게끔했다.


mode collapse의 문제를 해당 영역의 LossFunction을 추가함으로써 풀었다고 주관적으로 이해하고 있다.


최종결과는 논문을 참고하면 될듯하다. 끝.

반응형
반응형

논문 : https://arxiv.org/pdf/1606.00915.pdf



semantic segmentation에 관련된 또 다른 논문이다.


Deeplearning의 CNN 네트워크는 영상처리의 대부분의 문제에서 그 효과를 발휘하고 있다.

이전에 말했듯이 classification와 objectDetection 문제에서 꽤나 좋은 효과를 발휘를 하였는데,

이를 segmentation에 적용을 했더니 왠걸 여기서도 엄청나게 좋은 성능을 보이는 것이었다.

하지만 기존의 네트워트가 classification 문제에 적합하게 구조가 짜져있어서

이를 segmentation 문제에 적용하기 위한 여러논문이 나오기 시작하는데

이전에 봤었던 dilatedNet도 그중의 하나이고

이번 포스팅에서 살펴볼 deepLab의 연구결과도 마찬가지의 목적을 가진다.


결국은 연구의 방향은 무엇이냐면

CNN이 가지고 있는 한계점을 어떻게 극복하냐는 것이다.

우리가 classification 문제를 접할때는 그 이미지가 어떤 이미지인가만 살펴보면 된다.

구체적인 부분에 집중하지 않고 global한 대략적인 CNN이 가지고 있는 특징에 맞춰서 추상화된 의미를 찾을수만 있으면 되었다.

classification에서 장점으로 작용한것들이 segmentation에서는 단점으로 작용을 한것이다.

그렇다고 그 구조자체를 바꿀수가 없으니, 우리는 몇가지 트릭(?)이라고 할 수 있는 것들을 추가하여 그것을 극복해 나가면 된다.


segmentation논문을 볼때는 기존의 CNN이 가지고 있는 어떠한 문제를 정의를 하였고,

그것을 해당 논문은 어떻게 해결을 하려는 노력을 가졌는지에 집중해서 보면 생각보다 쉽게 접근 할 수 있을거라고 생각한다.


deeplab에서는 3가지의 문제점에 대해서 고민을 하였고, 나름의 해결책을 제시해주고 있다.


첫번째 문제점은 기존 CNN 네트워크를 돌렸을때에 feature resolution이 점점 작아지는 형상을 제시하였다.

CNN네트워크는 네트워크마다 그 세부적인 부분은 다르겠지만 stride와 pooling으로 인해 네트워크가 깊어질수록

feature들의 크기가 작아진다. 그런데 이는 classification에서는 중요한 부분에만 집중할수 있게된다는 장점으로 작용을 할수 있겠지만,

segmentation같이 해당 pixel당의 정확도가 중요한 문제에서는 이는 단점으로 작용을 하게 된다. 그래서 정확도를 높이기 위한 방법으로

해당 논문에서는 astrous convolution이라는 개념을 쓰면서 이를 해결하려는 모습을 보여준다. 말이 달라서 그렇지 이는 이전에 봤었던

dilated convoltution이랑 똑같은것이다. 내가 짐작하는 바로는 이 논문을 쓰는 deepLab팀과 이전에 소개했던 dilatedNet팀이 segmentation에서는 서로 경쟁을 해서 똑같은 개념이지만 다른 용어로 서로 신경전을 하는게 아닐까 추측을 해본다.


astrous convolution에 대해서 잠깐 설명을 하자면, 우리가 학습해야되는 parameter의 갯수는 고정이 되어 있는데, receptive field의 크기만 늘어나는 convolution 연산을 말한다.



위의 (a)부분의 그림이 기존의 convolution의 연산의 개념이다. 그런데 (b)를 보면 한칸이 띄워져 있는데 이는 학습해야될 파라미터마다 공간을 띄우고 그 공간에다 0으로 채워서 receptive field의 크기를 넓히는 효과를 가진다. 그러면 연산량은 기존보다 줄어들지만, 우리가 수용해야될 부분은 일정해지는 효과를 얻는다.


그러면 실제로 astrous convolution을 사용하면 어떻게 좋은지에 대해서 알아보자.


해당 그림은 논문에 fig3번 그림이다. 기존의 conv 연산을 통한 네트워크의 결과와 astrous conv연산을 한 결과를 보여준다.

기존의 방법은 receptive field의 확장을 위해 pooling을 통해 featuer사이즈를 줄인 다음에 conv연산을 시행하고 다시 키워주는 방식을 택했다.

하지만 astrous conv는 dilated된 필터를 사용하기 때문에 pooling과 같은 방법으로 데이터 손실을 발생시키지 않더라도 넓은 receptive field를 관찰을 할 수가 있다. 이를 통해 기존의 CNN이 가지고 있는 detail부족을 해결을 할수가 있는 것이다.



두번째 해결해야 될 문제는 서로다른 object크기인 물체가 존재하는 이를 찾는 알맞게 하는 방법이다.

어찌보면 object detection에서의 문제와 비슷해 보이나. 정확하게 어떤것이 다른지는 모르겠으나.

해결하는 방법은 조금 비슷하다. object detection은 boundary box를 정확히 취하는 것이고, segmentation에서는 같은 물체를 색칠하는 것을 목표로 하는데 말이다.

이 논문에서는 ASPP(Atrous Spatial Pyramid Pooling)이라는 방법으로 이 multi-scale문제를 해결하려고 한다.

이름에서 풍기는 냄새처럼 여기서도 Atrous conv를 사용하는데, 특정레이어다 여러개의 astrous convolution을 처리하는 분기를 만들고 이를 다시 취합하는 방식을 따른다.



Fc6번 레이어에다 rate가 {6, 12, 18, 24}인 astrous convolution을 각각 취하고 이를 Fc8이후에 결과를 합치는 방식이다.

이러면 여러개의 receptive field를 수용하여 여러크기의 물체를 인식하는데 좋은 결과를 가져온다.








세번째의 문제는 첫번째문제와 맞닿아 있는데 DCNN의 spatial accurary의 제한 문제이다. 줄였다가 다시 늘리는 방식을 취하다보니

정확한 포지션에다 그 문제를 해결을 하지 못하는게 문제가 된다. 그래서 논문에서는 fully connected CRF(Conditional Random Field)라는 후처리 방법을 통해서 문제를 해결을 한다.


아래는 이 논문네트워크의 전반적인 flow이다.






줄였다가 bi-linear interpolation방법을 통해서 늘리고 fully connected CRF로 더욱 정확도를 높이는 방식을 따른다.


그러면 마지막 부분에 대해서 조금 더 알아보도록 하자.




CRF방식을 사용하면 iteration을 하면할수록 그 정확도가 높아짐을 볼수가 있다. 이런 놀라운 일이!!!


아래는 CRF수식인데, 이 부분은 설명하기 어려워 해당 블로그의 원문을 그냥 옮긴다

(라온피플: http://laonple.blog.me/221000648527 )


CRF의 수식을 보면, unary term과 pairwise term으로 구성이 된다. 아래 식에서 x는 각 픽셀의 위치에 해당하는 픽셀의 label이며, i와 j는 픽셀의 위치를 나타낸다. Unary term은 CNN연산을 통해서 얻을 수 있으며, 픽셀간의 detail한 예측에는 pairwise term이 중요한 역할을 한다.

Pairwise term에서는 마치 bi-lateral filter에서 그러듯이 픽셀값의 유사도와 위치적인 유사도를 함께 고려한다.


위 CRF 수식을 보면, 2개의 가우시안 커널로 구성이 된 것을 알 수 있으며, 표준편차 알파,베타,감마를 통해 scale을 조절할 수 있다.

첫번째 가우시안 커널은 비슷한 위치 비슷한 컬러를 갖는 픽셀들에 대하여 비슷한 label이 붙을 수 있도록 해주고,

두번째 가우시안 커널은 원래 픽셀의 근접도에 따라 smooth 수준을 결정한다. 위 식에서 pi, pj는 픽셀의 위치(position)을 나타내고

li, lj는 픽셀의 컬러값(intensity)이다.

이것을 고속으로 처리하기 위해, Philipp Krahenbuhl 방식을 사용하게 되면  feature space에서는 Gaussian convolution으로 표현을

할 수 있게 되어 고속연산이 가능하다.




CRF 설명자료

1) Efficient Inference in Fully Connected CRFs with Gauissian Edge Potentials :

     http://swoh.web.engr.illinois.edu/courses/IE598/handout/fall2016_slide15.pdf

2)  Deeplab- semantic image segmentation

http://www.cs.jhu.edu/~ayuille/JHUcourses/ProbabilisticModelsOfVisualCognition/Lecture20DeepNetwork2/Pages%20from%20DeepMindTalk.pdf





이렇게 하면 DeepLab v2의 설명이 모두 끝난다.

성능기존보다 많이 좋아진것으로 알고 있는데, 자세한 사항은 논문의 결과를 보면 좋을것 같다.


반응형
반응형

1.


논문링크 :  http://people.csail.mit.edu/alevin/papers/Matting-Levin-Lischinski-Weiss-PAMI.pdf

식 유도 강의 : https://www.youtube.com/watch?v=Mvd93DdgqAY



이 논문에 대해 관심을 갖게 된 이유는 deep photo style transfer에서 regularization term으로 해당 논문의 내용을 사용했기 때문이었다


해당 논문에서 사용된 부분은 다음과 같은데



해당 Loss function의 제일끝 항인 Lm 부분에 이것이 사용이 된다.






Lm을 좀 더 자세히 보면 위와 같은 모양이 되는데, Laplacian Matrix가 존재하는 부분은 가운데 있는 M 부분이다.

조금 더 해당 식을 쪼개서 생각을 해보면,

각 채널 별로 연산을 한 결과합을 regularization term의 값으로 가진다.

이것을 최소화 시키는 방향으로 학습이 진행이 될것이다.


해당  사용을 하려면, 일단은 Laplacian Matrix를 찾아야 되는데 연산량이 많다. 대략 난감이다 이런부분은 ..ㅎㅎㅎ

해당 style transfer를 진행을 하려면 matting Image의 matrix가 필요하다는 결론이 나오는데,

각각의 foreGround를 뽑아내는 메트릭스가 필요하다는 얘기와 동일하다.

여기서 참으로 걱정이 된다. 실서버를 만들기 위해서는 속도가 중요한데 여기서 막혀버리는건가 라는 생각도 든다...ㅎㅎㅎ

일단은 한번 구현을 해보는것을 목표로 하자.



<17.08.07 - 2nd >


Matting이란 무엇인가?

이미지에서는 background와 foreground가 존재하는데, matting은 foreground만 뽑아내는 기술을 말한다.


Matting이라는 부분도 정말 따로 특화된 부분인건 맞는데, 이에 맞는 자료가 많이 없다.

그래서 정말 접근하기가 힘들다.

그런데 그나마 접근이 가능한 영상이 있는데, 유투브가 쩔음


https://www.youtube.com/watch?v=Mvd93DdgqAY&index=3&list=PLuh62Q4Sv7BUJlKlt84HFqSWfW36MDd5a


이 영상에서 그나마 논문을 쉽게 설명해줘서 이해하기 쉬웠음.



이미지 픽셀 하나하나는 전부 foreground와 background의 특정한 비율로 나눌 수가 있다.




여기서 I를 우리가 찾는 픽셀, 그리고 F와 B를 각각 전면과 배경이고, 그 비율을 알파라고 한다.


이 식을 우리는 R,G,B 3가지 채널로 나눈다면 총 7개의 미지수가 존재하는데  이 방정식을 풀기 위해서는 조건이 부족해서 풀수 없는 방정식이다.

그렇기에 우리는 몇가지 조건들을 넣어서 이 식을 풀수 있는 방법으로 접근을 하는데

그게 scribble이라고 말하는 사용자들의 낙서를 input으로 받아서 문제를 해결을 한다.


본격적으로 하기 전에 몇가지 가정들에 대해서 알아보도록 하자


1) color line assumption

작은 window안에 있는 background와 foreground 색깔들은  RGB공간에서 직선거리 위에 존재해 있다는 가정을 바탕으로 한다. 

그렇게 되면 다음과 같은 식이 나온다.





각각의 Foreground와 Background가 배경에 대하여 다른 두 점을 통해서 나타낼 수 있다는 뜻이 된다.

그러면 한 픽셀은 다른 두 점의 선형관계로 나타낼수 있다는 뜻이 되는것이기도 하다.


위의 가정이 맞다고 하면, 우리가 구하려는 알파는 Image pixel의 선형 관계로 나타낼수가 있는데, 이 부분도 나름의 증명 과정이 필요하다.

(일일히 수식으로 적기가 어려워, 노트필기 부분을 사진으로 올립니다. 자세한 과정은 위의 유투브에 그 부분이 나옵니다)




이렇게 증명을 해서 알파는 이미지 픽셀의 선형관계로 나타낼 수가 있게 되었다.


그러면 이렇게 증명한것이 matting에 어떻게 쓸수가 있기에 증명을 한것일까??


우리가 실제로 저렇게 구한 선형관계의 알파와 실제 알파와의 차이가 최소가 되는 a*,b*를 찾는 과정을 가진다.

그리고 F와 B를 constant라고 가정하면,

최소가 되는 알파를 구하면 모든게 행복해지는 상황이 발생을 한다.






최소가 될때의 상황은 언제인가?

이것을 또 풀어보면





이렇게 된다

알파T * L * 알파 일때가 그 결과가 최소가 된다는 것이다.


위의 4번식의 최소값을 찾기위해 알파로 미분을 해보자.




그런데 이 식을 만족하는 eigen vector가 많게된다.

그래서 우리는 식을 제약해야되는데,

위에서 말한 scribble을 통해서 이것이 가능해진다.


예를들어 배경일때는 알파를 0으로, 전경일때는 알파를 1로 만드는 식이다.

이렇게 제약을 하면 우리는 최소값이 되는 알파를 구할수 있고,

그에 따른 laplacian matrix를 구할수 있게 된다.


이렇게 구해진 것은 J함수는 deepStyleTransfer에서 regularization으로 사용이 된다.











반응형
반응형

논문링크 :  https://arxiv.org/abs/1703.07511


Style transfer 중에서 가장 최근에 나온 논문이고,

성능도 사진수준까지 올라간 논문이다.

왜 그런지 모르겠으나, 나는 이미지쪽에 관심이 많이가고 계속적으로 연구를 하고있다.

그래서 정말 재밌게 읽은 논문이다.


이번에도 정리하면서 이 논문을 뽀개러 가봐야겠다.


원래의 style transfer의 문제점이 여러가지가 존재하였다.

하나는 optimization 문제였다.

이는 우리가 style transfer를 할때마다 학습을 그때그때 시켜야함을 의미했다.

그런데 우리의 최고형인 Justin Johnson이 이 문제를 하나의 네트워크로 만들면서 해결해버렸다.

킹왕짱인 우리형이다.

이 논문도 한번 정리를 해볼 생각이다.


또 다른 문제는 photorealism에 관한 문제이다.

style transfer는 처음에 봤을때 이쁘기는 하나 생각보다 뭔가 부족하다.

style을 내가 마음먹은대로 만들수도 없고, 그래서 네트워크가 만들어주는대로 바라만 보고 있어야 한다.

그러다보면 content와 style사이에서 trade-off관계가 생겨버리는데 우리는 이걸 제대로 컨트롤 할수가 없게되어


하늘content에 다른 건물style이 입히고 막 이러하다. 그렇기에 이번에 소개할 논문이 나오는 것이다.

style transfer의 성능을 사진수준까지 올리게 되는데 본격적으로 들어가기에 앞서서 한번 그 결과물을 보고 가는것도 흥미유발에 큰 도움이 될 것 같다.




왼쪽이 content이미지 그리고 가운데가 style Image, 그리고 마지막이 결과물이다.

진짜 content 이미지의 원래의 모습을 그대로 유지하면서 스타일 결과물을 만들어 내는 것이다.

놀랍다 진심이다.ㅎㄷㄷ



그러면 본격으로 논문뽀개기에 들어가보자.


이 논문은 두가지의 contribution을 가지고 있다.

첫번째는 style transfer를 하고 나서도, 컨텐츠 이미지의 구조가 그대로 살아 있어야 되는것.

두번째는 style transfer를 하더라도, 관계있는 style이 tranfer (semantic style transfer)가 그 목표가 된다.


첫번째 문제는 matting laplacian 알고리즘에서 영감을 받아서 해결을 가능하게 하였고,

두번째 문제는 semantic segmentation 방법을 이용해서 해결을 하였다.


matting laplcian은 regularization term으로 구현을 하였다.

논문에는 진짜로 제대로 설명이 안되어 있어서 아마도 이건 원래의 본 논문을 보고 제대로 이해를 해야되지 않을까 싶다



Our solution is to seek an image transform that is locally affine in color space, that is, a function such that for each output patch, there is an affine function that maps the input RGB values onto their output counterparts. 

Each patch can have a different affine function, which allows for spatial variations.
To gain some intuition, one can consider an edge patch.
The set of affine combinations of the RGB channels spans a broad set of variations but the edge itself cannot move because it is located at the same place in all channels.



번역 :

우리의 해결책은 색 공간에서 로컬 affine 인 이미지 변환, 즉 각 출력 패치에 대해 입력 RGB 값을 출력 상대에 매핑하는 affine 함수가있는 함수를 찾는 것입니다.

각각의 패치는 상이한 어파 인 (affine) 기능을 가질 수 있으며, 이는 공간적 변화를 허용한다. 직감을 얻으려면 에지 패치를 고려해야합니다.

RGB 채널의 아핀 조합 세트는 광범위한 변형 세트에 걸쳐 있지만 에지 자체는 모든 채널의 동일한 위치에 있기 때문에 이동할 수 없습니다






위의 term을 regularization으로 넣어주는데

Mi는 Input Image의 laplacian Matting matrix이고 , 

Vc[O]는 Output Image의 채널 c에 대한 vertorized version 이다.

(그런데 왜 이걸 써주는지는...본 논문을 봐야겠다. 이건 추후에..)



첫번째 문제는 regularization term을 이용해서 해결했고,

그다음 문제는 style transfer를 할때 예기치 않은 style들이 transfer 되는것을 좀 막고 싶다.

그래서 해결책이 뭐냐면 Neural Doodle이나 semantic segmentation 처럼 입력이미지에다 segmentation mask를 입혀서 label를 정하는 방식을 택합니다




위는 StyleLoss 수정판인데,  특이한게 gram Matrix를 기존에는 레이어꺼면 했다면, 여기서는 레이어와 채널별로 나눠서 해결을 했다.

그런데 자세히 읽어보면 C의 갯수도 semantic segmentation mask의 채널의 갯수이다. segmentic segmentation 별로 그 스타일을 맞추겠다는 굳은 의지를 보인다.


입력 이미지에 존재하는 " 고아 의미 라벨"을 피하기 위해, 우리는 기준 스타일 이미지의 라벨에서 선택할 수 있는 입력 의미론을 제약한다.
이것이 의미하는 바는 의미론적인 관점에서 잘못된 라벨을 야기할 수 있지만, 선택한 라벨은 "호수"와 "바다"와 같은 맥락에서 일반적으로 동등하다.
또한 결과가 우리의 regularization에 의해 제한되므로 분할이 픽셀 정확도가 낮아질 필요가 없다는 점도 관찰했습니다.




그래서 최종적으로 나온 Loss Function은 위와 같다.

이렇게 해서 학습을 시키면 우리가 원하는 결과물이 나올것이다.



반응형
반응형



1.

지난 포스팅에 이어서 Multi-Scale Context Aggregation by dilated convolutions 에 대한 코드를 잠깐 살펴보도록 해야겠다.


기본적인 소스는 https://github.com/nicolov/segmentation_keras 를 참고해서 돌려보았다.



이전에 얘기한것 처럼 본 논문은 context module과 frontend module(vggnet-16변형) 두개로 나눠지는데

각각에서 convolution net을 쓰는것이 아니라 dilated conv로 바꿔가면서 사용하는것이 특징이다


기본적이 input 사이즈와 output사이즈는 논문에 나와있는 방식을 그대로 따른다.

해당소스는 C=21로 고정하고 네트워크를 짰으며, Basic style이 아닌 논문에 나와있는 Large output channel로 소스가 구성이 된것만 알고 들어가면 쉽게 이해가 될것 이다.








dilated conv는 keras에서 기본적으로 제공해주는 api여서 더욱 쉽게 구현이 가능하다


소스코드의 대다수는 Convolution2D()함수를 사용해서 작성이 되었으나,

dilated conv는 AtrousConvolution2D()함수로만 바꿔주면 충분히 가능하다



conv: model.add(Convolution2D(64, 3, 3, activation='relu', name='conv1_1', input_shape=(input_width, input_height, 3))


dilated conv : model.add(AtrousConvolution2D(512, 3, 3, atrous_rate=(2, 2), activation='relu', name='conv5_2'))



해당 케라스 소스를 보기전에는 어떻게 dilated conv를 구현을 해야될까 걱정을 했었는데

소스를 보고나서 걱정이 사라졌다 ㅎㅎㅎ



그리고 하나 해당소스를 보면서 알게된것은 Pascal VOC라는 image segmentation전용 이미지데이터가 있다는 사실이다.

어떻게 segmentation을 학습을 시킬지 고민이었는데, 학습이 가능한 데이터셋이 있어서 다행이다.

좋은 세상이다. 이렇게 전부 학습이 가능하다니 말이다.


성능은 너무나 차이가 크다.

학습 데이터가 부족해서 그런거 같기도하다.





반응형

+ Recent posts