FastSCNN:快速分割卷积神经网络(Fast-SCNN),一种基于高分辨率图像数据(1024x2048px)的实时语义分割模型,适合在低内存嵌入式设备上高效计算。
参考实现:
url=https://github.com/LikeLy-Journey/SegmenTron
branch=master
commit_id=4bc605eedde7d680314f63d329277b73f83b1c5f
输入数据
输入数据 | 数据类型 | 大小 | 数据排布格式 |
---|---|---|---|
input | RGB_FP32 | batchsize * 3 *1024 * 2048 | NCHW |
输出数据
输出数据 | 数据类型 | 大小 | 数据排布格式 |
---|---|---|---|
output1 | RGB_FP16 | batchsize * 19 * 1024 * 2048 | NCHW |
表 1 版本配套表
配套 | 版本 | 环境准备指导 |
---|---|---|
固件与驱动 | 1.0.17 | Pytorch框架推理环境准备 |
CANN | 6.0.RC1 | - |
python | 3.7.5 | - |
pytorch | 1.9.0 | - |
获取源码。
git clone https://github.com/LikeLy-Journey/SegmenTron # 克隆仓库的代码
由于onnx不支持AdaptiveAvgPool算子,需要使用module.patch修改module.py。 将FastSCNN目录下的module.patch放到FastSCNN/SegmenTron目录下,执行:
cp module.patch ./SegmenTron
cd ./SegmenTron
git apply module.patch
cd ..
安装依赖。
pip install -r requirements.txt
获取原始数据集。
本模型支持cityscapes leftImg8bit的500张验证集。用户需要自行获取leftImg8bit_trainvaltest.zip和gtFine_trainvaltest.zip数据集,解压,将两个文件夹放在/npu/opt/datasets/cityscapes/目录下。目录结构如下:
├──datasets
├──cityscapes
├──gtFine //验证集标注信息
├──test
├──train
└──val
├──leftImg8bit // 验证集文件夹
├──test
├──train
└──val
数据预处理
将原始数据集转换为模型输入的数据。
python Fast_SCNN_preprocess.py --datasets_input_path /npu/opt/datasets/cityscapes --datasets_output_path ./prep_datasets
模型转换。
使用PyTorch将模型权重文件.pth转换为.onnx文件,再使用ATC工具将.onnx文件转为离线推理模型文件.om文件。
获取权重文件。
− 该推理项目使用权重文件fast_scnn_segmentron.pth
导出onnx文件。
使用fast_scnn_segmentron.pth导出onnx文件,获得fast_scnn.onnx文件。
运行Fast_SCNN_pth2onnx.py脚本。
python Fast_SCNN_pth2onnx.py --pth_path fast_scnn_segmentron.pth --onnx_name fast_scnn
使用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=fast_scnn.onnx --output=fast_scnn_${bs} --input_format=NCHW --input_shape="image:${bs},3,1024,2048" --log=debug --soc_version=Ascend${chip_name}
参数说明:
运行成功后生成fast_scnn_bs1.om模型文件。
开始推理验证。
安装ais_bench推理工具。
请访问ais_bench推理工具代码仓,根据readme文档进行工具安装。
执行推理。
推理支持batchsize1/2/4/8
python3 -m ais_bench --model ./fast_scnn_bs1.om --input ./prep_datasets/leftImg8bit/ --output ./result --output_dirname bs1 --outfmt BIN --batchsize 1
参数说明:
推理后的输出默认在当前目录result下。
精度验证。
调用Fast_SCNN_postprocess.py脚本与数据集标签prep_datasets/gitFine/比对,可以获得Accuracy数据,精度验证时间耗时较长请耐心等待,由于FastSCNN对输入模型的数据的顺序敏感,不同的验证顺序会产生不同的结果,所以使用log文件确定了输入数据的顺序。
python Fast_SCNN_postprocess.py --result_bin_root ./result/bs1/ --label_bin_root ./prep_datasets/gtFine/ --sort_log ./sort.log
调用ACL接口推理计算,性能参考下列数据。
芯片型号 | Batch Size | 数据集 | 性能 |
---|---|---|---|
300I PRO | 1 | cityscapes | 39.1736 |
300I PRO | 4 | cityscapes | 32.7321 |
300I PRO | 8 | cityscapes | 37.6047 |
精度如下。
芯片型号 | Batch Size | 数据集 | AvgmIou | AvgpixAcc |
---|---|---|---|---|
300I PRO | 1 | cityscapes | 68.6666 | 95.3526 |
300I PRO | 8 | cityscapes | 68.6666 | 95.3526 |
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。