pyiqa


Namepyiqa JSON
Version 0.1.13 PyPI version JSON
download
home_pagehttps://github.com/chaofengc/IQA-PyTorch
SummaryPyTorch Toolbox for Image Quality Assessment
upload_time2024-10-19 08:13:09
maintainerNone
docs_urlNone
authorChaofeng Chen
requires_python>=3.6
licenseNone
keywords image quality assessment pytorch
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # <img align="left" width="100" height="100" src="docs/pyiqa_logo.jpg"> PyTorch Toolbox for Image Quality Assessment

An IQA toolbox with pure python and pytorch. Please refer to [Awesome-Image-Quality-Assessment](https://github.com/chaofengc/Awesome-Image-Quality-Assessment) for a comprehensive survey of IQA methods and download links for IQA datasets.

<a href="https://colab.research.google.com/drive/14J3KoyrjJ6R531DsdOy5Bza5xfeMODi6?usp=sharing"><img src="https://colab.research.google.com/assets/colab-badge.svg" alt="google colab logo"></a> 
[![PyPI](https://img.shields.io/pypi/v/pyiqa)](https://pypi.org/project/pyiqa/)
[![Downloads](https://static.pepy.tech/badge/pyiqa)](https://pepy.tech/project/pyiqa)
[![Documentation Status](https://readthedocs.org/projects/iqa-pytorch/badge/?version=latest)](https://iqa-pytorch.readthedocs.io/en/latest/?badge=latest)
[![Awesome](https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)](https://github.com/chaofengc/Awesome-Image-Quality-Assessment)
[![Citation](https://img.shields.io/badge/Citation-bibtex-green)](https://github.com/chaofengc/IQA-PyTorch/blob/main/README.md#bookmark_tabs-citation)
[![Zhihu](https://img.shields.io/badge/zhihu-white?logo=zhihu)](https://www.zhihu.com/column/c_1565424954811846656)

<!-- [![visitors](https://hits.seeyoufarm.com/api/count/incr/badge.svg?url=https%3A%2F%2Fgithub.com%2Fchaofengc%2FIQA-PyTorch&count_bg=%2379C83D&title_bg=%23555555&icon=&icon_color=%23E7E7E7&title=visitors&edge_flat=false)](https://hits.seeyoufarm.com) -->

## :open_book: Introduction

This is a comprehensive image quality assessment (IQA) toolbox built with **pure Python and PyTorch**. We provide reimplementation of many mainstream full reference (FR) and no reference (NR) metrics (results are calibrated with official matlab scripts if exist). **With GPU acceleration, most of our implementations are much faster than Matlab.** Please refer to the following documents for details:  

<div align="center">

📦 [Model Cards](docs/ModelCard.md)  |  🗃️ [Dataset Cards](docs/Dataset_Preparation.md) | 🤗 [Datasets Download](https://huggingface.co/datasets/chaofengc/IQA-Toolbox-Datasets/tree/main) | 📚 [Documentation](https://iqa-pytorch.readthedocs.io/en/latest/) | 📈[Benchmark](https://github.com/chaofengc/IQA-PyTorch/tree/main?tab=readme-ov-file#performance-evaluation-protocol)

</div>

---

### :triangular_flag_on_post: Updates/Changelog
- 🎨**Oct, 2024**. Add perceptual color difference metric `msswd` proposed in [MS-SWD (ECCV2024)](https://github.com/real-hjq/MS-SWD). Thanks to their work! 🤗
- ⏳**Sep, 2024**. Add [efficiency benchmark](tests/Efficiency_benchmark.csv). With $1080\times800$ image as inputs, all metrics complete **in under 1 second on the GPU** (NVIDIA V100), and most of them, except for `qalign` and `qalign_8bit`, require **less than 6GB of GPU memory**.
- ⚡**Aug, 2024**. Add `qalign_4bit` and `qalign_8bit` with much less memory requirement and similar performance.
- ✨**Aug, 2024**. Add `piqe` metric, and `niqe_matlab, brisque_matlab` with default matlab parameters (results have been calibrated with MATLAB R2021b).
- 💥**Aug, 2024**. Add `lpips+` and `lpips-vgg+` proposed in our paper [TOPIQ](https://arxiv.org/abs/2308.03060). 
- 🔥**June, 2024**. Add `arniqa` and its variances trained on different datasets, refer to official repo [here](https://github.com/miccunifi/ARNIQA). Thanks for the contribution from [Lorenzo Agnolucci](https://github.com/LorenzoAgnolucci) 🤗.
- **Apr 24, 2024**. Add `inception_score` and console entry point with `pyiqa` command.
- **Mar 11, 2024**. Add `unique`, refer to official repo [here](https://github.com/zwx8981/UNIQUE). Thanks for the contribution from [Weixia Zhang](https://github.com/zwx8981) 🤗.
- [**More**](docs/history_changelog.md)

---

## :zap: Quick Start

### Installation
```bash
# 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
```

### Basic Usage 

You can simply use the package with commandline interface. 
```bash
# list all available metrics
pyiqa -ls

# test with default settings
pyiqa [metric_name(s)] --target [image_path or dir] --ref [image_path or dir]
```

### Advanced Usage with Codes

#### Test metrics 

```python
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")
```

#### Use as loss functions

Note that gradient propagation is disabled by default. Set `as_loss=True` to enable it as a loss function. **Not all metrics support backpropagation, please refer to [Model Cards](docs/ModelCard.md) and be sure that you are using it in a `lower_better` way.**
```python
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
```

#### Use custom settings and weights 

We also provide a flexible way to use custom settings and weights in case you want to retrain or fine-tune the models. 

```python
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 Test script

Example test script with input directory/images and reference directory/images. 
```bash
# 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
```

## :1st_place_medal: Benchmark Performances and Model Zoo

### Results Calibration

Please refer to the [results calibration](./ResultsCalibra/ResultsCalibra.md) to verify the correctness of the python implementations compared with official scripts in matlab or python.

### ⏬ Download Benchmark Datasets

For convenience, we upload all related datasets to [huggingface IQA-Toolbox-Dataset](https://huggingface.co/datasets/chaofengc/IQA-Toolbox-Datasets), and corresponding meta information files to [huggingface IQA-Toolbox-Dataset-metainfo](https://huggingface.co/datasets/chaofengc/IQA-Toolbox-Datasets-metainfo). 
Here are example codes to download them from huggingface:

>[!CAUTION]
> we only collect the datasets for academic, research, and educational purposes. It is important for the users to adhere to the usage guidelines, licensing terms, and conditions set forth by the original creators or owners of each dataset.

```python
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}")
```

Download meta information from Huggingface with `git clone` or update with `git pull`:
```
cd ./datasets
git clone https://huggingface.co/datasets/chaofengc/IQA-Toolbox-Datasets-metainfo meta_info

cd ./datasets/meta_info
git pull
```

Examples to specific dataset options can be found in `./options/default_dataset_opt.yml`. Details of the dataloader interface and meta information files can be found in [Dataset Preparation](docs/Dataset_Preparation.md)

### Performance Evaluation Protocol

**We use official models for evaluation if available.** Otherwise, we use the following settings to train and evaluate different models for simplicity and consistency:

| Metric Type   | Train     | Test                                       | Results                                                  | 
| ------------- | --------- | ------------------------------------------ | -------------------------------------------------------- |
| FR            | KADID-10k | CSIQ, LIVE, TID2008, TID2013               | [FR benchmark results](tests/FR_benchmark_results.csv)   |
| NR            | KonIQ-10k | LIVEC, KonIQ-10k (official split), TID2013, SPAQ | [NR benchmark results](tests/NR_benchmark_results.csv)   |
| Aesthetic IQA | AVA       | AVA (official split)                       | [IAA benchmark results](tests/IAA_benchmark_results.csv) |
| Efficiency | CPU/GPU Time, GPU Memory | Average on $1080\times800$ image inputs | [Efficiency benchmark](tests/Efficiency_benchmark.csv) |

Results are calculated with:
- **PLCC without any correction**. Although test time value correction is common in IQA papers, we want to use the original value in our benchmark.
- **Full image single input.** We **do not** use multi-patch testing unless necessary.

Basically, we use the largest existing datasets for training, and cross dataset evaluation performance for fair comparison. The following models do not provide official weights, and are retrained by our scripts:

| Metric Type   | Reproduced Models |
| ------------- | ----------------------------- |
| FR            | `wadiqam_fr`  |
| NR            | `cnniqa`, `dbcnn`, `hyperiqa`,  `wadiqam_nr` |
| Aesthetic IQA | `nima`, `nima-vgg16-ava`      |

>[!NOTE]
>- Due to optimized training process, performance of some retrained approaches may be different with original paper.
>- Results of all **retrained models by ours** are normalized to [0, 1] and change to higher better for convenience.
>- Results of KonIQ-10k, AVA are both tested with official split.
>- NIMA is only applicable to AVA dataset now. We use `inception_resnet_v2` for default `nima`.
>- MUSIQ is not included in the IAA benchmark because we do not have train/split information of the official model.

### Benchmark Performance with Provided Script

Here is an example script to get performance benchmark on different datasets:
```bash
# 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
```

## :hammer_and_wrench: Train



### Example Train Script

Example to train DBCNN on LIVEChallenge dataset
```bash
# 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
```

Example for distributed training
```bash
torchrun --nproc_per_node=2 --master_port=4321 pyiqa/train.py -opt options/train/CLIPIQA/train_CLIPIQA_koniq10k.yml --launcher pytorch
```

## :beers: Contribution

Any contributions to this repository are greatly appreciated. Please follow the [contribution instructions](docs/Instruction.md) for contribution guidance.

## :scroll: License

This work is licensed under a [NTU S-Lab License](https://github.com/chaofengc/IQA-PyTorch/blob/main/LICENSE_NTU-S-Lab) and <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/">Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License</a>.

<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png" /></a>

## :bookmark_tabs: Citation

If you find our codes helpful to your research, please consider to use the following citation:

```bib
@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}"
}
```

Please also consider to cite our works on image quality assessment if it is useful to you:
```bib
@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}
}
``` 
```bib
@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.}
}
```

## :heart: Acknowledgement

The code architecture is borrowed from [BasicSR](https://github.com/xinntao/BasicSR). Several implementations are taken from: [IQA-optimization](https://github.com/dingkeyan93/IQA-optimization), [Image-Quality-Assessment-Toolbox](https://github.com/RyanXingQL/Image-Quality-Assessment-Toolbox), [piq](https://github.com/photosynthesis-team/piq), [piqa](https://github.com/francois-rozet/piqa), [clean-fid](https://github.com/GaParmar/clean-fid)

We also thanks the following public repositories: [MUSIQ](https://github.com/google-research/google-research/tree/master/musiq), [DBCNN](https://github.com/zwx8981/DBCNN-PyTorch), [NIMA](https://github.com/kentsyx/Neural-IMage-Assessment), [HyperIQA](https://github.com/SSL92/hyperIQA), [CNNIQA](https://github.com/lidq92/CNNIQA), [WaDIQaM](https://github.com/lidq92/WaDIQaM), [PieAPP](https://github.com/prashnani/PerceptualImageError), [paq2piq](https://github.com/baidut/paq2piq), [MANIQA](https://github.com/IIGROUP/MANIQA) 

## :e-mail: Contact

If you have any questions, please email `chaofenghust@gmail.com`

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/chaofengc/IQA-PyTorch",
    "name": "pyiqa",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.6",
    "maintainer_email": null,
    "keywords": "image quality assessment, pytorch",
    "author": "Chaofeng Chen",
    "author_email": "chaofenghust@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/bf/dc/733e4ed3d2cfb6a9a7e728ea2d8bf861d8ab7c72adede3188d8927a51309/pyiqa-0.1.13.tar.gz",
    "platform": null,
    "description": "# <img align=\"left\" width=\"100\" height=\"100\" src=\"docs/pyiqa_logo.jpg\"> PyTorch Toolbox for Image Quality Assessment\n\nAn IQA toolbox with pure python and pytorch. Please refer to [Awesome-Image-Quality-Assessment](https://github.com/chaofengc/Awesome-Image-Quality-Assessment) for a comprehensive survey of IQA methods and download links for IQA datasets.\n\n<a href=\"https://colab.research.google.com/drive/14J3KoyrjJ6R531DsdOy5Bza5xfeMODi6?usp=sharing\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"google colab logo\"></a> \n[![PyPI](https://img.shields.io/pypi/v/pyiqa)](https://pypi.org/project/pyiqa/)\n[![Downloads](https://static.pepy.tech/badge/pyiqa)](https://pepy.tech/project/pyiqa)\n[![Documentation Status](https://readthedocs.org/projects/iqa-pytorch/badge/?version=latest)](https://iqa-pytorch.readthedocs.io/en/latest/?badge=latest)\n[![Awesome](https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)](https://github.com/chaofengc/Awesome-Image-Quality-Assessment)\n[![Citation](https://img.shields.io/badge/Citation-bibtex-green)](https://github.com/chaofengc/IQA-PyTorch/blob/main/README.md#bookmark_tabs-citation)\n[![Zhihu](https://img.shields.io/badge/zhihu-white?logo=zhihu)](https://www.zhihu.com/column/c_1565424954811846656)\n\n<!-- [![visitors](https://hits.seeyoufarm.com/api/count/incr/badge.svg?url=https%3A%2F%2Fgithub.com%2Fchaofengc%2FIQA-PyTorch&count_bg=%2379C83D&title_bg=%23555555&icon=&icon_color=%23E7E7E7&title=visitors&edge_flat=false)](https://hits.seeyoufarm.com) -->\n\n## :open_book: Introduction\n\nThis is a comprehensive image quality assessment (IQA) toolbox built with **pure Python and PyTorch**. We provide reimplementation of many mainstream full reference (FR) and no reference (NR) metrics (results are calibrated with official matlab scripts if exist). **With GPU acceleration, most of our implementations are much faster than Matlab.** Please refer to the following documents for details:  \n\n<div align=\"center\">\n\n\ud83d\udce6 [Model Cards](docs/ModelCard.md)  |  \ud83d\uddc3\ufe0f [Dataset Cards](docs/Dataset_Preparation.md) | \ud83e\udd17 [Datasets Download](https://huggingface.co/datasets/chaofengc/IQA-Toolbox-Datasets/tree/main) | \ud83d\udcda [Documentation](https://iqa-pytorch.readthedocs.io/en/latest/) | \ud83d\udcc8[Benchmark](https://github.com/chaofengc/IQA-PyTorch/tree/main?tab=readme-ov-file#performance-evaluation-protocol)\n\n</div>\n\n---\n\n### :triangular_flag_on_post: Updates/Changelog\n- \ud83c\udfa8**Oct, 2024**. Add perceptual color difference metric `msswd` proposed in [MS-SWD (ECCV2024)](https://github.com/real-hjq/MS-SWD). Thanks to their work! \ud83e\udd17\n- \u23f3**Sep, 2024**. Add [efficiency benchmark](tests/Efficiency_benchmark.csv). With $1080\\times800$ image as inputs, all metrics complete **in under 1 second on the GPU** (NVIDIA V100), and most of them, except for `qalign` and `qalign_8bit`, require **less than 6GB of GPU memory**.\n- \u26a1**Aug, 2024**. Add `qalign_4bit` and `qalign_8bit` with much less memory requirement and similar performance.\n- \u2728**Aug, 2024**. Add `piqe` metric, and `niqe_matlab, brisque_matlab` with default matlab parameters (results have been calibrated with MATLAB R2021b).\n- \ud83d\udca5**Aug, 2024**. Add `lpips+` and `lpips-vgg+` proposed in our paper [TOPIQ](https://arxiv.org/abs/2308.03060). \n- \ud83d\udd25**June, 2024**. Add `arniqa` and its variances trained on different datasets, refer to official repo [here](https://github.com/miccunifi/ARNIQA). Thanks for the contribution from [Lorenzo Agnolucci](https://github.com/LorenzoAgnolucci) \ud83e\udd17.\n- **Apr 24, 2024**. Add `inception_score` and console entry point with `pyiqa` command.\n- **Mar 11, 2024**. Add `unique`, refer to official repo [here](https://github.com/zwx8981/UNIQUE). Thanks for the contribution from [Weixia Zhang](https://github.com/zwx8981) \ud83e\udd17.\n- [**More**](docs/history_changelog.md)\n\n---\n\n## :zap: Quick Start\n\n### Installation\n```bash\n# Install with pip\npip install pyiqa\n\n# Install latest github version\npip uninstall pyiqa # if have older version installed already \npip install git+https://github.com/chaofengc/IQA-PyTorch.git\n\n# Install with git clone\ngit clone https://github.com/chaofengc/IQA-PyTorch.git\ncd IQA-PyTorch\npip install -r requirements.txt\npython setup.py develop\n```\n\n### Basic Usage \n\nYou can simply use the package with commandline interface. \n```bash\n# list all available metrics\npyiqa -ls\n\n# test with default settings\npyiqa [metric_name(s)] --target [image_path or dir] --ref [image_path or dir]\n```\n\n### Advanced Usage with Codes\n\n#### Test metrics \n\n```python\nimport pyiqa\nimport torch\n\n# list all available metrics\nprint(pyiqa.list_models())\n\ndevice = torch.device(\"cuda\") if torch.cuda.is_available() else torch.device(\"cpu\")\n\n# create metric with default setting\niqa_metric = pyiqa.create_metric('lpips', device=device)\n\n# check if lower better or higher better\nprint(iqa_metric.lower_better)\n\n# example for iqa score inference\n# Tensor inputs, img_tensor_x/y: (N, 3, H, W), RGB, 0 ~ 1\nscore_fr = iqa_metric(img_tensor_x, img_tensor_y)\n\n# img path as inputs.\nscore_fr = iqa_metric('./ResultsCalibra/dist_dir/I03.bmp', './ResultsCalibra/ref_dir/I03.bmp')\n\n# For FID metric, use directory or precomputed statistics as inputs\n# refer to clean-fid for more details: https://github.com/GaParmar/clean-fid\nfid_metric = pyiqa.create_metric('fid')\nscore = fid_metric('./ResultsCalibra/dist_dir/', './ResultsCalibra/ref_dir')\nscore = fid_metric('./ResultsCalibra/dist_dir/', dataset_name=\"FFHQ\", dataset_res=1024, dataset_split=\"trainval70k\")\n```\n\n#### Use as loss functions\n\nNote that gradient propagation is disabled by default. Set `as_loss=True` to enable it as a loss function. **Not all metrics support backpropagation, please refer to [Model Cards](docs/ModelCard.md) and be sure that you are using it in a `lower_better` way.**\n```python\nlpips_loss = pyiqa.create_metric('lpips', device=device, as_loss=True)\n\nssim_loss = pyiqa.create_metric('ssimc', device=device, as_loss=True)\nloss = 1 - ssim_loss(img_tensor_x, img_tensor_y)   # ssim is not lower better\n```\n\n#### Use custom settings and weights \n\nWe also provide a flexible way to use custom settings and weights in case you want to retrain or fine-tune the models. \n\n```python\niqa_metric = pyiqa.create_metric('topiq_nr', device=device, **custom_opts)\n\n# 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.\niqa_metric.load_weights('path/to/weights.pth', weight_keys='params')\n```\n\n#### Example Test script\n\nExample test script with input directory/images and reference directory/images. \n```bash\n# example for FR metric with dirs\npython inference_iqa.py -m LPIPS[or lpips] -i ./ResultsCalibra/dist_dir[dist_img] -r ./ResultsCalibra/ref_dir[ref_img]\n\n# example for NR metric with single image\npython inference_iqa.py -m brisque -i ./ResultsCalibra/dist_dir/I03.bmp\n```\n\n## :1st_place_medal: Benchmark Performances and Model Zoo\n\n### Results Calibration\n\nPlease refer to the [results calibration](./ResultsCalibra/ResultsCalibra.md) to verify the correctness of the python implementations compared with official scripts in matlab or python.\n\n### \u23ec Download Benchmark Datasets\n\nFor convenience, we upload all related datasets to [huggingface IQA-Toolbox-Dataset](https://huggingface.co/datasets/chaofengc/IQA-Toolbox-Datasets), and corresponding meta information files to [huggingface IQA-Toolbox-Dataset-metainfo](https://huggingface.co/datasets/chaofengc/IQA-Toolbox-Datasets-metainfo). \nHere are example codes to download them from huggingface:\n\n>[!CAUTION]\n> we only collect the datasets for academic, research, and educational purposes. It is important for the users to adhere to the usage guidelines, licensing terms, and conditions set forth by the original creators or owners of each dataset.\n\n```python\nimport os\nfrom huggingface_hub import snapshot_download\n\nsave_dir = './datasets'\nos.makedirs(save_dir, exist_ok=True)\n\nfilename = \"koniq10k.tgz\"\nsnapshot_download(\"chaofengc/IQA-Toolbox-Datasets\", repo_type=\"dataset\", local_dir=save_dir, allow_patterns=filename, local_dir_use_symlinks=False)\n\nos.system(f\"tar -xzvf {save_dir}/{filename} -C {save_dir}\")\n```\n\nDownload meta information from Huggingface with `git clone` or update with `git pull`:\n```\ncd ./datasets\ngit clone https://huggingface.co/datasets/chaofengc/IQA-Toolbox-Datasets-metainfo meta_info\n\ncd ./datasets/meta_info\ngit pull\n```\n\nExamples to specific dataset options can be found in `./options/default_dataset_opt.yml`. Details of the dataloader interface and meta information files can be found in [Dataset Preparation](docs/Dataset_Preparation.md)\n\n### Performance Evaluation Protocol\n\n**We use official models for evaluation if available.** Otherwise, we use the following settings to train and evaluate different models for simplicity and consistency:\n\n| Metric Type   | Train     | Test                                       | Results                                                  | \n| ------------- | --------- | ------------------------------------------ | -------------------------------------------------------- |\n| FR            | KADID-10k | CSIQ, LIVE, TID2008, TID2013               | [FR benchmark results](tests/FR_benchmark_results.csv)   |\n| NR            | KonIQ-10k | LIVEC, KonIQ-10k (official split), TID2013, SPAQ | [NR benchmark results](tests/NR_benchmark_results.csv)   |\n| Aesthetic IQA | AVA       | AVA (official split)                       | [IAA benchmark results](tests/IAA_benchmark_results.csv) |\n| Efficiency | CPU/GPU Time, GPU Memory | Average on $1080\\times800$ image inputs | [Efficiency benchmark](tests/Efficiency_benchmark.csv) |\n\nResults are calculated with:\n- **PLCC without any correction**. Although test time value correction is common in IQA papers, we want to use the original value in our benchmark.\n- **Full image single input.** We **do not** use multi-patch testing unless necessary.\n\nBasically, we use the largest existing datasets for training, and cross dataset evaluation performance for fair comparison. The following models do not provide official weights, and are retrained by our scripts:\n\n| Metric Type   | Reproduced Models |\n| ------------- | ----------------------------- |\n| FR            | `wadiqam_fr`  |\n| NR            | `cnniqa`, `dbcnn`, `hyperiqa`,  `wadiqam_nr` |\n| Aesthetic IQA | `nima`, `nima-vgg16-ava`      |\n\n>[!NOTE]\n>- Due to optimized training process, performance of some retrained approaches may be different with original paper.\n>- Results of all **retrained models by ours** are normalized to [0, 1] and change to higher better for convenience.\n>- Results of KonIQ-10k, AVA are both tested with official split.\n>- NIMA is only applicable to AVA dataset now. We use `inception_resnet_v2` for default `nima`.\n>- MUSIQ is not included in the IAA benchmark because we do not have train/split information of the official model.\n\n### Benchmark Performance with Provided Script\n\nHere is an example script to get performance benchmark on different datasets:\n```bash\n# NOTE: this script will test ALL specified metrics on ALL specified datasets\n# Test default metrics on default datasets\npython benchmark_results.py -m psnr ssim -d csiq tid2013 tid2008\n\n# Test with your own options\npython benchmark_results.py -m psnr --data_opt options/example_benchmark_data_opts.yml\n\npython benchmark_results.py --metric_opt options/example_benchmark_metric_opts.yml tid2013 tid2008\n\npython benchmark_results.py --metric_opt options/example_benchmark_metric_opts.yml --data_opt options/example_benchmark_data_opts.yml\n```\n\n## :hammer_and_wrench: Train\n\n\n\n### Example Train Script\n\nExample to train DBCNN on LIVEChallenge dataset\n```bash\n# train for single experiment\npython pyiqa/train.py -opt options/train/DBCNN/train_DBCNN.yml\n\n# train N splits for small datasets\npython pyiqa/train_nsplits.py -opt options/train/DBCNN/train_DBCNN.yml\n```\n\nExample for distributed training\n```bash\ntorchrun --nproc_per_node=2 --master_port=4321 pyiqa/train.py -opt options/train/CLIPIQA/train_CLIPIQA_koniq10k.yml --launcher pytorch\n```\n\n## :beers: Contribution\n\nAny contributions to this repository are greatly appreciated. Please follow the [contribution instructions](docs/Instruction.md) for contribution guidance.\n\n## :scroll: License\n\nThis work is licensed under a [NTU S-Lab License](https://github.com/chaofengc/IQA-PyTorch/blob/main/LICENSE_NTU-S-Lab) and <a rel=\"license\" href=\"http://creativecommons.org/licenses/by-nc-sa/4.0/\">Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License</a>.\n\n<a rel=\"license\" href=\"http://creativecommons.org/licenses/by-nc-sa/4.0/\"><img alt=\"Creative Commons License\" style=\"border-width:0\" src=\"https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png\" /></a>\n\n## :bookmark_tabs: Citation\n\nIf you find our codes helpful to your research, please consider to use the following citation:\n\n```bib\n@misc{pyiqa,\n  title={{IQA-PyTorch}: PyTorch Toolbox for Image Quality Assessment},\n  author={Chaofeng Chen and Jiadi Mo},\n  year={2022},\n  howpublished = \"[Online]. Available: \\url{https://github.com/chaofengc/IQA-PyTorch}\"\n}\n```\n\nPlease also consider to cite our works on image quality assessment if it is useful to you:\n```bib\n@article{chen2024topiq,\n  author={Chen, Chaofeng and Mo, Jiadi and Hou, Jingwen and Wu, Haoning and Liao, Liang and Sun, Wenxiu and Yan, Qiong and Lin, Weisi},\n  title={TOPIQ: A Top-Down Approach From Semantics to Distortions for Image Quality Assessment}, \n  journal={IEEE Transactions on Image Processing}, \n  year={2024},\n  volume={33},\n  pages={2404-2418},\n  doi={10.1109/TIP.2024.3378466}\n}\n``` \n```bib\n@article{wu2024qalign,\n  title={Q-Align: Teaching LMMs for Visual Scoring via Discrete Text-Defined Levels},\n  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},\n  journal={International Conference on Machine Learning (ICML)},\n  year={2024},\n  institution={Nanyang Technological University and Shanghai Jiao Tong University and Sensetime Research},\n  note={Equal Contribution by Wu, Haoning and Zhang, Zicheng. Project Lead by Wu, Haoning. Corresponding Authors: Zhai, Guangtai and Lin, Weisi.}\n}\n```\n\n## :heart: Acknowledgement\n\nThe code architecture is borrowed from [BasicSR](https://github.com/xinntao/BasicSR). Several implementations are taken from: [IQA-optimization](https://github.com/dingkeyan93/IQA-optimization), [Image-Quality-Assessment-Toolbox](https://github.com/RyanXingQL/Image-Quality-Assessment-Toolbox), [piq](https://github.com/photosynthesis-team/piq), [piqa](https://github.com/francois-rozet/piqa), [clean-fid](https://github.com/GaParmar/clean-fid)\n\nWe also thanks the following public repositories: [MUSIQ](https://github.com/google-research/google-research/tree/master/musiq), [DBCNN](https://github.com/zwx8981/DBCNN-PyTorch), [NIMA](https://github.com/kentsyx/Neural-IMage-Assessment), [HyperIQA](https://github.com/SSL92/hyperIQA), [CNNIQA](https://github.com/lidq92/CNNIQA), [WaDIQaM](https://github.com/lidq92/WaDIQaM), [PieAPP](https://github.com/prashnani/PerceptualImageError), [paq2piq](https://github.com/baidut/paq2piq), [MANIQA](https://github.com/IIGROUP/MANIQA) \n\n## :e-mail: Contact\n\nIf you have any questions, please email `chaofenghust@gmail.com`\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "PyTorch Toolbox for Image Quality Assessment",
    "version": "0.1.13",
    "project_urls": {
        "Homepage": "https://github.com/chaofengc/IQA-PyTorch"
    },
    "split_keywords": [
        "image quality assessment",
        " pytorch"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "86a66d4c1594f3ab2384d1bba948743def6150b430af682e940a7685cf31a9ef",
                "md5": "bd2faddf9ca92587bc4367129b22ab3c",
                "sha256": "306483a6f5b667d7bfd8185ee9142b2a5722757c69752434f393c610b9ad2313"
            },
            "downloads": -1,
            "filename": "pyiqa-0.1.13-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "bd2faddf9ca92587bc4367129b22ab3c",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.6",
            "size": 261274,
            "upload_time": "2024-10-19T08:13:06",
            "upload_time_iso_8601": "2024-10-19T08:13:06.456725Z",
            "url": "https://files.pythonhosted.org/packages/86/a6/6d4c1594f3ab2384d1bba948743def6150b430af682e940a7685cf31a9ef/pyiqa-0.1.13-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "bfdc733e4ed3d2cfb6a9a7e728ea2d8bf861d8ab7c72adede3188d8927a51309",
                "md5": "9253af42663e454469ae4124f68bf1aa",
                "sha256": "6312fb450b1ca7559193b4808ea1aa803707857505f89ce4cef356d51bd72d8b"
            },
            "downloads": -1,
            "filename": "pyiqa-0.1.13.tar.gz",
            "has_sig": false,
            "md5_digest": "9253af42663e454469ae4124f68bf1aa",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.6",
            "size": 223153,
            "upload_time": "2024-10-19T08:13:09",
            "upload_time_iso_8601": "2024-10-19T08:13:09.062898Z",
            "url": "https://files.pythonhosted.org/packages/bf/dc/733e4ed3d2cfb6a9a7e728ea2d8bf861d8ab7c72adede3188d8927a51309/pyiqa-0.1.13.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-10-19 08:13:09",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "chaofengc",
    "github_project": "IQA-PyTorch",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "requirements": [],
    "lcname": "pyiqa"
}
        
Elapsed time: 0.38408s