文件最后提交记录最后更新时间
Initial commit 5 个月前
Initial commit 5 个月前
Initial commit 5 个月前
【PR】: fix 1_sample_resnet50_imagenet_classification/README.md Co-authored-by: stevenaw0<huangguijun@huawei.com> # message auto-generated for no-merge-commit merge: !238 merge issue_84 into master 【PR】: fix 1_sample_resnet50_imagenet_classification/README.md Created-by: stevenaw0 Commit-by: stevenaw0 Merged-by: cann-robot Description: # Pull Request ## 描述 修复1_sample_resnet50_imagenet_classification/README.md的加粗显示问题 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [x] 📝 文档内容更新 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在当前页面的右侧'关联Issue'部分添加相应Issue链接,并勾选'合并后关闭已关联的 Issue'选项。 --> ## 如何测试 描述测试此变更的步骤和前提条件: 1. 2. ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 在此添加任何其他关于本次 PR 的说明。 See merge request: cann/ge!2384 个月前
README.md

样例使用指导

功能描述

该样例主要是基于Onnx ResNet-50网络(单输入、单Batch)实现图片分类的功能。

在该样例中:

  1. 先使用样例提供的脚本transferPic.py,将2张*.jpg图片都转换为*.bin格式,同时将图片从1024*683的分辨率缩放为224*224。
  2. 加载离线模型om文件,对2张图片进行同步推理,分别得到推理结果,再对推理结果进行处理,输出top5置信度的类别标识。

在加载离线模型前,提前将Onnx ResNet-50网络的模型文件转换为适配昇腾AI处理器的离线模型。

目录结构

├── data
│   ├── dog1_1024_683.jpg               // 测试数据,需要按指导获取测试图片,放到data目录下
│   ├── dog2_1024_683.jpg               // 测试数据,需要按指导获取测试图片,放到data目录下

├── model
│   ├── resnet50.om                     // Onnx ResNet-50网络的模型文件,需要按指导获取atc转换后的om文件,放到model目录下

├── scripts
│   ├── build.sh                        // sample编译脚本
│   ├── run.sh                          // sample运行脚本
│   ├── transferPic.py                  // 将*.jpg转换为*.bin,同时将图片从1024*683的分辨率缩放为224*224

├── src
│   ├── acl.json                        // 系统初始化的配置文件
│   ├── CMakeLists.txt                  // 编译配置脚本
│   ├── sample_resnet50_imagenet_classification.cpp                        // 主函数,图片分类功能的实现文件

├── CMakeLists.txt                      //编译脚本,调用src目录下的CMakeLists文件

环境要求

实现步骤

  1. 以运行用户登录开发环境。

  2. 下载代码并上传至环境后,请先进入根目录下"examples/acl/1_sample_resnet50_imagenet_classification"样例目录。

    请注意,下文中的样例目录均指“examples/acl/1_sample_resnet50_imagenet_classification”目录。

  3. 准备ResNet-50模型。

    1. 获取ResNet-50原始模型。

      您可以从以下链接中获取ResNet-50网络的模型文件,并以运行用户将获取的文件上传至开发环境的"样例目录/model"目录下。如果目录不存在,需要自行创建。

      • ResNet-50网络的模型文件(*.onnx):单击Link下载该文件。
    2. 将ResNet-50原始模型转换为适配昇腾AI处理器的离线模型(*.om文件)。

      切换到样例目录,执行如下命令(以Atlas A2系列产品为例):

      atc --model=resnet50_Opset16.onnx --framework=5 --output=resnet50 --soc_version=Ascend910B1 --input_format=NCHW --output_type=FP32
      
      • --model:原始模型文件路径。

      • --framework:原始框架类型。0:表示Caffe;1:表示MindSpore;3:表示TensorFlow;5:表示ONNX。

      • --soc_version:昇腾AI处理器的版本。版本获取可参考Link

      • --output_type:指定输出的数据类型为float32。

      • --output:生成的resnet50.om文件存放在“样例目录/model“目录下。建议使用命令中的默认设置,否则在编译代码前,您还需要修改sample_process.cpp中的omModelPath参数值。

        const char* omModelPath = "../model/resnet50.om";
        
  4. 准备测试图片。

    1. 请从以下链接获取该样例的输入图片,并以运行用户将获取的文件上传至开发环境的"样例目录/data"目录下。如果目录不存在,需自行创建。

      https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/aclsample/dog1_1024_683.jpg

      https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/aclsample/dog2_1024_683.jpg

    2. 切换到“样例目录/data“目录下,执行transferPic.py脚本,将*.jpg转换为*.bin,同时将图片从1024*683的分辨率缩放为224*224。在“样例目录/data“目录下生成2个*.bin文件。

      python3 ../scripts/transferPic.py
      

      如果执行脚本报错“ModuleNotFoundError: No module named 'PIL'”,则表示缺少Pillow库,请使用pip3 install Pillow --user命令安装Pillow库。

