后处理类开发步骤
- 根据任务类型,选择SDK已经支持的后处理基类去派生一个新的子类,后处理基类分别为目标检测,分类任务,语义分割,文本生成,这些基类都继承自相同的父类PostProcessBase。
在Init函数中,需要调取父类的Init()接口读取配置参数,然后再调用父类对象的configData_.GetFileValue()接口读取子类所需要的配置参数。
在Process函数中,需要以模型的输出张量tensors作为输入,以对应的数据结构类对象作为输出。
- 调用父类的CheckAndMoveTensors()接口,对tensors的形状进行校验并将内存移动至Host侧,然后再进行相应操作获得结果。
- 后处理开发完成后,增加一个对外的接口如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; // 用于实例分割 }; // 2.分类任务数据结构: class ClassInfo { public: int classId; float confidence; std::string className; }; // 3.语义分割任务数据结构: class SemanticSegInfo { public: std::vector<std::vector<int>> pixels; std::vector<std::string> labelMap; }; // 4.文本生成(机器翻译,文字识别,语音识别等)接口: class TextsInfo { public: std::vector<std::string> text; }; // 5.文本框检测接口: class TextObjectInfo { public: float x0; float y0; float x1; float y1; float x2; float y2; float x3; float y3; float confidence; std::string result; };
图1 已支持模型的后处理UML类图
父主题: 新框架模型后处理