일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- Python
- seaborn
- Numpy
- Numpy data I/O
- 카테고리분포 MLE
- pivot table
- Comparisons
- groupby
- dtype
- linalg
- namedtuple
- Operation function
- 가능도
- BOXPLOT
- unstack
- scatter
- 정규분포 MLE
- Python 특징
- 부스트캠프 AI테크
- Array operations
- boolean & fancy index
- VSCode
- 최대가능도 추정법
- Python 유래
- subplot
- 표집분포
- python 문법
- type hints
- ndarray
- 딥러닝
- Today
- Total
또르르's 개발 Story
[34-1] Conditional generative model 본문
1️⃣ Conditional Generative Model
일반적인 generative model은 영상, sample을 생성할 수 있지만 조작은 불가능했습니다.
Conditional generative model은 조건(condition)이 주어졌을 때 영상, sample을 생성하는 모델입니다. 따라서 user의 조작이 더 쉬어졌습니다.

Conditional GAN이 기존 GAN과 다른점은 C라는 Conditional input을 넣어주는 부분이 다릅니다.

Conditional GAN의 예시는 Super resolution 기법이 있습니다.
- input : Low resolution image (저해상도 image)
- output : high resoulution image (고해상도 image)

구조는 다음과 같습니다.
입력으로는 Low resolution image가 주어지게 되고, Generator는 high resolution image를 생성합니다.
Real data로는 실제 high resolution image를 주어서 Discrimitor가 현재 주어진 생성 image가 실제 high resolution image와 비슷한 통계적 특성을 갖는지 확인합니다.

원래는 Regression을 사용했었는데 Discrimitor 대신 MAE / MSE 등을 사용했습니다.

하지만 Regression을 사용하면 해상도는 높아지지만 sharp한 영상 대신, blur처리가 된 영상을 많이 생성합니다.
이런 현상이 일어나는 이유는 MAE, MSE가 pixel 자체의 intensity 차이를 이용하게 됩니다. 따라서 평균 error를 구하다보니까 출력 결과와 비슷한 error를 가지는 많은 patch들이 존재하게 됩니다. 그래서 구분성이 떨어집니다.
하지만 GAN은 Discrimitor가 그 전에 봤었던 real data와 생성된 data를 구분 못하게 하는 것만 목적이므로 가장 비슷한 real data만 따라하게 됩니다. 그러면 Discrimitor의 loss가 낮아지게 됩니다.

2️⃣ Image translation GANs
Image translation은 한 Image style을 다른 image style로 변환하는 방법입니다.

1) Pix2Pix
Pix2Pix는 Image translation이라는 task를 CNN 구조를 이용해서 학습기반으로 나온 첫 번째 사례입니다.
Pix2Pix는 Loss function을 다음과 같이 정의했었습니다.
LL1(G)는 MAE Loss를 의미합니다.
MAE Loss가 Blury한 image를 생성하긴 하지만 적당한 guide로 사용하기에는 좋습니다.
LcGAN(G,D)는 GAN Loss를 의미합니다.
GAN Loss를 사용해서 realistic한 출력을 만들도록 유도해줍니다.

여기서 MAE Loss를 사용한 이유는 MAE Loss에서 y는 ground truth인데 x라는 입력을 넣었을 때 기대하고 있는 출력 pair를 가지고 있는 데이터에 대해서 학습을 진행합니다.
하지만 GAN Loss는 ground truth와 직접 비교하지는 않습니다. D(x,y)에서 x와 y를 독립적으로 dicrimitor해서 real이냐 fake이냐만 구분하게 됩니다.
Pix2Pix의 GAN Loss와 일반적인 GAN Loss의 차이는 GAN Loss에서 G(x,z)에 z만 들어간 것이 아닌 x가 들어갔다는 점입니다.

L1 loss와 GAN loss를 같이 사용하게 되면 아래 그림과 같이 스타일이 유지되면서 sharp하게 사진이 나오는 것을 알 수 있습니다.

2) CycleGAN
Pix2Pix는 pairwise data가 필요합니다.
즉, 예를 들어서 sketch data (xi)와 일반 data (yi)와의 관계를 학습하는 pair 형태가 필요합니다.
문제는 pair data를 얻는게 어렵거나 불가능한 경우가 많습니다.
따라서 unpaired 방법이 제안이 되었는데, unpaired는 "X라는 style의 data"와 "Y라는 style의 data"는 서로 직접적인 연관이나 대응관계 없이 주어졌을 때 활용하는 방법입니다.

CycleGAN은 non-pairwise dataset만으로 image translation이 가능하도록 만들었습니다.

CycleGAN에는 GAN Loss + Cycle-consistency loss가 추가되었습니다.
여기서 Cycle이라는 단어의 의미처럼 방향성이 존재합니다(X -> Y, Y -> X 등). 따라서 이 두 방향을 동시에 학습을 진행합니다.
Cycle-consistency loss는 원본 image를 통해 translation된 결과를 출력하고, 출력된 결과를 다시 원본 image와 비교했을 때 동일해야한다는 loss입니다.

