我最近训练了一个暗网 yolov4 模型来检测 2 个对象,将其转换为 tensorflow,然后使用以下教程进行 onnx。
如何确定具有未知数字的三个输出层的形状?我需要它们,以便可以在 ML.Net 中使用该模型。
我最近训练了一个暗网 yolov4 模型来检测 2 个对象,将其转换为 tensorflow,然后使用以下教程进行 onnx。
如何确定具有未知数字的三个输出层的形状?我需要它们,以便可以在 ML.Net 中使用该模型。
这很简单:
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 的坐标+ 置信度的输入。
作为结果: