728x90

AdaIN은 Style tranfer method로 기본적으로 사용되는 방법으로 이전의 style transfer method와 비교해볼때 속도도 빠르게 개선했고, 여러가지 스타일을 적용할 수 있다는 장점때문에 사용된다.

(이전에는 다양한 스타일을 적용 가능한 경우, 속도가 느렸고, 속도가 빠른경우는 다양한 스타일을 적용하기 힘들었다.)

 

아래표를 보면 알 수 있다.

 

(위 표의 Method를 설명해보자면 Gatys - 최초 논문, Ulyanov - Instance Normalization(IN), Dumoulin - Conditional Instance Normalization(CIN), our - Adaptive Instance Normalization (AdaIN) 이다.)

 

 

 

Architecture

 

AdaIn 네트워크 구조는 위와 같다. 녹색 VGG의 pretrained model을 이용해서 encoding을 수행하고, 이 encoder를 이용해 featrue을 인코딩할 때, 그리고 Loss function을 구할 때 사용한다.

 

중요한 점은 VGG encoder는 encoding에만 이용되고 학습은 시키지 않는다.

 

그러므로 위 그림에서 학습되는 것은 Decoder뿐이다. 

 

AdaIn layer

 

AdaIn layer를 이해하기 위해서는 Style transfer의 용어 및 개념을 알고 있어야 한다. Style transfer는 특정 이미지에서 style을 뽑고, 다른 이미지에서 content를 뽑아서 이를 합성한다.

 

여기서 Content란 형태나 shape라고 생각하면 좀더 쉽다. 예를들어 나무의자라고 하면, 나무는 style, 의자가 content라고 생각하면 된다.

 

AdaIn에서는 Style과 Content에 대한 정보를 VGG Encoder를 통해서 추출할 수 있다고 주장한다. 

 

이는 초기 연구인 Gatys의 연구에서부터 사용되어 왔는데, 

이때는 VGG에서 나온 feature에서 Gram matrix를 이용하여 feature map간의 관계를 나타내면 이것이 style에 대한 정보를 담고 있다는 것을 초기연구에서 보여주었다.

 

Gram Matrix는 feature map 간의 elementwise곱을 이용하여 각 feature map간의 유사도를 표현하고 이를 matrix로 표현한 것이다. (대칭행렬로 나옴) 

 

옛날의 style transfer model의 경우, noise로 부터 학습시키려는 content 이미지와 content loss를 줌으로써, content를 생성하고, style loss를 줌으로써, style을 생성한다. 

 

이때, content는 각 feature map의 요소별로 L1 distance를 줄이는 방식으로 만들고, style은 위에서 설명한 gram matrix간의 distance를 줄임으로서, 생성하게 된다.

 

(자세한 건 아래 링크 pdf 참고)

http://dmqm.korea.ac.kr/activity/seminar/235#:~:text=Gram%20matrix%EB%9E%80%20Flatten%20%ED%95%9C,%EC%9D%B4%20%ED%8A%B9%ED%9E%88%20%EC%9D%B8%EC%83%81%EC%97%90%20%EB%82%A8%EC%95%98%EB%8B%A4.

 

고려대학교 DMQA 연구실

고려대학교 산업경영공학부 데이터마이닝 및 품질애널리틱스 연구실

dmqa.korea.ac.kr

 

Gram matrix를 feature map간의 관계(유사도)를 나타낸 행렬로서 style을 담고 있다는 것이 실험적으로 밝혀졌고, gram matrix뿐만 아니라 feature map의 평균과 분산이 style에 대한 정보를 가지고 있다고 실험적으로 밝혀지게 되었다.

 

이러한 연구는 추후 style transfer 연구에서도 나타나게 되는데 순서는 다음과 같다.

 

 

먼저 우리가 자주 사용하는 batch norm을 살펴보자.

 

batch norm의 경우, 학습과정에서 생기는 internal covariant shift를 해결하기 위해 만들어진 기법으로, 위 그림처럼  batch size의 전체를 기준으로 각 채널별로 H,W에 대한 평균, 분산을 구해서 표준화(standardization)를 해서 학습을 한다.

 

https://lifeignite.tistory.com/47?category=460775 

 

Batch Normalization을 제대로 이해해보자

notion으로 보면 더 편합니다. www.notion.so/Batch-Normalization-0649da054353471397e97296d6564298 Batch Normalization Summary www.notion.so 목차 Summary Introduction Background Normalization Covariate..

lifeignite.tistory.com

 

