Skip to main content

模型结构

模型支持列表

模型种类

模型框架

使用后处理动态库

获取途径

YOLOv3

TensorFlow

(tensorinfer框架)modelpostprocessors/libyolov3postprocess.so

ResNet-50

TensorFlow

(tensorinfer框架)modelpostprocessors/libresnet50postprocess.so

Faster Rcnn

TensorFlow

(tensorinfer框架)modelpostprocessors/libfasterrcnnpostprocess.so

MindSpore

(tensorinfer框架)modelpostprocessors/libfasterrcnnpostprocess.so

YOLOv4

Pytorch

(tensorinfer框架)modelpostprocessors/libyolov3postprocess.so

SSD-VGG16

Caffe

(tensorinfer框架)modelpostprocessors/libssdvggpostprocess.so

SSD MobileNet v1 FPN

TensorFlow

(tensorinfer框架)modelpostprocessors/libssdmobilenetfpnpostprocess.so

CRNN

TensorFlow

(tensorinfer框架)modelpostprocessors/libcrnnpostprocess.so

YOLOv5

Pytorch

(tensorinfer框架)modelpostprocessors/libyolov3postprocess.so

FasterRCNN-FPN/CascadeRCNN-FPN

Pytorch

(tensorinfer框架)modelpostprocessors/libfasterrcnnpostprocess.so

ResNet-18

TensorFlow

(tensorinfer框架)modelpostprocessors/libresnet50postprocess.so

CTPN

TensorFlow

(tensorinfer框架)modelpostprocessors/libctpnpostprocess.so

CTPN

MindSpore

(tensorinfer框架)modelpostprocessors/libctpnpostprocess.so

DeepLabv3

MindSpore

(tensorinfer框架)modelpostprocessors/libdeeplabv3post.so

BERT-Base (Uncased)

TensorFlow

(tensorinfer框架)modelpostprocessors/libresnet50postprocess.so

U-Net

MindSpore

(tensorinfer框架)modelpostprocessors/libunetmindsporepostprocess.so

Mask R-CNN

Pytorch

(tensorinfer框架)modelpostprocessors/libmaskrcnnmindsporepost.so

FaceNet

TensorFlow

无需后处理。

SSD MobileNet v1 FPN

MindSpore

(tensorinfer框架)modelpostprocessors/libSsdMobilenetFpn_MindsporePost.so

OpenPose

TensorFlow

(tensorinfer框架)modelpostprocessors/libopenposepostprocess.so

RetinaNet

TensorFlow

(tensorinfer框架)modelpostprocessors/retinanetpostprocess.so

HigherHRnet

Pytorch

(tensorinfer框架)modelpostprocessors/libhigherhrnetpostprocess.so

YoloV7Detection

Pytorch

PPYOLOEPlusDetection

Paddle

父主题: 模型支持参考

模型后处理配置参数

各个模型所需要的配置参数见下表。

表1 YOLOv3模型后处理配置参数(yolov3_tf_bs1_fp16.cfg)

参数名描述默认值取值区间
CLASS_NUM类别数量。80
BIASES_NUManchor宽高的数量(18表示9个anchor,每个对应一对宽高值)。18[0, 100]
BIASE每两个数组成一个anchor的宽高值,例如10、13表示第一个anchor的宽、高值。10,13,16,30,33,23,30,61,62,45,59,119,116,90,156,198,373,326
SCORE_THRESH目标是否为某种类别物体的阈值,大于阈值即认为是该目标。0.3[0.0, 1.0]
OBJECTNESS_THRESH是否为目标的阈值,大于阈值即认为是目标。0.3[0.0, 1.0]
IOU_THRESH两个框的IOU阈值,超过阈值即认为同一个框。0.45[0.0, 1.0]
YOLO_TYPE表示输出Tensor的个数,3表示有三个feature map输出。3[0, 16]
ANCHOR_DIM每个feature map对应的anchor框数量。3[0, 16]
MODEL_TYPE数据排布格式,0表示NHWC,1表示NCHW,2表示NCHWC。0
FRAMEWORKString类型,可选值有MindSpore,PyTorch,TensorFlow 和Caffe。TensorFlow
SEPARATE_SCORE_THRESH各个类别对应的阈值。CLASS_NUM(数量)个SCORE_THRESH(阈值),以逗号为分隔符。(阈值数量等于CLASS_NUM。)

表2 ResNet-50模型后处理配置参数(resnet50_aipp_tf.cfg)

参数名描述默认值取值区间
CLASS_NUM类别数量。1001[0, 2000]
SOFTMAX布尔型,是否需要在后处理中做softmax计算。false
TOP_K前K个可能性最大的类。1[0, 16]

表3 FasterRcnn模型后处理配置参数(faster_rcnn_uncut.cfg)

参数名

描述

默认值

取值区间

CLASS_NUM

类别数量。

91

[0, 1000]

SCORE_THRESH

目标是否为某种类别物体的阈值,大于阈值即认为是该目标。

0.5

[0.0, 1.0]

IOU_THRESH

两个框的IOU阈值,超过阈值即认为同一个框。

0.45

[0.0, 1.0]

SEPARATE_SCORE_THRESH

各个类别对应的阈值。

