ONNX 模型库
返回模型

说明文档

在 DIV2K 上训练的 RCAN 模型

RCAN 是一个用于超分辨率的极深残差通道注意力网络,在 DIV2K 上训练。它由 Yulun Zhang 等人在 2018 年的论文 Image Super-Resolution Using Very Deep Residual Channel Attention Networks 中提出,并首次在此仓库中发布。

我们开发了一个可由 AMD Ryzen AI 支持的修改版本。

模型描述

RCAN 是一种用于单图像超分辨率的先进算法。我们的修改版本比原始版本更小。它基于深度学习技术,能够实现 X2 超分辨率。

预期用途与限制

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

如何使用

安装

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

pip install -r requirements.txt 

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

  1. 下载基准测试数据集。
  2. 按以下方式组织数据集目录:
└── dataset
     └── benchmark
          ├── Set5
               ├── HR
               |   ├── baby.png
               |   ├── ...
               └── LR_bicubic
                   └──X2
                      ├──babyx2.png
                      ├── ...
          ├── Set14
          ├── ...    

测试与评估

    parser = argparse.ArgumentParser(description='RCAN SISR')
    parser.add_argument('--onnx_path', type=str, default='RCAN_int8_NHWC.onnx',
                    help='onnx path')
    parser.add_argument('--image_path', default='test_data/test.png',
                    help='path of your image')
    parser.add_argument('--output_path', default='test_data/sr.png',
                    help='path of your image')
    parser.add_argument('--ipu', action='store_true',
                    help='use ipu')
    parser.add_argument('--provider_config', type=str, default=None,
                    help='provider config path')
    args = parser.parse_args()

    if args.ipu:
        providers = ["VitisAIExecutionProvider"]
        provider_options = [{"config_file": args.provider_config}]
    else:
        providers = ['CUDAExecutionProvider', 'CPUExecutionProvider']
        provider_options = None
    onnx_file_name = args.onnx_path
    image_path = args.image_path
    output_path = args.output_path

    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 RCAN_int8_NHWC.onnx --image_path /Path/To/Your/Image --ipu --provider_config Path/To/vaip_config.json
  • 测试量化模型的精度
python eval_onnx.py --onnx_path RCAN_int8_NHWC.onnx --data_test Set5 --ipu --provider_config Path/To/vaip_config.json 

性能

方法 缩放倍数 计算量 Set5
RCAN-S (float) X2 24.5G 37.531 / 0.958
RCAN-S (INT8) X2 24.5G 37.150 / 0.955
  • 注:计算量基于输出分辨率为 360x640 计算
@inproceedings{zhang2018image,
  title={Image super-resolution using very deep residual channel attention networks},
  author={Zhang, Yulun and Li, Kunpeng and Li, Kai and Wang, Lichen and Zhong, Bineng and Fu, Yun},
  booktitle={Proceedings of the European conference on computer vision (ECCV)},
  pages={286--301},
  year={2018}
}

amd/rcan

作者 amd

↓ 0 ♥ 2

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

更新时间: 2024-01-12 03:54:30+00:00

在 Hugging Face 上查看

文件 (13)

.gitattributes
RCAN_int8_NHWC.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
metric.py
requirements.txt
test_data/test.png