本次实验在Mindstudio上开展,本实验对应的CANN版本为5。0。3,请先按照官网教程,配置好Mindstudio与其所需依赖。本文使用Mindstudio中的ATC工具,对OSNet的pytorch模型转换成适配昇腾AI处理器的离线模型,并进行精度分析。Mindstudio是一款华为旗下的含算子、模型、开发一体的工具,内部集成了众多开发与推理功能模块,可以使我们更方便的进行开发推理等工作。 一、概述 参考论文:〔OSNet论文〕(https:arxiv。orgabs1905。00953)作为一个实例级的识别问题,行人再识别(ReID)依赖于具有识别能力的特征,它不仅能捕获不同的空间尺度,还能封装多个尺度的任意组合。这些同构和异构尺度的特征为全尺度特征。本文设计了一种新颖的深度CNN,称为全尺度网络(OSNet),用于ReID的全尺度特征学习。这是通过设计一个由多个卷积特征流组成的残差块来实现的,每个残差块检测一定尺度的特征。重要的是,引入了一种新的统一聚合门用输入依赖的每个通道权重进行动态多尺度特征融合。为了有效地学习空间通道相关性,避免过拟合,构建块同时使用点卷积和深度卷积。通过逐层叠加这些块,OSNet非常轻量,可以在现有的ReID基准上从零开始训练。尽管OSNet模型很小,但其在6个Reid数据集上到达了SOTA结果。 二、推理环境准备 1、配置conda环境、安装依赖包 依赖名称 版本 ONNX 1。7。0 torch 1。8。1 TorchVision 0。9。1 numpy 1。18。5 Pillow 7。2。0 Opencvpython 4。2。0。34 protobuf 3。13。0 onnxsimplifiler 0。3。6 isort 4。3。21 三、执行推理 注:本实验的脚本来源:https:www。hiascend。comzhsoftwaremodelzoodetail143a754e306c6461d86dafced5046121f 用户可以下载获取。 3。1创建工程 点击FileNewProject: 进入以下界面: Name为自己的项目名称,CANNVersion为本机Mindstudio所对应的CANN版本,ProjectLocation为项目地址,读者根据自己实际情况进行填写。 选择PytorchProject,点击Finish完成项目创建。 3。2从开源代码仓获取OSNet源码: 在终端输入代码: gitclonehttps:github。comKaiyangZhoudeeppersonreid。git 获取源码,并cd进入文件夹: cddeeppersonreid 安装源码所需依赖:pipinstallrrequirements。txt 运行setup脚本下载torchreid:python3。7setup。pydevelop 3。3数据预处理 从网上下载数据集压缩包,本文提供百度网盘下载地址: 〔Market1501数据集(百度网盘下载,提取码:me3q)〕(https:pan。baidu。coms1Nl8tMEvqMwNGd1pG46bg) 本步骤是为了把输入格式从图片形式转为二进制info文件,用于om模型的输入。 把数据集解压到deeppersonreid文件夹里,随后运行脚本:market1501torchpreprocess。py,主要过程解释如下: 对boundingboxtest测试集与query数据集进行处理,把原始输入的图片的JPG格式,输出为二进制文件格式bin文件。 选中所执行脚本,点击鼠标右键,进入ModifyRunconfiguration 对boundingboxtest测试集处理 对query数据集处理 运行框内主要参数解释: 参数名称 解释 Scriptpath 从文件夹中选中需要执行的脚本文件 Parameters 脚本运行所需参数,本例中分别为boundingboxtest文件夹相对路径,bin文件存放文件夹galleryprepdataset相对路径;对query数据集处理时的参数为query文件夹的相对路径和bin文件存放的文件夹querypredata的相对路径 Pythoninterpreter 运行脚本所使用的Python解释器 运行成功后: 运行结果显示 接下来执行生成数据集信息脚本,生成数据集信息文件。即分别一步所生成的galleryprepdataset文件夹与queryprepdataset的bin文件转换为数据集信息文件。 对galleryprepdataset文件夹处理 对queryprepdataset文件夹处理 Parameters里的参数为:第一个参数为模型输入的类型,第二个参数为生成的bin文件路径,第三个为输出的info文件,第四、第五个为宽高信息。脚本运行结果生成info文件。 3。4模型转换 本文模型需要做两步转换,即先有pathonnx,再有onnxom 3。4。1由path转换onnx 本文提供两种方式下载训练好的权重文件如下: 〔OSNet训练pth权重文件(google下载)〕(https:drive。google。comfiled1vduhq5DpN2q1g4fYEZfPI17MJeh9qyrAview?uspsharing) 〔OSNet训练pth权重文件(百度网盘下载,提取码:gcfe)〕(https:pan。baidu。coms1Xkwa9TCZssygkC8obsEMg) 此步由pytorch完成转换,执行转换脚本:pth2onnx。py Paremeters内填入参数分别为参数文件名与生成的onnx模型文件名: osnetx10market256x128amsgradep150stp60lr0。0015b64fb10softmaxlabelsmoothflip。pthosnetx10。onnx 得到onnx模型文件后,在终端输入:python3。7monnxsimosnetx10。onnxosnetx10bs1sim。onnxinputshape1,3,256,128 利用之前安装的依赖onnxsimplify对onnx模型进行简化,生成batchsize1的静态模型:onnxsimosnetx10。onnx。 3。4。2onnx转换om 此步转换使用Mindstudio提供的ATC转换工具,ATC工具功能架构如下图所示: 用户可以将开源框架网络模型如本文的OSNet模型,通过ATC工具转换为适配昇腾AI处理器的离线模型也可以将开源框架网络模型转换后的离线模型转成json文件,方便文件查看。 点击导栏行的AscendModelConverter;或者点击Mindstudio的功能栏: 进入以下界面: 在ModelFile中选中需要转换的onnx模型,ModelName为模型名称,TargetSoCVersion为需要转换成适配的芯片类型,image为输入图片的batchsize。点击图中红框的图标,可以生成可视化模型流程框架: 用户可以在此了解每层的结构与参数。 点击ok,next,即可进行模型转换: 点击Finish完成模型转换,红框里分别是om模型存放的服务器地址与本地地址。 3。5执行离线推理 推理benchmark工具用来针对指定的推理模型运行推理程序,并能够测试推理模型的性能(包括吞吐率、时延)和精度指标。benchmark的安装包可以通过benchmark工具用户指南获取。benchmark工具有两个使用场景,分别是: 纯推理场景该场景仅用来测试推理模型的性能指标,即模型执行的平均时间和平均吞吐率。 该场景无需准备推理数据及数据集文件,只需要准备经过ATC转换后的模型文件即可推理。 推理场景该场景除了测试性能指标之外,还可以测试模型的精度指标。 该场景需要准备经过预处理的推理数据及数据集文件和经过ATC转换后的模型文件才能推理 本文所使用的场景是推理场景,即利用上文所处理的info数据以及转换的om模型进行推理: 在终端输入命令: a。设置环境变量: sourceusrlocalAscendascendtoolkitsetenv。sh b。增加benchmark。{arch}可执行权限: chmoduxbenchmark。x8664 c。执行离线推理: 对queryprepbin。info进行处理 。benchmark。x8664modeltypevisiondeviceid0batchsize1ompathosnetx10bs1。ominputtextpath。queryprepbin。infoinputwidth128inputheight256outputbinaryFalseuseDvppFalse 主要参数解释如下:model:为ONNX模型文件。framework:5代表ONNX模型。output:输出的OM模型。inputformat:输入数据的格式。inputshape:输入数据的shape。log:日志级别。socversion:处理器型号。 执行成功后: 3。6精度验证 执行osnetmetricsmarket1501bs1。py脚本: Parameters参数填入:resultdumpOutputdevice0resultdumpOutputdevice1。resultbs1。json,运行脚本执行精度验证,结果如下所示: OSNet开源代码仓精度(https:kaiyangzhou。github。iodeeppersonreidMODELZOO) osnetx10R194。2,mAP82。6 本次实验所得代码精度:R194。3,mAP82。5 R1比代码仓结果略高,mAP下降在1范围之内,故精度达标。 FQ 1。在数据预处理时,执行market1501torchpreprocess。py脚本时会出现如下错误: 原因是把脚本文件置于数据集文件夹中,把脚本文件转移到deeppersonreid文件夹下即可。 2。在执行精度验证脚本osnetx10metricsmarket1501。py时会出现如下错误 原因是没有进行环境变量的配置,在终端输入代码:sourceenv。sh 即可。 在项目上有其它问题的也可以登录昇腾论坛,在帖子里提出自己关于项目或者Mindstudio的疑文(https:www。huaweicloud。comsJU1pbmRTdHVkaWmkK3lu7olt60p1),会有华为内部技术人员对其进行解答,帮助你更好使用MindStudio。