Package: pyiqa
PyTorch Toolbox for Image Quality AssessmentAn IQA toolbox with pure python and pytorch. Please refer toAwesome-Image-Quality-Assessmentfor a comprehensive survey of IQA methods and download links for IQA datasets.:open_book: IntroductionThis is a image quality assessment toolbox withpure python and pytorch. We provide reimplementation of many mainstream full reference (FR) and no reference (NR) metrics (results are calibrated with official matlab scripts if exist).With GPU acceleration, most of our implementations are much faster than Matlab.Please refer to the following documents for details:📦Model Cards|  🗃️Dataset Cards| 🤗Datasets| 📚Documentation:triangular_flag_on_post: Updates/ChangelogDec 23, 2023. Addliqeandliqe_mix. Thanks for the contribution fromWeixia Zhang🤗.Oct 09, 2023. Add datasets:PIQ2023,GFIQA. Add metrictopiq_nr-face. We release example results on FFHQherefor reference.Aug 15, 2023. Addst-lpipsandlaion_aes. Refer to official repo atShiftTolerant-LPIPSandimproved-aesthetic-predictorAug 05, 2023. Add our workTOPIQwith remarkable performance on almost all benchmarks via efficient Resnet50 backbone. Use it withtopiq_fr, topiq_nr, topiq_iaafor Full-Reference, No-Reference and Aesthetic assessment respectively.March 30, 2023. AddURankerfor IQA of under water images.March 29, 2023. :rotating_light: Hot fix of NRQM & PI.March 25, 2023. Add TreS, HyperIQA, CNNIQA, CLIPIQA.More:zap: Quick StartDependencies and InstallationUbuntu >= 18.04Python >= 3.8PyTorch >= 1.12Torchvision >= 0.13CUDA >= 10.2 (if use GPU)# 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 developBasic Usageimport 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)
# Note that gradient propagation is disabled by default. set as_loss=True to enable it as a loss function.
# iqa_loss = pyiqa.create_metric('lpips', device=device, as_loss=True)

# create metric with custom setting
iqa_metric = pyiqa.create_metric('psnr', test_y_channel=True, color_space='ycbcr').to(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")Example Test scriptExample test script with input directory/images and reference directory/images.# 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:1st_place_medal: Benchmark Performances and Model ZooResults CalibrationPlease refer to theresults calibrationto verify the correctness of the python implementations compared with official scripts in matlab or python.⏬ Download Benchmark DatasetsFor convenience, we upload all related datasets tohuggingface.Note that we only collect the datasets for academic, research, and educational purposes. It is important for the users to adhere to the usage guidelines, licensing terms, and conditions set forth by the original creators or owners of each dataset.Here are example codes to download datasets from huggingface:import os
from huggingface_hub import snapshot_download

save_dir = './datasets'
os.makedirs(save_dir, exist_ok=True)

filename = "meta_info.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}")Examples to specific dataset options can be found in./options/default_dataset_opt.yml. Details of the dataloader inferface and meta information files can be found inDataset PreparationPerformance Evaluation ProtocolWe use official models for evaluation if available.Otherwise, we use the following settings to train and evaluate different models for simplicity and consistency:Metric TypeTrainTestResultsFRKADID-10kCSIQ, LIVE, TID2008, TID2013FR benchmark resultsNRKonIQ-10kLIVEC, KonIQ-10k (official split), TID2013, SPAQNR benchmark resultsAesthetic IQAAVAAVA (official split)IAA benchmark resultsResults are calculated with:PLCC without any correction. Although test time value correction is common in IQA papers, we want to use the original value in our benchmark.Full image single input.Wedo notuse multi-patch testing unless necessary.Basically, we use the largest existing datasets for training, and cross dataset evaluation performance for fair comparison. The following models do not provide official weights, and are retrained by our scripts:Metric TypeReproduced ModelsFRNRcnniqa,dbcnn,hyperiqaAesthetic IQAnima,nima-vgg16-avaImportant Notes:Due to optimized training process, performance of some retrained approaches may be different with original paper.Results of allretrained models by oursare normalized to [0, 1] and change to higher better for convenience.Results of KonIQ-10k, AVA are both tested with official split.NIMA is only applicable to AVA dataset now. We useinception_resnet_v2for defaultnima.MUSIQ is not included in the IAA benchmark because we do not have train/split information of the official model.Benchmark Performance with Provided ScriptHere is an example script to get performance benchmark on different datasets:# 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:hammer_and_wrench: TrainExample Train ScriptExample to train DBCNN on LIVEChallenge dataset# 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:beers: ContributionAny contributions to this repository are greatly appreciated. Please follow thecontribution instructionsfor contribution guidance.:scroll: LicenseThis work is licensed under aNTU S-Lab LicenseandCreative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.:bookmark_tabs: CitationIf you find our codes helpful to your research, please consider to use the following citation:@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}"
}Please also consider to cite our new workTOPIQif it is useful to you:@article{chen2023topiq,
  title={TOPIQ: A Top-down Approach from Semantics to Distortions for Image Quality Assessment},
  author={Chen, Chaofeng and Mo, Jiadi and Hou, Jingwen and Wu, Haoning and Liao, Liang and Sun, Wenxiu and Yan, Qiong and Lin, Weisi},
  journal={arXiv preprint arXiv:2308.03060},
  year={2023}
}:heart: AcknowledgementThe code architecture is borrowed fromBasicSR. Several implementations are taken from:IQA-optimization,Image-Quality-Assessment-Toolbox,piq,piqa,clean-fidWe also thanks the following public repositories:MUSIQ,DBCNN,NIMA,HyperIQA,CNNIQA,WaDIQaM,PieAPP,paq2piq,MANIQA:e-mail: ContactIf you have any questions, please emailchaofenghust@gmail.com