ReID ONNX推理

    本次实验在MindStudio软件上进行,首先用户需要按照教程依次配置python环境,MinGW依赖,Java依赖,安装Cmake。MindStudio是一套基于华为自研昇腾AI处理器开发的AI全栈开发工具平台,提供用户在AI开发所需的一站式开发环境,支持模型开发、算子开发以及应用开发三个主流程中的开发任务依靠模型可视化、算力测试、IDE本地仿真调试等功能,极大的提高了用户的开发效率,相比于很多用户不熟悉服务器的换进配置和命令形式,MindStudio采用菜单栏的形式简化了所有的命令操作,以可视化的操作让用户快速上手。同时MindStudio的社区活跃度非常高,在提出一个issue后,很快可以得到开发者的回复,方便解决我们其中遇到的问题。

一、概述

随着深度卷积神经网络的不断改进,行人重识别领域也有了很大的进步,但大多数的SOTA的算法都是设计了很复杂的网络结构和融合了多支路的特征。ReID模型则是一个结合了近些年来在行人重识别(Person ReID)算法中的一些训练技巧产生的Baseline,这些训练技巧包括Warmup Learning Rate、Center Loss、Last Stride等,使得模型在Market1501数据集上达到了94.5% rank-1以及85.9%mAP。

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

1、 从下面链接下载Pytorch Onnx推理项目源代码仓

ATC ReID (FP16)- 昇腾社区  (hiascend.com)

2、 将下载后的压缩包上传到310服务器,并解压,模型文件存储在ReID_for_ Pytorch目录中

可通过scp命令或xshell等软件。

3、 使用下面命令下载ReID原仓库代码到当前目前中

git clone https://github.com/michuanhaohao/reid-strong-baseline

4、 当前目录结构

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

4.1、深度学习框架

CANN == 5.1.RC1

torch == 1.8.0

torchvision == 0.9.0

onnx == 1.7.0

4.2、python第三方库

numpy == 1.20.3

Pillow == 8.2.0

opencv-python == 4.5.2.54

yacs == 0.1.8

pytorch-ignite == 0.4.5

6、 pth模型文件已经在下载的压缩包中。

7、 准备数据集

本推理模型使用Market1501数据集的测试集,请用户自行获取该数据集,上传并解压数据集到服务器任意目录,这里我将数据集目录放在了/opt/npu目录下。

三、客户端Mindstudio

3.1 安装和配置环境

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

推理环境在远端服务器上已经配置完成。(安装教程 )

3.2 创建工程

选择Ascend App 项目


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

添加远程服务器

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

点击完成。

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

配置项目结构

选择add python SDK

选择ssh interpreter


添加远程服务器

选择python解释器

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



从远端服务器拉取代码

拉取代码成功



数据预处理

数据预处理将原始数据集转换为模型输入的数据,使用ReID_preprocess.py(找到该文件,然后右键选择Modify Run Configuration)

gallery同理也是同样的操作,再产生后gallery信息后,可在MindStudio命令控制台,将预先产生prep_dataset_gallery内的文件移动到prep_dataset_query目录。


数据预处理成功

生成JPEG图片输入info文件,使用benchmark推理需要输入图片数据集的info文件,用于获取数据集。使用gen_dataset_info.py脚本,输入已经获得的图片文件,输出生成图片数据集的info文件。


第一个参数为生成的数据集文件格式,第二个参数为预处理后的数据文件的相对路径,第三个参数为生成的数据集文件保存的路径。运行成功后,在当前目录中生成prep_bin.info。


运行ReID_pth2onnx文件将pth文件导出为onnx文件


onnx 转om(点击AscendModel Converter)

转换om模型成功后,使用mindstudio remote终端执行benchmark推理

启动ssh session,切换conda环境、工作目录

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


执行benchmark命令获得om模型的吞吐率

推理成功,需要对推理结果进行后处理,通过ReID_postprocess.py进行后处理得到推理精度

其余的batch_size也是同样的操作,得到的结果如下表1所示,official为官方提供的精度。

输出结果如表1所示:

得到的om离线模型推理在mAP和Rank-1评价指标上精度与该模型github代码仓上公布的精度对比,精度下降在1%范围之内,故精度达标。


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

精度和性能均达标。


四、FAQ

Q:如果你仅从Asc end/modelzoo 拉取你的项目,通常会出现没有benchmark软件

A:所以还是建议下载每个项目安装包的形式来获取项目代码,以ReID模型为例,链接如下ATC ReID (FP16)- 昇腾社区  (hiascend.com) 。


Q:当出现下面的问题时,需要为其增加环境设置

A:使用下面的命令

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


Q: 依据下面方式配置python代码运行环境,其实使用的并不是虚拟环境,而是base环境

A: 目前找到的解决方式是右键,然后点击Modify Run Configuration,配置python虚拟环境


Q:类似上一问题,使用MindStudio运行文件时,每次都会和服务器进行文件同步,所以容易导致的问题时,当本地任何文件和服务器有差异时,会强制性将其变化为一致,导致受影响的文件很大。除非你的操作是一次性成功的。

A:希望开发者和社区能够注意到这一点。另外可以增加一个功能是可选择性的下载服务器的文件,而不是一次性只能下载全部的文件。


五、从昇腾社区获得更多帮助

开发者在使用 MindStudio或进行算子开发过程中遇到任何问题,都可以来昇腾社区获得更多的帮助。

昇腾官网:https://www.hiascend.com/

昇腾社区:https://bbs.huaweicloud.com/

昇腾论坛:https://bbs.huaweicloud.com/forum/forum-726-1.htm