【问题标题】:Determining custom Yolov4 output layer shape for 2 classes确定 2 个类的自定义 Yolov4 输出层形状
【发布时间】:2021-09-17 14:04:00
【问题描述】:

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

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

我最终得到了一个具有以下输入和输出层尺寸的模型

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

【问题讨论】:

    标签: ml.net darknet onnx yolov4


    【解决方案1】:

    这很简单:

    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 的坐标 + 置信度。

    结果:

    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. 批量大小可以是所有数据集的大小。

    【讨论】:

    • 快速提示:将代码放在代码示例中以便于阅读
    • 感谢提示,但没有代码,只有矩阵形状)
    • 好吧,你也可以将它们放入代码示例中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-03
    • 2020-12-18
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多