Pytorch Toolbox para evaluación de calidad de imagenUna caja de herramientas IQA con Python Pure y Pytorch. Consulte la evaluación de calidad de imagen increíble para una encuesta completa de los métodos IQA y descargue enlaces para conjuntos de datos IQA.
Esta es una caja de herramientas integral de evaluación de calidad de imagen (IQA) construida con Python y Pytorch puro . Proporcionamos la reimplementación de muchas métricas de referencia completa (FR) y sin referencia (NR) (los resultados están calibrados con los scripts oficiales de MATLAB si existen). Con la aceleración de GPU, la mayoría de nuestras implementaciones son mucho más rápidas que MATLAB. Consulte los siguientes documentos para más detalles:
? Tarjetas modelo | ? ️ Tarjetas de conjunto de datos | ? Descarga de conjuntos de datos | Documentación | ?Punto de referencia
fid con la distancia MMD, úselo con fid_metric(..., distance_type='mmd', kernel_type='rbf') Consulte CMMD para obtener más detalles. Gracias a Ina por las contribuciones.fid_dinov2 , consulte DGM-EVAL para obtener más detalles.pyiqa.load_dataset para una fácil carga de varios conjuntos de datos comunes.compare2score y deepdc . ¡Gracias a Hanwei por su gran trabajo?, Y consulte sus documentos oficiales para obtener más detalles!topiq_nr-face entrenando con el conjunto de datos GCFIQA. ¡Gracias a su trabajo! ?msswd propuesta en MS-SWD (ECCV2024). ¡Gracias a su trabajo! ?qalign y qalign_8bit , requieren menos de 6 GB de memoria de GPU .qalign_4bit y qalign_8bit con mucho menos requisito de memoria y un rendimiento similar.piqe y niqe_matlab, brisque_matlab con parámetros MATLAB predeterminados (los resultados se han calibrado con MATLAB R2021B).lpips+ y lpips-vgg+ propuesto en nuestro papel topiq.arniqa y sus variaciones capacitadas en diferentes conjuntos de datos, consulte el repositorio oficial aquí. ¿Gracias por la contribución de Lorenzo Agnolucci?inception_score y el punto de entrada de la consola con el comando pyiqa .unique , consulte el repositorio oficial aquí. ¿Gracias por la contribución 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 developSimplemente puede usar el paquete con la interfaz de línea de comandos.
# 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" ) Tenga en cuenta que la propagación de gradiente está deshabilitada de forma predeterminada. Establezca as_loss=True para habilitarlo como una función de pérdida. No todas las métricas admiten backpropagation, consulte las tarjetas de modelos y asegúrese de que lo esté utilizando de manera 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 También proporcionamos una forma flexible de utilizar configuraciones y pesos personalizados en caso de que desee volver a capacitar o ajustar los 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' )Ejemplo de prueba Script con directorio de entrada/imágenes y directorio/imágenes de referencia.
# 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 Ofrecemos una manera fácil de cargar conjuntos de datos IQA populares a través del archivo de configuración pyiqa/default_dataset_configs.yml . Los conjuntos de datos especificados se descargarán automáticamente desde Huggingface IQA-Pytorch-Dataset. Ver código de ejemplo a continuación:
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 las tarjetas de conjunto de datos para obtener más detalles sobre dataset_opts .
Consulte la calibración de resultados para verificar la corrección de las implementaciones de Python en comparación con los scripts oficiales en Matlab o Python.
Por conveniencia, cargamos todos los conjuntos de datos relacionados en Huggingface IQA-Toolbox-DataSet, y los archivos de meta información correspondientes a Huggingface IQA-Toolbox-Dataset-Metainfo. Aquí hay códigos de ejemplo para descargarlos desde Huggingface:
Precaución
Solo recopilamos los conjuntos de datos para fines académicos, de investigación y educativos. Es importante que los usuarios se adhieran a las pautas de uso, términos de licencia y condiciones establecidas por los creadores originales o propietarios de cada conjunto de datos.
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 } " ) Descargue Meta Information de Huggingface con git clone o Actualización con git pull :
cd ./datasets
git clone https://huggingface.co/datasets/chaofengc/IQA-Toolbox-Datasets-metainfo meta_info
cd ./datasets/meta_info
git pull
Se pueden encontrar ejemplos de opciones de conjunto de datos específicas en ./pyiqa/default_dataset_configs.yml . Los detalles de la interfaz dataLoader y los archivos de meta información se pueden encontrar en la preparación del conjunto de datos
Utilizamos modelos oficiales para la evaluación si están disponibles. De lo contrario, utilizamos las siguientes configuraciones para entrenar y evaluar diferentes modelos para la simplicidad y la consistencia:
| Tipo métrico | Tren | Prueba | Resultados |
|---|---|---|---|
| Fría | Kadid-10k | CSIQ, Live, TID2008, TID2013 | FR Benchmark |
| Nr | Koniq-10k | Livec, Koniq-10k (división oficial), TID2013, SPAQ | Punto de referencia NR |
| IQA estética | Ava | AVA (división oficial) | Punto de referencia de la IAA |
| Cara iqa | Cgfiqa | CGFIQA (división oficial) | Face IQA Benchmark |
| Eficiencia | Tiempo de CPU/GPU, memoria GPU | Promedio de | Punto de referencia de eficiencia |
Los resultados se calculan con:
Básicamente, utilizamos los conjuntos de datos existentes más grandes para la capacitación y el rendimiento de la evaluación del conjunto de datos cruzados para una comparación justa. Los siguientes modelos no proporcionan pesos oficiales y son reentrenados por nuestros scripts:
| Tipo métrico | Modelos reproducidos |
|---|---|
| Fría | wadiqam_fr |
| Nr | cnniqa , dbcnn , hyperiqa , wadiqam_nr |
| IQA estética | nima , nima-vgg16-ava |
Nota
inception_resnet_v2 para nima predeterminado.Aquí hay un script de ejemplo para obtener un punto de referencia de rendimiento en diferentes conjuntos de datos:
# 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.ymlEjemplo para entrenar dbcnn en el conjunto de datos de 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.ymlEjemplo para la capacitación distribuida
torchrun --nproc_per_node=2 --master_port=4321 pyiqa/train.py -opt options/train/CLIPIQA/train_CLIPIQA_koniq10k.yml --launcher pytorchCualquier contribución a este repositorio es muy apreciada. Siga las instrucciones de contribución para la guía de contribución.
Este trabajo tiene licencia bajo una licencia NTU S-Lab y Creative Commons Attribution-No-Commercial-Sharealike 4.0 International.
Si encuentra útiles nuestros códigos para su investigación, considere usar la siguiente cita:
@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} "
}Considere también citar nuestros trabajos en la evaluación de la calidad de la imagen si es útil para usted:
@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. }
}La arquitectura del código se toma prestada de Basicsr. Se toman varias implementaciones de: IQA-Optimización, Tooleta de evaluación de calidad de imagen, PIQ, PIQA, Clean-Fid
También agradecemos los siguientes repositorios públicos: Musiq, DBCNN, NIMA, Hyperiqa, Cnniqa, Wadiqam, PIEAPP, PAQ2PIQ, MANIQA
Si tiene alguna pregunta, envíe un correo electrónico [email protected]