构建验证

  1. 以运行用户登录开发环境。

  2. 请先进入根目录下"examples/acl/1_sample_resnet50_imagenet_classification"样例目录。

    请注意,下文中的样例目录均指"examples/acl/1_sample_resnet50_imagenet_classification"目录。

  3. 设置环境变量,配置程序编译依赖的头文件与库文件路径。

    设置以下环境变量后,编译脚本会根据"{DDK_PATH}环境变量值/include/"目录查找编译依赖的头文件,根据{NPU_HOST_LIB}环境变量指向的目录查找编译依赖的库文件。

    注意,在配置{NPU_HOST_LIB}环境变量时,需使用的"devlib"目录下*.so库,确保在编译基于AscendCL接口的应用程序时,不依赖其它组件(例如Driver)的*.so库,编译成功后,运行应用程序时,系统会根据LD_LIBRARY_PATH环境变量查找“Ascend-cann-toolkit安装目录/lib64”目录下的*.so库,同时会自动链接到所依赖的其它组件的*.so库。

    • 配置示例如下所示:

      export DDK_PATH=$HOME/Ascend/cann
      export NPU_HOST_LIB=$DDK_PATH/devlib
      
  4. 切换到"样例目录/scripts",编译程序。

    bash build.sh
    
  5. 运行程序

    bash run.sh
    
  6. 执行结果

执行成功后,在屏幕上的关键提示信息示例如下,提示信息中的index表示类别标识、value表示该分类的最大置信度,这些值可能会根据版本、环境有所不同,请以实际情况为准:

    [INFO] acl init success
    [INFO] open device 0 success
    [INFO] create context success
    [INFO] create stream success
    [INFO] load model ../model/resnet50.om success
    [INFO] start to process file:../data/dog1_1024_683.bin
    [INFO] model execute success
    [INFO] top 1: index[161] value[xxxxxx]
    [INFO] top 2: index[xxx] value[xxxxxx]
    [INFO] top 3: index[xxx] value[xxxxxx]
    [INFO] top 4: index[xxx] value[xxxxxx]
    [INFO] top 5: index[xxx] value[xxxxxx]
    [INFO] output data success
    [INFO] start to process file:../data/dog2_1024_683.bin
    [INFO] model execute success
    [INFO] top 1: index[267] value[xxxxxx]
    [INFO] top 2: index[xxx] value[xxxxxx]
    [INFO] top 3: index[xxx] value[xxxxxx]
    [INFO] top 4: index[xxx] value[xxxxxx]
    [INFO] top 5: index[xxx] value[xxxxxx]
    [INFO] output data success
    [INFO] SAMPLE PASSED

说明: 类别标签和类别的对应关系与训练模型时使用的数据集有关,本样例使用的模型是基于imagenet数据集进行训练的,您可以在互联网上查阅imagenet数据集的标签及类别的对应关系。 当前屏显信息中的类别标识与类别的对应关系如下: "161": ["basset", "basset hound"]、 "267": ["standard poodle"]。