Pytorch Toolbox untuk Penilaian Kualitas GambarKotak alat IQA dengan Python dan Pytorch murni. Silakan merujuk ke penilaian berkualitas image-agar untuk survei komprehensif metode IQA dan mengunduh tautan untuk kumpulan data IQA.
Ini adalah kotak alat penilaian kualitas gambar yang komprehensif (IQA) yang dibangun dengan Python dan Pytorch murni . Kami memberikan penerimaan ulang banyak metrik referensi penuh (FR) dan tidak ada referensi (NR) (hasilnya dikalibrasi dengan skrip MATLAB resmi jika ada). Dengan akselerasi GPU, sebagian besar implementasi kami jauh lebih cepat daripada Matlab. Silakan merujuk ke dokumen berikut untuk detailnya:
? Kartu model | ? ️ Kartu Dataset | ? Dataset unduh | Dokumentasi | ?
fid dengan jarak MMD, gunakan dengan fid_metric(..., distance_type='mmd', kernel_type='rbf') lihat CMMD untuk detail lebih lanjut. Terima kasih kepada INA untuk kontribusinya.fid_dinov2 , lihat DGM-Eval untuk detail lebih lanjut.pyiqa.load_dataset untuk memudahkan pemuatan beberapa dataset umum.compare2score dan deepdc . Terima kasih kepada Hanwei untuk pekerjaan hebat mereka?, Dan silakan merujuk ke surat -surat resmi mereka untuk lebih jelasnya!topiq_nr-face dengan pelatihan dengan dataset GCFIQA. Terima kasih atas pekerjaan mereka! ?msswd yang diusulkan dalam MS-SWD (ECCV2024). Terima kasih atas pekerjaan mereka! ?qalign dan qalign_8bit , membutuhkan memori GPU kurang dari 6GB .qalign_4bit dan qalign_8bit dengan persyaratan memori yang jauh lebih sedikit dan kinerja serupa.piqe , dan niqe_matlab, brisque_matlab dengan parameter matlab default (hasil telah dikalibrasi dengan matlab r2021b).lpips+ dan lpips-vgg+ yang diusulkan dalam topiq kertas kami.arniqa dan variannya yang dilatih pada dataset yang berbeda, lihat repo resmi di sini. Terima kasih atas kontribusi dari Lorenzo Agnolucci?inception_score dan titik masuk konsol dengan perintah pyiqa .unique , lihat repo resmi di sini. Terima kasih atas kontribusi dari 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 developAnda cukup menggunakan Paket dengan Antarmuka 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" ) Perhatikan bahwa propagasi gradien dinonaktifkan secara default. Setel as_loss=True untuk mengaktifkannya sebagai fungsi kerugian. Tidak semua metrik mendukung backpropagation, silakan merujuk ke kartu model dan pastikan bahwa Anda menggunakannya dengan cara 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 Kami juga memberikan cara yang fleksibel untuk menggunakan pengaturan dan bobot khusus jika Anda ingin melatih kembali atau menyempurnakan model.
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' )Contoh skrip uji dengan direktori/gambar input dan direktori/gambar referensi.
# 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 Kami menawarkan cara mudah untuk memuat dataset IQA yang populer melalui file konfigurasi pyiqa/default_dataset_configs.yml . Dataset yang ditentukan akan secara otomatis mengunduh dari huggingface IQA-Pytorch-Dataset. Lihat contoh kode di bawah ini:
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 ) Silakan merujuk ke kartu dataset untuk detail lebih lanjut tentang dataset_opts .
Silakan merujuk ke kalibrasi hasil untuk memverifikasi kebenaran implementasi Python dibandingkan dengan skrip resmi dalam MATLAB atau Python.
Untuk kenyamanan, kami mengunggah semua kumpulan data terkait ke HuggingFace IQA-Toolbox-Dataset, dan file informasi meta yang sesuai untuk HuggingFace IQA-Toolbox-Dataset-Metainfo. Berikut adalah contoh kode untuk mengunduhnya dari HuggingFace:
Peringatan
Kami hanya mengumpulkan dataset untuk tujuan akademik, penelitian, dan pendidikan. Penting bagi pengguna untuk mematuhi pedoman penggunaan, syarat lisensi, dan ketentuan yang ditetapkan oleh pencipta asli atau pemilik setiap dataset.
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 } " ) Unduh informasi meta dari Huggingface dengan git clone atau perbarui dengan git pull :
cd ./datasets
git clone https://huggingface.co/datasets/chaofengc/IQA-Toolbox-Datasets-metainfo meta_info
cd ./datasets/meta_info
git pull
Contoh untuk opsi dataset tertentu dapat ditemukan di ./pyiqa/default_dataset_configs.yml . Rincian antarmuka Dataloader dan file informasi meta dapat ditemukan dalam persiapan dataset
Kami menggunakan model resmi untuk evaluasi jika tersedia. Jika tidak, kami menggunakan pengaturan berikut untuk melatih dan mengevaluasi berbagai model untuk kesederhanaan dan konsistensi:
| Jenis metrik | Kereta | Tes | Hasil |
|---|---|---|---|
| Fr | Kadid-10k | CSIQ, Live, TID2008, TID2013 | Benchmark FR |
| Nr | Koniq-10k | Livec, Koniq-10k (Split Resmi), TID2013, Spaq | NR Benchmark |
| IQA estetika | Ava | Ava (Split Resmi) | IAA Benchmark |
| Wajah IQA | Cgfiqa | Cgfiqa (split resmi) | Menghadapi IQA Benchmark |
| Efisiensi | Waktu CPU/GPU, memori GPU | Rata -rata di | Benchmark efisiensi |
Hasil dihitung dengan:
Pada dasarnya, kami menggunakan dataset terbesar yang ada untuk pelatihan, dan kinerja evaluasi dataset silang untuk perbandingan yang adil. Model -model berikut tidak memberikan bobot resmi, dan dilatih kembali oleh skrip kami:
| Jenis metrik | Model yang direproduksi |
|---|---|
| Fr | wadiqam_fr |
| Nr | cnniqa , dbcnn , hyperiqa , wadiqam_nr |
| IQA estetika | nima , nima-vgg16-ava |
Catatan
inception_resnet_v2 untuk nima default.Berikut adalah contoh skrip untuk mendapatkan tolok ukur kinerja pada dataset yang berbeda:
# 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.ymlContoh untuk melatih dbcnn pada dataset 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.ymlContoh untuk pelatihan terdistribusi
torchrun --nproc_per_node=2 --master_port=4321 pyiqa/train.py -opt options/train/CLIPIQA/train_CLIPIQA_koniq10k.yml --launcher pytorchKontribusi apa pun untuk repositori ini sangat dihargai. Ikuti instruksi kontribusi untuk panduan kontribusi.
Karya ini dilisensikan di bawah lisensi NTU S-LAB dan Lisensi Internasional Atribusi Creative Commons-NonCommercial-Sharealike 4.0.
Jika Anda menemukan kode kami bermanfaat untuk penelitian Anda, harap pertimbangkan untuk menggunakan kutipan berikut:
@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} "
}Harap juga pertimbangkan untuk mengutip pekerjaan kami tentang penilaian kualitas gambar jika berguna bagi Anda:
@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. }
}Arsitektur kode dipinjam dari dasar. Beberapa implementasi diambil dari: IQA-Optimization, Image-Isessessment-Toolbox, PIQ, PIQA, Clean-Fid
Kami juga berterima kasih kepada repositori publik berikut: Musiq, DBCNN, NIMA, Hyperiqa, Cnniqa, Wadiqam, PieApp, Paq2piq, Maniqa
Jika Anda memiliki pertanyaan, silakan kirim email [email protected]