오늘 소개할 논문은 cyclegan을 활용해 segmentation task에서 domain adaptation을 진행한 논문이다. 

 

먼저 cyclegan을 이용해 source domain을 target domain으로 domain adaptation을 진행하고 target domain으로 스타일이 바뀐 source data로 segmentation 네트워크를 학습하여 실제 target domain에서의 성능을 높이는 방법이다. 

 

즉 전체 네트워크는 2 step이다. 

1. source data의 domain을 target data의 domain으로 바꾸기 (cyclegan)

2. target domain으로 옮겨진 source data'을 이용하여 segmentation 네트워크 학습시키기 (deeplab)

 

이런 2 step domain adaptation은 사실 이전에도 여러번 소개가 되었다. 

Dual Channel-wise Alignment Networks for Unsupervised Scene Adaptation(DCAN) 이나 cyCADA 논문도 위와 같은 형식이라고 알고 있다. 

 

그런데 이렇게 2 step으로 네트워크를 학습시킬 때 발생하는 문제점이 있다. 첫번째 step에서 Image Generator의 성능이 떨어진다면, 두번째 step에서의 성능이 결코 좋을 수 없다는 것이다. 즉, segmentation network의 성능이 image generator의 성능에 의해 한계점을 지니게 된다. 

 

본 논문에서는 위와 같은 한계점을 보완하는 방법을 제시한다. 

 

 

 

Contribution

 

논문에 제시되어 있는 자신의 논문의 기여는 다음과 같다고 한다.

 

"""

1. Bidirectional Learning System, which is a closed-loop to learn the segmentation adaptation model and the image translation model and the image translation model alternatively

 

2. Self-supervised learning algorithm for the segmentation adaptation model, which incrementally align the source domain and the target domain at the feature level, based on the translated results

 

3. New Perceptual loss to the image-to-image translation, which supervised the translation by the segmentation adaptation model

"""

 

1. 2step을 개별적인 단계가 아닌 유기적으로 이어지게 (closed-loop) 만듦으로써 앞뒤 스텝의 단점을 상호 보완 가능하게끔 만들었으며,

 

2. 두번째 스텝에서 self-supervised learning algorithm을 추가하였고,

 

3. 첫번째 스탭에서 두번째 스텝 네트워크를 활용한 perceptual loss를 추가하여 segmentation adaptation model로부터 training에 필요한 정보를 얻었다고 한다. 

 

 

 

Model 

 

 

전체 네트워크는 위와 같다. 

 

Image Translation Model을 통해 source data를 target domain으로 shift 한 후, 그 shift된 source data를 Segmentation Adaptation Model을 학습하여 결과를 얻는다. 그런데 Image Translation Model에서 Segmentation Adaptation Model 아웃풋을 이용한 loss인 perceptual loss가 추가된다. Segmentation Adaptation Model에서는 adversarial loss가 존재하고, 스스로 mask를 만들어 self-supervised learning을 진행한다고 하는데... 자세한 내용은 loss를 천천히 뜯어보면 알 수 있겠다. 

 

 

 

Loss

 

loss들을 같이 보기 전, 기억해야할 notation은 다음과 같다. 

 

source data = S

target data = T

translated source data by forward cyclegan = S'

translated target data by inverse cyclegan = T'

Image Translation Model (cyclegan generator) = F

cyclegan inverse generator = F-1

Segmentation Adaptation Model = M

 

 

첫번째 스텝인 image translation model로 cyclegan을 활용하였으며,

그 loss는 

image translation model loss

 

이다. 람다 GAN은 1, 람다 recon은 10 을 사용했다고 한다. 

 

하나하나 뜯어보자. 첫번째로 GAN loss이다. 

 

image translation model loss - GAN loss

S'과 T의 domain을 구분하지 못하도록. 또는 S와 T'의 domain을 구분하지 못하도록 만드는 loss이다. discriminator는 S'을 0으로, T 를 1로 구분하도록 학습하였으니, 반대로 generator는 S'을 1로, T를 0으로 라벨하여 loss를 얻는 것을 볼 수 있다. 

 

image translation model loss - Reconstruction loss

F를 통과하여 만들어진 S'을 다시 F-1 함수에 통과하였을 때, S로 되돌아오는지, reconstruction 되는지 확인하는 pixel-level loss이다. L1 loss를 사용하고 있다. cyclegan 논무에 따르면, 이 loss를 추가함으로써 generator F가 다시 되돌릴 수 있을 만큼만 이미지를 바꿔주어 이미지의 content를 보존할 수 있었다고 한다. 

 

 

image translation model loss - perceptual loss

