Pyramidbox模型-推理指导
概述
Pyramidbox是一种新的基于上下文辅助的单镜头人脸检测器。首先,通过使用一个新的上下文锚,通过一种半监督的方法来监督高级上下文特征的学习,;其次,提出了低层次特征pyramid网络,将足够的高层次上下文语义特征和低层次面部特征结合在一起,这也使得模型能够在单一镜头中预测所有尺度的人脸;第三,引入上下文敏感结构,增加预测网络的容量,提高最终输出的精度。此外,采用数据锚采样的方法对不同尺度的训练样本进行增广,增加了小人脸训练数据的多样性。
-
参考实现:
url=https://gitee.com/kghhkhkljl/pyramidbox.git commit_id=b498eefe0bd7ce6a530c195642e836c314b57c81 code_path=ACL_PyTorch/contrib/cv/detection model_name=pyramidbox
输入输出数据
-
输入数据
输入数据 数据类型 大小 数据排布格式 input RGB_FP32 batchsize x 3 x 1000 x 1000 NCHW -
输出数据
输出数据 数据类型 大小 数据排布格式 output1 FLOAT16 batchsize x 1000 ND
推理环境准备
-
该模型需要以下插件与驱动
表 1 版本配套表
配套 版本 环境准备指导 固件与驱动 22.0.3 Pytorch框架推理环境准备 CANN 6.0.RC1 - Python 3.7.5 - PyTorch 1.9.0 - 说明:Atlas 300I Duo 推理卡请以CANN版本选择实际固件与驱动版本。 \ \
快速上手
获取源码
-
获取源码。
git clone https://gitee.com/kghhkhkljl/pyramidbox.git # 克隆仓库的代码克隆下来源代码之后将pr中的代码放到克隆下来的pyramidbox下面
-
安装依赖。
pip3 install -r requirements.txt
准备数据集
-
获取原始数据集。(解压命令参考tar –xvf *.tar与 unzip *.zip)
本模型支持widerface 3226张图片的验证集。下载地址:https://share.weiyun.com/5ot9Qv1
上传数据集到服务器pyramidbox目录并解压存放至images(需自建)。目录结构如下:
images ├── 0--Parade //不同二级目录 └── 1--Handshaking └── ... -
数据预处理,将原始数据集转换为模型输入的数据。
执行“pyramidbox_preprocess.py”脚本,完成预处理。
cd pyramidbox python3 pyramidbox_preprocess.py ./images ./data1000_1 ./data1000_2- 参数说明
- 第一个参数:数据集所在目录
- 第二个和第三个参数:预处理后的文件名(说明:由于预处理需要进行两次图片的不同处理,所以生成的文件有两个)
- 参数说明
-
迁移数据集信息文件
检索预处理完成后的结果并转移至新文件夹内
find ${dataset_path}/data1000_1 -type f -iname "*.bin" -exec mv --backup=numbered -t ${dataset_path}/bs1_data_1 {} + find ${dataset_path}/data1000_2 -type f -iname "*.bin" -exec mv --backup=numbered -t ${dataset_path}/bs1_data_2 {} + 需要先新建用以存放迁移后数据的文件夹,因为预处理结果额外包含一层子目录,所以将所有后缀符合的文件全部取出放入新文件夹内
模型推理
-
模型转换。
使用PyTorch将模型权重文件.pth转换为.onnx文件,再使用ATC工具将.onnx文件转为离线推理模型文件.om文件。
-
获取权重文件。
wget https://ascend-repo-modelzoo.obs.cn-east-2.myhuaweicloud.com/model/1_PyTorch_PTH/pyramidbox/PTH/pyramidbox_120000_99.02.pth -
使用pth2onnx.py进行onnx的转换。
python3 pyramidbox_pth2onnx.py ./pyramidbox_1000.onnx ./pyramidbox_120000_99.02.pth- 参数说明:
- 第一个参数:onnx文件生成在当前目录的名字。
- 第二个参数:当前目录下的权重文件
运行后生成pyramidbox_1000.onnx,该模型只支持bs1。
- 参数说明:
-
使用ATC工具将ONNX模型转OM模型。
-
配置环境变量。
source /usr/local/Ascend/ascend-toolkit/set_env.sh -
执行命令查看芯片名称(${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 | +===================+=================+======================================================+ -
执行ATC命令。
atc --framework=5 --model=pyramidbox_1000.onnx --input_format=NCHW --input_shape="image:1,3,1000,1000" --output=pyramidbox_bs1 --log=error --soc_version=Ascend${chip_name} --precision_mode=force_fp32 --fusion_switch_file=fusion_switch.cfg-
参数说明:
-
--model:为ONNX模型文件。
-
--framework:5代表ONNX模型。
-
--output:输出的OM模型。
-
--input_format:输入数据的格式。
-
--input_shape:输入数据的shape。
-
--log:日志级别。
-
--soc_version:处理器型号。
-
--precision_mode:精度模式
-
--fusion_switch_file=fusion_switch.cfg:关闭算子融合的配置文件
-
-
-
运行成功后生成pyramidbox_bs1.om模型文件。
-
-
开始推理验证。
-
安装ais_bench推理工具。
请访问ais_bench推理工具代码仓,根据readme文档进行工具安装。
-
执行推理。
mkdir result11 result22 python -m ais_bench --model ${model_path}/pyramidbox_bs1.om --input=${dataset_path}/bs1_data_1/ --outfmt=BIN --output=${output_path} --output_dirname=${output_dir_name} python -m ais_bench --model ${model_path}/pyramidbox_bs1.om --input=${dataset_path}/bs1_data_2/ --outfmt=BIN --output=${output_path} --output_dirname=${output_dir_name} 说明:由于预处理后的数据集有两个,所以此脚本需要运行两次-
参数说明:
- model:om所在的路径。
- input:预处理后的所有bin文件。
- outfmt:输出格式,此处默认为BIN。
- output:输出文件路径
- output_dirname: 输出保存文件夹,可以对应取名 result11 和 result22
推理后的输出默认在当前目录
result11和result22下。 -
-
处理目录下的bin文件
python3.7 convert.py ./result11 ./result/result11 python3.7 convert.py ./result22 ./result/result22- 参数说明
- 第一个参数:生成的文件(需要改成对应日期)
- 第二个参数:生成的二级目录所在文件夹
- 参数说明
-
-
精度验证。
经过后处理脚本和精度评估文件,此处evaluation文件中目标文件名(../output_1280)需要和后处理输出一致。运行结束后会显示精度结果。
cd ./pyramidbox python3.7 pyramidbox_postprocess.py ./evaluate/ground_truth/wider_face_val.mat ./images ./output_1280 ./result/result11 ./result/result22 cd ./pyramidbox/evaluate python3.7 evaluation.py- 后处理参数说明
- 第一个参数:mat文件目录
- 第二个参数:图片存储目录
- 第三个参数:后处理结果保存路径
- 第四个参数:处理后的bin文件目录1
- 第五个参数:处理后的bin文件目录2
- 后处理参数说明
-
性能验证。
可使用ais_bench推理工具的纯推理模式验证om模型的性能,参考命令如下:
python -m ais_bench --model ${model_path}/pyramidbox_bs1.om --loop 20 --batchsize 1-
参数说明:
- model:om所在的路径
- loop:循环次数
- batchsize:模型batch size
-
模型推理性能&精度
调用ACL接口推理计算,性能参考下列数据。
| 芯片型号 | Batch Size | 数据集 | 精度 | 性能 |
|---|---|---|---|---|
| 300I Pro | 1 | Widerface | Easy Val AP: 0.9629268827693285 Medium Val AP: 0.9538798956286163 Hard Val AP: 0.8808383584682273 |
8.9 |