Pytorch Toolbox für die Bewertung der BildqualitätEine IQA -Toolbox mit reinem Python und Pytorch. Eine umfassende Übersicht über IQA-Methoden finden Sie unter Awesome-Image-Quality-Bewertungen und Laden Sie Links für IQA-Datensätze herunter.
Dies ist eine umfassende Toolbox für Bildqualitätsbewertung (IQA), die mit reinem Python und Pytorch erstellt wurde. Wir bieten eine Neuauflagen vieler Mainstream -Vollreferenz (FR) und keine Referenzmetriken (NR) (die Ergebnisse werden mit offiziellen MATLAB -Skripten kalibriert, falls vorhanden). Bei der GPU -Beschleunigung sind die meisten unserer Implementierungen viel schneller als MATLAB. Weitere Informationen finden Sie in den folgenden Dokumenten:
? Modellkarten | Datensatzkarten | ? Datensätze herunterladen | Dokumentation | ? Benchmark
fid mit MMD -Distanz hinzu, verwenden Sie es mit fid_metric(..., distance_type='mmd', kernel_type='rbf') Weitere Informationen finden Sie auf CMMD. Vielen Dank an INA für die Beiträge.fid_dinov2 hinzu, finden Sie in DGM-Eval weitere Details.pyiqa.load_dataset hinzu, um mehrere gängige Datensätze zu laden.compare2score und deepdc hinzufügen. Vielen Dank an Hanwei für ihre großartige Arbeit? Und erhalten Sie auf ihre offiziellen Papiere, um weitere Informationen zu erhalten!topiq_nr-face , indem Sie mit dem GCFIQA-Datensatz trainieren. Vielen Dank an ihre Arbeit! ?msswd in MS-SWD (ECCV2024) vorgeschlagene Wahrnehmungsfarbdifferenzmetrik hinzu. Vielen Dank an ihre Arbeit! ?qalign und qalign_8bit , erfordern weniger als 6 GB GPU -Speicher .qalign_4bit und qalign_8bit mit viel weniger Speicheranforderung und einer ähnlichen Leistung hinzu.piqe Metric und niqe_matlab, brisque_matlab mit Standard -MATLAB -Parametern hinzu (die Ergebnisse wurden mit MATLAB R2021B kalibriert).lpips+ und lpips-vgg+ in unserem Papier Topiq hinzu.arniqa und seine Varianzen hinzu, die auf verschiedenen Datensätzen geschult wurden. Weitere Informationen finden Sie hier auf offizielles Repo. Vielen Dank für den Beitrag von Lorenzo Agnolucci?inception_score und Konsole -Einstiegspunkt mit dem Befehl pyiqa hinzu.unique hinzu, siehe offizielles Repo hier. Danke für den Beitrag von Wixia 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 developSie können das Paket mit Befehlszeilenschnittstellen einfach verwenden.
# 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" ) Beachten Sie, dass die Gradientenausbreitung standardmäßig deaktiviert ist. Setzen Sie as_loss=True , um es als Verlustfunktion zu aktivieren. Nicht alle Metriken unterstützen Backpropagation. Siehe Modellkarten und stellen Sie sicher, dass Sie sie auf eine Weise lower_better verwenden.
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 Wir bieten auch eine flexible Möglichkeit, benutzerdefinierte Einstellungen und Gewichte zu verwenden, falls Sie die Modelle übermitteln oder fein abteilen möchten.
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' )Beispiel -Testskript mit Eingabeverzeichnis/Bildern und Referenzverzeichnis/Bildern.
# 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 Wir bieten eine einfache Möglichkeit, beliebte IQA -Datensätze über die Konfigurationsdatei pyiqa/default_dataset_configs.yml zu laden. Die angegebenen Datensätze laden automatisch vom Huggingface-IQA-Pytorch-Datensatz herunter. Siehe Beispielcode unten:
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 ) Weitere Informationen zu den dataset_opts finden Sie in Datensatzkarten.
Weitere Informationen finden Sie in der Ergebniskalibrierung, um die Richtigkeit der Python -Implementierungen im Vergleich zu offiziellen Skripten in Matlab oder Python zu überprüfen.
Für den Einfachheit halben wir alle verwandten Datensätze in das Huggingface-IQA-Toolbox-Datensatz und entsprechende Meta-Informationsdateien in das Huggingface-IQA-Toolbox-Datenet-Metainfo hoch. Hier sind Beispielcodes, um sie von Suggingface herunterzuladen:
Vorsicht
Wir sammeln nur die Datensätze für akademische, Forschung und Bildungszwecke. Es ist wichtig, dass die Benutzer die Nutzungsrichtlinien, Lizenzbedingungen und Bedingungen der ursprünglichen Ersteller oder Eigentümer jedes Datensatzes einhalten.
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 } " ) Laden Sie Meta -Informationen von Suggingface mit git clone oder Update mit git pull herunter:
cd ./datasets
git clone https://huggingface.co/datasets/chaofengc/IQA-Toolbox-Datasets-metainfo meta_info
cd ./datasets/meta_info
git pull
Beispiele für bestimmte Datensatzoptionen finden Sie in ./pyiqa/default_dataset_configs.yml . Details zur Datenteils DataLoader -Schnittstelle und Meta -Informationsdateien finden Sie in der Datensatzvorbereitung
Wir verwenden offizielle Bewertungsmodelle, falls verfügbar. Andernfalls verwenden wir die folgenden Einstellungen, um verschiedene Modelle für Einfachheit und Konsistenz zu trainieren und zu bewerten:
| Metrischer Typ | Zug | Prüfen | Ergebnisse |
|---|---|---|---|
| Fr | Kadid-10k | CSIQ, Live, TID2008, TID2013 | FR Benchmark |
| Nr | Koniq-10k | Livec, Koniq-10K (offizielle Split), TID2013, Spaq | NR -Benchmark |
| Ästhetische IQA | Ava | Ava (offizielle Spaltung) | IAA -Benchmark |
| Gesicht IQA | Cgfiqa | Cgfiqa (offizieller Split) | Face IQA Benchmark |
| Effizienz | CPU/GPU -Zeit, GPU -Speicher | Durchschnittlich auf | Effizienz -Benchmark |
Die Ergebnisse werden berechnet mit:
Grundsätzlich verwenden wir die größten vorhandenen Datensätze für die Schulung und überquerten die Datensatzbewertungsleistung für einen fairen Vergleich. Die folgenden Modelle liefern keine offiziellen Gewichte und werden von unseren Skripten umgeschrieben:
| Metrischer Typ | Reproduzierte Modelle |
|---|---|
| Fr | wadiqam_fr |
| Nr | cnniqa , dbcnn , hyperiqa , wadiqam_nr |
| Ästhetische IQA | nima , nima-vgg16-ava |
Notiz
inception_resnet_v2 für Standard nima .Hier ist ein Beispielskript, um den Leistungsbenchmark für verschiedene Datensätze zu erhalten:
# 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.ymlBeispiel, um DBCNN auf Livechalenge -Datensatz zu trainieren
# 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.ymlBeispiel für ein verteiltes Training
torchrun --nproc_per_node=2 --master_port=4321 pyiqa/train.py -opt options/train/CLIPIQA/train_CLIPIQA_koniq10k.yml --launcher pytorchAlle Beiträge zu diesem Repository werden sehr geschätzt. Bitte befolgen Sie die Beitragsanweisungen zur Beitragsanleitung.
Diese Arbeit ist unter einer NTU S-LAB-Lizenz und der Creative Commons Attribution-Noncommercial-Sharealike 4.0 International Lizenz lizenziert.
Wenn Sie unsere Codes für Ihre Forschung hilfreich finden, sollten Sie das folgende Zitat verwenden:
@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} "
}Bitte beachten Sie auch, dass wir unsere Arbeiten zur Bewertung der Bildqualität zitieren, wenn sie für Sie nützlich ist:
@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. }
}Die Codearchitektur wird von BasicsR geliehen. Mehrere Implementierungen stammen aus: IQA-Optimierung, Bildqualitätsbewertungs-Toolbox, PIQ, PIQA, Clean-Fid-Fid-Fid-Fid
Wir danken auch den folgenden öffentlichen Repositories: Musiq, DBCNN, NIMA, Hyperiqa, Cnniqa, Wadiqam, Pieapp, PAQ2PIQ, Maniqa
Wenn Sie Fragen haben, senden Sie bitte eine E -Mail an [email protected]