논문의 핵심 특징 중 하나인 perceptual loss이다. 두번째 step의 segmentation model과 연결시켜주는 고리이기도 하다. segmentation adaptation model M을 마치 perceptual loss의 VGG 네트워크처럼 활용하여 S와 S'의 perceptuality, 그리고 F-1(S')과 S의 perceptuality를 줄이는 방향으로 학습한다. 람다 per은 0.1, 람다 per_recon은 10이다. 이러한 perceptual loss를 추가함으로써 segmentation adaptation model M이 가지고 있는 domain bias를 image translation model에서 보완해 줄 수 있게 된다. 

 

 

두번째 스텝인 segmentation adaptation model로 deeplab v2를 사용하였으며,

그 loss는 self-sueprvised loss의 유무로 두가지 종류가 존재한다. 

segmentation adaptation model loss without self-supervised loss

 

segmentation adaptation model loss with self-supervised loss

람다adv는 0.001이다. 

 

이번에도 하나하나 뜯어보자. 

 

 

segmentation adaptation model loss - adversarial loss

먼저 위 논문의 큰 특징 중 하나인 adversarial loss이다. image translation model 뿐만이 아닌 segmentation model에도 adversarial loss를 추가함으로써 image translation model에서 미처 줄이지 못한 source와 target 사이의 거리를 줄이는 방향으로 보완해 준다. 

 

 

segmentation adaptation model loss - segmentation loss

segmenatation model에서 항상 등장하는 cross entropy loss이다. domain shift 된 S'을 input으로 하여 얻은 M(S') 결과값과 segmentation label Ys 사이의 loss를 계산한다. 

 

 

segmentation adaptation model loss - self-supervised segmentation loss

마지막으로 핵심 loss인 self-supervised segmentation loss이다. target data label이 주어지지 않았을 때, 스스로 라벨을 형성하여 unsupervised learning을 진행한다.

학습이 덜 된 네트워크에서 나온 결과값을 정답값이라고 가정한다는 것이 아이러닉하게 들릴 수도 있겠다. 그러나, segmentation task의 특징을 잘 생각해 보자. 도로를 segmentation한다고 했을 때, 도로의 정 중앙이 도로에 속한다는 것은 쉽게 알 수 있지만, 도로의 가장자리, 즉 나무 또는 보도와 가까운 pixel일수록 도로인지 아닌지 판단하는 것은 어려워진다. 즉, 같은 segmentation task에서도 pixel마다 쉽게 class를 판단 가능한지 아닌지 난이도의 차이가 존재하기에 확률의 차이가 존재하게 된다.

따라서 높은 확률로 판단 가능한 쉬운 pixel에 대해서 우리는 sudo label을 만들 수 있다. 몇퍼센트의 확률로 class를 확신하면 sudo label로 설정할 것이지에 대한 threshold는 0.9로 정했다고 한다. 이렇게 정해진 threshold로 우리는 target data에 대한 sudo label을 구할 수 있고, 이 sudo label을 논문에서는 mask라고 부른다. figure 3에서 예시로 주어진 mask를 살펴보면 구분선은 검정색(0)으로 구분하기 어려운 곳이기 때문에 sudo label을 형성하지 못한것을 볼 수 있고, 특정 class의 내부는 흰색(1)로 구분하기 쉬웠기 때문에 sudo label이 형성되었음을 볼 수 있다. 이렇게 정해진 sudo label에 대해서만 target segmentation loss를 구하여, training을 더욱 가속화한다.

 

 

 

Training Process

 

이렇게 정의된 2 step network를 구성하는 F,M model은 다음과 같은 프로세스로 training이 진행된다. 

 

training process

 

먼저 일반 segmentation model과도 같은 M(0)를 학습시킨다. 위의 M을 training 하는 loss에서 adversarial loss와 self-supervised segmentation loss를 제외한 segmentation loss만을 활용한 것을 말한다.

 

이 M(0)를 기반으로 cyclegan F(1)을 학습한다. <- Equation 2

F(1)의 아웃풋으로 adversarial loss와 segmentation loss를 갖는 M을 학습한다. <- Equation 1

그 후 M에 self-supervised segmentation loss를 추가하여 M을 N번 학습한다. <- Equation 3

 

위와 같은 과정을 K번 진행했다고 한다. K는 2, N은 3으로 최종 네트워크를 지정하였다. 

 

 


 

이렇게 논문의 전반적인 내용이 끝났다. 결과는 생략하겠다. 

 

이 논문에서 인상 깊었던 것은 

 

1. 2 step 네트워크일 때 두 네트워크를 유기적으로 연결한 것

2. segmentation model에서 sudo label을 만들어 self-supervised learning을 활용한 것

 

이다. 두 특징은 segmentation task에만 한정이 되는 것이 아니라 같은 idea로도 다양한 task에 활용될 수 있을 것 같다. 

+ Recent posts