使用MindStudio进行I3D推理

一、MindStudio介绍

MindStudio是一套基于华为自研昇腾AI处理器开发的AI全栈开发工具平台,集成了工程管理、编译器、仿真器以及命令行开发工具包,提供网络模型移植、应用开发、推理运行及自定义算子开发等功能。通过MindStudio能够进行工程管理、编译、调试、运行、性能分析等全流程开发,支持仿真环境及真实芯片运行,提高开发效率。针对算子开发,MindStudio提供了全套的算子开发、调优能力。通过MindStudio提供的工具链也可以进行第三方算子开发,降低了算子开发的门槛,并提高算子开发及调试调优的效率,有效提升了产品竞争力。针对网络模型的开发,MindStudio集成了离线模型转换工具、模型量化工具、模型精度比对工具、模型运行性能分析工具、日志分析工具,提升了网络模型移植、分析和优化的效率。针对计算引擎开发,MindStudio预置了典型的分类网络、检测网络等计算引擎代码,降低了开发者的技术门槛,加快了开发者对AI算法引擎的编写及移植效率。针对应用开发,MindStudio集成了各种工具如分析器(Profiler)和编译器(Compiler)等,为开发者提供了图形化的集成开发环境,通过MindStudio能够进行工程管理、编译、调试、性能分析等全流程开发,能够很大程度提高开发效率。

二、I3D介绍

I3D设计了一个双流膨胀3D卷积网络,使用Inception-V1作为骨干网络。双流网络的输入分别为RGB图像和光流。RGB图像负责提取物体和场景外观特征;光流则用来提取物体的运动信息。网络的具体输入为相隔10帧的5个连续RGB帧,以及相应的光流片段。在Inception-V1的最后一个平均合并层(5×7×7特征网格,对应于时间,x和y维度)之前的空间和运动特征通过具有512个输出通道的3×3×3 3D卷积层, 然后是3×3×3 3D最大池化层并通过最终的完全连接层。对比2D卷积加长短时记忆网络的组合,I3D很好地解决了空间信息和时间信息无法融合计算的问题;对比3D卷积网络,I3D也有效地降低了模型参数量并且保持不错的结果。

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

1、获取I3D模型的github开源仓

wget https://github.com/open-mmlab/mmaction2/archive/refs/tags/v0.15.0.zip

当前目录结构

 

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

依赖名称

版本

ONNX

1.7.0

Pytorch

1.8.0

TorchVision

0.9.0

numpy

1.22.0

Pillow

7.2.0

3、下载pth模型文件,将模型文件放入文件夹mmaction2-0.15.0/checkpoints中。

4、准备Kinetics400数据集并解压,放入mmaction2-0.15.0/data/kinetics400文件夹。

 5、运行mmaction2-0.15.0/tools/data/kinetics/download_backup_annotations.sh下载测试集标注文件夹mmaction2-0.15.0/data/kinetics400/annotations

 

6、运行mmaction2-0.15.0/tools/data/build_rawframes.py提取测试集视频的RGB图像生成在mmaction2-0.15.0/data/kinetics400/rawframes_val文件夹中。

7、运行mmaction2-0.15.0/data/kinetics400/generate_labels.py生成测试集标注txt文件kinetics400_label.txt。

四、Mindstudio客户端相关准备工作

1、 安装和配置环境

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

MindStudio下载-昇腾社区 (hiascend.com)

MindStudio安装教程

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

2、 创建工程

 3、选择Ascend App 项目

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

5、添加远程服务器

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

 7、点击完成。

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

 9、配置项目结构

 10、选择add python SDK

 11、选择ssh interpreter

 12、添加远程服务器

 13、选择python解释器

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

 15、从远端服务器拉取代码

 拉取代码成功

 五、数据预处理

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

 

 

数据预处理成功

数据预处理即对videos_val中的所有视频进行抽帧处理,并将结果放置在