CLASS_NUM(数量)个SCORE_THRESH(阈值),以逗号为分隔符。(阈值数量等于CLASS_NUM。)

MODEL_TYPE

可选以下三个值:

0:original

1:nms_cut(模型未做非极大值抑制)

2:FPN

0

FRAMEWORK

可选以下三个值:

  • TensorFlow
  • MindSpore
  • Pytorch

TensorFlow

NMS_FINISHED

modelinfer框架特有的属性值,为布尔值:

  • false:模型本身不存在NMS算子,需后处理进行NMS操作。
  • true:模型本身存在NMS算子,不需后处理进行NMS操作。

true

:“MODEL_TYPE”和“FRAMEWORK”参数配套说明如下:

  • orginal配套TensorFlow框架。
  • nms_cut配套TensorFlow或MindSpore框架。
  • FPN配套Pytorch框架。

表4 ssd_vgg模型后处理配置参数(ssd_vgg16_caffe_release.cfg)

参数名描述默认值
CLASS_NUM类别数量。5
SCORE_THRESH目标阈值。0.4
SEPARATE_SCORE_THRESH各个类别对应的阈值。CLASS_NUM(数量)个SCORE_THRESH(阈值),以逗号为分隔符。(阈值数量等于CLASS_NUM。)

表5 Ssd-Mobilenet-v1-Fpn模型后处理配置参数(ssd_mobilenetv1_fpn.cfg)

参数名描述默认值
CLASS_NUM类别数量。3
SCORE_THRESH目标是否为某种类别物体的阈值,大于阈值即认为是该目标。0.5
SEPARATE_SCORE_THRESH各个类别对应的阈值。CLASS_NUM(数量)个SCORE_THRESH(阈值),以逗号为分隔符。(阈值数量等于CLASS_NUM。)

表6 CRNN模型后处理配置参数(crnn_ssh_2.cfg)

参数名描述默认值取值区间
CLASS_NUM类别数量。0[0, 10000]
OBJECT_NUM可检测的字符数上限。0[0, 1000]
BLANK_INDEX空白符的索引值。0[0, 10000]
WITH_ARGMAX模型backbone是否已经做了argmax。false

表7 modelinfer框架ResNet特征模型后处理配置参数(resnet_feature_caffe_release.cfg)

参数名描述默认值
ACTIVATION_FUNCTION用来激活模型输出数据的激活函数。None

表8 modelinfer框架ResNet多分类属性模型后处理配置参数(resnet_attribute_caffe_release.cfg)

参数名描述默认值
ATTRIBUTE_NUM模型输出属性的数量。5
ACTIVATION_FUNCTION激活函数的类型,目前仅支持sigmoid函数。
ATTRIBUTE_INDEX模型输出属性的索引。请确保索引的数量与ATTRIBUTE_NUM值相等。

表9 modelinfer框架ResNet二分类属性模型后处理配置参数(resnet_attribute_caffe_release.cfg)

参数名描述默认值
CLASS_NUM类别数量。5

表10 modelinfer框架YOLOv4模型后处理配置参数(yolov4_pt_bs1_fp16.cfg)

参数名描述默认值
CLASS_NUM类别数量。80
BIASES_NUManchor宽高的数量(18表示9个anchor,每个对应一对宽高值)18
BIASES每两个数组成一个anchor的宽高值,例如10、13表示第一个anchor的宽、高值。10,13,16,30,33,23,30,61,62,45,59,119,116,90,156,198,373,326
SCORE_THRESH目标是否为某种类别物体的阈值,大于阈值即认为是该目标。0.3
OBJECTNESS_THRESH是否为目标的阈值,大于阈值即认为是目标。0.3
IOU_THRESH两个框的IOU阈值,超过阈值即认为同一个框。0.45
YOLO_TYPE表示输出Tensor的个数,3表示有三个feature map输出。3
ANCHOR_DIM每个feature map对应的anchor框数量。3
MODEL_TYPE数据排布格式,0表示NHWC,1表示NCHW。0
FRAMEWORK_TYPE模型框架,0表示Pytorch,1表示MindSpore。0
SEPARATE_SCORE_THRESH各个类别对应的阈值。CLASS_NUM(数量)个SCORE_THRESH(阈值),以逗号为分隔符。(阈值数量等于CLASS_NUM。)

表11 YOLOv4模型后处理配置参数(yolov4_pt_bs1_fp16.cfg)

参数名描述默认值
CLASS_NUM类别数量。80
BIASES_NUManchor宽高的数量(18表示9个anchor,每个对应一对宽高值)。18
BIASES每两个数组成一个anchor的宽高值,例如10、13表示第一个anchor的宽、高值。10,13,16,30,33,23,30,61,62,45,59,119,116,90,156,198,373,326
SCORE_THRESH目标是否为某种类别物体的阈值,大于阈值即认为是该目标。0.3
OBJECTNESS_THRESH是否为目标的阈值,大于阈值即认为是目标。0.3
IOU_THRESH两个框的IOU阈值,超过阈值即认为同一个框。0.45
YOLO_TYPE表示输出Tensor的个数,3表示有三个feature map输出。3
ANCHOR_DIM每个feature map对应的anchor框数量。3
MODEL_TYPE数据排布格式,0表示NHWC,1表示NCHW,2表示NCHWC。0
FRAMEWORKString类型,可选值有MindSpore,PyTorch,TensorFlow 和Caffe。MindSpore
SEPARATE_SCORE_THRESH各个类别对应的阈值。CLASS_NUM(数量)个SCORE_THRESH(阈值),以逗号为分隔符。(阈值数量等于CLASS_NUM。)
YOLO_VERSION使用的yolo模型版本。(必选)YOLO_VERSION=4

