Фунт -ящик для инструментов Pytorch для оценки качества изображенияИнструментальный ящик IQA с Pure Python и Pytorch. Пожалуйста, обратитесь к удивительно-качеству-качеству для комплексного обследования методов IQA и загрузки ссылок для наборов данных IQA.
Это комплексная инструментария для оценки качества изображения (IQA), построенный из Pure Python и Pytorch . Мы предоставляем переопределение многих основных полных эталонных (FR) и никаких эталонных (NR) метрик (результаты откалиброваны с помощью официальных сценариев MATLAB, если существуют). При ускорении графического процессора большая часть наших реализаций намного быстрее, чем Matlab. Пожалуйста, обратитесь к следующим документам для получения подробной информации:
? Модели карты | ? ️ карты наборов данных | ? Наборы данных скачать | Документация | ? Эталон
fid с MMD -расстоянием, используйте его с fid_metric(..., distance_type='mmd', kernel_type='rbf') См. CMMD для получения более подробной информации. Спасибо INA за вклад.fid_dinov2 , см. DGM-EVAL для получения более подробной информации.pyiqa.load_dataset для легкой загрузки нескольких общих наборов данных.compare2score и deepdc . Спасибо Ханвай за их отличную работу? И, пожалуйста, обратитесь к их официальным документам для получения более подробной информации!topiq_nr-face , тренируясь с набором данных GCFIQA. Спасибо их работе! ?msswd , предложенная в MS-SWD (ECCV2024). Спасибо их работе! ?qalign и qalign_8bit , требуют менее 6 ГБ памяти графического процессора .qalign_4bit и qalign_8bit с гораздо меньшим требованием памяти и аналогичной производительностью.piqe метрику и niqe_matlab, brisque_matlab с параметрами MATLAB по умолчанию (результаты были калиброваны с помощью MATLAB R2021B).lpips+ и lpips-vgg+ предложенные в нашей бумаге Topiq.arniqa и его отклонения, обученные различным наборам данных, обратитесь к официальному репо. Спасибо за вклад Лоренцо Агнолуччи?inception_score и консоли с командой pyiqa .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 чтобы включить его как функцию потери. Не все метрики поддерживают обратное распространение, пожалуйста, обратитесь к модельным картам и убедитесь, что вы используете их 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.bmp Мы предлагаем простой способ загрузить популярные наборы данных IQA через файл конфигурации pyiqa/default_dataset_configs.yml . Указанные наборы данных будут автоматически загружаться из 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 .
Пожалуйста, обратитесь к калибровке результатов, чтобы проверить правильность реализаций Python по сравнению с официальными сценариями в Matlab или 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 } " ) Загрузите Meta Information от Huggingface с git clone или обновлением с помощью 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 . Подробности интерфейса DataLoader и мета -информационных файлов можно найти в подготовке набора данных
Мы используем официальные модели для оценки, если таковые имеются. В противном случае мы используем следующие настройки для обучения и оценки различных моделей для простоты и последовательности:
| Метрический тип | Тренироваться | Тест | Результаты |
|---|---|---|---|
| Фр | Кадид-10K | Csiq, Live, Tid2008, Tid2013 | FR Clackmark |
| Нр | Koniq-10K | Livec, Koniq-10K (официальный сплит), Tid2013, Spaq | NR Benchmark |
| Эстетический Ика | Ава | Ава (официальный сплит) | IAA |
| Лицо Ика | Cgfiqa | Cgfiqa (официальный раскол) | Лицо IQA |
| Эффективность | Время процессора/графического процессора, память графического процессора | Средний на | Эффективность |
Результаты рассчитываются с помощью:
По сути, мы используем самые большие существующие наборы данных для обучения, а также производительность оценки наборов данных для справедливого сравнения. Следующие модели не обеспечивают официальные веса и переподготовлены нашими сценариями:
| Метрический тип | Воспроизведенные модели |
|---|---|
| Фр | wadiqam_fr |
| Нр | cnniqa , dbcnn , hyperiqa , wadiqam_nr |
| Эстетический Ика | nima , nima-vgg16-ava |
Примечание
inception_resnet_v2 для по умолчанию nima .Вот пример сценария для получения эталона производительности на разных наборах данных:
# 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Пример для обучения DBCNN на наборе данных 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.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 License.
Если вы обнаружите, что наши коды полезны для вашего исследования, пожалуйста, подумайте о том, чтобы использовать следующую цитату:
@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-оптимизация, изображение-качество-оценка-Toolbox, PIQ, PIQA, чистый фон
Мы также благодарим следующие общественные репозитории: Musiq, Dbcnn, Nima, Hyperiqa, Cnniqa, Wadiqam, Pieapp, Paq2piq, Maniqa
Если у вас есть какие -либо вопросы, пожалуйста, напишите [email protected]