ResNet是ImageNet竞赛中分类问题效果较好的网络,它引入了残差学习的概念,通过增加直连通道来保护信息的完整性,解决信息丢失、梯度消失、梯度爆炸等问题,让很深的网络也得以训练。ResNet有不同的网络层数,常用的有18-layer、34-layer、50-layer、101-layer、152-layer。
参考实现:
url=https://github.com/pytorch/vision
branch=master
commit_id=7d955df73fe0e9b47f7d6c77c699324b256fc41f
输入数据
输入数据 | 大小 | 数据类型 | 数据排布格式 |
---|---|---|---|
image | batchsize x 3 x 256 x 256 | RGB_FP32 | NCHW |
输出数据
输出数据 | 大小 | 数据类型 | 数据排布格式 |
---|---|---|---|
class | batchsize x 1000 | FLOAT32 | ND |
该模型需要以下插件与驱动
配套 | 版本 | 环境准备指导 |
---|---|---|
固件与驱动 | 22.0.4 | Pytorch框架推理环境准备 |
CANN | 6.0.RC1 | |
PyTorch | 1.5.1 | |
说明:Atlas 300I Duo 推理卡请以CANN版本选择实际固件与驱动版本。 |
该模型需要以下依赖。
依赖名称 | 版本 |
---|---|
onnx | >=1.9.0 |
torch | >=1.5.1 |
torchVision | >=0.6.1 |
numpy | >=1.19.2 |
Pillow | >=8.2.0 |
opencv-python | >=4.5.2 |
获取源码上传到服务器任意目录(如:/home/HwHiAiUser)。
git clone https://gitee.com/ascend/ModelZoo-PyTorch.git
cd ModelZoo-PyTorch/ACL_PyTorch/built-in/cv/Resnet101_Pytorch_Infer
工作目录如下:
.
|-- README.md
|-- imagenet_acc_eval.py //验证推理结果脚本,比对benchmark输出的分类结果和标签,给出Accuracy
|-- imagenet_torch_preprocess.py //数据集预处理脚本
|-- requirements.txt
|-- resnet101_pth2onnx.py //用于转换pth模型文件到onnx模型文件
请用户根据依赖列表和提供的requirements.txt以及自身环境准备依赖。
pip3 install -r requirements.txt
本模型使用ImageNet 50000张图片的验证集,请前往ImageNet官网下载数据集:
├── ImageNet
| ├── val
| | ├── ILSVRC2012_val_00000001.JPEG
│ | ├── ILSVRC2012_val_00000002.JPEG
│ | ├── ......
| ├── val_label.txt
执行预处理脚本:
python3 imagenet_torch_preprocess.py --data_path ./ImageNet/val/ --save_dir ./prep_dataset
参数说明:
模型转换。
本模型基于开源框架PyTorch训练的Resnet101进行模型转换。
使用PyTorch将模型权重文件.pth转换为.onnx文件,再使用ATC工具将.onnx文件转为离线推理模型文件.om文件。
获取权重文件。
从PyTorch开源框架获取经过训练的Resnet101权重文件resnet101-63fe2227.pth
wget https://download.pytorch.org/models/resnet101-63fe2227.pth
导出onnx文件。
将.pth文件转换为.onnx文件,执行如下命令在当前目录生成resnet101.onnx
模型文件。
python3 resnet101_pth2onnx.py --checkpoint ./resnet101-63fe2227.pth --save_dir ./resnet101.onnx
参数说明:
使用ATC工具将ONNX模型转OM模型。
执行命令查看芯片名称(${chip_name})。
${chip_name}可通过npu-smi info
指令查看
使用atc将onnx模型转换为om模型文件。
# 设置环境变量
source /usr/local/Ascend/ascend-toolkit/set_env.sh
# bs为批次大小,请根据需要设置
bs=8
atc --framework=5 --model=./resnet101.onnx --output=resnet101_bs${bs} --input_format=NCHW --input_shape="image:${bs},3,224,224" --log=debug --soc_version=${chip_name} --insert_op_conf=aipp.config --enable_small_channel=1
参数说明:
开始推理验证。
a. 安装ais_bench推理工具。
请访问ais_bench推理工具代码仓,根据readme文档进行工具安装。
b. 执行推理。
python3 -m ais_bench --model ./resnet101_bs${bs}.om --input ./prep_dataset/ --output ./result/ --output_dir resnet101_bs${bs} --outfmt TXT
参数说明:
运行成功后会在result/resnet101_bs${bs}下生成推理输出的txt文件。
c. 精度验证。
调用imagenet_acc_eval.py脚本与数据集标签val_label.txt比对,可以获得Accuracy Top5数据,结果保存在result.json中。
python3 imagenet_acc_eval.py result/resnet101_bs${bs} ./ImageNet/val_label.txt ./ result.json
第一个参数为生成推理结果所在路径,第二个参数为标签数据,第三个参数为生成结果文件路径,第四个参数为生成结果文件名称。
执行纯推理验证性能。
python3 -m ais_bench --model resnet101_bs${bs}.om --device 1 --loop 100
官方的参考精度为:Top1: 77.374%, Top5: 93.546%
芯片型号 | Batch size | 精度 | 性能(fps) |
---|---|---|---|
300I Pro | 1 | Top1: 77.38%, Top5: 93.56% | 971.86 |
300I Pro | 4 | 2168.89 | |
300I Pro | 8 | Top1: 77.38%, Top5: 93.56% | 2547.92 |
300I Pro | 16 | 2453.68 | |
300I Pro | 32 | 2403.78 | |
300I Pro | 64 | 2305.32 | |
300I Pro | 128 | 2323.51 | |
300I Pro | 256 | 1761.95 |
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。