Caixa de ferramentas Pytorch para avaliação da qualidade da imagemUma caixa de ferramentas IQA com python puro e pytorch. Consulte a avaliação de qualidade impressionante para obter uma pesquisa abrangente dos métodos IQA e baixar links para conjuntos de dados IQA.
Esta é uma caixa de ferramentas abrangente de avaliação da qualidade da imagem (IQA), construída com python puro e pytorch . Fornecemos a reimplementação de muitas métricas de referência completa (FR) e nenhuma referência (NR) (os resultados são calibrados com scripts oficiais do MATLAB, se existem). Com a aceleração da GPU, a maioria de nossas implementações é muito mais rápida que o MATLAB. Consulte os seguintes documentos para obter detalhes:
? Cartões de modelo | ? Iquudar cartões de dados | ? Download dos conjuntos de dados | Documentação | ? Benchmark
fid com distância MMD, use -a com fid_metric(..., distance_type='mmd', kernel_type='rbf') Consulte CMMD para obter mais detalhes. Obrigado à INA pelas contribuições.fid_dinov2 , consulte o DGM-EVAL para obter mais detalhes.pyiqa.load_dataset para facilitar a carregamento de vários conjuntos de dados comuns.compare2score e deepdc . Agradecemos a Hanwei por seu excelente trabalho? E, por favor, consulte seus documentos oficiais para obter mais detalhes!topiq_nr-face treinando com o conjunto de dados GCFIQA. Graças ao trabalho deles! ?msswd proposta no MS-SWD (ECCV2024). Graças ao trabalho deles! ?qalign e qalign_8bit , requerem menos de 6 GB de memória GPU .qalign_4bit e qalign_8bit com muito menos requisito de memória e desempenho semelhante.piqe e niqe_matlab, brisque_matlab com parâmetros padrão do MATLAB (os resultados foram calibrados com o MATLAB R2021B).lpips+ e lpips-vgg+ propostos em nosso papel TOPIQ.arniqa e suas variações treinadas em diferentes conjuntos de dados, consulte o Repo Oficial aqui. Obrigado pela contribuição de Lorenzo Agnolucci?inception_score e do console com o comando pyiqa .unique , consulte o repo oficial aqui. Obrigado pela contribuição 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 developVocê pode simplesmente usar o pacote com interface de comando.
# 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" ) Observe que a propagação do gradiente está desativada por padrão. Defina as_loss=True para ativá -lo como uma função de perda. Nem todas as métricas suportam retropropagação, consulte os cartões de modelo e certifique -se de que você o esteja usando de uma maneira 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 Também fornecemos uma maneira flexível de usar configurações e pesos personalizados, caso você queira treinar ou ajustar os modelos.
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' )Exemplo de script de teste com diretório de entrada/imagens e diretório de referência/imagens.
# 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 Oferecemos uma maneira fácil de carregar conjuntos de dados Popular IQA através do arquivo de configuração pyiqa/default_dataset_configs.yml . Os conjuntos de dados especificados serão baixados automaticamente do HuggingFace IQA-Pytorch-Dataset. Veja o código de exemplo abaixo:
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 ) Consulte os cartões do conjunto de dados para obter mais detalhes sobre o dataset_opts .
Consulte a calibração dos resultados para verificar a correção das implementações do Python em comparação com scripts oficiais no MATLAB ou Python.
Por conveniência, carregamos todos os conjuntos de dados relacionados ao HuggingFace IQA-Toolbox-Dataset, e os arquivos de meta de meta correspondentes para huggingface IQA-Toolbox-DataSet-metainfo. Aqui estão os códigos de exemplo para baixá -los de Huggingface:
Cuidado
Coletamos apenas os conjuntos de dados para fins acadêmicos, de pesquisa e educacional. É importante que os usuários sigam as diretrizes de uso, os termos de licenciamento e as condições estabelecidas pelos criadores ou proprietários originais de cada conjunto de dados.
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 } " ) Faça o download da Meta Informações do Huggingface com git clone ou atualize com git pull :
cd ./datasets
git clone https://huggingface.co/datasets/chaofengc/IQA-Toolbox-Datasets-metainfo meta_info
cd ./datasets/meta_info
git pull
Exemplos para opções específicas do conjunto de dados podem ser encontradas em ./pyiqa/default_dataset_configs.yml . Detalhes da interface Dataloader e arquivos de meta de informação podem ser encontrados na preparação do conjunto de dados
Usamos modelos oficiais para avaliação, se disponível. Caso contrário, usamos as seguintes configurações para treinar e avaliar diferentes modelos para simplificar e consistência:
| Tipo métrico | Trem | Teste | Resultados |
|---|---|---|---|
| Fr | KADID-10K | CSIQ, ao vivo, TID2008, TID2013 | FR Benchmark |
| Nr | Koniq-10k | Livec, Koniq-10k (divisão oficial), TID2013, SPAQ | NR Benchmark |
| IQA estética | Ava | Ava (divisão oficial) | Benchmark IAA |
| Face IQA | CGFIQA | CGFIQA (divisão oficial) | Face Benchmark IQA |
| Eficiência | Tempo de CPU/GPU, memória da GPU | Média em | Benchmark de eficiência |
Os resultados são calculados com:
Basicamente, usamos os maiores conjuntos de dados existentes para treinamento e desempenho de avaliação de dados cruzados para comparação justa. Os modelos a seguir não fornecem pesos oficiais e são atualizados por nossos scripts:
| Tipo métrico | Modelos reproduzidos |
|---|---|
| Fr | wadiqam_fr |
| Nr | cnniqa , dbcnn , hyperiqa , wadiqam_nr |
| IQA estética | nima , nima-vgg16-ava |
Observação
inception_resnet_v2 para nima padrão.Aqui está um exemplo de script para obter uma referência de desempenho em diferentes conjuntos de dados:
# 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.ymlExemplo para treinar DBCNN no conjunto de dados 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.ymlExemplo de treinamento distribuído
torchrun --nproc_per_node=2 --master_port=4321 pyiqa/train.py -opt options/train/CLIPIQA/train_CLIPIQA_koniq10k.yml --launcher pytorchQuaisquer contribuições para este repositório são muito apreciadas. Siga as instruções de contribuição para orientação de contribuição.
Este trabalho é licenciado sob uma licença da NTU S-Lab e Creative Commons Attribution-NonCommercial-Sharealike 4.0 International License.
Se você achar nossos códigos úteis para sua pesquisa, considere usar a seguinte citação:
@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} "
}Por favor, considere também citar nossos trabalhos sobre avaliação da qualidade da imagem se for útil para você:
@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. }
}A arquitetura de código é emprestada do Basicsr. Várias implementações são retiradas de: otimização de IQA, imagem de qualidade de imagem-talento-toolbox, piq, piqa, limpo
Agradecemos também aos seguintes repositórios públicos: MUSIQ, DBCNN, NIMA, HYPERIQA, CNNIQA, WADIQAM, PIEAPP, PAQ2PIQ, MANIQA
Se você tiver alguma dúvida, envie um email para [email protected]