꺼내먹는지식 준

Conditional generative model 본문

AI/CV

Conditional generative model

알 수 없는 사용자 2022. 3. 16. 12:02

다음과 같은 스케치가 주어졌을때 분포에서 가장 이런 이미지일 확률이 가장 높아 하는 것을 sampling하는 것

 

기본적 generative model은 생성은 가능해도, 조작을 할 수는 없었다. 

 

 

적용처와 예시 

저 퀄리티 음성을 고퀄리티 음성으로 

중국어 $\rightarrow$ 영어로 번역 

title 부제목만으로 글 생성을 요구하는 것도 가능 

 

GAN 학습 방법 

경찰 vs 도둑 

generator와 discriminator 가 적대적으로 학습 

 

GAN vs Conditional Gan

C라는 conditional input이 존재 

 

적용 예시 

  • Image style transfer 
  • 저해상도 $\rightarrow$ 고해상도 : super resolution 
  • 흑백 $\rightarrow$ color :
  • 게임 테마 변경

 

Image level 

Super Resoultion 

입력: 저해상도 이미지

출력: 고해상도 가짜 이미지 

real data: 고해상도 이미지

생성 이미지가 실제 고해상도 이미지와 비슷한 통계적 특성을 갖는지 비교 

 

 

이전에는 왼쪽같이 단순하게 CNN사용해서 학습을 하기도 했다. 

이러한 구조를 Regression model이라 한다. 

MAE, MSE LOSS 

 

MAE Loss GT 가 있고, 생성 영상 주어지면 절대 값 오차의 평균 

MSE LOss: GT와 측정 생성된 영상의 제곱의 평균

해상도가 높아지는 것 같기는 하지만, blury 한 결과를 얻었다. 

 

LOSS가 pixel 자체가 intensity차이를 측정하는데 평균 에러를 구하다 보니 출력 결과가 비슷한 결과를 가지는 많은 patch 들이 존재하게 되어서 구분성이 떨어진다. 

그냥 적당하게 전반적인 사진들과 떨어져있는 중간정도 어정쩡한 위치로 가는게 error가 떨어지다보니 아쉬운 결과 

 

 하지만 GAN은 adversarial loss를 사용하여 real data와 구분을 못하게 하는 것이 목적이므로 (이 경우 loss가 낮다.)

상대적으로 위와 같은 상황이 잘 발생하지 않는다. 

 

 

Img coloring 예제 

검정 흰색 real data 

output은 흰색 검정 모두 예측이 틀릴 수 있으므로 적당히 회색 

$\rightarrow$ 우리가 원한 결과가 아니다. 

 

하지만 GAN은 회색데이터를 본적 없어서 real data로 판별하지 않는다. 이로 인해 검은색 흰색을 맞추기 위해 적합한 loss를 가지고 있다. 

 

즉 GAN 기반 super resolution이 훨씬 좋은 결과가 나온다. 

 

 

 

Pix2Pix 

하나의 이미지를 다른 스타일 이미지로 변환하는 스타일 

낮 $\rightarrow$ 밤

스케치 $\rightarrow$ 가방 

등 다양한 task 

 

크게보면 super resolution도 이에 해당 

 

pix2pix는 CNN 기반 

MSE가 블러리한 결과를 만들어내도, 적당한 가이드로 쓰기에는 좋다.

여기에 GAN loss를 더해서 realistic 한 결과를 목표 

x라는 입력을 넣었을 때 기대하는 출력 pair를 가지고 있는 데이터에 대해 학습을 진행 (supervised)

이 때 GAN loss가 사용되면 x와 y를 독립적으로 discriminate해서 real 이냐 fake 냐만 판단한다. 

즉 뭐가 들어와도 y와 비슷한 결과를 못만들어 낸다. 

이를 통해 MSE 로 y와 비슷한 결과를 만들어냄과 동시에 GAN 으로 realistic 하게 제약을 건다. 

 

최근에는 GAN 만으로도 학습이 좀 되지만, 저 당시에는 GAN만으로는 학습이 잘 안정되지 않았다. 

