[구현] EDSR using PyTorch
업데이트:
이 논문에 대한 실험을 재현해보았습니다. 코드는 github에서 제공된 코드를 이용하였습니다. Single scale에 대한 EDSR을 학습시키는데에는 약 100시간 정도가 필요하기 때문에 EDSR 대신, EDSR의 baseline을 학습시켜보도록 하겠습니다. 하나의 baseline 모델을 학습시키는데에 약 5시간 정도가 소요됨을 확인할 수 있었습니다.
Environment
- GPU: GeForce RTX 2080Ti, CUDA 10.2
- OS: Ubuntu 18.04.4 LTS
- PyTorch: 1.3.1, torchvision: 0.3.2
EDSR-PyTorch github
github에서는 1.2.0을 기반으로 짜여진 코드라 하는데, 실제로 1.3.1에서 돌려보았을 때에도 큰 문제 없이 잘 돌아감을 확인할 수 있었습니다. 코드 실행을 위해서 src/option.py
에서 --dir_data
를 DIV2K 파일이 위치하는 디렉토리로 변경하면 코드가 잘 돌아가는 것을 확인할 수 있습니다. 실행코드 또한 src/demo.sh
에 예시로 나와 있습니다.
L1 loss function
x2 | x3 | x4 |
PSNR on each epoch
x2 | x3 | x4 |
PSNR value on benchmark dataset
각 스케일에 대해서 PSNR 값은 모든 데이터 셋에서 x2 모델이 가장 좋은 수치를 보임을 확인할 수 있었습니다.
- x2
-
Evaluation: 100%|█████████████████████████████████████████████| 5/5 [00:00<00:00, 6.28it/s] [Set5 x2] PSNR: 38.041 (Best: 38.041 @epoch 1) 100%|███████████████████████████████████████████| 14/14 [00:02<00:00, 5.81it/s] [Set14 x2] PSNR: 33.599 (Best: 33.599 @epoch 1) 100%|█████████████████████████████████████████| 100/100 [00:10<00:00, 9.60it/s] [B100 x2] PSNR: 32.199 (Best: 32.199 @epoch 1) 100%|█████████████████████████████████████████| 100/100 [00:53<00:00, 1.89it/s] [Urban100 x2] PSNR: 32.110 (Best: 32.110 @epoch 1) Forward: 66.92s Evaluation: 100%|█████████████████████████████████████████| 100/100 [03:45<00:00, 2.25s/it] [DIV2K x2] PSNR: 34.671 (Best: 34.671 @epoch 1) Forward: 225.55s
-
- x3
-
Evaluation: 100%|█████████████████████████████████████████████| 5/5 [00:00<00:00, 7.22it/s] [Set5 x3] PSNR: 34.492 (Best: 34.492 @epoch 1) 100%|███████████████████████████████████████████| 14/14 [00:01<00:00, 9.07it/s] [Set14 x3] PSNR: 30.406 (Best: 30.406 @epoch 1) 100%|█████████████████████████████████████████| 100/100 [00:06<00:00, 15.63it/s] [B100 x3] PSNR: 29.143 (Best: 29.143 @epoch 1) 100%|█████████████████████████████████████████| 100/100 [00:31<00:00, 3.19it/s] [Urban100 x3] PSNR: 28.244 (Best: 28.244 @epoch 1) Forward: 40.18s Evaluation: 100%|█████████████████████████████████████████| 100/100 [02:09<00:00, 1.29s/it] [DIV2K x3] PSNR: 30.999 (Best: 30.999 @epoch 1) Forward: 129.20s
-
- x4
-
Evaluation: 100%|█████████████████████████████████████████████| 5/5 [00:00<00:00, 7.48it/s] [Set5 x4] PSNR: 32.279 (Best: 32.279 @epoch 1) 100%|███████████████████████████████████████████| 14/14 [00:01<00:00, 11.08it/s] [Set14 x4] PSNR: 28.656 (Best: 28.656 @epoch 1) 100%|█████████████████████████████████████████| 100/100 [00:05<00:00, 19.57it/s] [B100 x4] PSNR: 27.619 (Best: 27.619 @epoch 1) 100%|█████████████████████████████████████████| 100/100 [00:24<00:00, 4.10it/s] [Urban100 x4] PSNR: 26.169 (Best: 26.169 @epoch 1) Forward: 31.75s Evaluation: 100%|█████████████████████████████████████████| 100/100 [01:45<00:00, 1.05s/it] [DIV2K x4] PSNR: 29.036 (Best: 29.036 @epoch 1) Forward: 105.21s
-
Image result comparison
실제로 모델에서 재구성되어 생성된 SR 이미지들을 비교해보면 PSNR 값이 그런것 처럼 x2가 HR과 가장 유사하고, x3, x4의 이미지는 시각적으로 화질이 좋지 않음을 볼 수 있었습니다.
Urban100
HR | x2 | x3 | x4 |
DIV2K
HR | x2 | x3 | x4 |
댓글남기기