【问题标题】:Change the spatial input dimension during training在训练期间改变空间输入维度
【发布时间】:2021-04-15 13:07:28
【问题描述】:

我正在 tensorflow 2.3.0 中训练一个 yolov4(完全卷积)。

我想在训练期间改变网络的空间输入形状,以进一步调整权重到不同的尺度。

这可能吗?

编辑: 我知道暗网的存在,但它受到我使用并在我的 repo 中实现的一些非常具体的增强的影响,这就是为什么我明确要求使用 tensorflow。

更准确地说我想做什么。

我想在Y1xX1xC 训练几个批次,然后将输入大小更改为Y2xX2xC 并再次训练几个批次等等。

【问题讨论】:

    标签: tensorflow


    【解决方案1】:

    这是不可能的。过去人们针对不同规模训练了多个网络,但目前最先进的方法是特征金字塔。

    https://arxiv.org/pdf/1612.03144.pdf

    另一个很好的选择是使用空洞卷积,它可以学习不同距离的像素之间的长距离依赖性。您可以连接它们的输出,然后模型将了解哪个距离对哪种情况很重要

    https://towardsdatascience.com/review-dilated-convolution-semantic-segmentation-9d5a5bd768f5

    【讨论】:

    • YOLOv4 已经使用了特征金字塔,在运行时仍然调整网络的大小与增加图像的比例有些相同,但是以更自然的方式。 VOLOv2(或 v3 真的不记得显示了),正如@Zabir Al Nazi 在 YOLOv4 暗网中所说,这是可能的,我希望在 tf2 中也有同样的效果
    【解决方案2】:

    请务必说明您使用的是哪个 TensorFlow 存储库。你绝对可以做到这一点。这个想法是在单个批次中保持固定的空间输入维度。

    但更好的方法是使用来自 AlexeyAB 的暗网存储库:https://github.com/AlexeyAB/darknet

    刚刚设置,random = 1 https://github.com/AlexeyAB/darknet/blob/master/cfg/yolov4.cfg [第 1149 行]。它将随机训练您的网络具有不同的空间维度。

    您可以做的一件事是,使用 AlexeyAB 存储库开始训练,设置 random=1,然后将训练后的权重文件带到 tensorflow 进行微调。

    【讨论】:

    • 我编辑我的问题,我使用 tensorflow 2.3.0。是的,我会像在暗网中那样做,保持 10-20 批的分辨率,然后调整网络大小。我在训练期间使用了一些非常具体的复制粘贴增强功能,而在 C 中实现它们对我来说太重了,因此我选择了 yolov4 tensorflow 存储库。
    • 您能否详细说明如何在 tf2 中实现这一点?
    猜你喜欢
    • 1970-01-01
    • 2017-08-24
    • 2021-04-25
    • 2022-06-28
    • 1970-01-01
    • 2018-12-08
    • 2021-03-28
    • 2017-07-12
    • 1970-01-01
    相关资源
    最近更新 更多