사용한 모델 논문: https://arxiv.org/abs/2108.10257
공식 코드(파이토치): https://github.com/JingyunLiang/SwinIR
모델 코드 설명: https://github.com/alzoqm/transformer_model/tree/main/models/swinIR
kaggle danbooru2020 dataset: https://www.kaggle.com/muoncollider/danbooru2020
- danbooru dataset의 경우 한 폴더에 모든 파일이 있는 것이 아닌 약 200개의 분할된 폴더에 2000~3000개씩 분할되어 있음
- 이러한 점을 향후 ram 절약을 위해 활용함. (Training Method 참조)
parameter name | value | parameter name | value |
---|---|---|---|
IMG_SIZE | 64 | PATCH_SIZE | 1 |
IN_CHANS | 3 | EMB_SIZE | 180 |
DEPTHS | [6, 6, 6, 6] | NUM_HEADS | [6, 6, 6, 6] |
WINDOW_SIZE | 4 | MLP_RATIO | 4 |
QKV_BIAS | True | DROP_RATE | 0.1 |
ATTN_DROP_RATE | 0.1 | DROP_PATH_RATE | 0.1 |
APE | False | PATCH_NORM | True |
UPSCALE | 2 | IMG_RANGE | 255 |
RESI_CONNECTION | '3conv' | BATCH_SIZE | 8 |
- colab pro의 TPU 이외의 버전에서 학습된 모델을 불러올시 문제가 발생함(GPU 및 CPU로 이미지를 생성할시 이미지 깨짐 현상 발생)
- 학습하기 위해 마련한 모든 데이터를 한번에 pipeline에 넣을 경우 colab에서 할당하는 ram이 버티지를 못함
- 큰 이미지를 넣을 경우 vram 역시 한계가 있음
- 1번의 문제를 해결하고자, 모든 데이터를 한번에 pipeline에 넣기 보단, 2000~3000개씩 넣어 학습을 진행함(epoch값에 해당하는 이미지만 불러옴)
- 2번의 문제를 해결하기 위해, 사이즈가 512x512 데이터를 64 x 64로 분할하여 학습을 진행함.(new_swinir_sr 함수 image_slice참조)
Low Resolution | Output High Resolution(2x) |
---|---|
![]() |
![]() |
waifu2x(anotherSRmodel) | Low Resolution | SwinIR High Resolution(2x) |
---|---|---|
![]() |
![]() |
![]() |