กล่องเครื่องมือ Pytorch สำหรับการประเมินคุณภาพของภาพกล่องเครื่องมือ IQA ที่มี Python และ Pytorch บริสุทธิ์ โปรดดูการประเมินคุณภาพที่ยอดเยี่ยมสำหรับการสำรวจวิธีการที่ครอบคลุมเกี่ยวกับวิธีการ IQA และลิงก์ดาวน์โหลดสำหรับชุดข้อมูล IQA
นี่คือกล่องเครื่องมือการประเมินคุณภาพภาพที่ครอบคลุม (IQA) ที่สร้างขึ้นด้วย Python และ Pytorch บริสุทธิ์ เราให้การปรับปรุงการอ้างอิงกระแสหลักจำนวนมาก (FR) และไม่มีตัวชี้วัดการอ้างอิง (NR) (ผลลัพธ์ถูกสอบเทียบด้วยสคริปต์ MATLAB อย่างเป็นทางการหากมีอยู่) ด้วยการเร่งความเร็วของ GPU การใช้งานส่วนใหญ่ของเราจะเร็วกว่า MATLAB มาก โปรดดูเอกสารต่อไปนี้สำหรับรายละเอียด:
- การ์ดรุ่น | ️การ์ดชุดข้อมูล | - ดาวน์โหลดชุดข้อมูล | เอกสาร ? เกณฑ์มาตรฐาน
fid ด้วยระยะทาง MMD ใช้กับ fid_metric(..., distance_type='mmd', kernel_type='rbf') อ้างถึง CMMD สำหรับรายละเอียดเพิ่มเติม ขอบคุณ Ina สำหรับการมีส่วนร่วมfid_dinov2 , อ้างถึง DGM-Eval สำหรับรายละเอียดเพิ่มเติมpyiqa.load_dataset เพื่อการโหลดชุดข้อมูลทั่วไปหลายชุดได้ง่ายcompare2score และ deepdc ขอบคุณ Hanwei สำหรับการทำงานที่ยอดเยี่ยมของพวกเขาและโปรดดูเอกสารอย่างเป็นทางการของพวกเขาสำหรับรายละเอียดเพิ่มเติม!topiq_nr-face โดยการฝึกอบรมด้วยชุดข้อมูล GCFIQA ขอบคุณงานของพวกเขา! -msswd ที่เสนอใน MS-SWD (ECCV2024) ขอบคุณงานของพวกเขา! -qalign และ qalign_8bit ต้องใช้ หน่วยความจำ GPU น้อยกว่า 6GBqalign_4bit และ qalign_8bit ด้วยความต้องการหน่วยความจำน้อยกว่ามากและประสิทธิภาพที่คล้ายกันpiqe และ niqe_matlab, brisque_matlab พร้อมพารามิเตอร์ MATLAB เริ่มต้น (ผลลัพธ์ได้รับการสอบเทียบด้วย MATLAB R2021B)lpips+ และ lpips-vgg+ ที่เสนอใน TopIQ กระดาษของเราarniqa และความแปรปรวนของมันที่ได้รับการฝึกฝนในชุดข้อมูลที่แตกต่างกันอ้างถึง repo อย่างเป็นทางการที่นี่ ขอบคุณสำหรับการบริจาคจาก Lorenzo Agnolucci?inception_score และจุดเข้าคอนโซลด้วยคำสั่ง pyiqaunique อ้างถึง repo อย่างเป็นทางการที่นี่ ขอบคุณสำหรับการบริจาคจาก Weixia Zhang? # Install with pip
pip install pyiqa
# Install latest github version
pip uninstall pyiqa # if have older version installed already
pip install git+https://github.com/chaofengc/IQA-PyTorch.git
# Install with git clone
git clone https://github.com/chaofengc/IQA-PyTorch.git
cd IQA-PyTorch
pip install -r requirements.txt
python setup.py developคุณสามารถใช้แพ็คเกจกับอินเทอร์เฟซ Commandline
# list all available metrics
pyiqa -ls
# test with default settings
pyiqa [metric_name(s)] -t [image_path or dir] -r [image_path or dir] --device [cuda or cpu] --verbose import pyiqa
import torch
# list all available metrics
print ( pyiqa . list_models ())
device = torch . device ( "cuda" ) if torch . cuda . is_available () else torch . device ( "cpu" )
# create metric with default setting
iqa_metric = pyiqa . create_metric ( 'lpips' , device = device )
# check if lower better or higher better
print ( iqa_metric . lower_better )
# example for iqa score inference
# Tensor inputs, img_tensor_x/y: (N, 3, H, W), RGB, 0 ~ 1
score_fr = iqa_metric ( img_tensor_x , img_tensor_y )
# img path as inputs.
score_fr = iqa_metric ( './ResultsCalibra/dist_dir/I03.bmp' , './ResultsCalibra/ref_dir/I03.bmp' )
# For FID metric, use directory or precomputed statistics as inputs
# refer to clean-fid for more details: https://github.com/GaParmar/clean-fid
fid_metric = pyiqa . create_metric ( 'fid' )
score = fid_metric ( './ResultsCalibra/dist_dir/' , './ResultsCalibra/ref_dir' )
score = fid_metric ( './ResultsCalibra/dist_dir/' , dataset_name = "FFHQ" , dataset_res = 1024 , dataset_split = "trainval70k" ) โปรดทราบว่าการแพร่กระจายการไล่ระดับสีนั้นถูกปิดใช้งานโดยค่าเริ่มต้น ตั้งค่า as_loss=True เพื่อเปิดใช้งานเป็นฟังก์ชันการสูญเสีย ไม่ใช่ตัวชี้วัดทั้งหมดที่รองรับ backpropagation โปรดดูการ์ดรุ่นและตรวจสอบให้แน่ใจว่าคุณกำลังใช้มันในรูปแบบ lower_better
lpips_loss = pyiqa . create_metric ( 'lpips' , device = device , as_loss = True )
ssim_loss = pyiqa . create_metric ( 'ssimc' , device = device , as_loss = True )
loss = 1 - ssim_loss ( img_tensor_x , img_tensor_y ) # ssim is not lower better นอกจากนี้เรายังให้วิธีที่ยืดหยุ่นในการใช้การตั้งค่าและน้ำหนักที่กำหนดเองในกรณีที่คุณต้องการฝึกอบรมหรือปรับแต่งรุ่นใหม่
iqa_metric = pyiqa . create_metric ( 'topiq_nr' , device = device , ** custom_opts )
# Note that if you train the model with this package, the weights will be saved in weight_dict['params']. Otherwise, please set weight_keys=None.
iqa_metric . load_weights ( 'path/to/weights.pth' , weight_keys = 'params' )ตัวอย่างสคริปต์ทดสอบด้วยไดเรกทอรีอินพุต/รูปภาพและไดเรกทอรีอ้างอิง/รูปภาพ
# example for FR metric with dirs
python inference_iqa.py -m LPIPS[or lpips] -i ./ResultsCalibra/dist_dir[dist_img] -r ./ResultsCalibra/ref_dir[ref_img]
# example for NR metric with single image
python inference_iqa.py -m brisque -i ./ResultsCalibra/dist_dir/I03.bmp เรานำเสนอวิธีง่ายๆในการโหลดชุดข้อมูล IQA ยอดนิยมผ่านไฟล์กำหนดค่า pyiqa/default_dataset_configs.yml ชุดข้อมูลที่ระบุจะดาวน์โหลดโดยอัตโนมัติจาก HuggingFace IQA-PYTORCH-DATASET ดูตัวอย่างโค้ดด้านล่าง:
from pyiqa import get_dataset_info , load_dataset
# list all available datasets
print ( get_dataset_info (). keys ())
# load dataset with default options and official split
dataset = load_dataset ( 'koniq10k' , data_root = './datasets' , force_download = False , split_index = 'official_split' , phase = 'test' )
print ( f'Loaded dataset, len= { len ( dataset ) } , { dataset [ 0 ]. keys () } ' )
print ( dataset [ 0 ][ 'img' ]. shape )
# split_ratio: train/test/val
dataset = load_dataset ( 'csiq' , data_root = './datasets' , force_download = False , split_index = 1 , split_ratio = '622' , phase = 'test' )
print ( f'Loaded dataset, len= { len ( dataset ) } , { dataset [ 0 ]. keys () } ' )
print ( dataset [ 0 ][ 'img' ]. shape )
# or use dataset options
dataset_opts = {
'split_index' : 1 ,
'split_ratio' : '622' ,
'phase' : 'test' ,
'augment' : {
'resize' : 256 ,
'center_crop' : 224 ,
}
}
dataset = load_dataset ( 'csiq' , data_root = './datasets' , force_download = False , dataset_opts = dataset_opts )
print ( f'Loaded dataset, len= { len ( dataset ) } , { dataset [ 0 ]. keys () } ' )
print ( dataset [ 0 ][ 'img' ]. shape ) โปรดดูบัตรข้อมูลสำหรับรายละเอียดเพิ่มเติมเกี่ยวกับ dataset_opts
โปรดดูการสอบเทียบผลลัพธ์เพื่อตรวจสอบความถูกต้องของการใช้งาน Python เมื่อเทียบกับสคริปต์อย่างเป็นทางการใน MATLAB หรือ Python
เพื่อความสะดวกเราอัปโหลดชุดข้อมูลที่เกี่ยวข้องทั้งหมดไปยัง HuggingFace IQA-Toolbox-Dataset และไฟล์ข้อมูลเมตาที่เกี่ยวข้องเพื่อ HuggingFace IQA-Toolbox-Dataset-Metainfo นี่คือรหัสตัวอย่างที่จะดาวน์โหลดจาก HuggingFace:
คำเตือน
เรารวบรวมชุดข้อมูลเพื่อวัตถุประสงค์ด้านวิชาการการวิจัยและการศึกษาเท่านั้น เป็นสิ่งสำคัญสำหรับผู้ใช้ที่จะปฏิบัติตามแนวทางการใช้งานข้อกำหนดการออกใบอนุญาตและเงื่อนไขที่กำหนดโดยผู้สร้างหรือเจ้าของดั้งเดิมของแต่ละชุดข้อมูล
import os
from huggingface_hub import snapshot_download
save_dir = './datasets'
os . makedirs ( save_dir , exist_ok = True )
filename = "koniq10k.tgz"
snapshot_download ( "chaofengc/IQA-Toolbox-Datasets" , repo_type = "dataset" , local_dir = save_dir , allow_patterns = filename , local_dir_use_symlinks = False )
os . system ( f"tar -xzvf { save_dir } / { filename } -C { save_dir } " ) ดาวน์โหลดข้อมูลเมตาจาก HuggingFace ด้วย git clone หรืออัปเดตด้วย git pull :
cd ./datasets
git clone https://huggingface.co/datasets/chaofengc/IQA-Toolbox-Datasets-metainfo meta_info
cd ./datasets/meta_info
git pull
ตัวอย่างของตัวเลือกชุดข้อมูลเฉพาะสามารถพบได้ใน ./pyiqa/default_dataset_configs.yml รายละเอียดของ DataLoader Interface และ Meta Information Files สามารถพบได้ในการเตรียมชุดข้อมูล
เราใช้แบบจำลองอย่างเป็นทางการสำหรับการประเมินผลหากมี มิฉะนั้นเราใช้การตั้งค่าต่อไปนี้เพื่อฝึกอบรมและประเมินโมเดลที่แตกต่างกันเพื่อความเรียบง่ายและความสอดคล้อง:
| ประเภทตัวชี้วัด | รถไฟ | ทดสอบ | ผลลัพธ์ |
|---|---|---|---|
| FR | Kadid-10k | CSIQ, Live, TID2008, TID2013 | เกณฑ์มาตรฐาน FR |
| NR | Koniq-10k | Livec, Koniq-10k (แยกอย่างเป็นทางการ), TID2013, Spaq | เกณฑ์มาตรฐาน NR |
| ความงาม IQA | เอวา | AVA (แยกอย่างเป็นทางการ) | เกณฑ์มาตรฐาน IAA |
| ใบหน้า IQA | cgfiqa | CGFIQA (แยกอย่างเป็นทางการ) | ใบหน้าของ IQA |
| ประสิทธิภาพ | เวลา CPU/GPU, หน่วยความจำ GPU | ค่าเฉลี่ยบน | เกณฑ์มาตรฐานประสิทธิภาพ |
ผลลัพธ์จะถูกคำนวณด้วย:
โดยพื้นฐานแล้วเราใช้ชุดข้อมูลที่มีอยู่มากที่สุดสำหรับการฝึกอบรมและประสิทธิภาพการประเมินชุดข้อมูลข้ามเพื่อการเปรียบเทียบที่เป็นธรรม โมเดลต่อไปนี้ไม่ได้ให้น้ำหนักอย่างเป็นทางการและได้รับการฝึกฝนโดยสคริปต์ของเรา:
| ประเภทตัวชี้วัด | โมเดลที่ทำซ้ำ |
|---|---|
| FR | wadiqam_fr |
| NR | cnniqa , dbcnn , hyperiqa , wadiqam_nr |
| ความงาม IQA | nima , nima-vgg16-ava |
บันทึก
inception_resnet_v2 สำหรับ nima เริ่มต้นนี่คือตัวอย่างสคริปต์เพื่อให้ได้มาตรฐานประสิทธิภาพในชุดข้อมูลที่แตกต่างกัน:
# NOTE: this script will test ALL specified metrics on ALL specified datasets
# Test default metrics on default datasets
python benchmark_results.py -m psnr ssim -d csiq tid2013 tid2008
# Test with your own options
python benchmark_results.py -m psnr --data_opt options/example_benchmark_data_opts.yml
python benchmark_results.py --metric_opt options/example_benchmark_metric_opts.yml tid2013 tid2008
python benchmark_results.py --metric_opt options/example_benchmark_metric_opts.yml --data_opt options/example_benchmark_data_opts.ymlตัวอย่างเพื่อฝึก DBCNN ในชุดข้อมูล LiveChallenge
# train for single experiment
python pyiqa/train.py -opt options/train/DBCNN/train_DBCNN.yml
# train N splits for small datasets
python pyiqa/train_nsplits.py -opt options/train/DBCNN/train_DBCNN.ymlตัวอย่างสำหรับการฝึกอบรมแบบกระจาย
torchrun --nproc_per_node=2 --master_port=4321 pyiqa/train.py -opt options/train/CLIPIQA/train_CLIPIQA_koniq10k.yml --launcher pytorchการมีส่วนร่วมใด ๆ ในที่เก็บนี้ได้รับการชื่นชมอย่างมาก โปรดทำตามคำแนะนำการบริจาคเพื่อคำแนะนำการบริจาค
งานนี้ได้รับใบอนุญาตภายใต้ใบอนุญาต NTU S-LAB และ Creative Commons Commons Nontribution-Noncommercial-Sharealike 4.0 ใบอนุญาตระหว่างประเทศ
หากคุณพบว่ารหัสของเรามีประโยชน์ในการวิจัยของคุณโปรดพิจารณาใช้การอ้างอิงต่อไปนี้:
@misc { pyiqa ,
title = { {IQA-PyTorch}: PyTorch Toolbox for Image Quality Assessment } ,
author = { Chaofeng Chen and Jiadi Mo } ,
year = { 2022 } ,
howpublished = " [Online]. Available: url{https://github.com/chaofengc/IQA-PyTorch} "
}โปรดพิจารณาที่จะอ้างถึงผลงานของเราเกี่ยวกับการประเมินคุณภาพของภาพหากเป็นประโยชน์สำหรับคุณ:
@article { chen2024topiq ,
author = { Chen, Chaofeng and Mo, Jiadi and Hou, Jingwen and Wu, Haoning and Liao, Liang and Sun, Wenxiu and Yan, Qiong and Lin, Weisi } ,
title = { TOPIQ: A Top-Down Approach From Semantics to Distortions for Image Quality Assessment } ,
journal = { IEEE Transactions on Image Processing } ,
year = { 2024 } ,
volume = { 33 } ,
pages = { 2404-2418 } ,
doi = { 10.1109/TIP.2024.3378466 }
} @article { wu2024qalign ,
title = { Q-Align: Teaching LMMs for Visual Scoring via Discrete Text-Defined Levels } ,
author = { Wu, Haoning and Zhang, Zicheng and Zhang, Weixia and Chen, Chaofeng and Li, Chunyi and Liao, Liang and Wang, Annan and Zhang, Erli and Sun, Wenxiu and Yan, Qiong and Min, Xiongkuo and Zhai, Guangtai and Lin, Weisi } ,
journal = { International Conference on Machine Learning (ICML) } ,
year = { 2024 } ,
institution = { Nanyang Technological University and Shanghai Jiao Tong University and Sensetime Research } ,
note = { Equal Contribution by Wu, Haoning and Zhang, Zicheng. Project Lead by Wu, Haoning. Corresponding Authors: Zhai, Guangtai and Lin, Weisi. }
}สถาปัตยกรรมรหัสถูกยืมมาจาก BasicsR มีการใช้งานหลายอย่างจาก: IQA-optimization, image-quality-asessment-toolbox, PIQ, PIQA, Clean-Fid
นอกจากนี้เรายังต้องขอบคุณที่เก็บสาธารณะต่อไปนี้: Musiq, DBCNN, NIMA, Hyperiqa, Cnniqa, Wadiqam, Pieapp, Paq2piq, Maniqa
หากคุณมีคำถามใด ๆ โปรดส่งอีเมลถึง [email protected]