본문 바로가기

실험결과 재현

[실험결과 재현 #5] Lighting Every Darkness in Two Pairs: A Calibration-Free Pipeline for RAW Denoising, ICCV 2023

본 포스팅에서는 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을 사용하였다. 

 

LED 모델 구조

 

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"