Skip to content

Latest commit

 

History

History
348 lines (262 loc) · 34.5 KB

File metadata and controls

348 lines (262 loc) · 34.5 KB

分类网络应用(C++)

本Application支持运行在Atlas 200 DK或者AI加速云服务器上,实现了对常见的分类网络的推理功能并输出前n个推理结果。

前提条件

部署此Sample前,需要准备好以下环境:

  • 已完成Mind Studio的安装。
  • 已完成Atlas 200 DK开发者板与Mind Studio的连接,交叉编译器的安装,SD卡的制作及基本信息的配置等。

软件准备

运行此Sample前,需要按照此章节获取源码包,并进行相关的环境配置。

  1. 获取源码包。

    https://gitee.com/Atlas200DK/sample-classification/tree/1.3x.0.0/仓中的代码以Mind Studio安装用户下载至Mind Studio所在Ubuntu服务器的任意目录,这两个文件必须存放到同一个目录下。例如代码存放路径为:$HOME/AscendProjects/sample-classification

  2. 获取此应用中所需要的原始网络模型。

    参考表1获取此应用中所用到的原始网络模型及其对应的权重文件,并将其存放到Mind Studio所在Ubuntu服务器的任意目录,这两个文件必须存放到同一个目录下。例如:$HOME/models/classification

    表 1 通用分类网络应用使用模型

    模型名称

    模型说明

    模型下载路径

    alexnet

    图片分类推理模型。

    是基于Caffe的AlexNet模型。

    请参考https://gitee.com/HuaweiAscend/models/tree/master/computer_vision/classification/alexnet目录中README.md下载原始网络模型文件及其对应的权重文件。

    caffenet

    图片分类推理模型。

    是基于Caffe的CaffeNet模型。

    请参考https://gitee.com/HuaweiAscend/models/tree/master/computer_vision/classification/caffenet目录中README.md下载原始网络模型文件及其对应的权重文件。

    densenet

    图片分类推理模型。

    是基于Caffe的DenseNet121模型。

    请参考https://gitee.com/HuaweiAscend/models/tree/master/computer_vision/classification/densenet目录中README.md下载原始网络模型文件及其对应的权重文件。

    googlenet

    图片分类推理模型。

    是基于Caffe的GoogLeNet模型。

    请参考https://gitee.com/HuaweiAscend/models/tree/master/computer_vision/classification/googlenet目录中README.md下载原始网络模型文件及其对应的权重文件。

    inception_v2

    图片分类推理模型。

    是基于Caffe的Inception V2模型。

    请参考https://gitee.com/HuaweiAscend/models/tree/master/computer_vision/classification/inception_v2目录中README.md下载原始网络模型文件及其对应的权重文件。

    inception_v3

    图片分类推理模型。

    是基于Caffe的Inception V3模型。

    请参考https://gitee.com/HuaweiAscend/models/tree/master/computer_vision/classification/inception_v3目录中README.md下载原始网络模型文件及其对应的权重文件。

    inception_v4

    图片分类推理模型。

    是基于Caffe的Inception V4模型。

    请参考https://gitee.com/HuaweiAscend/models/tree/master/computer_vision/classification/inception_v4目录中README.md下载原始网络模型文件及其对应的权重文件。

    mobilenet_v1

    图片分类推理模型。

    是基于Caffe的MobileNet V1模型。

    请参考https://gitee.com/HuaweiAscend/models/tree/master/computer_vision/classification/mobilenet_v1目录中README.md下载原始网络模型文件及其对应的权重文件。

    mobilenet_v2

    图片分类推理模型。

    是基于Caffe的MobileNet V2模型。

    请参考https://gitee.com/HuaweiAscend/models/tree/master/computer_vision/classification/mobilenet_v2目录中README.md下载原始网络模型文件及其对应的权重文件。

    resnet18

    图片分类推理模型。

    是基于Caffe的ResNet 18模型。

    请参考https://gitee.com/HuaweiAscend/models/tree/master/computer_vision/classification/resnet18目录中README.md下载原始网络模型文件及其对应的权重文件。

    resnet50

    图片分类推理模型。

    是基于Caffe的ResNet 50模型。

    请参考https://gitee.com/HuaweiAscend/models/tree/master/computer_vision/classification/resnet50目录中README.md下载原始网络模型文件及其对应的权重文件。

    resnet101

    图片分类推理模型。

    是基于Caffe的ResNet 101模型。

    请参考https://gitee.com/HuaweiAscend/models/tree/master/computer_vision/classification/resnet101目录中README.md下载原始网络模型文件及其对应的权重文件。

    resnet152

    图片分类推理模型。

    是基于Caffe的ResNet 152模型。

    请参考https://gitee.com/HuaweiAscend/models/tree/master/computer_vision/classification/resnet152目录中README.md下载原始网络模型文件及其对应的权重文件。

    vgg16

    图片分类推理模型。

    是基于Caffe的VGG16模型。

    请参考https://gitee.com/HuaweiAscend/models/tree/master/computer_vision/classification/vgg16目录中README.md下载原始网络模型文件及其对应的权重文件。

    vgg19

    图片分类推理模型。

    是基于Caffe的VGG19模型。

    请参考https://gitee.com/HuaweiAscend/models/tree/master/computer_vision/classification/vgg19目录中README.md下载原始网络模型文件及其对应的权重文件。

    squeezenet

    图片分类推理模型。

    是基于Caffe的SqueezeNet模型。

    请参考https://gitee.com/HuaweiAscend/models/tree/master/computer_vision/classification/squeezenet目录中README.md下载原始网络模型文件及其对应的权重文件。

    dpn98

    图片分类推理模型。

    是基于Caffe的dpn98模型。

    请参考https://gitee.com/HuaweiAscend/models/tree/master/computer_vision/classification/dpn98目录中README.md下载原始网络模型文件及其对应的权重文件。

  3. 以Mind Studio安装用户登录Mind Studio所在Ubuntu服务器,确定当前使用的DDK版本号并设置环境变量DDK_HOME,tools_version,NPU_DEVICE_LIB和LD_LIBRARY_PATH。

    1. 查询当前使用的DDK版本号。

      可通过Mind Studio工具查询,也可以通过DDK软件包进行获取。

      • 使用Mind Studio工具查询。

        在Mind Studio工程界面依次选择“File > Settings > System Settings > Ascend DDK“,弹出如图 DDK版本号查询所示界面。

        图 1 DDK版本号查询

        其中显示的DDK Version就是当前使用的DDK版本号,如1.31.T15.B150

      • 通过DDK软件包进行查询。

        通过安装的DDK的包名获取DDK的版本号。

        DDK包的包名格式为:Ascend_DDK-{software version}-{interface version}-x86_64.ubuntu16.04.tar.gz

        其中software version就是DDK的软件版本号。

        例如:

        DDK包的包名为Ascend_DDK-1.31.T15.B150-1.1.1-x86_64.ubuntu16.04.tar.gz,则此DDK的版本号为1.31.T15.B150。

    2. 设置环境变量。

      vim ~/.bashrc

      执行如下命令在最后一行添加DDK_HOME及LD_LIBRARY_PATH的环境变量。

      export tools_version=1.31.X.X

      export DDK_HOME=$HOME/.mindstudio/huawei/ddk/1.31.X.X/ddk

      export NPU_DEVICE_LIB=$DDK_HOME/../RC/host-aarch64_Ubuntu16.04.3/lib

      export LD_LIBRARY_PATH=$DDK_HOME/lib/x86_64-linux-gcc5.4

      说明:

      • 1.31.X.X1中查询到的DDK版本号,需要根据查询结果对应填写,如1.31.T15.B150
      • 如果此环境变量已经添加,则此步骤可跳过。

      输入**:wq!**保存退出。

      执行如下命令使环境变量生效。

      source ~/.bashrc

  4. 将原始网络模型转换为适配昇腾AI处理器的模型。

    1. 在Mind Studio操作界面的顶部菜单栏中选择Tool > Convert Model,进入模型转换界面。

    2. 在弹出的Convert Model操作界面中,进行模型转换配置。

      • Model File选择步骤2中下载的模型文件,此时会自动匹配到权重文件并填写在Weight File中。

      • Model Name填写为表1中对应的模型名称

      • googlenet、inception_v2、resent18模型转换时中,由于通用分类网络应用一次处理一张图片,所以转换时需要将Nodes配置中的N修改为1,AIPP配置中的**Input Image Size[W][H]**需要分别修改为256、224,此处需要128*16对齐,Model Image Format 选择BGR888_U8。

        图 2 Nodes配置示例

        图 3 AIPP配置示例

    3. 单击OK开始转换模型。

      模型转换成功后,后缀为.om的离线模型存放地址为_$HOME/modelzoo/XXX__/device_。

    说明:

  5. 将转换好的模型文件(.om文件)上传到步骤1中源码所在路径下的“sample-classification/script”目录下。

