โทเมอร์ การ์เบอร์, ทอม ไทเรอร์
มหาวิทยาลัยเปิดแห่งอิสราเอลและมหาวิทยาลัย Bar-Ilan
พื้นที่เก็บข้อมูลนี้ประกอบด้วยรหัสที่เผยแพร่สำหรับ การฟื้นฟูรูปภาพโดย Denoising Diffusion Models พร้อม Iteratively Precondition Guidance ( DDPG )
แนวคิดหลัก: การระบุแนวทางการฉายภาพด้านหลัง (BP) (ใช้เมื่อเร็ว ๆ นี้ภายใต้ชื่อคำแนะนำ "pseudoinverse" หรือ "range/null-space") เป็นเวอร์ชันที่มีการปรับสภาพล่วงหน้าของแนวทางกำลังสองน้อยที่สุด (LS) และด้วยเหตุนี้ จึงคิดค้นเทคนิคการแนะนำด้วย การปรับสภาพล่วงหน้าที่ขึ้นอยู่กับการวนซ้ำซึ่งเปลี่ยนจาก BP ไปยัง LS โดยได้รับประโยชน์จากทั้งสองอย่าง
โค้ดสามารถปรับให้เข้ากับความละเอียดสูงสุดและแก้ไขภาพเบลอได้อย่างง่ายดายด้วยเคอร์เนลใดๆ
ขยายไปยังโมเดลการวัดเชิงเส้นอื่นๆ ได้ด้วย
หากต้องการโคลนที่เก็บนี้และโค้ด ให้รัน:
git clone https://github.com/tirer-lab/DDPG.git
จำเป็นต้องมีการขึ้นต่อกันหลายอย่าง และคุณสามารถติดตั้งผ่าน pip หรือ docker ได้ โค้ดนี้เขียนและทดสอบบน Python 3.8 และ PyTorch 1.9.0
pip install torch torchvision lpips numpy tqdm pillow pyYaml pandas scipy
ติดตั้งเวอร์ชันของ torch และ torchvision ที่เกี่ยวข้องตามการตั้งค่าของคุณ เช่น:
pip install torch==1.9.0+cu111 torchvision==0.10.1+cu111 -f https://download.pytorch.org/whl/torch_stable.html
พื้นที่เก็บข้อมูลมี Dockerfile เพื่อใช้งาน (หลังจากโคลน repo นี้และ cd
ไปยังมัน):
docker build .
หากคุณต้องการรัน IDPG แทน DDPG คุณสามารถสลับคำสั่ง CMD
ในไฟล์ Docker ได้
หากต้องการดาวน์โหลดโมเดลที่ใช้ในกระดาษ:
สามารถดูจุดตรวจโมเดล CelebA-HQ ได้ที่นี่ ดาวน์โหลดและวางลงใน DDPG/exp/logs/celeba/
สามารถดูจุดตรวจสอบโมเดล ImageNet ได้ที่นี่ ดาวน์โหลดและวางลงใน DDPG/exp/logs/imagenet/
รันคำสั่งต่อไปนี้เพื่อรับผลลัพธ์ DDPG ทันที:
CelebA SRx4 ไร้เสียง:
python main.py --config celeba_hq.yml --path_y celeba_hq --deg sr_bicubic --sigma_y 0
-i DDPG_celeba_sr_bicubic_sigma_y_0 --inject_noise 1 --zeta 0.7 --step_size_mode 0
--deg_scale 4 --operator_imp SVD
CelebA Gaussian เบลอด้วย sigma_y=0.05:
python main.py --config celeba_hq.yml --path_y celeba_hq --deg deblur_gauss --sigma_y 0.05
-i DDPG_celeba_deblur_gauss_sigma_y_0.05 --inject_noise 1 --gamma 8 --zeta 0.5 --eta_tilde 0.7
--step_size_mode 1 --operator_imp FFT
ผลลัพธ์จะอยู่ใน DDPG/exp/image_samples/
ชุดข้อมูลที่ใช้ในรายงานคือ CelebA-HQ และ ImageNet ทั้งสองสามารถพบได้ใน: [Google ไดรฟ์] [ไดรฟ์ Baidu]
หลังจากที่คุณดาวน์โหลดชุดข้อมูลแล้ว ให้วางชุดข้อมูลแต่ละชุดในไดเร็กทอรีที่เกี่ยวข้อง:
DDPG/exp/datasets/celeba/
DDPG/exp/datasets/imagenet/
imagenet_val_1k.txt
จากลิงก์ด้านบนด้วย และวางลงใน DDPG/exp
เปลี่ยนชื่อไฟล์นี้เป็น imagenet_val.txt
เพื่อให้โค้ดใช้งานได้ สำหรับ deblur การเคลื่อนไหว เราใช้พื้นที่เก็บข้อมูล git ต่อไปนี้เพื่อสร้างเคอร์เนล: https://github.com/LeviBorodenko/motionblur
โคลนพื้นที่เก็บข้อมูลนั้นและคัดลอกไฟล์ Motionblur.py ลงใน DDPG/functions
ตามที่กล่าวไว้ในรายงาน เราใช้เคอร์เนล deblur การเคลื่อนไหวที่มี intensity=0.5
คำสั่งหลามทั่วไปในการรันโค้ดคือ:
python main.py --config {config}.yml --path_y {dataset_folder} --deg {deg} --sigma_y {sigma_y}
-i {image_folder} --inject_noise {inject_noise} --gamma {gamma} --zeta {zeta} --eta_tilde {eta_tilde}
--step_size_mode {step_size_mode} --operator_imp {operator_implementation} --save_y {save_observation}
--scale_ls {scale_for_gLS}
ที่ไหน:
config
: ชื่อของ yml ที่จะใช้ในการกำหนดค่าโมเดลที่ใช้dataset_folder
: ชื่อของไดเร็กทอรีที่มีชุดข้อมูลรูปภาพdeg
: ประเภทการย่อยสลายที่จะใช้ ใช้ในกระดาษ: sr_bicubic
, deblur_gauss
, motion_deblur
sr_bicubic
จำเป็นต้องมีแฟล็ก --deg_scale 4
ด้วยsigma_y
: ระดับเสียง ระดับเสียงที่ใช้ในกระดาษ: 0, 0.01, 0.05, 0.1
.image_folder
: ชื่อของไดเรกทอรีสำหรับภาพที่ส่งออกinject_noise
: ว่าจะฉีดเสียงรบกวน (1) และรัน DDPG หรือไม่ (0) และรัน IDPGgamma
: ไฮเปอร์พารามิเตอร์แกมมาที่ใช้ในกระดาษzeta
: ไฮเปอร์พารามิเตอร์ Zeta ที่ใช้ในกระดาษeta_tilde
: ไฮเปอร์พารามิเตอร์ Eta ที่ใช้ในกระดาษstep_size_mode
: โหมดขนาดขั้นตอนใดที่จะใช้ ในรายงาน step_size_mode=0
(คงที่ 1) ใช้สำหรับ IDPG, DDPG ไร้เสียง และ DDPG ที่มีระดับเสียง 0.01
step_size_mode=1
(การสลายตัวบางอย่าง) ถูกใช้สำหรับการรัน DDPG ที่เหลือoperator_implementation
- ว่าจะใช้ SVD
หรือ FFT
ค่าเริ่มต้นเป็น FFT
scale_ls
- ไฮเปอร์พารามิเตอร์ c
ที่ใช้ในกระดาษ ซึ่งเป็นมาตราส่วนแนะนำกำลังสองน้อยที่สุด ค่าเริ่มต้นเป็น 1
save_observation
- จะบันทึกภาพที่สังเกตได้ ( y
) หรือไม่ ค่าเริ่มต้นเป็น False
นอกจากนี้ คุณยังสามารถกำหนดค่าขั้นตอนการสุ่มตัวอย่างได้ (ค่าเริ่มต้นคือ 100
ในกระดาษ) ในการกำหนดค่า yml แต่ละรายการภายใต้ไดเรกทอรี configs
( celeba_hq.yml
, imagenet_256.yml
และ imagenet_256_cc.yml
) คุณสามารถเปลี่ยนแปลงได้:
sampling :
T_sampling :
เพื่อที่จะทำซ้ำผลการวิจัย มีสคริปต์การประเมินผล 2 สคริปต์:
สคริปต์ทั้งสองมีงานทั้งหมดที่กล่าวถึงในรายงานพร้อมการกำหนดค่าที่เกี่ยวข้อง
ผลลัพธ์เพิ่มเติมสามารถพบได้ในรายงาน รวมถึงผลลัพธ์ PSNR และ LPIPS เมื่อเปรียบเทียบกับคู่แข่ง
หากคุณใช้พื้นที่เก็บข้อมูลนี้ในการค้นคว้า โปรดอ้างอิงบทความ:
@inproceedings{garber2023image,
title={Image Restoration by Denoising Diffusion Models with Iteratively Preconditioned Guidance},
author={Garber, Tomer and Tirer, Tom},
booktitle={Proceedings of the IEEE/CVF conference on computer vision and pattern recognition},
year={2024}
}
การใช้งานนี้ได้รับแรงบันดาลใจจาก https://github.com/bahjat-kawar/ddrm และ https://github.com/wyhuai/DDNM