Skip to main content

log类函数集

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框架)

编译

CMakeLists.txt文件配置

主要用于设置后处理动态库的目标文件以及链接相关的第三方库。每一个后处理都有一个CMakeLists.txt文件与之对应。对于新增后处理的CMakeLists.txt文件,用户只需修改生成的后处理名和生成动态库的目标文件即可,沿用原有的其他配置。以开发一个ResNet-50后处理为例,示例操作如下:

其中,“samplepostprocess”和“SamplePostProcess.cpp”分别代表生成的后处理动态库名和生成后处理的目标文件,其他的配置沿用原有的后处理。

命令行编译

命令行编译主要根据“CMakeLists.txt”文件的配置,进行插件的编译和生成。以下步骤中*{sdk_install_path}*为mxVision软件包的安装路径。

  1. 新建并进入“SamplePostProcess”目录。

    cd &#123;sdk_install_path&#125;/samples/
    mkdir SamplePostProcess
    cd SamplePostProcess
  2. 将后处理动态库头文件、源文件和“CMakeLists.txt”文件存放至“SamplePostProcess”目录。

  3. 新建并进入“build”目录。

    mkdir build
    cd build
  4. 创建Makefile文件,避免污染项目的CMakeLists。

    cmake ..
  5. 根据生成的Makefile文件编译项目。

    make -j
  6. 将生成后处理的.so文件拷贝至“{sdk_install_path}/lib/modelpostprocessors”目录下。

    make install

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

在线提单