使用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


使用MindStudio进行I3D推理


当前目录结构



使用MindStudio进行I3D推理



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中。



使用MindStudio进行I3D推理



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



使用MindStudio进行I3D推理



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



使用MindStudio进行I3D推理



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、 创建工程



使用MindStudio进行I3D推理



3、选择Ascend App 项目



使用MindStudio进行I3D推理



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




使用MindStudio进行I3D推理



5、添加远程服务器



使用MindStudio进行I3D推理



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


使用MindStudio进行I3D推理


7、点击完成。



使用MindStudio进行I3D推理



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


使用MindStudio进行I3D推理



9、配置项目结构



使用MindStudio进行I3D推理




10、选择add python SDK


使用MindStudio进行I3D推理



11、选择ssh interpreter


使用MindStudio进行I3D推理



12、添加远程服务器


使用MindStudio进行I3D推理


13、选择python解释器


使用MindStudio进行I3D推理



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


使用MindStudio进行I3D推理


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


使用MindStudio进行I3D推理


拉取代码成功



使用MindStudio进行I3D推理




五、数据预处理

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



使用MindStudio进行I3D推理


使用MindStudio进行I3D推理


数据预处理成功

数据预处理即对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、运行pth2onnx将pth文件导出为onnx文件



使用MindStudio进行I3D推理



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

启动ssh session,切换工作目录


使用MindStudio进行I3D推理


使用MindStudio进行I3D推理



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环境


使用MindStudio进行I3D推理


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


使用MindStudio进行I3D推理


执行benchmark命令

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


使用MindStudio进行I3D推理


推理成功


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

即可获得精度


使用MindStudio进行I3D推理


out: 输出文件名称

bs: batch_size。只能为1

device_id: Ascend310芯片序号。(0,1,2,3)


6、310执行完毕,经该模型迁移至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


推理精度对比:


310测试精度:top1:71.18% top5:90.21%

310P测试精度:top1:71.19% top5:90.21%



六、FAQ

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



使用MindStudio进行I3D推理



解决方案:

取消服务器上的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进行I3D推理


解决方案:

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

root环境下pip3 install mmcv==1.4.0

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章