تومر جاربر، توم تيرير
الجامعة المفتوحة في إسرائيل، وجامعة بار إيلان
يحتوي هذا المستودع على إصدار التعليمات البرمجية لاستعادة الصورة عن طريق تقليل الضوضاء لنماذج الانتشار باستخدام التوجيه المشروط التكراري ( DDPG ).
الفكرة الرئيسية: تحديد توجيه الإسقاط الخلفي (BP) (الذي تم استخدامه مؤخرًا تحت أسماء "التوجيه المعكوس الزائف" أو "المدى/الفضاء الفارغ") كإصدار مشروط مسبقًا لتوجيهات المربعات الصغرى (LS)، وبالتالي، ابتكار تقنية توجيه باستخدام الشروط المسبقة المعتمدة على التكرار والتي تنتقل من BP إلى LS، وتتمتع بفوائد كليهما.
يمكن تكييف الكود بسهولة شديدة مع الدقة الفائقة وإزالة التشويش باستخدام أي نواة.
من الممكن أيضًا التوسع في نماذج القياس الخطية الأخرى.
لاستنساخ هذا المستودع والكود، قم بتشغيل:
git clone https://github.com/tirer-lab/DDPG.git
هناك العديد من التبعيات المطلوبة، ويمكنك تثبيتها عبر النقطة أو عامل الإرساء . تمت كتابة الكود واختباره على 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، لاستخدامه في التشغيل (بعد استنساخ هذا الريبو والقرص cd
إليه):
docker build .
إذا كنت ترغب في تشغيل IDPG بدلاً من DDPG ، فيمكنك تبديل أوامر CMD
في ملف Docker.
لتحميل النماذج المستخدمة في الورقة:
يمكن العثور على نقطة التفتيش النموذجية CelebA-HQ هنا. قم بتنزيله ووضعه في DDPG/exp/logs/celeba/
.
يمكن العثور على نقطة تفتيش نموذج ImageNet هنا. قم بتنزيله ووضعه في DDPG/exp/logs/imagenet/
.
قم بتشغيل الأوامر التالية للحصول على نتائج DDPG فورية:
المشاهير بلا ضجة 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 Drive] [Baidu Drive].
بعد تنزيل مجموعات البيانات، ضع كل مجموعة بيانات في الدليل ذي الصلة:
DDPG/exp/datasets/celeba/
.DDPG/exp/datasets/imagenet/
.imagenet_val_1k.txt
من الروابط أعلاه أيضًا، ثم ضعه في DDPG/exp
. أعد تسمية هذا الملف إلى imagenet_val.txt
حتى يتمكن الرمز من استخدامه. بالنسبة لإلغاء الحركة، استخدمنا مستودع git التالي لإنشاء النواة: https://github.com/LeviBorodenko/motionblur.
انسخ هذا المستودع وانسخ ملف motionblur.py إلى DDPG/functions
.
كما هو مذكور في الورقة، استخدمنا حبات تشويش الحركة 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) وتشغيل IDPG .gamma
: معلمة غاما الفائقة المستخدمة في الورقة.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 :
من أجل إعادة إنتاج نتائج الورقة، هناك نصين للتقييم:
يحتوي كلا البرنامجين النصيين على جميع المهام المذكورة في الورقة مع التكوين ذي الصلة.
يمكن العثور على نتائج إضافية في الورقة، بما في ذلك نتائج 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.