此次离线推理过程基于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 项目文件与服务器端项目文件相同,否则会出现本
地与服务器同步情况,造成文件的丢失