2021. 5. 10. 12:14ㆍComputer vision ღ'ᴗ'ღ
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
- Pretrain the GProposed Solution에서 마지막에 첨부한 transfer learning technique for generative modeling 방식인 듯 합니다.SA도 이 단계에서 잘 train되는 것이 중요
- GAN적용 이전에 최대한 training 시켜줘야 한다.
- G를 일반적이고 제어가 더 쉬운 방식으로 훈련 - Perceptual Loss로 스스로 학습
- Pretrained G에서 생성된 이미지들을 저장한다
- Critic을 Binary Classifier로 pretrain시킨다Real/Fake Binary Classifier로 훈련이 Pretrained 된 critic을 다른 image-to-image task에 적용할 수 있다. ex) Colorization → Super Resolution
- 여기서 fake images는 2에서 저장한 이미지들
- G의 경우와 같이 더 일반적이고 제어가 쉬운 방법으로 최대한 critic training
- Normal GAN Setting에서의 G와 D training이 inflection point를 지나면 더 이상의 훈련은 의미가 없고 오히려 결과물에 결함이 발생
- infelction point는 성능 지표? 에서를 말하는 걸까요..?
- 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되었다고 함!
👀실패한 것들, 약점들
- WGAN 기반으로 변형 시도 → Colorization에 적합하지 않아서 SAGAN으로 변경.
- Normalization 방식
- G에서만 Spectral Normalization → 느리고 불안정
- G의 Output에서만 Batch Normalization → 느리고 이점도 없음
- G에서 Weight Normalization → 느리고 결과가 별로였다. 그러나 Super Resolution 위한 NoGAN에서 가장 잘 작동했다 적용했다는 말일까요
- 여러 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는 모델크기가 큼.
'Computer vision ღ'ᴗ'ღ' 카테고리의 다른 글
yolo v3 형식 data를 yolo v5 형식 data로 변경하기 (0) | 2021.02.23 |
---|---|
google Open Image dataset 사용해 YOLO training / OID_v3_toolkit 사용하기 (0) | 2021.01.22 |
keras-yolo3 opensource package (0) | 2021.01.22 |
YOLO (0) | 2021.01.09 |
SSD Network (0) | 2021.01.08 |