GAN Loss는 다음과 같이 진행됩니다.
- X -> Y를 G (generator)를 통해서 생성을 합니다.
- DY는 Y를 dicrimitor합니다.
- Y -> X로 F (generator; G와 다른 nn)를 통해서 생성을 합니다.
- DX는 X를 dicrimitor합니다.

하지만 GAN Loss만 사용하면 Mode Collapse라는 문제가 발생합니다.
Mode Collapse란 input에 상관 없이 하나의 output만 계속 출력하는 형태로 학습이 되는 것을 말합니다.
따라서 Cycle-consistency loss를 사용하게 됩니다.
X -> Y로 가고 다시 Y -> X로 갈 때 "X"와 "다시 돌아온 X"에서 차이가 있으면 안된다는 것입니다.
즉, x가 ˆx와 동일해야한다는 것입니다. 이렇게 만들면 영상의 contents가 유지되게 해줍니다. (No supervision; i.e., self-supervision)

3) Perceptual loss
Perceptual loss는 high quality output을 만들기 위한 방법 중 하나입니다.
- Adversarial Loss (GAN Loss)
- train하기 어려움
- pre-trained가 필요하지 않고, Generator와 Discriminator가 균형을 맞추게 됨 - Perceptual Loss
- train하기 쉽고, coding하기 쉬움
- pre-trained network를 사용해야함
Peceptual loss의 구조는 다음과 같습니다.

- Image Transform Net : input image가 주어지면 image를 transform해서 출력 (하나의 input image에 하나의 style로만 출력)

- ˆy : Image tranform net의 출력

- Loss Network : 학습된 Loss를 측정하기 위해서 image classification network를 사용합니다. (여기서는 VGG-16). 이 네트워크로 중간중간에 feature를 뽑습니다. 또한, pre-trained된 model을 사용합니다.
Backpropagation을 할 때 중간중간의 feature들을 gradient해서 ˆy (정확히는 Image Transform Net)으로 보내서 학습합니다. 이때, model 자체(Loss Network)는 update하지 않습니다.

- Feature reconsturction loss : 두 가지 loss (style target : ys, content target : yc)를 사용합니다.

- Contents reconstruction loss yc
Contents target은 Transformed Image가 Contents를 제대로 유지하고있는지 그것을 확인해주는 Loss입니다. 따라서 contents target은 원본 X를 입력으로 넣어줍니다.
"일반적인 X를 VGG에 넣어서 feature map" 뽑고, "ˆy를 VGG에 넣고 뽑은 feature map"을 비교해서 Loss를 구하게 됩니다.

- Style reconstruction loss ys
Style Target에는 우리가 변환하고 싶은 style image를 input으로 넣습니다.
"일반적인 X를 VGG에 넣어서 feature map" 뽑고, "변경하고 싶은 style image를 VGG에 넣고 뽑은 feature map"을 비교합니다.
하지만 여기서 Feature map끼리 비교를 해서 loss를 구하는 것이 아닌, Style이라는 것을 담기 위해서 Style을 design해줍니다. 이것이 바로 Gram matrices입니다.
Gram matrices는 일반적으로 feature map에 공간적인 정보(spatial information)의 통계적인(statistics) 특징을 담을려고 디자인되었습니다. Gram matrices는 channel(c) x channel(c) 형태로 구성되어 있습니다.
Gram matrices가 channel(c) x channel(c) 형태를 가지는 방법은..
여기서 공간축의 정보, 즉, 영상 전반에 걸쳐서 각 위치마다 style이 다른 것을 고려하는 것이 아닌 영상의 전체적인 style을 고려하는 것이기 때문에 Feature map에서 공간에 따른 정보를 pooling을 통해 없애줍니다. 즉, feature map을 C×(H⋅W) 형태로 reshape을 해주고 featuremap1=C×(H⋅W)와 featuremap2=C×(H⋅W)를 내적하면 C×C 형태의 matrix가 나오게 됩니다.
Gram matrices는 하나의 convolution layer에서만 gram matrix를 뽑고, 그들 사이의 차이를 통해 loss를 구하는 것이 아니라 중간중간에 channel들을 다 뽑고 서로 다른 level에서 loss를 구하게 됩니다.
결국, Transformed image의 gram matrix는 "staticstic한 style들을 저장한 style target의 gram matrix"를 닮아가게 됩니다.

'부스트캠프 AI 테크 U stage > 이론' 카테고리의 다른 글
[35] Multi-modal: Captioning and speaking (0) | 2021.03.12 |
---|---|
[34-2] 실제 Backpropagation이 수행되는 원리 (0) | 2021.03.11 |
[34] Instance/Panoptic segmentation (0) | 2021.03.11 |
[33-1] CNN visualization (0) | 2021.03.10 |
[33] Object detection (0) | 2021.03.10 |