编译

  1. 打开对应的工程。

    以Mind Studio安装用户在命令行进入安装包解压后的“MindStudio-ubuntu/bin”目录,如$HOME/MindStudio-ubuntu/bin。执行如下命令启动Mind Studio。

    ./MindStudio.sh

    启动成功后,打开sample-classification工程,如图 打开classification工程所示。

    图 4 打开classification工程

  2. src/param_configure.conf文件中配置相关工程信息。

    图 5 配置文件路径

    该配置文件内容如下:

    remote_host=
    model_name=
    

    需要手动添加参数配置:

    • remote_host:Atlas 200 DK开发者板的IP地址。
    • model_name : 离线模型名称。

    配置示例:

    remote_host=192.168.1.2
    model_name=googlenet.om
    

    说明:

    • 参数必须全部填写,否则无法通过build。
    • 注意参数填写时不需要使用“”符号。
    • 配置文件中只能填入单个模型名称,填入的模型必须为步骤5中存储的模型之一。本示例是以googlenet举例,用户可以使用本样例列举的其它模型按照文档步骤进行替换运行。
  3. 开始编译,打开Mind Studio工具,在工具栏中点击Build > Build > Build-Configuration。如图 编译操作及生成文件所示,会在目录下生成build和run文件夹。

    图 6 编译操作及生成文件

    说明:
    首次编译工程时,Build > Build为灰色不可点击状态。需要点击Build > Edit Build Configuration,配置编译参数后再进行编译。

  4. 将需要推理的图片上传至Host侧任一属组为HwHiAiUser用户的目录。

    图片要求如下:

    • 格式:jpg、png、bmp。
    • 输入图片宽度:16px~4096px之间的整数。
    • 输入图片高度:16px~4096px之间的整数。

