---
title: 模型结构
description: "- 可接受的模型与YOLOv3具有类似的输出张量。一般有三个输出张量（YOLOv3-Tiny只有两个，配置参数“YOLO_TYPE”需设为“2”），分别是8倍，16倍与32倍降采样后的特征层。"
url: https://www.hiascend.com/document/detail/zh/Atlas200IDKA2DeveloperKit/latest/Application%20Development%20Guide/msadg/mxvisionug_0143.html
sourcePath: /source/zh/Atlas200IDKA2DeveloperKit/23.0.RC2/Application Development Guide/msadg/mxvisionug_0143.html
indexId: 98be4a5ba8a776ba0d27cb1ca239d245a00d05f55aca6cc9534e1ce0a8314d8f102
---
# 模型结构

#### YOLOv3

- 可接受的模型与YOLOv3具有类似的输出张量。一般有三个输出张量（YOLOv3-Tiny只有两个，配置参数“YOLO_TYPE”需设为“2”），分别是8倍，16倍与32倍降采样后的特征层。
- 每个输出张量的第一维与模型所支持的最大batchsize相同，按照NHWC或NCHW，输出张量形状略有差异，W与H分别等于模型输入宽高除以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)的形式排布，W与H分别等于模型输入宽高除以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）