MSE 가 학습을 안정적으로 하는데 기여하기도 했다. 

 

여기서 GAN loss 가 기존 GAN loss와 약간 다른건 z만이 아니라 x도 입력으로 들어갔다. 

 

 

어떤 loss가 어떤 역할을 하는지에 대한 결과값. 

L1 + Gan 실제 output과 비슷하면서 realistic 한 이미지 

구조를 잡고 realisitic 하게 함 

 

pix2pix는 pairwise data가 필요했다. (ex 스케치와 실제 이미지 등)

pair data를 얻는건 굉장히 어렵다. 

 

X 와 Y의 대응관계 없이 set으로만 주어줘도 해결할 방법이 없을까? 

 

cycleGAN 

 

Domain간의 translation을 1:1로 대응이 없어도 translation 가능하도록 학습하는 방법 

일반 사진과 모네 사진 잔뜩 주고나서 

일반 사진에서 모네 사진으로 전환 

모네사진에서 일반 사진으로 전환 

과 같은 task 응용 범위가 늘어난다. 

X -> Y Y -> X 두 방향을 한번에 학습한다. 

 

Cycle consistency loss: 이미지하고 translation 된 결과하고, 다시 돌아왔을 때 원본이미지와 동일해야 한다. 

 

GAN Loss 

G, F 는 다른 generator 

X 에서 G를 통해 Y로 가면, Y는 DY의 discriminator를 통해 정말 Y 같은지 판별 

 

Y에서 F를 통해 X로 가면, X는 DX의 discriminator를 통해 정말 X 같은지 판별 

 

다만 GAN loss만 사용하면 Mode Collapse이라는 문제가 발생한다. 

Input에 상관없이 하나의 output만 출력하는 기이한 형상

하나만 출력해도 어차피 실제 이미지 같으니까 기대와 다른 동작 (마치 local minimum 같다.)

 

이 현상을 방지하기 위해 Cycle-consistency loss 

스타일만이 아니라 contents도 유지되어야 한다! 

 

X -> Y 변환된 이미지를 Y -> X 로 다시 backward 이 때 원본이 복원이 되어야 한다는 것! 

내부의 contents가 유지되도록 유도 (self-supervised)

두개 사이의 translation 학습 

 

dataset이 direct한 match 포인트가 supervised 되지 않은 경우에는 cycle gan 을 사용하면 된다. 

일반적인 supervised 경우에서는 conditional gan 을 왜 사용할까? 

주로 regression보다 quality 가 높기때문에. 하지만 training이 어렵긴 하다. 한번씩 업데이트를 통해 competition 을 유도해야하는데, 일반적인 neural net보다 어렵다. 

 

이와 다른 방법은 없을까? 

 

Perceptual loss 

$\rightarrow$ high quality output 을 만들기 위한 방법 

 

 

GAN loss (adversaliar)

상대적으로 학습이 어렵고 튜닝을 해야하고 코드도 해야 한다. 

어떠한 pre-trained network도 필요 없다는 건 장점 

즉 다양한 분야에 적용이 가능하나 data dependency가 생긴다. 

 

Perceptual loss 

학습하기도 코딩하기도 편하다. (일반적 neural net 학습)

pre-trained network를 사용해야 한다. 

 

시작점 

classification model의 filter 

filter 의 형태가 인간의 visual perception과 유사하다는 관찰이 있었다. 

초기 필터 출력

edge, 형태.. 등 

pretraiend network의 early layer는 우리가 세상을 바라보는 것과 비슷하게 변환하는 perceptron space 이다. 

perceptron space에서 우리가 민감하게 볼 부분과 별 지각 못하는 부분을 나눠서 다루면 어떨까? 

 

Gan 없이도 style transfer 를 할 수 있는 generator 학습 가능 

 

학습 방법 

Input image가 주어지면 원하는 스타일(딱 한개, 데이터로 결정된다)로 image transform network 가 transform한다. 

$\hat{y}$는 생성된 output 

loss network는 학습된 loss를 측정하기 위해서 img classification에 학습된 VGG 16을 사용한다. 

