ONNX 模型库
返回模型

说明文档

SemanticFPN 模型(在 cityscapes 上训练)

SemanticFPN 是一个概念简单但有效的全景分割基线模型,在 cityscapes 数据集上训练。该方法以带有 FPN 的 Mask R-CNN 为基础,添加了一个轻量级的语义分割分支用于密集像素预测。该方法由 Kirillov, Alexander 等人在 2019 年的论文 Panoptic Feature Pyramid Networks 中提出。

我们开发了一个可由 AMD Ryzen AI 支持的改进版本。

模型描述

SemanticFPN 是一个统一实例分割和语义分割任务的单网络模型。该网络通过在流行的实例分割方法 Mask R-CNN 上添加一个使用共享特征金字塔网络(FPN)骨干的语义分割分支而设计。这个简单的基线不仅在实例分割方面保持有效,而且为语义分割提供了一种轻量级、高性能的方法。它是这两个任务的稳健且准确的基线,可以作为未来全景分割研究的强基线。

预期用途与限制

您可以使用原始模型进行图像分割。请查看 模型中心 以查找所有可用的 SemanticFPN 模型。

如何使用

安装

按照 Ryzen AI 安装指南 为 Ryzen AI 准备环境。 运行以下脚本安装此模型的依赖项。

pip install -r requirements.txt 

数据准备(可选:用于精度评估)

  1. 下载 cityscapes 数据集
    • 真值文件夹:gtFine_trainvaltest.zip [241MB]
    • 图像文件夹:leftImg8bit_trainvaltest.zip [11GB]
  2. 按以下方式组织数据集目录:
└── data
     └── cityscapes
          ├── leftImg8bit
          |    ├── train
          |    └── val
          └── gtFine
               ├── train
               └── val

测试与评估

    parser = argparse.ArgumentParser(description='SemanticFPN model')
    parser.add_argument('--onnx_path', type=str, default='FPN_int_NHWC.onnx')
    parser.add_argument('--save_path', type=str, default='./data/demo_results/senmatic_results.png')
    parser.add_argument('--input_path', type=str, default='data/cityscapes/cityscapes/leftImg8bit/test/bonn/bonn_000000_000019_leftImg8bit.png')
    parser.add_argument('--ipu', action='store_true',
                    help='use ipu')
    parser.add_argument('--provider_config', type=str, default=None,
                    help='provider config path')
    args = parser.parse_args()

    if args.ipu:
        providers = ["VitisAIExecutionProvider"]
        provider_options = [{"config_file": args.provider_config}]
    else:
        providers = ['CPUExecutionProvider']
        provider_options = None

    onnx_path = args.onnx_path
    input_img = build_img(args)
    session = onnxruntime.InferenceSession(onnx_path, providers=providers, provider_options=provider_options)
    ort_input = {session.get_inputs()[0].name: input_img.cpu().numpy()}
    ort_output = session.run(None, ort_input)[0]
    if isinstance(ort_output, (tuple, list)):
        ort_output = ort_output[0]

    output = ort_output[0].transpose(1, 2, 0)
    seg_pred = np.asarray(np.argmax(output, axis=2), dtype=np.uint8)
    color_mask = colorize_mask(seg_pred)
    color_mask.save(args.save_path)
  • 对单张图像运行推理
python infer_onnx.py --onnx_path FPN_int_NHWC.onnx --input_path /Path/To/Your/Image --ipu --provider_config Path/To/vaip_config.json
  • 测试量化模型的精度
python test_onnx.py --onnx_path FPN_int_NHWC.onnx --dataset citys --test-folder ./data/cityscapes --crop-size 256 --ipu --provider_config Path/To/vaip_config.json

性能

模型 输入尺寸 FLOPs Cityscapes 验证集 mIoU
SemanticFPN(ResNet18) 256x512 10G 62.9%
模型 输入尺寸 FLOPs Cityscapes 验证集 INT8 mIoU
SemanticFPN(ResNet18) 256x512 10G 62.5%
@inproceedings{kirillov2019panoptic,
  title={Panoptic feature pyramid networks},
  author={Kirillov, Alexander and Girshick, Ross and He, Kaiming and Doll{\'a}r, Piotr},
  booktitle={Proceedings of the IEEE/CVF conference on computer vision and pattern recognition},
  pages={6399--6408},
  year={2019}
}

amd/SemanticFPN

作者 amd

↓ 0 ♥ 1

创建时间: 2023-12-04 16:30:08+00:00

更新时间: 2024-01-12 03:54:37+00:00

在 Hugging Face 上查看

文件 (10)

.gitattributes
FPN_int_NHWC.onnx ONNX
README.md
datasets/__init__.py
datasets/base.py
datasets/cityscapes.py
datasets/utils.py
infer_onnx.py
requirements.txt
test_onnx.py