【问题标题】:The best method for normalizing dataset of images标准化图像数据集的最佳方法
【发布时间】:2021-10-06 11:37:16
【问题描述】:

我有一个图像数据集,由三个分割组成 - 训练分割、验证分割和测试分割,并且想要标准化数据集以使训练更容易。因此,我想从可用数据中找出 RGB 值的均值和标准差。

我的疑问是 - 我是否应该考虑所有拆分以进行标准化?

我个人的想法是只应使用训练拆分,因为它被假定为我们必须训练模型的唯一数据。因此,该模型提供了来自训练数据分布的输入,留下了可以通过对验证拆分进行评估来挑选的错误。如果我从为训练提供的数据之外的数据向网络提供分布,它会不会向网络提供比它应该学习的更多信息?

执行此操作的任何其他方式也会有所帮助。例如,对 RGB 使用标准值是否更好?

transforms.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225))

(来源:Pytorch Torchvision Transforms

【问题讨论】:

标签: deep-learning pytorch dataset conv-neural-network data-preprocessing


【解决方案1】:

我的疑问是 - 我是否应该考虑所有拆分以进行标准化?

正如你所说,理论上你应该只将训练数据用于任何事情,即使是标准化。

执行此操作的任何其他方式也会有所帮助。例如,对 RGB 使用标准值是否更好?

在实践中,可能是的。实际上,如何规范化数据并不重要,您甚至可以为每个通道选择 mean=0.5, std=0.5。甚至采用 -127/+127 范围,网络应该适应您在训练期间提供的任何输入。

您可能应该记住的是实际使用和应用:如果您处理的是预训练网络,通常会为它们提供 ImageNet 归一化(您建议的那个)。这是常见的做法,因为:

  1. 它们被广泛使用
  2. 它们确实是自然图像“真实”RGB 均值和标准的良好近似值。

TLDR:选择自定义还是“标准”规范化取决于任务本身。在实践中,标准化应该不是很重要,在这两种情况下你都应该没问题。你有一个相当大的集合和时间来计算一些统计数据吗?寻找自定义值。没有太多时间进行统计或数据集很小?使用安全的 ImageNet 方法可能更好。

【讨论】:

    【解决方案2】:

    只应使用训练拆分,因为它被假定为我们必须训练模型的唯一数据

    正确。并且不要忘记使用 training 集的均值和方差来缩放验证集和测试集,而不是它们自己的均值和方差。否则,您将引入域转移。

    对 RGB 使用标准值是否更好

    结果会稍好或稍差,但如果其他一切(学习率、权重初始化)都最佳,则可能不会有太大差异。

    【讨论】:

      猜你喜欢
      • 2012-08-23
      • 2019-05-01
      • 2020-07-31
      • 2017-12-05
      • 2019-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-21
      相关资源
      最近更新 更多