表12 YOLOv5模型后处理配置参数(yolov5_pt_bs1_fp32.cfg)

参数名描述默认值取值空间
CLASS_NUM类别数量。80[0, 1000]
BIASES_NUManchor宽高的数量(18表示9个anchor,每个对应一对宽高值)。18[0, 1000]
BIASE每两个数组成一个anchor的宽高值,例如10、13表示第一个anchor的宽、高值。10,13,16,30,33,23,30,61,62,45,59,119,116,90,156,198,373,326
SCORE_THRESH目标是否为某种类别物体的阈值,大于阈值即认为是该目标。0.3[0.0, 1.0]
OBJECTNESS_THRESH是否为目标的阈值,大于阈值即认为是目标。0.3[0.0, 1.0]
IOU_THRESH两个框的IOU阈值,超过阈值即认为同一个框。0.45[0.0, 1.0]
YOLO_TYPE表示输出Tensor的个数,3表示有三个feature map输出。3[0, 1000]
ANCHOR_DIM每个feature map对应的anchor框数量。3[0, 1000]
MODEL_TYPE数据排布格式,0表示NHWC,1表示NCHW,2表示NCHWC(当前仅支持的PyTorch框架模型)。2[0, 1000]
FRAMEWORKString类型,可选值有MindSpore,PyTorch,TensorFlow 和Caffe。PyTorch
SEPARATE_SCORE_THRESH各个类别对应的阈值。CLASS_NUM(数量)个SCORE_THRESH(阈值),以逗号为分隔符。(阈值数量等于CLASS_NUM。)
YOLO_VERSION使用的yolo模型版本。(必选)YOLO_VERSION=5

表13 modelinfer框架FasterRCNN-Fpn/CascadeRCNN-Fpn模型后处理配置参数(fasterrcnn.cfg或cascadercnn.cfg)

参数名描述默认值
SCORE_THRESH目标是否为某种类别物体的阈值,大于阈值即认为是该目标,实验使用0.3。0.5
FPN_SWITCHFPN开关,这两个模型均要设为true。false

表14 DeepLabV3+(TensorFlow)模型后处理配置参数(deeplabv3.cfg)

参数名描述默认值
CLASS_NUM类别数量。21
FRAMEWORK_TYPE深度学习框架类型选择。TensorFlow框架选择0

表15 CTPN模型后处理配置参数(ctpn_tf.cfg)

参数名描述默认值取值区间
IS_ORIENTED是否进行检测框倾斜。false
BOX_IOU_THRESH检测小框的iou阈值。0.7[0.0, 1.0]
TEXT_IOU_THRESH最终文本框的iou阈值。0.2[0.0, 1.0]
TEXT_PROPOSALS_MIN_SCORE检测小框的最小分数过滤。0.7[0.0, 1.0]
LINE_MIN_SCORE最终文本框的最小分数过滤。0.9[0.0, 1.0]
IS_MINDSPORE是否为MindSpore框架。false

表16 CTPN模型后处理配置参数(ctpn_mindspore.cfg)

参数名描述默认值取值区间
IS_ORIENTED是否进行检测框倾斜。false
BOX_IOU_THRESH检测小框的iou阈值。0.7[0.0, 1.0]
TEXT_IOU_THRESH最终文本框的iou阈值。0.2[0.0, 1.0]
TEXT_PROPOSALS_MIN_SCORE检测小框的最小分数过滤。0.7[0.0, 1.0]
LINE_MIN_SCORE最终文本框的最小分数过滤。0.9[0.0, 1.0]
IS_MINDSPORE是否为MindSpore框架。true

表17 ResNet-18模型后处理配置参数(resnet18_aipp_tf.cfg)

参数名描述默认值
CLASS_NUM类别数量。2

表18 DeepLabv3(MindSpore)模型后处理配置参数(deeplabv3.cfg)

参数名描述默认值
CLASS_NUM类别数量。21
MODEL_TYPE模型推理输出数据的排布格式,0表示NHWC,1表示NCHW。1
FRAMEWORK_TYPE深度学习框架类型选择。MindSpore框架选择2

表19 BERT-Base (Uncased) 模型后处理配置参数(bert.cfg)

参数名描述默认值
CLASS_NUM类别数量。2
CHECK_MODEL检查模型兼容性。false

表20 DeepLabV3+(Pytorch)模型后处理配置参数(deeplabv3.cfg)

参数名描述默认值
CLASS_NUM类别数量。21
CHECK_MODEL检查模型兼容性。true
MODEL_TYPE模型推理输出数据的排布格式,0表示NHWC,1表示NCHW。1
FRAMEWORK_TYPE深度学习框架类型选择。Pytorch框架选择1

