【发布时间】:2021-09-17 14:04:00
【问题描述】:
我最近训练了一个暗网 yolov4 模型来检测 2 个对象,将其转换为 tensorflow,然后使用以下教程进行 onnx。
如何确定具有未知数字的三个输出层的形状? 我需要它们,以便我可以在 ML.Net 中使用该模型。
【问题讨论】:
标签: ml.net darknet onnx yolov4
我最近训练了一个暗网 yolov4 模型来检测 2 个对象,将其转换为 tensorflow,然后使用以下教程进行 onnx。
如何确定具有未知数字的三个输出层的形状? 我需要它们,以便我可以在 ML.Net 中使用该模型。
【问题讨论】:
标签: ml.net darknet onnx yolov4
这很简单:
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, (class number + coords of bbox + confidence)*anchor number for each size, 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 的坐标 + 置信度。
结果:
【讨论】: