본문 바로가기

Data Science/4. 딥러닝

[n434]GAN(Generative Adversarial Network)

■ Key words

  ㆍGAN(Generative Adversarial Network)

  ㆍDCGAN(Deep Convolutional Generative Adversarial Network)

     - Latent

  ㆍCycleGAN

 

■ 주요내용

  ㆍGAN(Generative Adversarial Network)

     - 구성 : 생성모델(Generator)과 판별모델(Discriminator)이 대립적인 과정을 통해 동시 훈련.

                판별모델은 실제 이미지를 바탕으로 분별하므로, 생성모델 보다 초기에 더 좋은 성능을 보임.

     - 생성모델(Creator/Generator) : Random seed(noise)로부터 실제로 있을법한 image 생성

     - 판별모델(Discriminator) : 만들어진 image와 input에 넣은 실제 image 비교

        ⇒ 학습하는 동안 Generator는 더 실제 같은 image를 만들어 내고, Discriminator는 더 잘 구별하게 됨

        ⇒ Discriminator가 생성된 이미지와 실제 이미지를 구별하지 못할 때 학습 종료

  ㆍDCGAN(Deep Convolutional Generative Adversarial Network) : 감별자/생성자는 개별적으로 동시에 학습 진행

     - Creator : Random seed(noise)를 입력받아 실제로 있을법한 image 생성

       · 손실함수 : 감별자를 얼마나 잘 속였는지를 수치화

                       ; 생성된 이미지에 대한 감별자의 결정과 1로 이루어진 행렬 비교

     - Discriminator : 합성곱 신경망(CNN, Convolutional Neural Network) 기반의 image 분류기

       ⇒ 진짜 image에 (+), 가짜 image에 (-) 출력 / 이중분류(True/False)이므로 BinaryCrossentropy, sigmoid 사용

       · 손실함수 : 가짜 이미지에서 진짜 이미지를 얼마나 잘 판별하는지 수치화

                       ; 진짜 이미지 : 1 / 가짜 이미지 : 0 → 두 행렬 비교

      ⇒ Gradient를 사용해 생성자와 감별자의 학습 업데이트

     - Latent

  ㆍCycleGAN(Cycle-Consistent Adversarial Networks) 

      - 주기 일관성 손실을 사용하여 쌍(pair; 이미지의 구도;형태가 같은)을 이루지 않는 이미지들도 학습을 가능케 함

        * 손실함수 : 학습할 한 쌍의 데이터가 없으므로, 주기 일관성 손실 적용; 결과가 원래 입력에 가까워야 함

           ⇒ 실제 이미지에 변형을 가하고, 이를 복원한 이미지가 실제 이미지와 얼마나 차이가 있는지 비교.

        → 소스 및 대상 도메인 간의 1:1 매핑 없이 한 도메인에서 다른 도메인으로 변환 가능

            ; 한 이미지 도메인의 특성을 캡쳐하고, 이것을 다른 이미지 도메인으로 변환(적용; 얼룩 → 말)

      - 해상도 향상, 사진의 그림화, 스타일 변환 등에 활용 가능

  ㆍ기타 GAN

      - Least Squares GAN : LSGAN
      - Semi-Supervised GAN : SSGAN, Class 분류와 동시에 진위여부를 확인하는 GAN
      - Auxiliary Classifier GAN : Class, noise를 이용하여 만들어내는 GAN
      - Stack GAN : Text를 이용해서 이미지를 생성하는 GAN
      - Cycle GAN : 그림을 사진으로, 사진을 그림으로, 말을 얼룩말로 얼룩말을 말로!!
      - Disco GAN : Cycle GAN과 유사, 가방에 신발 디자인을 반영하는 Cross Modality GAN
      - Design GAN : 새로운 디자인 티셔츠를 만들기
      - Style GAN : 1024x1024 고화질의 이미지를 만들어내는 GAN
Adapitve instance normalizaton : AdaIN - Style transfer

 

■ Session note

