0

我最近训练了一个暗网 yolov4 模型来检测 2 个对象,将其转换为 tensorflow,然后使用以下教程进行 onnx。

https://github.com/onnx/models/blob/master/vision/object_detection_segmentation/yolov4/dependencies/Conversion.ipynb

我最终得到了一个具有以下输入和输出层尺寸的模型 在此处输入图像描述

如何确定具有未知数字的三个输出层的形状?我需要它们,以便可以在 ML.Net 中使用该模型。

4

1 回答 1

0

这很简单:

unk__2241 是批量大小,所以暂时未知。

在 CSPDarknet53 之后,您的输出形状为 (unk_2241,13,13,512),因为缩减因子为 32。然后在 SPP 之后,您有 (unk_2241, 13, 13, 2048),内核大小 = [1,3,5,13]。

您有 3 个头用于检测图像上的大、中和小物体,每个物体大小有 3 个锚点。在这 3 个头中,yolo 使用了 3 个来自修改后的 PANet 的特征图,这些特征图是 (unk_2241,52,52,256),(unk_2241,26,26,512),(unk_2241,13,13,1024),因为缩减因子是 8, 16、32。

然后在每个 yolo 层之前,有一个卷积用于制作最终的特征图,其形状为 (unk_2241, 52, 52, 21), (unk_2241, 26, 26, 21) , (unk_2241, 13, 13, 21) 和内核形状为 (256, (类号 + bbox 的坐标 + 置信度)*每个尺寸的锚点数, 1, 1) ->(256, 21, 1, 1), (512, 21, 1, 1), (1024 , 21, 1, 1)。

在 yolo head 中,您将拥有 (unk_2241, 52, 52, 3, 7), (unk_2241, 26, 26, 3, 7), (unk_2241, 13, 13, 3, 7),其中 yolo head 正在划分最后一个轴按锚点数量和类数量+ bbox 的坐标+ 置信度的输入。

作为结果:

  1. unk__2241 = unk__2242 = unk__2245 = unk__2248 -> 它们都是批量大小。
  2. YOLO 头部输出形状:(unk_2242, 52, 52, 3, 7), (unk_2245, 26, 26, 3, 7), (unk_2248, 13, 13, 3, 7)。
  3. 批量大小可以是所有数据集的大小。
于 2021-07-09T17:47:16.100 回答