DeOldify

2021. 5. 10. 12:14Computer vision ღ'ᴗ'ღ

728x90

Overview

※ fasi.ai의 기술

Decrappification(GAN사용안함) - > DeOldify (GAN + UNet)

Proposed Solution

  • Dynamic Unet 기반 ( 공식적 UNet은 아니고 fast.ai에서 구현한..? 것으로 보임) : 기존 U-Net + Self Attention + Spectral Normalization (정확한 건 아니고 추측....)
  • SAGAN
  • Resnet backbone (Pretrained)Unet
  • NoGAN(학습방법)
  • augmentation : 극단적인 밝기/대비 증가로 old/low quality image나 film대한 robustness 높임, 무의미한 노이즈 대한 민감도 줄이기 위한 gaussian noise 추가
  • transfer learning technique for generative modeling: https://course.fast.ai/videos/?lesson=7

Design of Deoldify

SAGAN(Self-AttentionGAN)

기존 convolution GAN들이 local 정보(filter 내 정보)만 사용하기 때문에 거리가 먼 픽셀과의 관계를 모델링 하기는 힘들었기 때문에 그것을 개선하기 위해 self attention을 적용

= global context of features를 더 쉽게 고려

논문에서는 DCGAN기반으로 구현했다고 함

D는 이미지의 highly detailed features in distant portions of the image가 서로 일치하는지 확인

DeOldify 또한 같은 접근 방식을 G와 D에 적용 - Colorization 연속성/일관성 위해

 

Pretrained ResNet Backbone 가진 U-Net 사용(G모델)

Dynamic U-Net에 기반

3가지 DeOldify Model의 차이는 여기서 온다

  • Artistic : ResNet 34 backbone , decoder은 width(filter 수) 보다 depth(layer 수)를 강조 → colorization, high detailed renders에 초점 → 일관성은 조금 떨어짐
  • Stable, Video : ResNet 101 backbone, decoder은 depth보다 width를 강조 → 안정적인 결과 생성에 초점

ResNet backbone은 그 자체로 scene feature recognition으로 적합

Dynamic Unet은 이미지 생성 응용에서 우수하였다

왜?

  • encoder-decoder cross connection, 학습 가능 blur, pixel shuffle 등 주요 세부사항을 보전해 학습하기 때문 (?)

왜 Pretrained U-Net이어야 하는가?

  • ImageNet 기반 object detection 대해 training 되어 있어 training시간 감소(transfer learning 관점)

NoGAN

  1. Pretrain the GProposed Solution에서 마지막에 첨부한 transfer learning technique for generative modeling 방식인 듯 합니다.SA도 이 단계에서 잘 train되는 것이 중요
  2. GAN적용 이전에 최대한 training 시켜줘야 한다.
  3. G를 일반적이고 제어가 더 쉬운 방식으로 훈련 - Perceptual Loss로 스스로 학습
  4. Pretrained G에서 생성된 이미지들을 저장한다
  5. Critic을 Binary Classifier로 pretrain시킨다Real/Fake Binary Classifier로 훈련이 Pretrained 된 critic을 다른 image-to-image task에 적용할 수 있다. ex) Colorization → Super Resolution
  6. 여기서 fake images는 2에서 저장한 이미지들
  7. G의 경우와 같이 더 일반적이고 제어가 쉬운 방법으로 최대한 critic training
  8. Normal GAN Setting에서의 G와 D training이 inflection point를 지나면 더 이상의 훈련은 의미가 없고 오히려 결과물에 결함이 발생
  9. infelction point는 성능 지표? 에서를 말하는 걸까요..?
  10. pretraining 덕에 critic이 G의 adjustment를 아주 빠르게 해줌. (일종의 inflection point에 다다르기 전 짧은 시간안에)

😯 한가지 중요한 기존 GAN과 다른 훈련법

G training 시작 전에 D가 충족시켜야 하는 Loss Threshold를 지정

Critic(D)가 G에 constructive gradients를 제공할 수 있도록 "catch up"위한 training을 계속함.

catch up은 주로 G와 D pretraining 직후 GAN훈련을 시작할 때 발생

catch up...?

※ DeOldify 의 경우

이 포인트(inflection point)까지 training하기 위해 ImageNet dataset의 약 1%~3%만 interations실행하거나 batch size 5로 2600~7800 interations 실행

⏱️ 약 30~90분 보통 GAN의 훈련이 3~5일 걸리는 것에 비하면 아주아주아주 짧은 시간

명백한 benefit 없을 때 까지 2-4단계를 반복합니다. 약 5회 반복했다고 함.

224 px ~ 360 px 에서 실험했을 때 잘 rendering되었다고 함!

👀실패한 것들, 약점들

  1. WGAN 기반으로 변형 시도 → Colorization에 적합하지 않아서 SAGAN으로 변경.
  2.  
  3. Normalization 방식
    • G에서만 Spectral Normalization → 느리고 불안정
    • G의 Output에서만 Batch Normalization → 느리고 이점도 없음
    • G에서 Weight Normalization → 느리고 결과가 별로였다. 그러나 Super Resolution 위한 NoGAN에서 가장 잘 작동했다 적용했다는 말일까요
  4. 여러 Loss 함수 적용하지만 GAN Loss와 Non-GAN Loss를 나란히 동작시키는 것에 실패! (불가능하다고 언급)NoGAN의 핵심은 PretrainingNon GAN Loss와 비교하여 더 Colorful한 결과를 나타낸다.Perceptual Loss + gram style loss and wasserstein distance 시도
  • 배제 불가능한 부분이지만 GAN에 적용시 주황/노랑 변색이 발생했고
  • MSE, L1같은 Non-GAN Loss는 회색/갈색에 베팅을 장려하기 때문에 색상이 흐릿한 경향을 보였다.
  • GAN으로 switch하기 전 rendering quality에서 최대한 pretraining시키는 것이 중요한데 이것을 성공시키는 것이 Perceptual Loss
  • Perceptual Loss가 경험적으로 가장 잘 동작하였기 때문에 채택
  • Non-GAN Loss(e.g. MSE, L1) 과 GAN Loss의 상호작용은 중요하지만 까다롭고 실험을 통해서만 가능하다 . NoGAN의 빠른 실험 결과 도출로 인해 이 부분이 조금 수월
  • model parameter 감소 시도
    • Video/Stable model에선 대부분 레이어에 대해 decoder측에서 1000개의 filter
    • Artistic에선 Dynamic Unet의 1.5배 필터 수 사용 - Critic도 256의 시작 width가짐 (일반적으로는 64나 128)
  • DeOldify는 모델크기가 큼.
728x90