ㅁ 오전 session
  ㆍGAN
     - 목적 : 세상에 있을 법한 image를 만들어 내는 것
     - 구조
       · Generator : 가짜 이미지 생성 시도
       · Discriminator : 가짜 이미지 판별
     - 학습 : discriminator로 generator를 통해 생성된 image가 가짜인지 판별할 수 없게 되면 학습 종료
     - 활용 : 숫자 같은 글자 생성 / 안경 낀 남자와 안 낀 남자를 학습하여 안경 안 낀 여자에게 안경 씌우기
     * Auto Encoder는 이미지에서 특성을 추출한 반면, GAN은 일단 그려보면서 실제 이미지와 비교를 통해 맞춰가는 것
  ㆍCycle GAN
     - 말 image와 얼룩말 image의 구도가 달라도 domain의 특성만 잡아내어 학습함
       ⇒ 얼룩말 image로 가짜 말 만들기
          → 생성된 말 image에서 말의 특성을 제거하여 얼룩말 원본으로 돌아오는지 확인하여 말의 특성이 잘 적용됐는지 확인
          → 다른 구도 말 image와 비교하여 말이 제대로 만들어졌는지 확인
          * 학습이 동시에 같이 진행됨; 얼룩말에 말 특성 적용 + 말의 특성 확인하기
  ? 정규화 : (0, 1), (-1, 1)의 차이 알아보기

  ㆍGAN : 있을 법한 이미지를 만들어 내는 것
  ㆍDCGAN
     - Generator(생성자) : latent vector를 받아 image를 생성
     - Discriminator(감별자) : image의 진위여부 판단
     * Discriminator의 성능이 너무 좋으면 학습이 진행되지 않기 때문에 초기에 generator의 학습을 먼저 하거나 학습률을 높게 한 후 discriminator 사용
  ? freeze : 생성자를 먼저 학습
  ? check point : early stopping 처럼 학습 중간에 저장하는 기능
  ㆍCycleGAN : 이미지 변환, 학습 데이터에 pair(배경, 구도, 자세가 같은 쌍)가 없을 경우 사용
     - 특징 : 특성을 바꿔줌(얼룩무늬 / 사과에 오렌지 적용 / 여름과 겨울 느낌)
  ? GAN : 구현 - 논문과 같이 논리구조 짜기 / 사용 - 기존 라이브러리 활용
  ㆍLatent Vecor : random noise - generator에서 image 생성 시 활용
  ? DCGAN에서 생성자를 학습시키는게 랜덤한 노이즈를 주고 이미지를 얼마나 잘 만들어내는지를 학습시키는건가요? 아니면 생성자가 사용하는 특성을 학습하는건가요?
     - up-convolution, convolution 모두 가중치 update 필요 / 방향성과 목적에 따라 generator와 discriminator의 가중치 학습 방향이 다름

ㅁ 오후 Session
  * 꼭 deep learning을 활용해야 하는가? machine learning으로 해결할 수 있는 문제는 아닌가?
  ㆍCNN : filter(가중치 집합, kernel)를 사용하여 가중치 공유; 학습할 parameter 감소
     - stride : filter로 학습할 때 한 번에 이동할 거리
     - padding : 학습할 때 정보소실 및 크기 보존을 위해 테두리에 감싸는 것
     - pooling : max, average 등 차원을 축소하는 단계 / channel 수는 변하지 않는다 / 가중치 X
  ㆍ전이학습(Transferring Learning) : 다른 데이터로 학습한 모델을 가져와 활용하는 것
  ㆍ이미지 분류 task
     - Semantic Segementation : pixel 단위로 분류
     - instance segmentation : 객체별 분류 / U-Net
     - object detection : 박스 단위로 개체 인식 / R-CNN
  ㆍAugmentation
     - 학습 데이터 증가
     - 다양한 상황에 대처
     - 일반화 및 과적합 방지
     - train data에만 적용
  ㆍAuto Encoder : 차원 축소 → 특성 추출, 노이즈 제거, 이상치 탐지
     - 인코더 : 차원 축소, 압축 → latent vector(variable, code 등)
     - 디코더 : 이미지 복구; 인코더에서 원본의 특성을 잘 추출(압축)했는지 확인하기 위함
  ㆍGAN : 세상이 있을 법한 이미지 생성
     - 생성자 : random noise를 활용하여 이미지 생성
     - 감별자 : 생성한 이미지와 실제 이미지 비교를 통한 감별
      ⇒ 서로 경쟁하며 동시에 학습
  ㆍCycleGAN : 특성 변환
     - label, pair가 없는 image 활용
     - 원본 이미지 → 이미지 변형 → 특성을 활용한 원본 이미지로 변경 후 원본과 비교
  * DCGAN : random noise → 실제 image / CycleGAN : 실제 image → 변형한 image
  ? Discriminator의 활성화함수는 True/False이기 때문에 일반적으로 sigmoid를 사용하나, 다른 함수를 사용해도 된다. 사용자가 코드/알고리즘을 짜기 나름
  ? LSTM 등 hidden layer의 특성중요도(permutation importance 등)를 추출하는 것은 현재 어렵다. 해석하려는 노력 중
  * papers with code

 

