본 포스팅에서는 Lighting Every Darkness in Two Pairs: A Calibration-Free Pipeline for RAW Denoising(ICCV 2023) 논문의 실험결과 재현 내용을 다뤘습니다.
논문 링크 : https://arxiv.org/abs/2308.03448v1
Lighting Every Darkness in Two Pairs: A Calibration-Free Pipeline for RAW Denoising
Calibration-based methods have dominated RAW image denoising under extremely low-light environments. However, these methods suffer from several main deficiencies: 1) the calibration procedure is laborious and time-consuming, 2) denoisers for different came
arxiv.org
본 포스팅에서는 실험결과 재현을 위해서 A6000을 사용하였다.
1) Installation
# LED 설치 과정이 한번에 진행되는 코드 bash install.sh # 가상환경 생성 conda create -n name python=3.8 -y # 가상환경 활성화 conda activate name # LED 파일 설치 git clone https://github.com/Srameo/LED.git # 필수 패키지 설치 pip install -r requirements.txt # LED을 위해 develop을 설치 python setup.py develop # RaWPy 및 LibRaw를 다운로드 후 압축풀기 mkdir -p downloads/ wget https://www.libraw.org/data/LibRaw-0.21.1.zip -O downloads/LibRaw-0.21.1.zip python scripts/download_gdrive.py --id 1EuJsbZ_a_YJHHcGAVA9TXXPnGU90QoP4 --save-path downloads/rawpy.zip unzip downloads/LibRaw-0.21.1.zip -d downloads/ unzip downloads/rawpy.zip -d downloads/ # LiRaW를 컴파일하고 설치하기 cd downloads/LibRaw-0.21.1 ./configure make sudo make install # RawPy를 설치하기 cd ../rawpy cd ../.. RAWPY_USE_SYSTEM_LIBRAW=1 pip install -e . |
2) Data Preparation
# SID, LED 데이터 다운로드 후, datasets/ICCV-LED 폴더에 Sony, ELD_sym 이름으로 추가하기 mkdir datasets/ICCV23-LED && cd datasets/ICCV23-LED In -s your/path/to/SID/Sony ./Sony In -s your/path/to/ELD ./ELD_sym |
다음과 같은 오류가 발생했다. 해당 오류는 https://pypi.org/project/rawpy/ 홈페이지에 제공하는 방법으로 해결하였다.
# Extract patch for training. python scripts/data_preparation/extract_bayer_subimages_with_metadata.py \ --data-path datasets/ICCV23-LED/Sony/long \ --save-path datasets/ICCV23-LED/Sony_train_long_patches \ --suffix ARW \ --n-thread 10 # Convert the ELD data into SID data structure python scripts/data_preparation/eld_to_sid_structure.py \ --data-path datasets/ICCV23-LED/ELD_sym \ --save-path datasets/ICCV23-LED/ELD # convert SID SonyA7S2 python scripts/data_preparation/bayer_to_npy.py --data-path datasets/ICCV23-LED/Sony --save-path datasets/ICCV23-LED/Sony_npy --suffix ARW --n-thread 8 # convert ELD SonyA7S2 python scripts/data_preparation/bayer_to_npy.py --data-path datasets/ICCV23-LED/ELD/SonyA7S2 --save-path datasets/ICCV23-LED/ELD_npy/SonyA7S2 --suffix ARW --n-thread 8 # convert ELD NikonD850 python scripts/data_preparation/bayer_to_npy.py --data-path datasets/ICCV23-LED/ELD/NikonD850 --save-path datasets/ICCV23-LED/ELD_npy/NikonD850 --suffix nef --n-thread 8 # convert ELD CanonEOS70D python scripts/data_preparation/bayer_to_npy.py --data-path datasets/ICCV23-LED/ELD/CanonEOS70D --save-path datasets/ICCV23-LED/ELD_npy/CanonEOS70D --suffix CR2 --n-thread 8 # convert ELD CanonEOS700D python scripts/data_preparation/bayer_to_npy.py --data-path datasets/ICCV23-LED/ELD/CanonEOS700D --save-path datasets/ICCV23-LED/ELD_npy/CanonEOS700D --suffix CR2 --n-thread 8 |
3) Training and Evaluation
# Train python led/train.py -opt options/LED/pretrain/CVPR20_ELD_Setting.yaml "-opt" 옵션의 경로는 실험하고자 하는 pretrained 모델에 따라 다르게 설정된다. |
# Evaluation python scripts/benckmark.py -t test -p pretrained/network_g/LED_Deploy_SID_SonyA7S2_CVPR20_Setting_Ratio100-300.pth --dataset SID SonyA7S2 --led --save_img "-p" 옵션의 경로는 실험하고자 하는 pretrained 모델에 따라 다르게 설정된다. |
4) Reproduction result
Method | x100 | x200 | x300 | |||
PSNR | SSIM | PSNR | SSIM | PSNR | SSIM | |
Table1 | 41.98 | 0.95 | 39.34 | 0.93 | 36.67 | 0.91 |
재현 결과 | 42.05 | 0.95 | 39.46 | 0.93 | 36.75 | 0.92 |
위 표는 6-noisy-clean pairs LED에 대한 논문과 재현 결과의 정량적 비교를 보여주여, Method는 논문의 Table 1의 결과를 나타낸다.
실헌 결과를 통해 논문 결과와 재현 결과가 유사함을 확인할 수 있었으며, 본 포스팅에서 정량적 결과가 신뢰할 만한 것으로 판단된다.
5) 참고 문헌
[1] Xin Jin, Jia-Wen Xiao, Ling-Hao Han, Chunle Guo, Xialei Liu, Chongyi Li, and Ming-Ming Cheng, " Make Explicit Calibration Implicit: Calibrate Denoiser Instead of the Noise Model"