Skip to main content

log类函数集

文本检测后处理

支持的模型后处理

模型后处理说明
CtpnPostProcessCtpn后处理。
PSENetPostProcessPSEnet后处理。

统一的构造函数

postProcessName(config_data, label_path)
postProcessName(config_path, label_path)

例如:CtpnPostProcess (config_data, label_path),CtpnPostProcess (config_path, label_path)。

构造函数输入参数说明

参数名类型说明
config_datadict配置数据。
label_pathstr标签路径。
config_pathstr配置路径。

构造函数输出参数说明

对应的后处理对象。

统一的后处理函数

process(tensor, params)
process(tensor, param)

后处理函数输入参数说明

参数名类型说明
tensorList[base.Tensor]Tensor列表。
paramsList[base.ResizedImageInfo]ResizedImageInfo列表。
parambase.ResizedImageInfoResizedImageInfo对象。

后处理函数输出参数说明

list[list[TextObjectInfo]]

抛异常接口

传入Tensor失败,拷贝至Host失败,抛出runtime异常。

父主题: 模型后处理

关键点检测后处理

基类KeypointPostProcessBase。

支持的模型后处理

模型后处理说明
openPosePostProcessopenPost后处理。
HigherHRnetPostProcessHigherHRnet后处理。

构造函数

postProcessName(config_data, label_path)
postProcessName(config_path, label_path)

构造函数输入参数说明

参数名类型说明
config_datadict配置数据。
label_pathstr标签路径。
config_pathstr配置路径。

构造函数输出参数说明

对应的后处理对象。

统一的后处理函数

process(tensor, params)
process(tensor, param)

后处理函数输入参数说明

参数名类型说明
tensorList[base.Tensor]Tensor列表。
paramsList[base.ResizedImageInfo]ResizedImageInfo列表。
parambase.ResizedImageInfoResizedImageInfo对象。

后处理函数输出参数说明

list[list[KeyPointDetectionInfo]]

抛异常接口

传入Tensor失败,拷贝至Host失败,抛出runtime异常。

父主题: 模型后处理

log类函数集

函数名参数类型说明
debug(str)String打印Debug级日志。
info(str)String打印Info级日志。
warning(str)String打印Warning级日志。
error(str)String打印Error级日志。
fatal(str)String打印Fatal级日志。
init()-日志初始化。

父主题: 日志输出

模型后处理介绍

模型后处理为与模型一一对应的配套操作,在mxVision中其主要工作是用于对模型推理插件传入的推理结果张量进行处理,如在目标检测任务中,需要对目标框进行去重,排序,筛选等,最后将处理结果写入目标信息的类对象中,传递回给目标检测后处理插件进行写入元数据以传递给下游插件。目前mxVision所支持的模型均已开发相应的后处理动态库,具体请参见表1。请用户根据实际情况选择现有后处理插件或自行开发适配所需模型,具体操作步骤请参见后处理类开发步骤

表1 已支持模型及对应后处理动态库

已支持模型名称

后处理类名称

推理插件使用的后处理动态库

YOLOv3

Yolov3PostProcess

modelpostprocessors/libyolov3postprocess.so

YOLOv3-tiny

ResNet-50

Resnet50PostProcess

modelpostprocessors/libresnet50postprocess.so

Faster Rcnn

FasterRcnnPostProcess

modelpostprocessors/libfasterrcnnpostprocess.so

SSD-VGG16

Ssdvgg16PostProcess

modelpostprocessors/libssdvgg16postprocess.so

SSD MobileNet v1 FPN

SsdMobilenetv1FpnPostProcess

modelpostprocessors/libssdmobilenetv1fpnpostprocess.so

CRNN

CrnnPostProcessor

modelpostprocessors/libcrnnpostprocess.so

后处理需要一个配置文件和一个标签文件。

  • 标签文件需将所有类别的名称按类别ID顺序逐行输入(#开头的行不会被读取),填写示例参考如下:

    # This is modified from https://gist.github.com/yrevar/942d3a0ac09ec9e5eb3a
    unknown type
    tench, Tinca tinca
    goldfish, Carassius auratus
    great white shark, white shark, man-eater, man-eating shark, Carcharodon carchariasB
    tiger shark, Galeocerdo cuvieri
    ……
  • 每个模型所需要的配置参数一般不相同,用户可自行定义增加。后处理基类中已经读取“CHECK_MODEL”参数,当值为“true”时会对模型的输出张量形状进行校验,并拦截后处理不兼容的模型,当值为“false”时会跳过模型校验。当前mxVision已支持的模型输出张量形状与配置文件参数请见模型后处理配置参数

父主题: 模型后处理(tensorinfer框架)

后处理类开发步骤

  1. 根据任务类型,选择mxVision已经支持的后处理基类去派生一个新的子类,后处理基类分别为目标检测、分类任务、语义分割、文本生成,这些基类都继承自相同的父类PostProcessBase。

    在Init函数中,需要调取父类的Init()接口读取配置参数,然后再调用父类对象的configData_.GetFileValue()接口读取子类所需要的配置参数。

    在Process函数中,需要以模型的输出张量Tensors作为输入,以对应的数据结构类对象作为输出。

  2. 调用父类的CheckAndMoveTensors()接口,对Tensors的形状进行校验并将内存移动至Host侧,然后再进行相应操作获得结果。

  3. 后处理开发完成后,增加一个对外的接口如GetObjectInstance(),以便于让业务流中的后处理插件动态加载此后处理so。

    如果当前后处理基类所采用的数据结构无法满足需求,可以新增后处理基类继承PostProcessBase,并写入新的数据结构。

// 1.目标检测数据结构:
class ObjectInfo {
public:
float x0;
float y0;
float x1;
float y1;
float confidence;
float classId;
std::string className;
std::vector<std::vector <int>> mask; // 用于实例分割
&#125;;

// 2.分类任务数据结构:
class ClassInfo &#123;
public:
int classId;
float confidence;
std::string className;
&#125;;

// 3.语义分割任务数据结构:
class SemanticSegInfo &#123;
public:
std::vector<std::vector<int>> pixels;
std::vector<std::string> labelMap;
&#125;;

// 4.文本生成(机器翻译,文字识别,语音识别等)接口:
class TextsInfo &#123;
public:
std::vector<std::string> text;
&#125;;

// 5.文本框检测接口:
class TextObjectInfo &#123;
public:
float x0;
float y0;
float x1;
float y1;
float x2;
float y2;
float x3;
float y3;
float confidence;
std::string result;
&#125;;

图1 已支持模型的后处理UML类图

父主题: 模型后处理(tensorinfer框架)

在线提单