■ 주요함수

  ㆍ

 

■ Reference

  ㆍGAN loss function : https://m.blog.naver.com/PostView.naver?blogId=euleekwon&logNo=221558014002&targetKeyword=&targetRecommendationCode=1 

 

[GAN] 이제 제발 이해하자 GAN - 1장 (수식)

지난번에 이어서 이제 수식을 제대로 뜯어보자. 일단 왼쪽에 min 과 max 가 왜 나왔을까.. 왼쪽에서 G는 ...

blog.naver.com

  ㆍGAN : https://ysbsb.github.io/gan/2020/06/17/GAN-newbie-guide.html

 

딥러닝 GAN 튜토리얼 - 시작부터 최신 트렌드까지 GAN 논문 순서 | mocha's machine learning

이번 포스팅에서는 GAN의 개념, GAN의 종류, 주요 논문들에 대한 짧은 리뷰를 이야기하려고 합니다. GAN의 종류들은 중요하게 언급되는 모델들을 선정하였고, 이 모델들에 대해서 간단히 설명을 듣

ysbsb.github.io

  ㆍConditional GAN : https://youtu.be/iCgT8G4PkqI

  ㆍDC-GAN : https://youtu.be/EYrt7fGyA08

  ㆍGAN : https://youtu.be/N9ewzLUZhL8

  ㆍ순환 일관성 적대 네트워크(cycleGAN) : https://ichi.pro/ko/gandanhan-yeong-eolo-doen-sunhwan-ilgwanseong-jeogdae-neteuwokeu-233980517355271

 

간단한 영어로 된 순환 일관성 적대 네트워크

CycleGAN은 이미지를 이미지로 변환하는 방법입니다. 불행히도 관련 수학을 완전히 이해하거나 이해하지 않고도 CycleGAN을 사용할 수 있습니다.

ichi.pro

  ㆍDeep Learning : http://introtodeeplearning.com/

 

MIT Deep Learning 6.S191

MIT's introductory course on deep learning methods and applications.

introtodeeplearning.com

ㆍCycleGAN : https://ichi.pro/ko/gandanhan-yeong-eolo-doen-sunhwan-ilgwanseong-jeogdae-neteuwokeu-233980517355271

 

간단한 영어로 된 순환 일관성 적대 네트워크

CycleGAN은 이미지를 이미지로 변환하는 방법입니다. 불행히도 관련 수학을 완전히 이해하거나 이해하지 않고도 CycleGAN을 사용할 수 있습니다.

ichi.pro

 

'Data Science > 4. 딥러닝' 카테고리의 다른 글

[n433]Auto Encoder(AE)  (0) 2021.08.26
[n432]Segmentation & Object Recognition  (1) 2021.08.25
[n431]Convolutional Neural Network(CNN)  (0) 2021.08.24
[n424]Transformer and BERT, GPT  (0) 2021.08.20
[n423]Language Modeling with RNN  (0) 2021.08.19