画質評価のためのPytorchツールボックスPure PythonとPytorchを備えたIQAツールボックス。 IQAメソッドの包括的な調査とIQAデータセットのダウンロードリンクの包括的な調査については、Awesome-Image-assessmentを参照してください。
これは、純粋なPythonとPytorchで構築された包括的な画像品質評価(IQA)ツールボックスです。多くの主流の完全な参照(FR)および参照なし(NR)メトリックの再実装を提供します(存在する場合、結果は公式のMATLABスクリプトで校正されます)。 GPU加速により、実装のほとんどはMATLABよりもはるかに高速です。詳細については、次のドキュメントを参照してください。
?モデルカード| ?§セットカード| ?データセットのダウンロード|ドキュメント| ?ベンチマーク
fidを追加し、 fid_metric(..., distance_type='mmd', kernel_type='rbf')で使用します。詳細についてはCMMDを参照してください。貢献してくれたINAに感謝します。fid_dinov2を追加して、詳細についてはDGM-Evalを参照してください。pyiqa.load_datasetを追加します。compare2scoreとdeepdcを追加します。彼らの素晴らしい仕事をしてくれたハンウェイに感謝しますか?そして、詳細については彼らの公式論文を参照してください!topiq_nr-face更新します。彼らの仕事に感謝します! ?msswdを追加します。彼らの仕事に感謝します! ?qalignとqalign_8bitを除き、 6GB未満のGPUメモリを必要とします。qalign_4bitとqalign_8bitを追加して、メモリの要件がはるかに少なく、同様のパフォーマンスを備えています。piqeメトリック、およびniqe_matlab, brisque_matlabデフォルトのMATLABパラメーターで追加します(MATLAB R2021Bで結果が校正されています)。lpips+およびlpips-vgg+を追加して、Paper Topiqで提案します。arniqaを追加すると、さまざまなデータセットでトレーニングされている分散を追加してください。公式リポジトリを参照してください。 Lorenzo Agnolucciからの貢献をありがとう。pyiqaコマンドにinception_scoreとコンソールエントリポイントを追加します。unique追加、公式リポジトリを参照してください。 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コマンドラインインターフェイスでパッケージを使用するだけです。
# 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を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.bmpConfigurationファイルpyiqa/default_dataset_configs.ymlを介して人気のあるIQAデータセットを簡単にロードする簡単な方法を提供します。指定されたデータセットは、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の詳細については、データセットカードを参照してください。
MatlabまたはPythonの公式スクリプトと比較して、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 } " ) git cloneを使用したHuggingfaceからメタ情報をダウンロードするか、 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 pyiqa/default_dataset_configs.ymlにあります。 Dataloaderインターフェイスとメタ情報ファイルの詳細は、データセットの準備にあります
利用可能な場合は、評価には公式モデルを使用します。それ以外の場合は、次の設定を使用して、さまざまなモデルを単純化と一貫性のためにトレーニングおよび評価します。
| メトリックタイプ | 電車 | テスト | 結果 |
|---|---|---|---|
| fr | Kadid-10k | CSIQ、LIVE、TID2008、TID2013 | FRベンチマーク |
| nr | koniq-10k | Livec、Koniq-10k(公式分割)、Tid2013、Spaq | NRベンチマーク |
| 審美的なIqa | Ava | AVA(公式分割) | IAAベンチマーク |
| 顔Iqa | CGFIQA | CGFIQA(公式分割) | IQAベンチマークに直面します |
| 効率 | CPU/GPU時間、GPUメモリ | 平均オン | 効率ベンチマーク |
結果は次のように計算されます。
基本的に、トレーニングには最大の既存のデータセットを使用し、公正な比較のためにデータセット評価のパフォーマンスを横断します。次のモデルは公式のウェイトを提供せず、スクリプトによって再編成されます。
| メトリックタイプ | 複製モデル |
|---|---|
| fr | wadiqam_fr |
| nr | cnniqa 、 dbcnn 、 hyperiqa 、 wadiqam_nr |
| 審美的なIqa | nima 、 nima-vgg16-ava |
注記
nimaにはinception_resnet_v2を使用します。以下は、異なるデータセットでパフォーマンスベンチマークを取得するための例を示します。
# 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.ymlLiveChallengeデータセットでDBCNNを訓練する例
# 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 Attribution-NonCommercial-Sharealike 4.0 Internationalライセンスの下でライセンスされています。
私たちのコードがあなたの研究に役立つと思う場合は、次の引用を使用することを検討してください。
@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-assessment-Toolbox、PIQ、PIQA、Clean-FIDのいくつかの実装は取得されます。
また、Musiq、dbcnn、nima、hyperiqa、cnniqa、wadiqam、pieapp、paq2piq、maniqa:次の公開リポジトリにも感謝します。
ご質問がある場合は、 [email protected]にメールしてください