[구현] 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_dataDIV2K 파일이 위치하는 디렉토리로 변경하면 코드가 잘 돌아가는 것을 확인할 수 있습니다. 실행코드 또한 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

댓글남기기