表21 U-Net模型后处理配置参数(unet_simple.cfg)

参数名描述默认值
CLASS_NUM类别数量。2
POST_TYPE模型后处理方式,0表示对模型logits输出(NHWC型)做argmax,1表示对模型argmax输出结果(NHW型)透传。1
RESIZE_TYPE对像素图做插值还原的方式,暂只支持两种方式: 0:不做插值还原。 1:最邻近插值还原。1

表22 Mask R-CNN模型后处理配置参数(mask_rcnn_2017.cfg)

参数名描述默认值取值区间
CLASS_NUM推理类别总数,背景不计算在内。80[0, 100]
SCORE_THRESH置信度得分阈值,可根据业务场景调整。0.7[0.0, 1.0]
IOU_THRESHIOU阈值,可根据业务场景调整。0.5[0.0, 1.0]
RPN_MAX_NUMRegion Proposal Network最大个数。1000[0, 1000]
MAX_PER_IMG按置信度排序,每张图预测框的最大值。128[0, 150]
MASK_THREAD_BINARY输入RCNN的掩码阈值。0.5[0.0, 1.0]
MASK_SHAPE_SIZEmask_rcnn中掩码的形状,只支持单参数表示正方形。28[0, 100]
MODEL_TYPE可选以下两个值。 0:MindSpore 1:Pytorch0
SEPARATE_SCORE_THRESH各个类别对应的阈值。CLASS_NUM(数量)个SCORE_THRESH(阈值),以逗号为分隔符。(阈值数量等于CLASS_NUM。)

表23 Ssd_Mobilenet_v1_Fpn_for_MindSpore模型后处理配置参数(ssd_mobilenetv1_fpn.cfg))

参数名描述默认值取值区间
CLASS_NUM类别数量。81[0, 100]
SCORE_THRESH目标是否为某种类别物体的阈值,大于阈值即认为是该目标。0.5[0.0, 1.0]
IOU_THRESH目标重合程度的阈值,大于阈值即认为两个目标框对应同一个目标。0.6[0.0, 1.0]
SEPARATE_SCORE_THRESH各个类别对应的阈值。CLASS_NUM(数量)个SCORE_THRESH(阈值),以逗号为分隔符。(阈值数量等于CLASS_NUM。)

表24 OpenPose模型后处理配置参数(openpose.cfg)

参数名描述默认值取值区间
KEYPOINT_NUM关键点个数,加上背景(背景算一个)。19[0, 100]
FILTER_SIZE高斯滤波核的长(或宽)。25[0, 100]
SIGMA高斯滤波核的方差。3[0, 10]

表25 HigherHRnet模型后处理配置参数(higherhrnet.cfg)

参数名描述默认值取值区间
KEYPOINT_NUM关键点个数。17[0, 20]
SCORE_THRESH关键点阈值。0.1[0.0, 1.0]

表26 Unet++模型后处理配置参数(unet_nested.cfg)

参数名描述默认值取值区间
CLASS_NUM类别数量。3
POST_TYPE模型后处理方式,0表示对模型logits输出(NHWC型)做argmax,1表示对模型argmax输出结果(NHW型)透传。1[0, 16]
RESIZE_TYPE对像素图做插值还原的方式,暂只支持两种方式: 0:不做插值还原。 1:最邻近插值还原。1[0, 16]

表27 RetinaNet模型后处理配置参数(retinanet_tf.cfg)

参数名描述默认值取值区间
CLASS_NUM代表数据集类别数量(默认COCO数据集是80类)。80[0, 100]
MODEL_TYPE代表模型类别,目前仅支持TensorFlow模型。0[0, 100]
SCORE_THRESH代表分数阈值。0.5[0.0, 1.0]

父主题: 模型支持参考

模型结构

YOLOv3

  • 可接受的模型与YOLOv3具有类似的输出张量。一般有三个输出张量(YOLOv3-Tiny只有两个,配置参数“YOLO_TYPE”需设为“2”),分别是8倍,16倍与32倍降采样后的特征层。
  • 每个输出张量的第一维与模型所支持的最大batchsize相同,按照NHWC或NCHW,输出张量形状略有差异,WH分别等于模型输入宽高除以8,16,32,C等于先验框个数anchorDim=3 * (边框坐标4 + 边框置信度1 + 类别数80)
  • 配置参数MODEL_TYPE = 0时,采取NHWC,MODEL_TYPE = 1时,采取NCHW。

图1 NHWC型

图2 NCHW型

FasterRCNN

  • 支持两种结构的模型,原生FasterRCNN模型,以及对模型中NMS(非最大值抑制)进行裁剪后的模型。

  • 配置参数NMS_FINISHED = 0时,采取后者,NMS_FINISHED = 1时采取前者。

  • 原生模型:

    有四个输出张量,分别为目标数,置信度,坐标框和类别ID。

    图3 FasterRCNN原生模型

  • 裁剪NMS后:

    有三个输出张量,分别为目标数,每种类别目标可能的坐标框,每种类别目标框的置信度。

    图4 FasterRCNN裁剪NMS后

SSD MobileNet v1 FPN

