在自然图像中,跨尺度的图像相似性是普遍的,本文使用跨尺度的Non-Local注意力模型,有效挖掘图像内部先验知识,在多个实验中证明所提出的方法在多个SISR基准测试中取得了最先进的性能。
论文
Image Super-Resolution with Cross-Scale Non-Local Attention and Exhaustive Self-Exemplars Mining
Yiqun Mei, Yuchen Fan, Yuqian Zhou, Lichao Huang, Thomas S. Huang, Humphrey Shi
参考实现:
https://github.com/SHI-Labs/Cross-Scale-Non-Local-Attention.git
模型输入
input-name | data-type | data-format | input-shape |
---|---|---|---|
input.1 | FLOAT32 | NCHW | batch_size x 3 x 56 x 56 |
模型输出
output-name | data-type | data-format | output-shape |
---|---|---|---|
output1 | FLOAT32 | NCHW | batch_size x 3 x 224 x 224 |
该模型推理所需配套的软件如下:
配套 | 版本 | 环境准备指导 |
---|---|---|
固件与驱动 | 1.0.17 | Pytorch框架推理环境准备 |
CANN | 6.0.RC1 | - |
Python | 3.7.5 | - |
说明:请根据推理卡型号与 CANN 版本选择相匹配的固件与驱动版本。
安装推理过程所需的依赖
pip3 install -r requirements.txt
获取源码
git clone https://github.com/SHI-Labs/Cross-Scale-Non-Local-Attention.git -b master
cd Cross-Scale-Non-Local-Attention/
git reset af168f99afad2d9a04a3e4038522987a5a975e86 --hard
cd ../
获取原始数据集
本模型推理项目使用 Set5 数据集验证模型精度,请点击 set5 自行下载,并按照以下的目录结构存放图片与标签文件。
Cross-Scale-Non-Local-Attention
├── Set5
│ ├── HR
│ ├── LR_bicubic
│ │ ├── X2
│ │ ├── X3
│ │ ├── X4
数据预处理
执行前处理脚本将原始数据转换为OM模型输入需要的bin/npy文件。
python3 CSNLN_preprocess.py --s ./Set5/LR_bicubic/X4/ --d prep_dataset
其中"s"表示处理前原数据集的地址,"d"表示生成数据集的文件夹名称
PyTroch 模型转 ONNX 模型
获取权重文件model_x4.pt
然后执行执行以下命令生成 ONNX 模型:
python3 CSNLN_pth2onnx.py --n_feats 128 --pre_train model_x4.pt --save csnln_x4.onnx
参数说明:
ONNX 模型转 OM 模型
step1: 查看NPU芯片名称 ${chip_name}
npu-smi info
例如该设备芯片名为 310P3,回显如下:
+-------------------+-----------------+------------------------------------------------------+
| NPU Name | Health | Power(W) Temp(C) Hugepages-Usage(page) |
| Chip Device | Bus-Id | AICore(%) Memory-Usage(MB) |
+===================+=================+======================================================+
| 0 310P3 | OK | 15.8 42 0 / 0 |
| 0 0 | 0000:82:00.0 | 0 1074 / 21534 |
+===================+=================+======================================================+
| 1 310P3 | OK | 15.4 43 0 / 0 |
| 0 1 | 0000:89:00.0 | 0 1070 / 21534 |
+===================+=================+======================================================+
step2: ONNX 模型转 OM 模型
# 配置环境变量
source /usr/local/Ascend/ascend-toolkit/set_env.sh
chip_name=310P3 # 根据 step1 的结果设值
batch_size=1 # 根据需要自行设置
# 执行 ATC 进行模型转换
atc --model=./csnln_x4_perf.onnx \
--framework=5 \
--output=csnln_x4_bs1 \
--input_format=NCHW \
--input_shape="input.1:1,3,56,56" \
--log=error \
--soc_version=Ascend${chip_name}
参数说明:
对数据集推理
该离线模型使用ais_infer作为推理工具,请参考安装文档安装推理后端包aclruntime与推理前端包ais_bench。完成安装后,执行以下命令预处理后的数据进行推理。
python3 -m ais_bench \
--model csnln_x4_bs1.om \
--input ./prep_dataset/bin_56 \
--output ./result/ \
--outfmt BIN \
--batchsize 1
参数说明:
性能验证
对于性能的测试,需要注意以下三点:
npu-smi info
命令查看NPU设备状态,请务必在NPU设备空闲的状态下进行性能测试。python3 -m ais_bench --model csnln_x4_bs1.om --batchsize 1
执行完纯推理命令,程序会打印出与性能相关的指标,找到以关键字 [INFO] throughput 开头的一行,行尾的数字即为 OM 模型的吞吐率。
精度验证
执行后处理脚本,根据推理结果计算OM模型的精度:
python3 CSNLN_postprocess.py --hr ./Set5/HR/ --res result/dumpOutput_device0 --save_path res_png
参数说明:
在300I PRO设备上,OM模型的精度为
芯片型号 | BatchSize | 数据集 | 精度 | 性能 |
---|---|---|---|---|
300I Pro | 1 | Set5 | 32.57 | 0.7163 fps |
备注:由于内存限制,离线模型不支持多batch
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。