instance norm의 경우, 이러한 표준화를 batch size가 아닌 instance별로 행하는 것을 의미하며, instance별로 각 채널의 평균 분산을 구해서 그 값을 이용해 각 채널을 표준화 해주는 것을 의미한다.

 

 

여기서 instance norm의 이야기를 왜 하냐면 Ulyanov가 쓴 논문에서 기존의 style transfer task에서 batch normalization을 instance normailzation으로 바꾸는 것만으로 style transfer task의 성능이 크게 향상되었기 때문이다.

 

 

 

이러한 결과에 힘입어 Conditional Instance Normalizatrion 또한 제시되었다.

 

 

CIN은 affine parameter γ,β를 style에 관계없이 하나만 학습시키는 것이 아니라, style별로 다르게 학습시키는 방법을 택한다. training할때, style image를 s개의 index 묶음으로 묶은다음, 

 

 

그렇기 때문에 Adain은 content 이미지 feature map에다가 style feature map의 평균과 분산을 적용함으로서, style을 변경해주는 방법이다. 그렇기 때문에 s가 바로 style의 개수라고 볼 수 있는데, 결과적으로 놀라운 일은 네트워크가 같은 convolution parameter를 사용하면서, affine parameter만 변경한것으로 다른 스타일을 생성한다는 점이었다.

 

이러한 실험 결과들에 힘입어 instance normalization 과정 자체가 style을 normalization하는 것이라고 생각하게 되었다.

그리고 affine parameter를 적용함으로, 새로운 style을 적용가능하다고 생각하게 되었다.

 

그렇다면 CIN처럼 스타일의 개수를 한정하여 만들지 말고, affine parameter를 각 스타일마다 적용하면 어떻게 될까?

그게 바로 AdaIN(Adaptive Instance Normalization)이다. 

 

AdaIN은 기존의 Instance Norm의 affine parameter를 하나의 값으로 고정하거나,  한정된 개수 (CIN : 32개)로 만드는 것이 아닌 style 각각에 대해서 추출하여 적용한다.

 

 

이를 식으로 표현하면 다음과 같다.

 

 

이를 직관적으로 설명하면 다음과 같이 설명이 가능하다.

 

 

직관적으로, 우리가 feature channel을 특정한 스타일의 brushstrokes 을 detect하자고 하자. 이러한 stock는 이 feature를 위한 high average activation 를 생성할 것이다. AdaIN에 의해서 생성된 output은 contents image의 spatial structure를 유지하면서 이 feature를 위한 같은 high average activation를 가지게 될 것이다. 이러한 brushstrokes feature는 Fedd-forward decoder를 통해 iamge space로 inverted될 것이다. 이러한 feature channel의 variance는 더 미묘한 style imnformation을 encode할 수 있을 것이고, 이것은 또한 AdaIN output으로 전달되고, 최종적인 output image에 전달될 것이다.

정리하자면, AdaIN은 channel-wise mean and variance라는 feature statistics를 transfering함으로서 feature space상에서 style trasnfer를 수행한다.

 

 

이때 Loss function은 다음과 같이 구성된다.

 

 

여기서 L_c (content Loss)는 다음과 같다.

 

이때 g(t)는 decoder를 통해서 나온 이미지를 의미하며, 이를 VGG encoder에 다시 통과시켜 feature 형태로 변환한다.

그리고 기존의 AdaIN을 통과해 나온 결과 feature와 L2 Loss를 줌으로 decoder를 학습시킨다. (encoder는 고정)

 

Style Loss는 다음과 같이 적용한다.

ϕi.는 VGG-19의 i번째 레이어이다. 스타일로스에서 사용한 레이어는 relu1 1, relu2 1, relu3 1, relu4 1 이다. 이 역시 간단하게 설명하자면, 원래 스타일 s를 인코더에 넣었을 때의 i번째 feature ϕi(s)의 평균과 t를 디코더에 넣고 이를 다시 encoder에 넣었을 때의 i번째 Feature ϕi(g(t)) 의 평균(μ)과 표준편차(σ)를 최소화 시키는 방법으로 스타일 로스를 구한것이다.


Code 및 상세내용은 아래 블로그 참고

 

https://lifeignite.tistory.com/48?category=460776 

 

[논문 정리] AdaIN을 제대로 이해해보자

노션으로 보시면 더 편할 수 있습니다. www.notion.so/AdaIN-Arbitrary-Style-Transfer-in-Real-Time-With-Adaptive-Instance-Normalization-9fe8b5fb60154380b6fbe3147e0afe9e [논문 정리] AdaIN (Arbitrary Styl..

lifeignite.tistory.com

 

 

728x90

+ Recent posts