Pytorch Toolbox pour l'évaluation de la qualité d'imageUne boîte à outils IQA avec Pure Python et Pytorch. Veuillez vous référer à l'évaluation de qualité impressionnante pour une enquête complète des méthodes IQA et de téléchargement des liens pour les ensembles de données IQA.
Il s'agit d'une boîte à outils complète de l'évaluation de la qualité d'image (IQA) construite avec Pure Python et Pytorch . Nous fournissons une réimplémentation de nombreuses mesures de référence complète (FR) et sans référence (NR) (les résultats sont calibrés avec des scripts MATLAB officiels s'ils existent). Avec l'accélération GPU, la plupart de nos implémentations sont beaucoup plus rapides que MATLAB. Veuillez vous référer aux documents suivants pour plus de détails:
? Cartes modèles | ? ️ CARtes d'ensemble de données | ? Téléchargement des ensembles de données | Documentation | ? Benchmark
fid avec MMD Distance, utilisez-le avec fid_metric(..., distance_type='mmd', kernel_type='rbf') Reportez-vous à CMMD pour plus de détails. Merci à Ina pour les contributions.fid_dinov2 , reportez-vous à DGM-Eval pour plus de détails.pyiqa.load_dataset pour un chargement facile de plusieurs ensembles de données communs.compare2score et deepdc . Merci à Hanwei pour leur excellent travail ?, et veuillez vous référer à leurs papiers officiels pour plus de détails!topiq_nr-face en s'entraînant avec l'ensemble de données GCFIQA. Merci à leur travail! ?msswd proposée dans MS-SWD (ECCV2024). Merci à leur travail! ?qalign et qalign_8bit , nécessitent moins de 6 Go de mémoire GPU .qalign_4bit et qalign_8bit avec des exigences de mémoire beaucoup moins élevées et des performances similaires.piqe Metric et niqe_matlab, brisque_matlab avec les paramètres MATLAB par défaut (les résultats ont été calibrés avec MATLAB R2021B).lpips+ et lpips-vgg+ proposés dans notre papier topiq.arniqa et ses variances formées sur différents ensembles de données, reportez-vous au dépôt officiel ici. Merci pour la contribution de Lorenzo Agnolucci ?.inception_score et Point d'entrée de la console avec la commande pyiqa .unique , reportez-vous au dépôt officiel ici. Merci pour la contribution de 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 developVous pouvez simplement utiliser le package avec l'interface de commande de commande.
# 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" ) Notez que la propagation du gradient est désactivée par défaut. Définissez as_loss=True pour l'activer en tant que fonction de perte. Toutes les mesures ne prennent pas en charge la rétro-propagation, veuillez vous référer aux cartes du modèle et assurez-vous que vous l'utilisez de manière 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 Nous fournissons également un moyen flexible d'utiliser des paramètres et des poids personnalisés au cas où vous souhaitez recycler ou affiner les modèles.
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' )Exemple de script de test avec répertoire d'entrée / images et répertoire de référence / 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 Nous offrons un moyen facile de charger des ensembles de données IQA populaires via le fichier de configuration pyiqa/default_dataset_configs.yml . Les ensembles de données spécifiés téléchargeront automatiquement à partir de la Dataset IQA-Pytorch de HuggingFace. Voir l'exemple de code ci-dessous:
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 ) Veuillez vous référer aux cartes de jeu de données pour plus de détails sur dataset_opts .
Veuillez vous référer à l'étalonnage des résultats pour vérifier l'exactitude des implémentations Python par rapport aux scripts officiels dans Matlab ou Python.
Pour plus de commodité, nous téléchargeons tous les ensembles de données connexes sur HuggingFace iqa-toolbox-dataset et les fichiers Meta Information correspondants à HuggingFace IQA-Toolbox-dataset-metainfo. Voici des exemples de codes pour les télécharger depuis HuggingFace:
Prudence
Nous collectons uniquement les ensembles de données à des fins académiques, de recherche et éducatives. Il est important que les utilisateurs adhèrent aux directives d'utilisation, aux termes de licence et aux conditions énoncées par les créateurs ou les propriétaires d'origine de chaque ensemble de données.
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 } " ) Téléchargez Meta Information de Huggingface avec git clone ou mise à jour avec git pull :
cd ./datasets
git clone https://huggingface.co/datasets/chaofengc/IQA-Toolbox-Datasets-metainfo meta_info
cd ./datasets/meta_info
git pull
Des exemples d'options de données spécifiques peuvent être trouvés dans ./pyiqa/default_dataset_configs.yml . Les détails de l'interface DatalOader et des fichiers de méta-information peuvent être trouvés dans la préparation de l'ensemble de données
Nous utilisons des modèles officiels pour l'évaluation si disponibles. Sinon, nous utilisons les paramètres suivants pour former et évaluer différents modèles de simplicité et de cohérence:
| Type métrique | Former | Test | Résultats |
|---|---|---|---|
| Frousser | Kadid-10k | CSIQ, Live, TID2008, TID2013 | Benchmark FR |
| NR | Koniq-10k | Livec, koniq-10k (scission officielle), TID2013, Spaq | Benchmark NR |
| IQA esthétique | Ava | Ava (division officielle) | Benchmark IAA |
| Face iqa | Cgfiqa | CGFIQA (scission officielle) | Face IQA Benchmark |
| Efficacité | Temps CPU / GPU, mémoire GPU | Moyenne sur | Benchmark d'efficacité |
Les résultats sont calculés avec:
Fondamentalement, nous utilisons les plus grands ensembles de données existants pour la formation et les performances d'évaluation des ensembles de données croisées pour une comparaison équitable. Les modèles suivants ne fournissent pas de poids officiels et sont recyclés par nos scripts:
| Type métrique | Modèles reproduits |
|---|---|
| Frousser | wadiqam_fr |
| NR | cnniqa , dbcnn , hyperiqa , wadiqam_nr |
| IQA esthétique | nima , nima-vgg16-ava |
Note
inception_resnet_v2 pour nima par défaut.Voici un exemple de script pour obtenir des performances de référence sur différents ensembles de données:
# 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.ymlExemple pour former DBCNN sur l'ensemble de données 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.ymlExemple de formation distribuée
torchrun --nproc_per_node=2 --master_port=4321 pyiqa/train.py -opt options/train/CLIPIQA/train_CLIPIQA_koniq10k.yml --launcher pytorchToute contribution à ce référentiel est grandement appréciée. Veuillez suivre les instructions de contribution pour les conseils de contribution.
Ce travail est concédé sous licence NTU S-Lab et Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
Si vous trouvez nos codes utiles à vos recherches, veuillez envisager d'utiliser la citation suivante:
@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} "
}Veuillez également envisager de citer nos œuvres sur l'évaluation de la qualité d'image si elle vous est utile:
@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. }
}L'architecture de code est empruntée à BasicsR. Plusieurs implémentations sont tirées de: IQA-Optimisation, Image-Quality-Essessment-Toolbox, PIQ, PIQA, Clean-Fid
Nous remercions également les référentiels publics suivants: Musiq, DBCNN, Nima, Hyperiqa, Cnniqa, Wadiqam, PieApp, Paq2piq, Maniqa
Si vous avez des questions, veuillez envoyer un e-mail [email protected]