생성된 이미지를 네트워크에 넣고 중간 중간 feature 를 뽑는다. 

뽑은 후 style target과 content target으로 loss를 measure 한다. 

loss network는 pre-trained 로 쓰고 training 중에는 fix 되어서 업데이트 되지 않는다. 

$\rightarrow$ 즉 loss network(VGG)는 학습하지 않고 $\hat{y}$ 즉 image transform network만 학습 업데이트 

 

 

 feature reconstruction loss 

style target, content target 

 

$\hat{y}$ 가 transform될 때 content를 유지하도록 하는 것이 feature reconstruction loss 

style이 바뀌지 않은 원래 X 를 VGG 16에 넣어서 feature를 뽑고 

 

transform 된 애도 VGG 16에 넣어서 feature를 뽑는다. 

이 두 feature 을 비교해서 loss 를 measure한다. 

VGG 의 중간 단계에서 feature를 뽑으면 약간 semantic content가 있다. 그 두개의 content가 적어도 비슷한 대상을 인식해야 된다는 방법론 여기에는 L2 loss 사용 

 

 

style을 유지해주는 loss,

style tatget에 원하는 스타일의 이미지를 넣어준다. 

이 경우에도 transform이미지와 style target 이미지를 각각 VGG에 넣어서 feature map을 준비한다. 

뽑힌 tensor에 대해 그대로 loss를 비교하지 않고, style을 담기 위해 Gram matrices 를 사용한다. 

일반적으로 Gram matrices는 공간적, 통계적 특징을 담기위해 사용된다. (이미지 전반에 걸친 통계적 특성을 담기위해 노력했다.)

다만 Gram matrices 에서 이미지 전반 걸친 통계적 특성은 필요해도 공간적 특징은 좀 필요없다. 이를 summation 을 통해서 pooling해서 좀 없애준다. 

 

C X H X W 텐서를 (C X H X W) ^T 곱해줘서 C X C 형태의 gram matrices를 만든다.  공간축에 해당하는 것의 유사도 평가. 

결국 어떤 특징을 gram matrices가 가지고 있는가? 

각 conv feature의 channel은 각각 마다 고유의 detector 역할을 한다. 스타일 타겟 이미지가 들어왔을 때 filter 가 특성을 잡아내면, 경향성을 그냥 학습한다고 이해하자.  

 

Super resolution의 경우 style은 쓰지 않고 feature reconstruction loss만 사용해서 perceptron loss를 사용하기도 한다. 

 

Various Gan Application 

보통 deep fake 를 생각하는 경우가 많다.

목소리, video 등으로 fake 연설까지도 생성 가능 위험하다. 

 

Deepfake Detection Challenge 와 defense mechanism을 만드는 연구도 많이 진행중 

 

Face de-identification 

privacy를 보호하는 쪽으로 사용!

얼굴이 주어지면, 약간 변형을 줘서 컴퓨터가 누구인지 인식을 못하도록 저해시킨다. 

 

Face anonymization with passcode 

얼굴을 익명화 하는데 passcode가 주어지면 어떤식으로 바꿔라, password 를 이상하게 넣으면 이상한 얼굴이 나오도록 한다. 

--> 비밀번호 입력후 얼굴 인식 하도록 하는 더 높은 보완시스템 구축도 가능할듯? 

 

Pose transfer 

특정 사람의 움직임을 다른 사람의 외형에 갖다 붙이는 것 

 

video to video 연구도 존재했다. 

 

이를 통해 비디오를 게임화 시키는 것도 가능...! 

목소리 변조에도 사용 

TTS text to speech 에도 사용! 

 

'AI > CV' 카테고리의 다른 글

3D Understanding  (0) 2022.03.17
Multi modal learning  (0) 2022.03.17
Instance segmentation, Panoptic segmentation  (0) 2022.03.14
Object Detection 개괄 from selective search to SSD  (0) 2022.03.13
FC layer 를 1X1 Convolution 으로 바꾸기  (0) 2022.03.12
Comments