此次离线推理过程基于MindStudio进行,请先前往MindStudio官网下载,并按照教程配置环境。

MindStudio 的是一套功能全面的 IDE 工具,基于华为自研昇腾 AI 处理器实 现模型训练、模型推理、应用开发等功能。该软件同时支持远程环境,可连接华 为云服务器使用,降低了对本地设备的要求。

一、概述

通过将新的CS-NL先验与强大的复发融合细胞中的局部和内尺度非局部先验相结合,我们可以在单个低分辨率(LR)图像中发现更多的跨尺度特征相关性。通过对所有可能的先验信息进行穷尽集成,可以显著提高SISR算法的性能。大量的实验证明了CS-NL模块的有效性,在多个SISR基准上设置了最新的技术水平。

二、服务器端推理环境准备

2.1获取Pytorch onnx推理项目源代码包

昇腾社区下载源码包,并上传服务器,解压文件https://www.hiascend.com/zh/software/modelzoo/detail/1/32e2a3a03d2885639a

d4100e9d48421a


2.2获取CSNLA模型的github开源仓

git clone https://github.com/SHI-Labs/Cross-Scale-Non-Local-Attention.git -b master


当前目录结构


├── benchmark.aarch64 //离线推理工具(适用 ARM 架构)

├── benchmark.x86_64 //离线推理工具(适用 x86 架构)

├── CSNLN_postprocess.py //数据后处理脚本(包含输出精度)

├── CSNLN_preprocess.py //数据预处理脚本

├── csnln_x4.onnx //权重文件转化的 onnx 文件

├── csnln_x4_fix.onnx //fix 后的 onnx 文件

├── csnln_x4_sim.onnx //优化后的 onnx 文件

├── CSNLN_pth2onnx.py //pth 转 onnx 脚本

├── perf_softmax_transpose.py //用于优化 softmax 的性能

├── csnln_x4_perf.onnx //优化 softmax 后的 onnx 文件

├── csnln_x4_bs1.om //onnx 转化的 om 文件

├── fix_onnx_prelu.py //修改

├── model_x4.pt //权重文件

├── env.sh //环境变量

├── get_info.py //用于获取二进制数据集信息的脚本


2.3 配置conda环境、安装依赖包

依赖名称            版本

ONNX                1.9.0

Pytorch              1.8.0

TorchVision        0.9.0

onnx-simplifier   0.3.6

numpy               1.21.1

Pillow                 7.2.0

pyyaml               5.3.1

opencv-python   4.2.0.34

scikit-image        0.18.1

2.4 下载pth模型文件,放入文件夹Croos-Scale-Non-Local-Attention中。


2.5 准备数据集,本模型使用Set5_x4数据集作为测试集。


HR中存放验证图片,LR_bicubic/X4中存放测试集。

三、客户端Mindstudio

3.1 安装和配置环境

按照Mindstudio用户手册中的安装指南—>安装操作来安装Mindstudio。

推理环境在远端服务器上已经配置完成。

3.2 创建工程

选择Ascend App 项目

其中CANN版本应选择远端服务器,点击change

添加远程服务器

填写远端服务器信息,测试连接,连接成功后,选择CANN目录。

点击完成。

等待本地同步远端服务器CANN文件。同步成功后,选择ACL Project(python)项目,点击完成,完成新建项目。

配置项目结构

选择add python SDK

选择ssh interpreter

添加远程服务器

选择python解释器

 

配置本地文件夹与远程服务器映射

 

3.3运行项目

从远端服务器拉取代码

拉取代码成功

数据预处理

数据预处理将原始数据集转换为模型输入的数据,使用CSNLN_preprocess.py

“CSNLN_preprocess.py”:预处理脚本文件。

“./Set5/LR_bicubic/X4/”:数据集路径。

“prep_dataset”:数据预处理之后存放的路径。

数据预处理成功

生成JPEG图片输入info文件,使用benchmark推理需要输入图片数据集的info文件,用于获取数据集。使用get_info.py脚本,输入已经获得的图片文件,输出生成图片数据集的info文件。

“get_info.py”:脚本文件。

“./prep_dataset”:预处理后的数据文件的相对路径。

“./prep_bin.info”:生成的数据集文件保存的路径。

运行CSNLN_pth2onnx.py文件将pth文件导出为onnx文件

“CSNLN_pth2onnx.py”为执行脚本。

--pre_train:权重文件。

--save:生成的 onnx 文件。

获得“csnln_x4.onnx”文件。

onnx 转om

模型转换成功,此处注意 om 文件在服务器的保存路径,方便下一步操作。

 

转换om模型成功后,使用mindstudio remote终端执行benchmark推理

启动ssh session,切换conda环境、工作目录

使用Benchmark工具进行推理,配置benchmark工具需要的环境

将生成的om文件上传到服务器,执行benchmark命令

注意:需保持本地 MindStudio 项目文件与服务器端项目文件相同,否则会出现

本地与服务器同步情况,造成文件的丢失。

-model_type:模型类型

-om_path:om 文件路径

-device_id:NPU 设备编号

-batch_size:参数规模

-input_text_path:图片二进制信息

-input_width:输入图片宽度

-input_height:输入图片高度

-useDvpp:是否使用 Dvpp

-output_binary:输出二进制形式

推理成功,需要对推理结果进行后处理,通过rcan_postprocess.py进行后处理

后处理成功后,使用evaluate.py进行精度评估

精度评估结果

--hr:生成推理结果所在路径。

--res:标签数据。

--save_path:生成结果文件。

“datasets_path”:Set5 的路径。

“result/dumpOutput_device0”:推理结果目录。

“res_png”:保存推理完成之后的图片路径。

3.4 性能调优

性能使用 AOE 工具调优。配置环境变量

执行 AOE 调优

 


--model:为 ONNX 模型文件。

--framework:5 代表 ONNX 模型。

--output:输出的 OM 模型。

--input_format:输入数据的格式。

--input_shape:输入数据的 shape。

--job_type:调优模式(1:子图调优;2:算子调优)

得到 AOE 处理后模型,进行纯推理,测试性能

 


310执行完毕,经该模型迁移至710,将上述流程在Ascend710上在执行一遍

精度和性能均达标。

 

四、Q & A

1. Q:模型精度不达标

A:在使用ATC将onnx转换om时,操作命令加上--buffer_optimize=off_optimize

–precision_model=allow_fp32_to_fp16

2. Q:模型性能不达标

A:使用 AOE 工具进行性能调优

3. Q:MindStudio 连接服务器运行模型后,文件丢失

A: 需保持本地 MindStudio 项目文件与服务器端项目文件相同,否则会出现本

地与服务器同步情况,造成文件的丢失