模型后处理插件

后处理插件基类

模型后处理插件用于对模型推理的输出张量进行后处理并将对应结果写入元数据。由于不同推理任务类型的后处理所需要的输入,以及输出类型都不相同,因此需要采用不同的后处理插件。为了易于复用,Vision SDK已将部分接口和成员提取到后处理基类中。对于每类任务,如目标检测任务,采用动态加载后处理so的方法,实现支持各种模型(如YOLOv3,FasterRCNN,SsdVgg-16等模型)的多态性。

功能描述

用于对模型推理的输出张量进行后处理。

约束限制

后处理插件当前需要连接在mxpi_tensorinfer推理插件之后使用,只接受MxpiTensorPackageList作为元数据输入。

父类不生成插件,子类继承父类生成插件。

父类类名

MxModelPostProcessorBase,MxImagePostProcessorBase(图像后处理基类,继承自MxModelPostProcessorBase)。

输入和输出

  • 输入:buffer(数据类型“MxpiBuffer”)、metadata(数据类型“MxpiTensorPackageList”)。
  • 输出:buffer(数据类型“MxpiBuffer”)、metadata(数据类型“MxpiObjectList”,“MxpiClassList”,“MxpiImageMaskList”,“MxpiTextObjectList”等)。

端口格式(caps)

  • 静态输入:{"metadata/tensor"}。
  • 静态输出:子类重写。

属性

请参见表1

表 1 MxModelPostProcessorBase(及MxImagePostProcessorBase)的属性

属性名 描述 是否为必选项 是否可修改
deviceId 使用的Ascend设备的芯片编号,无需设置,统一由stream_config字段中的deviceId属性设置。
postProcessLibPath 后处理动态链接库so文件路径。如果不指定,则不进行后处理,直接将模型推理结果写入元数据MxpiTensorPackageList并将内存拷贝到outputDeviceId指定位置。
labelPath 后处理类别标签路径。
dataSource 输入数据对应索引(通常情况下为上游元件名称),默认为上游插件对应输出端口的key值。
postProcessConfigPath 后处理配置文件路径。
postProcessConfigContent 后处理配置。
dataSourceResize 仅在继承MxImagePostProcessorBase(图像后处理基类)的子类插件中拥有该属性。该属性用于指示是否需要先将模型后处理中的坐标映射回缩放前的图片。在默认情况下,如果不设置该属性,则从推理插件前一个插件获取。如果获取不到,则不会进行坐标的缩放还原。
dataSourceRoiBoxes 仅在继承MxImagePostProcessorBase(图像后处理基类)的子类插件中拥有该属性。该属性用于指示是否需要先将模型推理的坐标映射回抠图前的原图上。在默认情况下,如果不设置该属性,则不映射到原图上。如需要映射,则输入对应的抠图插件名称。
funcLanguage 设置成后处理插件的开发语言,比如C++或Python。
className 后处理类的名称。
pythonModule 加载的后处理module名称,与Python或so内的module名称统一。
dataSourceImage 内部调试中,请勿使用。

表 2 Python后处理的属性

属性名 描述 是否为必选项 是否可修改
funcLanguage 设置成后处理插件的开发语言,比如C++或Python。
postProcessLibPath 后处理动态链接库so文件目录,该目录下存在后处理的Python文件或so。
className 后处理类的名称。
pythonModule 加载的后处理module名称,与Python或so内的module名称统一。
labelPath 后处理类别标签路径。
dataSource 输入数据对应索引(通常情况下为上游元件名称)。
postProcessConfigPath 后处理配置文件路径。
deviceId 使用的Ascend设备的芯片编号,无需设置,统一由stream_config字段中的deviceId属性设置。
dataSourceResize 仅在继承MxImagePostProcessorBase(图像后处理基类)的子类插件中拥有该属性。该属性用于指示是否需要先将模型后处理中的坐标映射回缩放前的图片。不设置该属性的默认情况下从推理插件前一个插件获取。如果获取不到,则不会进行坐标的缩放还原。
dataSourceRoiBoxes 仅在继承MxImagePostProcessorBase(图像后处理基类)的子类插件中拥有该属性。是否需要先将模型推理的坐标映射回抠图前的原图上。不设置该属性的默认情况下不映射到原图上。如需要映射,则输入对应的抠图插件名称。

