模型后处理插件
后处理插件基类
模型后处理插件用于对模型推理的输出张量进行后处理并将对应结果写入元数据。由于不同推理任务类型的后处理所需要的输入,以及输出类型都不相同,因此需要采用不同的后处理插件。为了易于复用,Vision SDK已将部分接口和成员提取到后处理基类中。对于每类任务,如目标检测任务,采用动态加载后处理so的方法,实现支持各种模型(如YOLOv3,FasterRCNN,SsdVgg-16等模型)的多态性。
后处理插件当前需要连接在mxpi_tensorinfer推理插件之后使用,只接受MxpiTensorPackageList作为元数据输入。 |
|
MxModelPostProcessorBase,MxImagePostProcessorBase(图像后处理基类,继承自MxModelPostProcessorBase)。 |
|
|
|
|
|
请参见表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 | 内部调试中,请勿使用。 | 否 | 否 |
| 属性名 | 描述 | 是否为必选项 | 是否可修改 |
|---|---|---|---|
| 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(图像后处理基类)的子类插件中拥有该属性。是否需要先将模型推理的坐标映射回抠图前的原图上。不设置该属性的默认情况下不映射到原图上。如需要映射,则输入对应的抠图插件名称。 | 否 | 是 |
mxpi_objectpostprocessor
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
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
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
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
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
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"
},
