ONNX 模型库
返回模型

说明文档

模型描述

PAN 是一种基于像素注意力的轻量级图像超分辨率方法。该方法由 Hengyuan Zhao 等人在论文 Efficient Image Super-Resolution Using Pixel Attention 中提出,并首次在 此仓库 中发布。

我们修改了原始模型中 Leaky ReLU 的负斜率,并用 hard sigmoid 替换了 sigmoid 激活函数,以使模型兼容 AMD Ryzen AI。我们加载了已发布的模型参数,并在 DIV2K 数据集上进行了微调。

预期用途与限制

您可以使用原始模型进行超分辨率处理。请查看 模型中心 以获取所有可用的 PAN 模型。

使用方法

安装

按照 Ryzen AI 安装指南 准备 Ryzen AI 的运行环境。 运行以下脚本安装此模型的依赖项。

pip install -r requirements.txt 

数据准备(可选:用于精度评估)

  1. 下载 benchmark(https://cv.snu.ac.kr/research/EDSR/benchmark.tar) 数据集。
  2. 解压数据集并将其放置在项目文件夹下。按以下结构组织数据集目录:
PAN
└── dataset
     └── benchmark
          ├── Set5
               ├── HR
               |   ├── baby.png
               |   ├── ...
               └── LR_bicubic
                   └──X2
                      ├──babyx2.png
                      ├── ...
          ├── Set14
          ├── ...    

测试与评估

    parser = argparse.ArgumentParser(description='PAN SR')
    parser.add_argument('--onnx_path',
                        type=str, 
                        default='PAN_int8.onnx',
                        help='Onnx path')
    parser.add_argument('--image_path', 
                        type=str,
                        default='test_data/test.png',
                        help='Path to your input image.')
    parser.add_argument('--output_path', 
                        type=str,
                        default='test_data/sr.png',
                        help='Path to your output image.')
    parser.add_argument('--provider_config',
                        type=str,
                        default=\"vaip_config.json\",
                        help=\"Path of the config file for seting provider_options.\")
    parser.add_argument('--ipu', action='store_true', help='Use Ipu for interence.')

    args = parser.parse_args()
   
    onnx_file_name = args.onnx_path
    image_path = args.image_path
    output_path = args.output_path

    if args.ipu:
        providers = [\"VitisAIExecutionProvider\"]
        provider_options = [{\"config_file\": args.provider_config}]
    else:
        providers = ['CPUExecutionProvider']
        provider_options = None
    ort_session = onnxruntime.InferenceSession(onnx_file_name,  providers=providers, provider_options=provider_options) 

    lr = cv2.imread(image_path)[np.newaxis,:,:,:].transpose((0,3,1,2)).astype(np.float32)
    sr = tiling_inference(ort_session, lr, 8, (56, 56))
    sr = np.clip(sr, 0, 255)
    sr = sr.squeeze().transpose((1,2,0)).astype(np.uint8)
    sr = cv2.imwrite(output_path, sr)
  • 对单张图像运行推理
python infer_onnx.py --onnx_path PAN_int8.onnx --image_path /Path/To/Your/Image --ipu --provider_config Path\To\vaip_config.json
  • 测试量化模型的精度
python eval_onnx.py --onnx_path PAN_int8.onnx --data_test Set5 --ipu --provider_config Path\To\vaip_config.json

注意:vaip_config.json 位于 Ryzen AI 的安装包中(请参考 安装

性能

方法 缩放倍数 Flops Set5
PAN (float) X2 141G 38.00 / 0.961
PAN_amd (float) X2 141G 37.859 / 0.960
PAN_amd (int8) X2 141G 37.18 / 0.952
  • 注意:Flops 是在输出分辨率为 360x640 时计算的
@inproceedings{zhao2020efficient,
  title={Efficient image super-resolution using pixel attention},
  author={Zhao, Hengyuan and Kong, Xiangtao and He, Jingwen and Qiao, Yu and Dong, Chao},
  booktitle={European Conference on Computer Vision},
  pages={56--72},
  year={2020},
  organization={Springer}
}

amd/PAN

作者 amd

image-to-image
↓ 0 ♥ 2

创建时间: 2023-12-04 16:30:34+00:00

更新时间: 2024-01-10 03:19:32+00:00

在 Hugging Face 上查看

文件 (15)

.gitattributes
PAN_int8.onnx ONNX
README.md
data/__init__.py
data/benchmark.py
data/common.py
data/data_tiling.py
data/srdata.py
eval_onnx.py
infer_onnx.py
option.py
requirements.txt
test_data/sr.png
test_data/test.png
utility.py