一、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、运行pth2onnx将pth文件导出为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芯片序号。(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环境,应该如何解决?
解决方案:
取消服务器上的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 条评论) “” |