本次实验在MindStudio上进行,请先按照教程 配置环境,安装MindStudio。
MindStudio是一款基于Intellij Platform的集成开发环境(IDE),支持Python、C/C++语言进行代码开发、编译、调试、运行等基础功能。作为昇腾AI全栈中的全流程开发工具链,提供覆盖训练模型、推理应用和自定义算子开发三个场景下端到端工具,极大提高开发效率。该IDE上功能很多,涵盖面广,可以进行包括网络模型训练、移植、应用开发、推理运行及自定义算子开发等多种任务。MindStudio除了具有工程管理、编译、调试、运行等一般普通功能外,还能进行模型转换、性能分析,算子比对,可以有效提高工作人员的开发效率。除此之外,MIndStudio具有远端环境,运行任务在远端实现,对于近端的个人设备的要求不高,用户交互体验很好,可以让我们随时随地进行使用。
一、概述
RCAN设计了一个残差中的残差(RIR)结构来构造深层网络,每个 RIR 结构由数个残差组(RG)以及长跳跃连接(LSC)组成,每个 RG 则包含一些残差块和短跳跃连接(SSC)。RIR结构允许丰富的低频信息通过多个跳跃连接直接进行传播,使主网络专注于学习高频信息。此外,我们还提出了一种通道注意力机制(CA),通过考虑通道之间的相互依赖性来自适应地重新调整特征。解决了过深的网络却难以训练。低分辨率的输入以及特征包含丰富的低频信息,但却在通道间被平等对待,因此阻碍了网络的表示能力的问题。
二、服务器端推理环境准备
2.1 获取Pytorch onnx推理项目源代码仓
gitee源代码仓:https://gitee.com/ascend/ModelZoo-PyTorch.git
使用命令:git clone https://gitee.com/ascend/ModelZoo-PyTorch.git 获取源代码仓
2.2 获取RCAN模型的github开源仓
github源代码仓:https://github.com/yulunzhang/RCAN.git
使用命令:git clone https://github.com/yulunzhang/RCAN.git 获取RCAN模型源代码仓
2.3 当前目录结构
2.4 配置conda环境、安装依赖包
依赖名称 |
版本 |
ONNX |
1.7.0 |
Pytorch |
1.8.0 |
TorchVision |
0.9.0 |
numpy |
1.21.5 |
Pillow |
7.2.0 |
2.5 获取模型pth权重文件,将pth文件放入文件夹RCAN中
RCAN 预训练权重文件:https://pan.baidu.com/s/1bkoJKmdOcvLhOFXHVkFlKA
文件名:RCAN_BIX2.pt
Md5sum:f567f8560fde71ba0973a7fe472a42f2
2.6 获取数据集,本模型使用Set5数据集中的五张图片作为测试集
数据集获取:https://github.com/yulunzhang/RCAN/tree/master/RCAN_TestCode/OriginalTestData/Set5
选择5张验证集进行测试,图片数据放在./dataset/Set5
三、客户端Mindstudio
3.1 安装和配置环境
按照Mindstudio用户手册中的安装指南—>安装操作来安装Mindstudio。
推理环境在远端服务器上已经配置完成。
3.2 创建工程
点击File->New->Project 新建工程
选择Ascend App 项目,填写项目名,选择CANN version、项目位置
其中CANN版本应选择远端服务器,点击change
点击+,添加远程服务器
填写远端服务器信息,测试连接,连接成功后,选择CANN目录。
点击完成。
等待本地同步远端服务器CANN文件。
同步成功后,选择ACL Project(python)项目,点击完成,完成新建项目。
3.3 配置Mindstudio project structure
点击File -> Project structure
选择project -> project sdk -> add python SDK
选择ssh interpreter
添加远程服务器
选择本项目的python解释器
配置本地文件夹与远程服务器映射
从远端服务器拉取源代码到本地
拉取代码成功
3.4 项目实施
3.4.1 数据预处理
数据预处理将原始数据集转换为模型输入的数据,使用rcan_preprocess.py脚本将图片转换成bin文件,命令如下:
python3 rcan_preprocess.py -s ./dataset/Set5/LR -d ./pred_data --size 256
-s: 测试集路径
-d: 测试集处理后保存路径
--size: 预处理后的图片大小
利用bin文件生成图像的info文件,由于benchmark推理需要输入图片数据集的info文件,用于获取数据集。使用gen_dataset_info.py脚本,输入已经获得的图片文件,输出生成图片数据集的info文件。
python3 gen_dataset_info.py bin ./pre_data ./rcan_prep_info 256 256
第一个参数为生成的数据集文件格式,第二个参数为预处理后的数据文件的相对路径,第三个参数为生成的数据集文件保存的路径。运行成功后,在当前目录中生成rcan_prep_bin.info。
运行rcan_pth2onnx文件将pth文件导出为onnx文件
python3 rcan_pth2onnx.py --pth RCAN_BIX2.pt --onnx rcan.onnx
--pth: model 权重文件
-- onnx: 生成的onnx文件
为了适配昇腾显卡,我们需要把onnx格式的模型文件转换为om格式的模型文件。我们将使用mindstudio中的ATC工具将onnx转换成om模型
Model File: 选择要进行ATC的onnx模型文件
Model Name: 填写转化om后的文件名
Target SoC Version: 选择SoC版本为310
Output Path: 选择输出路径
Input Format: 本模型为默认NCHW
Image: 将-1,3,256,256 改为1,3,256,256
如上图所示,模型转换成功,并成功生成rcan.om文件。
开启SSH 会话,为推理做准备
转换om模型成功后,使用mindstudio remote终端执行benchmark推理
启动ssh session,切换conda环境、工作目录
使用benchmark工具进行推理,配置benchmark工具需要的环境
执行benchmark命令
推理成功,需要对推理结果进行后处理,通过rcan_postprocess.py进行后处理
后处理成功后,使用evaluate.py进行精度评估
精度评估结果
310执行完毕,经该模型迁移至710,将上述流程在Ascend710上在执行一遍
精度和性能均达标。
四、Q&A
Q1:连接远端服务器后,点击remote terminal为空
A1:应该在Tools -> Start SSH Session建立会话,然后点击remote terminal才会显示
--
Q2:连接服务器后,Tools -> Deployment -> Download 从服务器端下载代码到本地有时不可点击
A2:右键点击项目进行下载
Q3:迁移时若遇到性能比预期小
A3:应该进行Aoe性能调优,目前mindstudio暂时没有集成此项功能,我们可以在命令行中使用如下命令对onnx进行aoe 调优
aoe --frame_work 5 --model XX.onnx --output ./XX --job_type 1/2 --input_shape “image:1,3,256,256”