Res2Net101_v1b Onnx模型端到端推理指导
1 模型概述
1.1 论文地址
1.2 代码地址
Res2Net101_v1b代码
branch:master
commit_id:7ed111407a22723672eac575b300adc04e75e925
2 环境说明
2.1 深度学习框架
CANN 5.0.1
torch == 1.5.0
torchvision == 0.6.0
onnx == 1.9.0
2.2 python第三方库
numpy == 1.19.2
Pillow == 8.2.0
opencv-python == 4.5.2.52
说明:
X86架构:pytorch和onnx可以通过官方下载whl包安装,其它可以通过pip3.7 install 包名 安装
Arm架构:pytorch和onnx可以通过源码编译安装,其它可以通过pip3.7 install 包名 安装
3 模型转换
3.1 pth转onnx模型
1.下载pth权重文件
Res2Net101_v1b预训练pth权重文件
wget https://shanghuagao.oss-cn-beijing.aliyuncs.com/res2net/res2net101_v1b_26w_4s-0812c246.pth
文件MD5sum:ebf7af4c138fcf25db859705907af833
2.Res2Net101_v1b模型代码获取方式如下
git clone https://github.com/Res2Net/Res2Net-PretrainedModels.git
3.编写pth2onnx脚本res2net101_v1b_pth2onnx.py
说明:
注意目前ATC支持的onnx算子版本为11
4.执行pth2onnx脚本,生成onnx模型文件
python3.7 res2net101_v1b_pth2onnx.py res2net101_v1b_26w_4s-0812c246.pth res2net101_v1b.onnx
模型转换要点:
此模型转换为onnx不需要修改开源代码仓代码,故不需要特殊说明
3.2 onnx转om模型
1.设置环境变量
source /usr/local/Ascend/ascend-toolkit/set_env.sh
2.使用atc将onnx模型转换为om模型文件,工具使用方法可以参考CANN V100R020C10 开发辅助工具指南 (推理) 01
atc --framework=5 --model=./res2net101_v1b.onnx --output=res2net101_v1b_bs1 --input_format=NCHW --input_shape="image:1,3,224,224" --log=debug --soc_version=Ascend310
4 数据集预处理
4.1 数据集获取
该模型使用ImageNet官网的5万张验证集进行测试,图片与标签分别存放在/opt/npu/imagenet/val与/opt/npu/imagenet/val_label.txt。
4.2 数据集预处理
1.预处理脚本imagenet_torch_preprocess.py
2.执行预处理脚本,生成数据集预处理后的bin文件
python3.7 imagenet_torch_preprocess.py res2net101 /opt/npu/imagenet/val ./prep_dataset
4.3 生成数据集信息文件
1.生成数据集信息文件脚本gen_dataset_info.py
2.执行生成数据集信息脚本,生成数据集信息文件
python3.7 gen_dataset_info.py bin ./prep_dataset ./res2net101_v1b_prep_bin.info 224 224
第一个参数为模型输入的类型,第二个参数为生成的bin文件路径,第三个为输出的info文件,后面为宽高信息
5 离线推理
5.1 benchmark工具概述
benchmark工具为华为自研的模型推理工具,支持多种模型的离线推理,获取工具及使用方法可以参考CANN V100R020C10 推理benchmark工具用户指南 01
5.2 离线推理
1.设置环境变量
source /usr/local/Ascend/ascend-toolkit/set_env.sh
2.执行离线推理
./benchmark.x86_64 -model_type=vision -device_id=0 -batch_size=1 -om_path=res2net101_v1b_bs1.om -input_text_path=./res2net101_v1b_prep_bin.info -input_width=224 -input_height=224 -output_binary=False -useDvpp=False
输出结果默认保存在当前目录result/dumpOutput_device{0},模型只有一个名为class的输出,shape为bs * 1000,数据类型为FP32,对应1000个分类的预测结果,每个输入对应的输出对应一个_x.bin文件。
6 精度对比
6.1 离线推理TopN精度统计
后处理统计TopN精度
调用imagenet_acc_eval.py脚本推理结果与label比对,可以获得Accuracy Top5数据,结果保存在result.json中。
python3.7 imagenet_acc_eval.py result/dumpOutput_device0/ /opt/npu/imagenet/val_label.txt ./ result.json
第一个为benchmark输出目录,第二个为数据集配套标签,第三个是生成文件的保存目录,第四个是生成的文件名。
查看输出结果:
{"title": "Overall statistical evaluation", "value": [{"key": "Number of images", "value": "50000"}, {"key": "Number of classes", "value": "1000"}, {"key": "Top1 accuracy", "value": "81.22%"}, {"key": "Top2 accuracy", "value": "90.21%"}, {"key": "Top3 accuracy", "value": "93.1%"}, {"key": "Top4 accuracy", "value": "94.44%"}, {"key": "Top5 accuracy", "value": "95.36%"}]}
经过对bs1与bs16的om测试,本模型batch1的精度与batch16的精度没有差别,精度数据均如上
6.2 开源TopN精度
Model Acc@1 Acc@5
Res2Net101_v1b 81.23 95.36
6.3 精度对比
将得到的om离线模型推理TopN精度与该模型github代码仓上公布的精度对比,精度下降在1%范围之内,故精度达标。
精度调试:
没有遇到精度不达标的问题,故不需要进行精度调试