图 1 后处理插件类继承关系图

mxpi_objectpostprocessor

功能描述

继承图像后处理基类,用于对目标检测模型推理的输出张量进行后处理。

约束限制

目前其上游只能连接mxpi_tensorinfer推理插件,只接受MxpiTensorPackageList作为元数据输入。调用mxBase仓的目标检测基类Process接口实现通讯,接受ObjectInfo数据类型的返回。

插件基类(factory)

mxpi_objectpostprocessor

输入和输出

  • 输入:buffer(数据类型“MxpiBuffer”)、metadata(数据类型“MxpiTensorPackageList”)。
  • 输出:buffer(数据类型“MxpiBuffer”)、metadata(数据类型“MxpiObjectList”)。

端口格式(caps)

  • 静态输入:{"metadata/tensor"}。
  • 静态输出:{"metadata/object"}。

属性

请参见表1表2

Python后处理插件pipeline样例:

"mxpi_objectpostprocessor0": {
            "props": {
                "funcLanguage":"python",
                "postProcessConfigPath": "../models/yolov3/yolov3_tf_bs1_fp16.cfg",
                "labelPath": "../models/yolov3/yolov3.names",
                "postProcessLibPath": "../../../python",
                "className":"Yolov3PostProcess",
                "pythonModule":"postprocess.post"
            },
            "factory": "mxpi_objectpostprocessor",
            "next": "mxpi_dataserialize0"
        },

C++后处理插件pipeline样例:

"mxpi_objectpostprocessor0": {
 "props": {
                "dataSource": "mxpi_tensorinfer0",
                "funcLanguage":"c++",
                "postProcessConfigPath": "../models/yolov3/yolov3_tf_bs1_fp16.cfg",
                "labelPath": "../models/yolov3/yolov3.names",
                "postProcessLibPath": "../../../lib/modelpostprocessors/libyolov3postprocess.so"
        },
        "factory": "mxpi_objectpostprocessor",
        "next": "mxpi_dataserialize0"
},

mxpi_classpostprocessor

功能描述

继承模型后处理基类,用于对分类模型推理的输出张量进行后处理。

约束限制

目前其上游只能连接mxpi_tensorinfer推理插件,只接受MxpiTensorPackageList作为元数据输入。

调用mxBase仓的目标检测基类Process接口实现通讯,接受ClassInfo数据类型的返回。

插件基类(factory)

mxpi_classpostprocessor

输入和输出

  • 输入:buffer(数据类型“MxpiBuffer”)、metadata(数据类型“MxpiTensorPackageList”)。
  • 输出:buffer(数据类型“MxpiBuffer”)、metadata(数据类型“MxpiClassList”)。

端口格式(caps)

  • 静态输入:{"metadata/tensor"}。
  • 静态输出:{"metadata/class"}。

属性

请参见表1表2

Python后处理插件pipeline样例:

"mxpi_classpostprocessor0": {
        "props": {
                "funcLanguage":"python",
                "postProcessConfigPath": "../models/resnet50/resnet50_aipp_tf.cfg",
                "labelPath": "../models/resnet50/resnet50_clsidx_to_labels.names",
                "postProcessLibPath": "../../../python",
                "className":"Resnet50PostProcess",
                "pythonModule":"postprocess.post"
        },
        "factory": "mxpi_classpostprocessor",
        "next": "mxpi_dataserialize0"
},

C++后处理插件pipeline样例:

"mxpi_classpostprocessor0": {
        "props": {
                "dataSource": "mxpi_tensorinfer0",
                "funcLanguage":"c++",
  "postProcessConfigPath": "../models/resnet50/resnet50_aipp_tf.cfg",
  "labelPath": "../models/resnet50/resnet50_clsidx_to_labels.names",
  "postProcessLibPath": "../../../lib/modelpostprocessors/libresnet50postprocess.so"
        },
        "factory": "mxpi_classpostprocessor",
        "next": "mxpi_dataserialize0"
},