SSD MobileNet v1 FPN与FasterRCNN原生模型类似,有四个输出张量,分别为目标数,置信度,坐标框和类别ID。

图5 SSD MobileNet v1 FPN

SSD-VGG16

SSD-VGG16有两个输出张量,第一个输出张量是目标数,第二个输出张量的为目标框的信息[batch, keep_top_k, 8],其中的“8”表示batchID、label(classID)、score(类别概率)、xmin、ymin、xmax、ymax、null。

图6 SSD-VGG16

CRNN

CRNN的输出张量仅一个,第一维是batchsize,第二维即其所能检测的目标数上限,代表其识别到的每个目标的类别ID(包含占位符)。

图7 CRNN

ResNet-50

ResNet-50仅需一个输出张量,第一维是batchsize,第二维与类别数一致,为模型特征层softmax之后的结果。第二个输出张量为概率最大的类别对应的类别ID。

图8 ResNet-50

YOLOv4

YOLOv4与YOLOv3模型类似,有三个输出张量,分别是8倍,16倍与32倍降采样后的特征层。

图9 YOLOv4

YOLOv5

  • YOLOv5有三个输出张量,分别是8倍,16倍与32倍降采样后的特征层。
  • 输出张量按照N(C0)HW(C1)的形式排布,WH分别等于模型输入宽高除以8、16、32,C等于先验框个数anchorDim=3 * (边框坐标4 + 边框置信度1 + 类别数80)

图10 YOLOv5

FasterRCNN-Fpn/CascadeRCNN-Fpn

模型有两个输出张量,分别是5 * 100的预测框和置信度(x0, y0, x1, y1,confidence)(其中坐标为左上和右下的检测框的坐标),1 * 100是每个类别的分值。输入为固定size的RGB图片:3 * 1216 * 1216 。

图11 FasterRCNN-Fpn/CascadeRCNN-Fpn

CTPN(TensorFlow)

CTPN(TensorFlow)模型有两个输出张量,分别是38 * 67 * 40的预测小框,相当于38 * 67 * 4的每个像素点生成10个小框,38 * 67 * 20的预测分数,相当于38 * 67 * 2的每个像素点生成10个预测分数。输入为固定size的RGB图片:3 * 608 * 1072 。

图12 CTPN(TensorFlow)

CTPN(MindSpore)

CTPN(MindSpore)模型有两个输出张量,分别是1000个预测小框,5个维度分别是四个坐标和分数, 另一个1000是每个小框的类别,分别为1、0,表示前景还是后景。输入则是固定size的RGB图片:3 * 576 * 960 。

图13 CTPN(MindSpore)

ResNet-18+

ResNet-18+模型输入是1 * 408 * 64 * 3大小的张量。输出是1 * 2的张量,表示每个样本的分类概率。

图14 ResNet-18+

BERT-Base(Uncased)

BERT-Base(Uncased)模型输入有三个张量,shape都是1 * 128。1表示batchsize,128表示句长。

模型输出有一个张量,1 * 2,表示每个分类类别的概率。

图15 BERT-Base(Uncased)

DeeplabV3+(TensorFlow)

DeeplabV3+(TensorFlow)模型输出有一个张量,是1 * 513 * 513 * 21的NHWC排布方式,物理含义相当于每个像素点的分类概率。原始输入图片是动态shape的RGB图片。模型输入是1 * 513 * 513 * 3的张量。

图16 DeeplabV3+(TensorFlow)

DeepLabV3(MindSpore)

DeepLabV3(MindSpore)模型输入是NHWC排布的,输出以NCHW排布。

图17 DeepLabV3(MindSpore)

DeepLabV3(Pytorch)

DeepLabV3(Pytorch)模型输入以NHWC排布,输出为NCHW排布。

图18 DeepLabV3(Pytorch)

Unet(MindSpore)

Unet(MindSpore)模型输出Tensor为NCHW,其中N为1,C为2,作为mxVision后处理输入。

  1. 在C通道上进行argmax,得到最大概率值的索引值,生成数值为0和1的二维数组。
  2. 判断模型输出Tensor的HW是否与输入原图尺寸一致,若一致则直接输出argmax后的二维数组,否则进行最近邻插值到输入图片尺寸。

图19 Unet(MindSpore)

Mask R-CNN(TensorFlow)

Mask R-CNN(TensorFlow)模型输入张量为4维NHWC(1 * 480 * 640 * 3)排布格式。

  • N为批数量。
  • H为输入图像的高度(480)。
  • W为输入图像的宽度(640)。

Mask R-CNN(TensorFlow)模型输出张量有5个(tensor[0]~tensor[4])。

  • tensor[0]的维度为1维(1),第一维长度为1,代表模型检测出的目标的个数。
  • tensor[1]的维度为2维(1 * 100),第一维长度为1,代表批数量。第二维长度为100,代表前top100个目标的置信度分数。
  • tensor[2]的维度为3维为(1 * 100 * 4), 第一维长度为1,代表批数量。第二维长度为100,代表前top100个目标框。第三维长度为4,代表目标框的四个顶点坐标(x0, y0, x1, y1)。
  • tensor[3]的维度为4维(1 * 100 * 33 * 33),第一维长度为1,代表批数量。第二维长度为100,代表前top100个目标框。第三维和第四维代表一张33 * 33大小的掩码图。
  • tensor[4]的维度为2维(1 * 100), 第一维长度为1,代表批数量。第二维长度为100,代表前top100目标的分类类别。

