호기심 많은 분석가
[BoostCamp] Week7_Day32. Conditional Generative Model 본문
부스트캠프
개발자의 지속 가능한 성장을 위한 학습 커뮤니티
boostcamp.connect.or.kr
📙개인학습
1. Conditional Generative Model
1-1. Conditional generative model
- 왼쪽과 같이 스케치된 영상을 오른쪽의 이미지로 변화해주는 문제
- 언어가 다를 때 번역하는 것과 같아 Translation 한다고 표현
- Translating an image given condition == 하나의 정보가 주어졌기 때문에 condition 되었다고 표현(조건이 주어졌다) → 조건이 주어졌기 때문에 Conditional Generative Model이라 부름
- 일반적으로 확률분포를 모델링하는 기법이기 때문에 샘플링을 할 때도 높은 확률에서 샘플링이 될 것
- Generative model vs. Conditional generative model
- 두 생성 모델을 비교해보자
- 기본 Generative model은 우리가 영상을 생성할 수는 있었지만 조작(제어)할 수는 없었다. random으로 생성되기 때문
- 우리의 의도를 넣어주기 위해 Conditional generative model이 생성됨
- 주어진 정보하에서 랜덤으로 생성되기 때문에 조금은 의도를 넣어줄 수 있음
- Example of conditional generative model - audio super resolution
- 저퀄리티의 오디오를 고퀄리티의 오디오로 변환시켜주는 것도 generative model
- P(high resolution audio | low resolution audio)
- Example of conditional generative model - machine translation
- P(English sentence | Chinese sentence)
- Example of conditional generative model - article generation with the title
- 제목과 부제목만 가지고 기사를 생성하는 모델도 가능
- P(A full article | An article`s title and subtitle)
- 모델 부분을 다시 회상해보자, 우리는 GAN을 배웠음 (Generative Adversarial Network)
- Generator와 Discriminator가 서로 속이기 위해 성능이 높아지는 적대적(Adversarial) 학습법
- (Basic) GAN vs. Conditional GAN
- 기본적으로 Z를 입력으로 받아서 Generate 하고 Discriminator가 판별하는 과정은 같다
- Conditional GAN은 Input에서 Condition값만 추가해주는 것, GAN의 장점을 모두 사용 가능
1-2. Conditional GAN and image translation
- 적용 가능한 CV 예시 Image-to-Image Translation
- Style transfer, input image → 모데 style, 반 고흐 style,...
- 고해상도로 만들어주는 super resolution
- 흑백사진을 컬러 사진으로 만들어주는 Colorization
- 이러한 기술을 통해 전혀 다른 느낌의 게임 테마를 별도의 제작 비용 없이 간단하게 사용할 수 있다
1-3. Example : Super resolution
- Example of conditional GAN - low resolution to high resolution
- 저해상도의 이미지를 고해상도의 이미지로 변환
- 이러한 Super resolution을 Conditional GAN, Conditional Generative model로 풀어야 하는 것은 아니다. 이전에는 CNN 구조를 활용해서 Super Resolution을 하였음
- 그렇다면 이러한 Regression model과 Condition GAN의 차이는 무엇일까?
- Regression은 해상도는 높아지지만 만족할만큼 Sharp 한 영상 대신 Blurry 한 영상들이 생성됨
- 픽셀 사이의 Error 평균을 줄이는 방법으로 가기 때문에 어느 것 하나에도 가깝지 않고 적당하게 떨어져 있는 Blurry 한 영상이 생성되는 것
- 위 설명이 추상적일 수 있어 예제를 하나 더 들어보겠다
- Meaning of "averaging answers" by an example
- 이미지를 컬러링 하는 예제를 보자
- 실제 이미지는 흰색, 검은색뿐이다.
- 이 데이터를 입력으로 넣어주고 L1 loss(MAE)로 학습시켜주면 일반적인 회색 이미지가 출력됨 → 왜냐? 검은색으로 예측해도 틀리고, 흰색으로 해도 틀리기에 중간 지점을 맞춘 것
- GAN을 사용하면 그런 경우가 잘 발생하지 않음 → 회색 데이터는 Discriminator가 본 적이 없어 틀린 것이라고 빠르게 판단하기 때문, Output도 흰색이나 검은색만 출력한다
- GAN loss for Super Resolution (SRGAN)
- GAN으로 학습할 경우 Regression으로 학습한 SRResNet보다 훨씬 sharp 하고 realistic 한 아웃풋을 생성할 수 있
2. Image translation GANs
2-1. Pix2Pix
Task definition
- 한 이미지 스타일을 다른 이미지 도메인 또는 스타일로 변환하는 문제
- Semantic image → 일반적인 이미지
- 흑백 → 컬러
- 스케치 → Original
- 이미지 변환은 일반적으로 입력 해상도와 출력해상도가 같다
- Loss function of Pix2Pix
- Total loss (GAN loss + L1 loss)
- MAE의 경우 blurry 한 영상을 만들 수도 있지만 적당한 가이드로 쓰기 좋음
- GAN loss는 입력된 2개의 페어를 독립적으로 학습하여 real이냐 fake냐만 학습을 한다. 그래서 입력이 뭐가 들어와도 y와 비교하지 않아서, GAN만 사용하면 y와 비슷한 결과를 도출하기 힘들다. → 그것을 L1 loss로 해결하고자 함
- GAN loss를 더해 realistic 한 출력을 만들도록 유도
- MAE의 경우 blurry 한 영상을 만들 수도 있지만 적당한 가이드로 쓰기 좋음
- GAN만 쓸 경우 Sharp 하지만 스타일이 조금 유지가 덜 되는 것을 확인할 수 있다
2-2. CycleGAN
- Pix2Pix 경우 항상 paired 데이터가 필요하다. 하지만 이런 데이터를 모으는 건 꽤 어렵다. 그래서 Unpaired 데이터만 사용한 CycleGAN의 등장
- CycleGAN은 두 개의 셋 데이터, 1-1 대응관계(non-pairwise)가 존재하지 않는 그런 데이터셋의 집합들만으로 translation이 가능하도록 학습하는 방법
- Loss function of CycleGAN
- GAN loss (in both direction) + Cycle-consistency loss
- Cycle-consistency loss은 이미지와, 그것을 translation 하고 다시 translation 하여 돌아온 이미지가 비슷해야 한다는 loss
- 우선 GAN Loss를 살펴보자
- 인풋 X를 generator(G)를 통해 생성한 뒤 discriminator_y를 통해 y와 비슷한지 판단
- y에서 다른 generator(F)를 통해 생성한 뒤 discriminator_x를 통해 x와 비슷한지 판단
- 하지만 GAN loss만 사용하게 되면 하나의 문제가 생김 (Mode Collapse)
- 입력에 상관없이 하나의 아웃풋만 계속 출력하는 형태로 학습하는 것
- 입력과 상관없이 아웃풋이 생긴 게 가방 같아서 계속 True를 뱉는다는 것
- 어떤 입력이 들어오던지 하나의 리얼리스틱한 Y만 뽑아내면 Discriminator_y는 항상 y가 리얼리스틱하다고 판단, Generator(G)는 만족하고 더 이상 학습하지 않음
- 마찬가지로 y에서 x로 가더라도 계속 같은 x만 나온다면, GAN은 스타일만 보기 때문에 만족하고 멈춤 (Like localminima)
- Cycle-consistency loss은 style 뿐만 아니라 content도 유지가 되어야 한다는 개념에서 도입된 loss
- x → y → x'에서 x와 x'의 차이를 살펴봄, x가 y로 변환됐을 때 내용이 달라진다면 안된다는 것을 확인
- 이 과정에서 어떠한 supervision도 들어가지 않음(self-supervision)
2-3. Perceptual loss
- MAE, MSE를 이용한 Regression 대신 GAN을 왜 사용하냐? 퀄리티 때문
- 문제는 GAN은 학습하기가 어렵다. 그래서 다른 방법(Loss)이 없을까 하여 나온 loss
- Perceptual loss는 high quality output을 만들기 위해 나온 loss
- GAN Loss (Adversarial loss)
- Relatively hard to train and code (Generator & Discriminator adversarially imporve)
- Do not require any pre-trained networks
- Since no pre-trained network is required, can be applied to various applications
- 프리트레인 네트워크가 없기 때문에, 다양한 어플리케이션에 제약사항 없이 데이터만 주어지면 활용 가능하다. 물론 그 때문에 데이터 디펜던시가 생기긴 한다.
- Perceptual loss
- Simple to train and code (trained only with simple forward & backward computation)
- Requiring a pre-trained network to measure a learned loss
- 프리트레인된 이미지 클래스피케이션 모델의 필터를 살펴보면 사람의 시각과 비슷하다
- 그 네트워크의 초기 layer들은 edge, 방향성, color difference들을 찾는 filter들이 존재함
- 사람도 이러한 과정을 거치기에 사람의 눈과 비슷하다고 판단
- 이미지를 우리와 비슷하게 바라보는 perceptual space로 변환하는 transform이다
- 우리가 민감하게 다뤄야 하는 것과 신경 쓰지 않는 것을 구분해서 연관을 지을 수 있다
- 이것을 활용해서 네트워크를 학습하는 것을 알아보겠다
- Image Transform Net : Output a transformed image from input / 아웃풋은 딱 하나로 결정됨
- Loss Network : 학습된 loss를 측정하기 위해서 학습된(pre-trained) VGG16 모델을 사용
- VGG-16에 생성된 이미지를 넣어서 중간중간 feature를 뽑아줌
- Pre-trained 되어 있고 training동안에는 fix 되어서 update 되지 않음
- Loss를 measure 하면 backpropagation 해서 y hat을 업데이트할수록 Image Transform Net을 학습시켜주는 것
- Feature reconstruction loss
- transformed 된 이미지가 X의 content를 잘 가지고 있는지 확인해주는 loss가 feature reconstruction loss
- 그래서 input으로 원래 X, 변화하기 전 X를 넣어주는 것이 일반적
- 그다음 transforom된 이미지에서 온 feature와 content target으로 부터온 feature를 비교해서 loss를 계산 (L2)
- 그 다음 backpropagation 해서 Y를 업데이트할 수 있도록
- Style reconstruction loss
- 변화하고 싶은 style 이미지를 타깃으로 넣어주게 됨
- 중간에 convolution feature map을 출력하기 때문에 3차원 dim의 tensor형태로 출력된다
- style을 담기 위해서 gram matrices로 작업을 해줌 (따로 공부해보길 추천)
- gram matrices는 공간적 특징 없는 통계적 특징들을 삼기 위해 등장
- 각각 채널은 각각 feature에 집중한다
- 가로 빗살무늬 feature와 세로 빗살무늬 feature가 많이 관찰된다면 데이터는 가로 세로 빗살무늬가 많은 style일 가능성이 높음
- Super Resolution 같은 style이 변하지 않고 콘텐츠는 유지하되 높은 퀄리티를 위하는 경우에는 L2 loss 대신에 Feature reconstruction loss만 사용하기도 함
3. Variout GAN applications
3-1. Deepfake
- Converting human face or voice in video into another face or voice
3-2. Face de-identification
- 사람의 얼굴을 아주 살짝 바꿈으로써 컴퓨터가 그 사람인지 모르도록 하고 개인정보를 보호
- Passcode를 줘서 얼굴을 변화시키는 것
- 패스워드를 틀리면 아예 다른 얼굴이 나오도록 한 연구
3-3. Video translation (manipulation)
- Pose transfer, Video-to-video translation, Video-to-game : Controllable characters
🌱피어세션
❓ non-pairwise dataset을 사용하는 cycleGAN에서 GAN loss를 사용하는 이유는?? GAN loss는 ground truth와 유사하도록 만드는 loss가 아닌가?
❗ unsupervised-learning에서는 GAN loss를 사용하는 것이 효율적이지 않을 수도 있다.
❓ Gram matrices가 무엇인가?
❗ channel 별 상관관계를 보여주는 matrices
❓Feature reconsturcion loss란 무엇인가?
❗pretrained model을 통과하면 각 layer 별로 low/mid/high level의 feature을 추출한다. Transformed Image와 content target 이미지의 content는 유사해야 하므로 layer 별 feature의 L2 Loss를 줄이기 위해 사용.
❓ Style reconstruction loss란 무엇인가?
❗Style target과 Transformed image에 대한 통계적인 style 정보를 담은 matrices 간의 Loss를 줄이기 위해 사용.
❓ pix2pix loss에 대해 설명할 때 L1 term이 있는 이유를 discriminator이 x, y를 서로 독립적으로 예측하기 때문에 L1 loss를 추가했다고 설명했다. 그러나, pix2pix loss 수식을 보면 Discriminator가 입력 인자로 x, y를 받아서 예측을 하는 것처럼 나와있다. 해당 수식대로라면 x, y가 같이 고려되는 것이 아닌가? 추가적으로 수식 위에 이름은 cGAN loss가 아닌 GAN loss로 적혀있는데, GAN loss라면 condition을 받지 않기 때문에 Discriminator가 x, y를 독립적으로 예측한다는 말이 이해가 안 갑니다!
[AI Tech]Daily Report
Naver AI Tech BoostCamp 2기 캠퍼 허정훈 2021.08.03 - 2021.12.27 https://bit.ly/3zvJnSh
data-hun.notion.site
'Coding > BoostCamp' 카테고리의 다른 글
[BoostCamp] Week7_Day33&34. Multi-modal Learning (0) | 2021.10.05 |
---|---|
[Boostcamp] 온라인의 인연을 오프라인에서 (4) | 2021.10.04 |
[BoostCamp] Week7_Day31. Instance/Panoptic Segmentation (0) | 2021.09.27 |
[BoostCamp] Week7_Day30. CNN Visualization (0) | 2021.09.27 |
[BoostCamp] Week6_Day29. 새로운 멘토님 (0) | 2021.09.21 |