mxpi_semanticsegpostprocessor

功能描述

继承图像后处理基类,用于对语义分割模型推理的输出张量进行后处理。

约束限制

目前其上游只能连接mxpi_tensorinfer推理插件,只接受MxpiTensorPackageList作为元数据输入。

调用mxBase仓的目标检测基类Process接口实现通讯,接受SemanticSegInfo数据类型的返回。

插件基类(factory)

mxpi_semanticsegpostprocessor

输入和输出

  • 输入:buffer(数据类型“MxpiBuffer”)、metadata(数据类型“MxpiTensorPackageList”)。
  • 输出:buffer(数据类型“MxpiBuffer”)、metadata(数据类型“MxpiImageMaskList”)。

端口格式(caps)

  • 静态输入:{"metadata/tensor"}。
  • 静态输出:{"metadata/semanticseg"}。

属性

请参见表1表2

Python后处理插件pipeline样例:

"mxpi_semanticsegpostprocessor0": {
 "props": {
  "dataSource": "mxpi_tensorinfer0",
                "funcLanguage":"python",
  "postProcessConfigPath": "../models/deeplabv3/deeplabv3.cfg",
  "labelPath": "../models/deeplabv3/deeplabv3.names",
  "postProcessLibPath": "../../../python",
                "className":"Deeplabv3Post",
                "pythonModule":"postprocess.post"
  },
 "factory": "mxpi_semanticsegpostprocessor",
 "next": "mxpi_dataserialize0"
},

C++后处理插件pipeline样例:

"mxpi_semanticsegpostprocessor0": {
    "props": {
        "dataSource": "mxpi_tensorinfer0",
                "funcLanguage":"c++",
        "postProcessConfigPath": "../models/deeplabv3/deeplabv3.cfg",
        "labelPath": "../models/deeplabv3/deeplabv3.names",
        "postProcessLibPath": "../../../lib/modelpostprocessors/libdeeplabv3postprocess.so"
        },
    "factory": "mxpi_semanticsegpostprocessor",
    "next": "mxpi_dataserialize0"
},

mxpi_textgenerationpostprocessor

功能描述

继承模型后处理基类,用于对文本生成(以及翻译,文字识别,语音识别等)模型推理的输出张量进行后处理。

约束限制

目前其上游只能连接mxpi_tensorinfer推理插件,只接受MxpiTensorPackageList作为元数据输入。调用mxBase仓的目标检测基类Process接口实现通讯,接受TextsInfo数据类型的返回。

插件基类(factory)

mxpi_textgenerationpostprocessor

输入和输出

  • 输入:buffer(数据类型“MxpiBuffer”)、metadata(数据类型“MxpiTensorPackageList”)。
  • 输出:buffer(数据类型“MxpiBuffer”)、metadata(数据类型“MxpiTextsInfoList”)。

端口格式(caps)

  • 静态输入:{"metadata/tensor"}。
  • 静态输出:{"metadata/text"}。

属性

请参见表1表2

Python后处理插件pipeline样例:

"mxpi_textgenerationpostprocessor0": {
 "props": {
  "dataSource": "mxpi_tensorinfer0",
                "funcLanguage":"python",
  "postProcessConfigPath": "../models/crnnms/crnn.cfg",
  "labelPath": "../models/crnnms/crnn.names",
  "postProcessLibPath": "../../../python",
                "className":"CrnnPostProcess",
                "pythonModule":"postprocess.post"
 },
 "factory": "mxpi_textgenerationpostprocessor",
 "next": "mxpi_dataserialize0"
},

C++后处理插件pipeline样例:

"mxpi_textgenerationpostprocessor0": {
 "props": {
  "dataSource": "mxpi_tensorinfer0",
                "funcLanguage":"c++",
  "postProcessConfigPath": "../models/crnnms/crnn.cfg",
  "labelPath": "../models/crnnms/crnn.names",
  "postProcessLibPath": "../../../lib/modelpostprocessors/libcrnnpostprocess.so"
 },
 "factory": "mxpi_textgenerationpostprocessor",
 "next": "mxpi_dataserialize0"
},

