56 Star 547 Fork 1.4K

Ascend/ModelZoo-PyTorch

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

Densenet121模型-推理指导

概述

Densenet 针对 Resnet 的冗余结构提出了改进:让网络中的每一层和前面的所有层相连,同时把每一层设计的比较窄,使每一层学到的特征变少从而降低冗余。除了减少参数量之外,该结构还有减轻梯度消失问题、增强特征传播等优点。

输入输出数据

  • 输入数据

    输入数据 数据类型 大小 数据排布格式
    input_0 RGB_FP32 batchsize x 3 x 224 x 224 NCHW
  • 输出数据

    输出数据 数据类型 大小 数据排布格式
    output_0 RGB_FP32 batchsize x 3 x 224 x 224 NCHW

推理环境准备

  • 该模型需要以下插件与驱动

    表 1 版本配套表

    配套 版本 环境准备指导
    固件与驱动 22.0.3 Pytorch框架推理环境准备
    CANN 6.0.RC1 -
    Python 3.7.5 -
    PyTorch 1.12.1 -
    说明:Atlas 300I Duo 推理卡请以CANN版本选择实际固件与驱动版本。 \ \

快速上手

获取源码

  1. 获取本仓源码

  2. 安装依赖。

    pip3 install -r requirements.txt
    

准备数据集

  1. 获取原始数据集。(解压命令参考tar –xvf *.tar与 unzip *.zip)

    本模型使用ImageNet验证集进行推理测试 ,用户自行获取数据集后,将文件解压并上传数据集到任意路径下。数据集目录结构如下所示:

    imageNet/
    |-- val
    |   |-- ILSVRC2012_val_00000001.JPEG
    |   |-- ILSVRC2012_val_00000002.JPEG
    |   |-- ILSVRC2012_val_00000003.JPEG
    |   ...
    |-- val_label.txt
    ...
    
  2. 数据预处理,将原始数据集转换为模型的输入数据。

    执行 densenet121_preprocess.py 脚本,完成数据预处理。

    python3 densenet121_preprocess.py ${data_dir} ${save_dir} 
    

    参数说明:

    • --data_dir:原数据集所在路径。
    • --save_dir:生成数据集二进制文件。

模型推理

  1. 模型转换。

    使用PyTorch将模型权重文件.pth转换为.onnx文件,再使用ATC工具将.onnx文件转为离线推理模型文件.om文件。

    1. 获取权重文件。

      从开源仓获取权重文件densenet121-a639ec97.pth

    2. 导出onnx文件。

      1. 使用densenet121_pth2onnx.py导出动态batch的onnx文件。

        python3 densenet121_pth2onnx.py ${pth_file} ${onnx_file}
        

        参数说明:

        • --pth_file:权重文件。
        • --onnx_file:生成 onnx 文件。
    3. 使用ATC工具将ONNX模型转OM模型。

      1. 配置环境变量。

         source /usr/local/Ascend/ascend-toolkit/set_env.sh
        
      2. 执行命令查看芯片名称(${chip_name})。

        npu-smi info
        #该设备芯片名为Ascend310P3 (自行替换)
        回显如下:
        +-------------------+-----------------+------------------------------------------------------+
        | NPU     Name      | Health          | Power(W)     Temp(C)           Hugepages-Usage(page) |
        | Chip    Device    | Bus-Id          | AICore(%)    Memory-Usage(MB)                        |
        +===================+=================+======================================================+
        | 0       310P3     | OK              | 15.8         42                0    / 0              |
        | 0       0         | 0000:82:00.0    | 0            1074 / 21534                            |
        +===================+=================+======================================================+
        | 1       310P3     | OK              | 15.4         43                0    / 0              |
        | 0       1         | 0000:89:00.0    | 0            1070 / 21534                            |
        +===================+=================+======================================================+
        
    4. 执行ATC命令。

       # bs = [1, 4, 8, 16, 32, 64]
       atc --model=${onnx_file} --framework=5 --output=densenet121_bs${bs} \
       --input-shape="input_0:${bs},3,224,224" --log=error --soc_version=Ascend${chip_name}
      

      运行成功后生成densenet121_bs${bs}.om模型文件。

      参数说明:

      • --model:为ONNX模型文件。
      • --framework:5代表ONNX模型。
      • --output:输出的OM模型。
      • --input_format:输入数据的格式。
      • --input_shape:输入数据的shape。
      • --log:日志级别。
      • --soc_version:处理器型号。
  2. 开始推理验证。

    1. 安装ais_bench推理工具。

      请访问ais_bench推理工具代码仓,根据readme文档进行工具安装。

    2. 执行推理。

      mkdir result
      python3 -m ais_bench --model=densenet121_bs${bs}.om  --batchsize=${bs} \
      --input ${save_dir} --output result --output_dirname result_bs${bs} --outfmt TXT
      

      参数说明:

      • --model:om模型路径。
      • --batchsize:批次大小。
      • --input:输入数据所在路径。
      • --output:推理结果输出路径。
      • --output_dirname:推理结果输出子文件夹。
      • --outfmt:推理结果输出格式
  3. 精度验证。

    调用脚本与数据集标签val_label.txt比对,可以获得Accuracy数据,结果保存在result.json中。

    python3 densenet121_postprocess.py ${result_dir} ${gt_file} result.json
    

    参数说明:

    • --result_dir:推理结果所在路径,这里为 ./result/result_bs${bs}。
    • --gt_file:真值标签文件val_label.txt所在路径。
  4. 可使用ais_bench推理工具的纯推理模式验证不同batch_size的om模型的性能,参考命令如下:

    python3 -m ais_bench --model=densenet121_bs${bs}.om --loop=50 --batchsize=${bs}
    

    参数说明:

    • --model:om模型路径。
    • --batchsize:批次大小。

模型推理性能&精度

调用ACL接口推理计算,Densenet121模型的性能和精度参考下列数据。

芯片型号 Batch Size 数据集 精度指标1(Acc@1) 精度指标2(Acc@5) 性能(FPS)
300I Pro 1 ImageNet 74.43 91.96 1087.52
300I Pro 4 ImageNet 74.43 91.96 2004.17
300I Pro 8 ImageNet 74.43 91.96 2194.99
300I Pro 16 ImageNet 74.43 91.96 1671.32
300I Pro 32 ImageNet 74.43 91.96 1411.77
300I Pro 64 ImageNet 74.43 91.96 1276.81
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Python
1
https://gitee.com/ascend/ModelZoo-PyTorch.git
git@gitee.com:ascend/ModelZoo-PyTorch.git
ascend
ModelZoo-PyTorch
ModelZoo-PyTorch
master

搜索帮助