运行

  1. 在Mind Studio工具的工具栏中找到Run按钮,单击 Run > Run 'sample-classification',如图 程序已执行示意图所示,可执行程序已经在开发者板执行。

    图 7 程序已执行示意图

    以上报错信息请忽略,因为Mind Studio无法为可执行程序传参,上述步骤是将可执行程序与依赖的库文件部署到开发者板,此步骤需要ssh登录到开发者板至相应的目录文件下手动执行,具体请参考以下步骤。

  2. 在Mind Studio所在Ubuntu服务器中,以HwHiAiUser用户SSH登录到Host侧。

    ssh HwHiAiUser@host_ip

    对于Atlas 200 DK,host_ip默认为192.168.1.2(USB连接)或者192.168.0.2(NIC连接)。

  3. 进入通用分类网络应用的可执行文件所在路径。

    cd ~/HIAI_PROJECTS/workspace_mind_studio/classification/out

  4. 执行应用程序。

    执行run_classification.py脚本会将推理结果在执行终端直接打印显示。

    命令示例如下所示:

    python3 run_classification.py -w 224 -h 224 -i ./example.jpg -n 10

    • -w/model_width:模型的输入图片宽度,为16~4096之间的整数,请参考表1在Gitee上查看所使用模型文件的Readme,获取模型要求的输入数据的宽和高。
    • -h/model_height:模型的输入图片高度,为16~4096之间的整数,请参考表1在Gitee上查看所使用模型文件的Readme,获取模型要求的输入数据的宽和高。
    • -i/input_path:输入图片的路径,可以是目录,表示当前目录下的所有图片都作为输入(可以指定多个输入)。
    • -n/top_n:输出前n个推理结果。

    其他详细参数请执行python3 run_classification.py --help命令参见帮助信息。