mxpi_textobjectpostprocessor

功能描述

继承图像后处理基类,用于对文本目标框检测模型推理的输出张量进行后处理。

约束限制

目前其上游只能连接mxpi_tensorinfer推理插件,只接受MxpiTensorPackageList作为元数据输入。调用mxBase仓的目标检测基类Process接口实现通讯,接受TextObjectInfo数据类型的返回。

插件基类(factory)

mxpi_textobjectpostprocessor

输入和输出

  • 输入:buffer(数据类型“MxpiBuffer”)、metadata(数据类型“MxpiTensorPackageList”)。
  • 输出:buffer(数据类型“MxpiBuffer”)、metadata(数据类型“MxpiTextObjectList”)。

端口格式(caps)

  • 静态输入:{"metadata/tensor"}。
  • 静态输出:{"metadata/textobject"}。

属性

请参见表1表2

Python后处理插件pipeline样例:

"mxpi_textobjectpostprocessor0": {
 "props": {
  "dataSource": "mxpi_tensorinfer0",
                "funcLanguage":"python",
  "postProcessConfigPath": "../models/ctpn_ms_cv/ctpn_mindspore.cfg",
  "postProcessLibPath": "../../../python",
  "labelPath": "../models/ctpn_ms_cv/ctpn.names",
                "className":"CtpnPostProcess",
                "pythonModule":"postprocess.post"
 },
 "factory": "mxpi_textobjectpostprocessor",
 "next": "mxpi_dataserialize0"
},

C++后处理插件pipeline样例:

"mxpi_textobjectpostprocessor0": {
 "props": {
  "dataSource": "mxpi_tensorinfer0",
                "funcLanguage":"c++",
  "postProcessConfigPath": "../models/ctpn_ms_cv/ctpn_mindspore.cfg",
  "postProcessLibPath": "../../../lib/modelpostprocessors/libctpnpostprocess.so",
  "labelPath": "../models/ctpn_ms_cv/ctpn.names"
 },
 "factory": "mxpi_textobjectpostprocessor",
 "next": "mxpi_dataserialize0"
},

mxpi_keypointpostprocessor

功能描述

继承图像后处理基类,用于对姿态检测模型推理的输出张量进行后处理。

约束限制

目前其上游只能连接mxpi_tensorinfer推理插件,只接受MxpiTensorPackageList作为元数据输入。调用mxBase仓的目标检测基类Process接口实现通讯,接受KeyPointInfo数据类型的返回。

插件基类(factory)

mxpi_keypointpostprocessor

输入和输出

  • 输入:buffer(数据类型“MxpiBuffer”)、metadata(数据类型“MxpiTensorPackageList”)。
  • 输出:buffer(数据类型“MxpiBuffer”)、metadata(数据类型“MxpiPoseList”)。

端口格式(caps)

  • 静态输入:{"metadata/tensor"}。
  • 静态输出:{"metadata/keypoint"}。

属性

请参见表1表2

Python后处理插件pipeline样例:

"mxpi_keypointpostprocessor0": {
            "props": {
                "funcLanguage":"python",
                "postProcessConfigPath": "../models/openpose/openpose.cfg",
                "labelPath": "../models/openpose/coco.names",
                "postProcessLibPath": "../../../python",
                "className":"OpenPosePostProcess",
                "pythonModule":"postprocess.post"
            },
            "factory": "mxpi_keypointpostprocessor",
            "next": "mxpi_dataserialize0"
        },

C++后处理插件pipeline样例:

   "mxpi_keypointpostprocessor0": {
        "props": {
            "dataSource": "mxpi_tensorinfer0",
            "postProcessConfigPath": "../models/openpose/openpose.cfg",
            "labelPath": "../models/openpose/coco.names",
            "postProcessLibPath": "libopenposepostprocess.so"
        },
        "factory": "mxpi_keypointpostprocessor",
        "next": "mxpi_dataserialize0"
    },