图20 Mask R-CNN(TensorFlow)

FaceNet(TensorFlow)

FaceNet(TensorFlow)输入张量的形状为 NHWC (1*160*160*3),数据类型为UINT8。

  • N为批数量。
  • H代表输入图像的高度160。
  • W代表输入图像的宽度160。
  • C代表图像的通道数。

输出张量为目标图像对应的特征向量,形状为1 * 512,第一维代表批数量,第二维为特征向量的长度512,数据类型为FLOAT32。

图21 FaceNet(TensorFlow)

SSD MobileNet v1 FPN(MindSpore)

SSD MobileNet v1 FPN(MindSpore)有2个输出张量,分别为坐标框和置信度。

图22 SSD MobileNet v1 FPN(MindSpore)

OpenPose

OpenPose输出张量为[batch, outputHeight, outputWidth, channel],“outputHeight”表示输出图像的高,“outputWidth”表示输出图像的宽,“channel”由两部分组成,前1/3为heat mat,后2/3为paf mat。此模型输出为[1, 54, 46, 57]。

图23 OpenPose

Unet++(MindSpore)

Unet++(MindSpore)模型后处理有一个NCHW的输入Tensor,为模型进行argmax操作之后经过aipp处理后输入给后处理模块;有一个NHW的输出Tensor,由于模型已经做了argmax,C通道已经计算在Tensor HW对应的值。

图24 Unet++(MindSpore)

父主题: 模型支持参考

使用须知

note

须知

本章节开放的类,请遵循同一个类实例在单一线程中使用的原则,请勿将同一个类实例在不同的线程中使用。

API划分

mxVision C++ API目前分为三大部分:面向昇腾硬件底层接口的基础组件层、面向插件开发和流程编排的编程框架层。

接口管理规范

  • 标记有宏 SDK_AVAILABLE_FOR_OUT 的接口,表示对用户开放。
  • 标记有宏 SDK_AVAILABLE_FOR_IN 的接口,表示内部使用,请用户不要使用。
  • 标记有宏 SDK_UNAVAILABLE_FOR_OTHER 的接口,表示为隐藏,用户无法使用。
  • 标记有宏 SDK_DEPRECATED_FOR 的接口,表示在未来版本会弃用,建议使用替代接口。

父主题: API参考(C++)

多进程编写规范

避免父子进程嵌套

对父子进程事先进行职责区分,父进程负责创建子进程,子进程负责调度推理,避免父子进程同时调度推理,造成资源抢占问题。在实际使用中,请在fork()执行后再在返回的父子进程中执行模型推理。程序逻辑示意图如图1所示。

图1 避免父子进程嵌套

采用不同Device执行推理任务

若业务上需要父子进程嵌套,则规范对于Device的指定,避免父子进程同时在同一Device上执行推理,而是将二者的推理指定到不同Device上。程序逻辑如图2图3所示。

图2 父子进程推理指定到不同Device上

图3 新建的子进程可设定同一个device_id

子进程推理在前,父进程推理在后

若业务需要父子进程嵌套,建议先让子进程进行推理, 再调用父进程推理,但此解决方案在调用逻辑上来讲比较难以理解,因此不推荐使用、程序调用逻辑如图4所示。

图4 先进行子进程推理,再调用父进程推理

示例代码