data/kinetics400/rawframes_val目录下。本脚本采用Opencv对mp4格式的视频,采用4线程抽取256*256大小的RGB帧,输出格式为jpg。

TASK: 提取任务,说明提取帧,光流,还是都提取,选项为 rgb, flow, both

LEVEL: 目录层级。1 指单级文件目录,2 指两级文件目录

NUM_WORKER: 提取原始帧的线程数

OUT_FORMAT: 提取帧的输出文件类型,如 jpg, h5, png

EXT: 视频文件后缀名,如 avi, mp4

NEW_WIDTH: 调整尺寸后,输出图像的宽

NEW_HEIGHT: 调整尺寸后,输出图像的高

--use-opencv: 是否使用 OpenCV 提取 RGB 帧

2、运行pth2onnxpth文件导出为onnx文件

 

3、转换onnx模型成功后,使用mindstudio remote终端执行om模型转换

启动ssh session,切换工作目录

 

 

om模型转换成功

具体命令为:

/usr/local/Ascend/ascend-toolkit/latest/atc/bin/atc --framework=5 --output=./i3d_bs1  --input_format=NCHW  --soc_version=Ascend${chip_name} --model=./i3d.onnx --input_shape="0:1,10,3,32,256,256"

framework:表明模型框架类型。5就是onnx模型。

input_format:NCHW即$batch$channel$height $width。

${chip_name}通过npu-smi info获取。

input_shape:本节采用的模型输入为:1x10x3x32x256x256.($batch $clip $channel $time $height $width)。

实验证明,若想提高模型精度,可增加$clip的值,但性能会相应降低。由于本模型较大,batch_size只能设置为1,若大于1则会因为 Ascend 310 内存不足而报错。

4、推理验证

切换工作目录、conda环境

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

 

执行benchmark命令

./benchmark.x86_64 -device_id=0 -om_path=./i3d_bs1.om -round=30 -batch_size=1

 

推理成功

5、精度验证

执行以下精度验证命令:

python3.8 tools/i3d_inference.py configs/recognition/i3d/i3d_r50_32x2x1_100e_kinetics400_rgb.py --eval top_k_accuracy mean_class_accuracy --out result.json -bs 1 --model i3d_bs1.om --device_id 0

即可获得精度

 

out: 输出文件名称

bs: batch_size。只能为1

device_id: Ascend310芯片序号。(0123

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

精度和性能均达标。

推理性能对比:

310

310P

T4

310P_aoe/310

310P_aoe/T4

bs1

3.03

4.45

3.38

2.03

1.82

最优batch

3.03

4.45

3.38

2.03

1.82

六、FAQ

1、如下图所示,服务器无法连接外网,因此无法使用conda创建新的Python环境,应该如何解决?

 

解决方案:

取消服务器上的http/https proxy代理。

env | grep -i "_PROXY"
unset http_proxy
unset https_proxy

2、AttributeError: module 'acl' has no attribute 'mdl'或者benchmark.x86_64明明存在却报该文件不存在的错误,该如何操作?

解决方案:

系统变量路径问题,执行以下命令恢复服务器默认设置即可。

source /usr/local/Ascend/ascend-toolkit/set_env.sh

3、数据集过大,使用Mindstudio时将远端数据放到本地则本地空间不够,该如何解决?

解决方案:

先将数据集移到服务器别处,再将项目文件下载到本地即可。

4、如果在Ascend 310P上运行benchmark后发现性能不足,该如何解决?

解决方案:

可以使用aoe工具运行

aoe --framework 5 --model i3d.onnx --job_type 2 --output /home/zky/mmaction2-0.15.0/i3d_aoe --input_shape "input:1,3,256,256"  --log error生成优化算子后的i3d_aoe.om文件,此时再使用benchmark文件测试即可满足性能要求。

5、如下图所示,显示mmcv版本错误,该如何解决?

 

解决方案:

由于Mindstudio默认使用的是conda的root环境,此处修改了root环境的mmcv包的版本。

root环境下pip3 install mmcv==1.4.0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值