为什么数据增强会降低 Mask-RCNN 的性能?
Why is data augmentation degrading performance for Mask-RCNN?
我训练了一个 Mask-RCNN,用于使用和不使用数据增强进行实例分割。扩充只是对相关数据有意义的旋转。我很惊讶增强运行(深蓝色)比非增强运行(浅蓝色)更糟糕。
由于增强图看起来只是向下移动但具有相同的形状,所以我想知道是否还有其他东西在起作用。我使用的批量大小为 2,数据集有 40K 个图像,这会影响事情吗?
不完全是答案。
我用它得到了类似的效果,我认为所有参数以及你如何训练它都很重要。例如,对于更多层(backbone 的 resnet34 与 resnet18),您需要更多信息来训练更大的网络。在这种情况下,扩充很有用。
另一个例子是网络解析。我用默认的 min_size=800 和 max_size=1333 在一定的学习率下训练它,并且分辨率越高,网络 AP 在更高的 LR 上的积极增长的潜力就越大。与此相关的另一个示例是您的 FPN 中有多少个“级别”以及 AnchorGenerator 的网格设置是什么。如果你的增强生成的样本小于 FPN 特定级别上的锚点,那么它们可能会导致更多问题,而不是带来任何好处。如果你的增强生成的样本太小以至于你的对象的细节不可见——同样,这不是很有用,尤其是在小型网络上。
有很多类似的小问题很重要。我有一种情况,旋转使结果更糟,因为旋转了一些角度后,旋转的样本开始看起来像背景的一部分,而基于 maskrcnn 的检测器无法使用它。三次插值修复了一点点,但最终,我想到了限制旋转角度的想法。
只需试验并找到适合您的特定任务的超参数。
我训练了一个 Mask-RCNN,用于使用和不使用数据增强进行实例分割。扩充只是对相关数据有意义的旋转。我很惊讶增强运行(深蓝色)比非增强运行(浅蓝色)更糟糕。
由于增强图看起来只是向下移动但具有相同的形状,所以我想知道是否还有其他东西在起作用。我使用的批量大小为 2,数据集有 40K 个图像,这会影响事情吗?
不完全是答案。
我用它得到了类似的效果,我认为所有参数以及你如何训练它都很重要。例如,对于更多层(backbone 的 resnet34 与 resnet18),您需要更多信息来训练更大的网络。在这种情况下,扩充很有用。
另一个例子是网络解析。我用默认的 min_size=800 和 max_size=1333 在一定的学习率下训练它,并且分辨率越高,网络 AP 在更高的 LR 上的积极增长的潜力就越大。与此相关的另一个示例是您的 FPN 中有多少个“级别”以及 AnchorGenerator 的网格设置是什么。如果你的增强生成的样本小于 FPN 特定级别上的锚点,那么它们可能会导致更多问题,而不是带来任何好处。如果你的增强生成的样本太小以至于你的对象的细节不可见——同样,这不是很有用,尤其是在小型网络上。
有很多类似的小问题很重要。我有一种情况,旋转使结果更糟,因为旋转了一些角度后,旋转的样本开始看起来像背景的一部分,而基于 maskrcnn 的检测器无法使用它。三次插值修复了一点点,但最终,我想到了限制旋转角度的想法。
只需试验并找到适合您的特定任务的超参数。