프로젝트 ①
개요
한 번쯤은 20여 년 전 찍어놓은 소중한 사진들을 지금 발전된 기술로 다시 찍고 싶은 생각이 들 때가 있습니다. 그런 아쉬움을 조금이나마 보완해 보고 싶은 마음에
이 프로젝트를 진행하게 되었습니다.
이 프로젝트는 Transformer 기반의 SwinIR 모델을 활용해 이미지를 4배 스케일업하는데 목적을 두었습니다. 또한 FastAPI와 GCP 서버를
이용해 데모를 체험할 수 있도록 웹으로 구현했습니다.
이 프로젝트로 멈추는 것이 아니라 이러한 기반을 토대로 의료 자료, 저화질의 CCTV, 위성 이미지등 다양한 컴퓨터 비전 분야에서도 발전시키는 데 유용할
것입니다.
사용 기술
데이터 수집 및 처리 과정
ㆍ 약 25,000장의 고해상도 이미지로 이뤄진 Unsplash 공개 데이터셋 사용
ㆍ 데이터 증강 → RandomCrop, ColorJitter, Flip, RandomRotation
모델 구조
ㆍ First Conv Layer
ㆍ Transformer Blocks
└ 3 × RSTB
(Residual Swin Transformer Block)
└ 내부 :
Window Attention + Shifted Window + Residual Connection
ㆍ Upsampling
└
PixelShuffle × 2 → 4배 확대
ㆍ Output Layer
└ 고해상도 이미지
생성
성능 지표
ㆍ PSNR : 27.69 dB
ㆍ SSIM : 0.8351
ㆍ L1 Loss : 0.1267
ㆍ Training Curve :
결과
체험해 보기
고찰
ㆍ 데이터 수집 과정
- 0.
SwinIR 학습을 위해 해상도 512×512 이상, 수 만장 이상 데이터셋 필요
- 1. DIV2K, Flickr2K → 수 천장
이미지의 데이터셋으로 학습하기엔 적은 데이터 규모
- 2. Open Image v4, v6, v7 시도
→ 대량 다운로드 제한으로 접근 비허용 이슈 발생
- 3. Unsplash → 약 25,000장의 다양한 주제, 고해상도, 다운로드 이슈 없음 →
선택
ㆍ 초기 모델 구성
- 고해상도
이미지, 높은 Batch Size 및 Embed dim 값 설정 → Out of Memory 발생
- 증강으로 RandomRotation (0º,
90º, 180º, 270º 중 무작위 선택) 적용
- 초기 학습 시 웜업 스케쥴 미적용
ㆍ 개선 과정
- HR
Size에 맞게 입력 이미지 축소, Train Batch Size=16, Embed dim=256 설정
- 학습 불안정 발생 → RandomRotation
90º 단일로 증강 축소
- 초기 Loss값 불안정으로 인한 Early
Stopping 발생 → 웜업 스케줄 적용
ㆍ 최종 결과
- 100에포크
시점 모델을 최종 결과로 선정
- Dice Score :
72.96%
ㆍ 느낀 점
- 웜업 스케줄의
중요성 확인
- 메모리 부족,
학습 시간, 제한적인 PC 환경 등으로 다양한 실험이 어려웠음
└ 모델이 수렴 과정이기 때문에 추가 학습 시 더
나은 성능 기대되었음
- Bicubic,
L1 Loss의 한계 → 해상도를 올라가지만 디테일 적으로 뭉게짐 발생
└ GAN Loss 등을 적용하여 추가 실험 및
비교 해보지 못한 점이 아쉬움