int main(){
// 下文的func()函数代表一个完整的推理任务
// 以下为推荐的多进程调用方式,请在fork()后于返回的父子进程中调用推理
pid_t pid;
int i;
for (i = 0; i < 5; ++i)
&#123;
pid = fork(); //创建子进程
if (pid == -1)
&#123;
perror("fork失败!");
exit(1);
&#125;
if (pid==0)
&#123;
break;
&#125;
&#125;
//返回大于0的进程就是父进程
if(pid>0) //父进程
&#123;
printf("父进程: pid= %d , ppid=%d,子进程: %d \n", getpid(),getppid(),pid);
func(); //在fork()后进行调用推理
sleep(1); //这里延迟父进程程序,等子进程先执行完。
&#125;
else if(pid == 0) //子进程
&#123;
func(); //在fork()后进行调用推理
printf("i的变量是: %d 子进程: pid= %d , ppid=%d \n", i,getpid(),getppid());
&#125;
return 0;
&#125;

父主题: API参考(C++)

头文件列表说明

表1 头文件列表

头文件名称所在目录用途
AscendStream.hMxBase/Asynchron定义AscendStream类,用于异步流程控制。
Constants.hMxBase/Common声明常量EPSILON,EPSILON_DBL。
HiddenAttr.hMxBase/Common声明__attribute__相关的宏,用于标记接口属性,当前主要用于标记废弃接口、使得在编译阶段出现接口已废弃的告警提示。
Version.hMxBase/Common声明返回mxVision版本信息的接口,mxVision版本信息主要包括当前mxVision版本号、主版本号、从版本号、小版本号。
ConfigUtil.hMxBase/ConfigUtil定义ConfigData类和ConfigUtil类用于后处理模块和日志模块。具体来说,ConfigUtil类用于将配置文件读取到ConfigData对象当中,ConfigData对象定义了如添加JSON文件键值对、加载Label文件到std::vector对象、根据索引返回标签名等接口,供后处理模块和日志模块调用。
DataType.hMxBase/CV/Core定义目标检测相关数据结构,具体包含:DetectBox结构体、RoiBox结构体、IOUMethod枚举类、TrackFlag枚举类。
Huangarian.hMxBase/CV/Core/MultipleObjectTracking定义匈牙利算法相关数据结构和接口,用于二分图匹配。
KalmanTracker.hMxBase/CV/Core/MultipleObjectTracking定义卡尔曼滤波相关数据结构和接口,用于跟踪检测目标。
Nms.hMxBase/CV/ObjectDetection/Nms定义非极大值抑制算法相关接口,用于去除冗余目标框。
SimilarityTransform.hMxBase/CV/WarpAffine定义SimilarityTransform类,用于计算相似变换。
WrapAffine.hMxBase/CV/WarpAffine定义WarpAffine类,用于计算仿射变换。
DeviceManager.hMxBase/DeviceManager定义DeviceManager类,其中包括设备初始化、返回设备数量、返回当前设备、设置运行设备等相关接口。
DvppWrapper.hMxBase/DvppWrapper定义了DvppWrapper类,该类会根据芯片的不同调用不同的接口进行实例化,DvppWrapper类封装了图像变换相关的操作。
DvppWrapperDataType.hMxBase/DvppWrapper主要定义了图像处理相关的数据结构以及用于图片参数校验的常量。
DvppWrapperBase.hMxBase/DvppWrapper主要定义了DvppWrapperBase类,该类作为中间层,被其他类继承,同时作为DvppWrapper类的私有成员被使用。
Color.hMxBase/E2eInfer/Color定义了Color结构体。
Dim.hMxBase/E2eInfer/Dim定义了Dim结构体。
GlobalInit.hMxBase/E2eInfer/GlobalInit声明了初始化与去初始化接口。
Image.hMxBase/E2eInfer/Image定义了Image类,该类作为图片的数据结构,包含获取图片属性、将图片转为Tensor对象等接口。
ImageProcessor.hMxBase/E2eInfer/ImageProcessor定义了ImageProcessor类,提供编码、解码、切片、缩放、抠图、贴图等常用接口,ImageProcessor类底层调用了DvppWrapper类中的接口。
Model.hMxBase/E2eInfer/Model定义了Model类,提供高性能推理,返回输入输出Tensor格式等接口。
Point.hMxBase/E2eInfer/Point定义了Point结构体用于表示点。
Rect.hMxBase/E2eInfer/Rect定义了Rect结构体用于表示矩形。
Size.hMxBase/E2eInfer/Size定义了Size结构体用于表示尺寸。
CallBack.hMxBase/E2eInfer/Tensor定义了Tensor类操作回调所需的结构体以及相关接口。
Tensor.hMxBase/E2eInfer/Tensor定义了Tensor类,提供返回Tensor数据类型、返回字节大小、返回Tensor当前设备Id等接口。
TensorDvpp.hMxBase/E2eInfer/Tensor定义了Tensor图像处理方法,提供抠图、缩放、色域转换等图像处理功能。
TensorOperations.hMxBase/E2eInfer/Tensor定义了Tensor运算方法。
TensorFeatures.hMxBase/E2eInfer/Tensor定义了Tensor特征提取类算法。
TensorFusion.hMxBase/E2eInfer/TensorOperation定义了Tensor融合方法,提供背景替换、动效透明度贴图和字幕透明度贴图等功能。
TensorWarping.hMxBase/E2eInfer/TensorOperation定义了Tensor图像变形处理方法,提供旋转、仿射变换等功能。
PerElementOperations.hMxBase/E2eInfer/TensorOperation/MatricesOperation定义了Tensor按元素处理方法,提供计算Tensor加、减、乘、除等功能。
MatrixReductions.hMxBase/E2eInfer/TensorOperation/MatricesOperation定义了Tensor归约方法,提供Tensor归约、求和等功能。
CoreOperationsOnTensors.hMxBase/E2eInfer/TensorOperation/MatricesOperation定义了Tensor核心处理方法,提供Tensor裁剪、扩展、水平堆叠和垂直堆叠等功能。
VideoDecoder.hMxBase/E2eInfer/VideoDecoder定义了VideoDecoder类,提供回调式、非阻塞视频解码接口,VideoDecoder类底层调用了DvppWrapper类中的接口。
VideoEncoder.hMxBase/E2eInfer/VideoEncoder定义了VideoEncoder类,提供回调式、非阻塞视频编码接口,VideoEncoder类底层调用了DvppWrapper类中的接口。
DataType.hMxBase/E2eInfer定义图像处理相关枚举类。
ErrorCode.hMxBase/ErrorCode定义错误码相关的字符串数组。
ErrorCodes.hMxBase/ErrorCode定义错误码相关的枚举类。
ErrorCodeThirdParty.hMxBase/ErrorCode定义第三方错误码相关的枚举类。
Log.hMxBase/Log定义Log类,主要提供了Debug、Info、Warn、Error等接口用于记录不同级别的日志信息。
FastMath.hMxBase/Maths定义了FastMath类,主要提供了Sigmoid、Softmax函数计算的接口。
MathFunction.hMxBase/Maths定义了LineRegressionFit类,主要提供了线性回归函数计算的接口。
NpySort.hMxBase/Maths定义了NpySort,主要提供快排算法接口。
MemoryHelper.hMxBase/MemoryHelper定义了MemoryData类和MemoryHelper类,主要提供内存申请、释放、拷贝等接口。
ModelDataType.hMxBase/ModelInfer定义了模型相关的数据结构。
ModelInferenceProcessor.hMxBase/ModelInfer定义了ModelInferenceProcessor类,主要提供模型推理相关接口,其功能与MxBase/E2eInfer/Model/Model.h相似。
CrnnPostProcessor.hMxBase/ModelPostProcessors/AttributePostProcessor定义了CrnnPostProcessor类,该类继承ModelPostProcessorBase类,该类已标识为弃用。
Resnet50PostProcessor.hMxBase/ModelPostProcessors/ClassPostProcessor定义了Resnet50PostProcessor类,该类继承ModelPostProcessorBase类,该类已标识为弃用。
ModelPostProcessorBase.hMxBase/ModelPostProcessors/ModelPostProcessorBase定义了ModelPostProcessorBase类,该类为MxBase/ModelPostProcessors目录下的基类。
ObjectPostDataType.hMxBase/ModelPostProcessors/ModelPostProcessorBase/定义了目标后处理相关的数据结构。
ObjectPostProcessorBase.hMxBase/ModelPostProcessors/ModelPostProcessorBase定义了ObjectPostProcessorBase类,该类继承ModelPostProcessorBase类,该类已标识为弃用。
FasterRcnnPostProcessor.hMxBase/ModelPostProcessors/ObjectPostProcessors定义了FasterRcnnPostProcessor类,该类继承ModelPostProcessorBase类,该类已标识为弃用。
SsdmobilenetfpnPostProcessor.hMxBase/ModelPostProcessors/ObjectPostProcessors定义了SsdmobilenetfpnPostProcessor类,该类继承ModelPostProcessorBase类,该类已标识为弃用。
SsdvggPostProcessor.hMxBase/ModelPostProcessors/ObjectPostProcessors定义了SsdvggPostProcessor类,该类继承ModelPostProcessorBase类,该类已标识为弃用。
Yolov3PostProcessor.hMxBase/ModelPostProcessors/ObjectPostProcessors定义了Yolov3PostProcessor类,该类继承ModelPostProcessorBase类,该类已标识为弃用。
CtpnPostProcessor.hMxBase/ModelPostProcessors/OcrPostProcessors定义了CtpnPostProcessor类,该类ModelPostProcessorBase类,该类已标识为弃用。
ClassPostProcessBase.hMxBase/PostProcessBases定义了ClassPostProcessBase类,该类继承PostProcessBase类,主要提供Process接口。
ImagePostProcessBase.hMxBase/PostProcessBases定义了ImagePostProcessBase类,该类继承PostProcessBase类,主要提供设置裁剪感兴趣区域的接口。
KeypointPostProcessBase.hMxBase/PostProcessBases定义了KeypointPostProcessBase类,该类继承PostProcessBase类,主要提供关键点检测任务相关的后处理接口。
ObjectPostProcessBase.hMxBase/PostProcessBases定义了ObjectPostProcessBase类,该类继承PostProcessBase类,主要提供目标检测任务相关的后处理接口。
PostProcessBase.hMxBase/PostProcessBases定义PostProcessBase类,该类为其余后处理类的基类。
PostProcessDataType.hMxBase/PostProcessBases定义了目标检测、图片缩放、图片裁剪等任务相关的数据结构。
SemanticSegPostProcessBase.hMxBase/PostProcessBases定义了SemanticSegPostProcessBase类,该类继承PostProcessBase类,主要提供语义分割任务相关的后处理接口。
TextGenerationPostProcessBase.hMxBase/PostProcessBases定义了TextGenerationPostProcessBase类,该类继承PostProcessBase类,主要提供文本生成任务相关的后处理接口。
TextObjectPostProcessBase.hMxBase/PostProcessBases定义了TextObjectPostProcessBase类,该类继承PostProcessBase类,主要提供文本对象任务相关的后处理接口。
OperatorDesc.hMxBase/SingleOp定义了OperatorDesc类,主要用于加载单算子的描述。
OpRunner.hMxBase/SingleOp定义了OpRunner类,主要用于执行单算子。
TensorBase.hMxBase/Tensor/TensorBase定义TensorBase类。
TensorDataType.hMxBase/Tensor/TensorBase定义TensorDataType枚举类,该类对象为TensorBase类的成员变量。
TensorBuffer.hMxBase/Tensor/TensorBuffer定义TensorBuffer类。
TensorContext.hMxBase/Tensor/TensorContext定义TensorContext类。
TensorShape.hMxBase/Tensor/TensorShape定义TensorShape类。

父主题: API参考(C++)

在线提单