【问题标题】:How to load first 2 channel of a 3 channel image in pytorch?如何在pytorch中加载3通道图像的前2通道?
【发布时间】:2022-01-02 14:55:39
【问题描述】:

我有一个包含 3 个通道图像的数据集,但我想使用每个图像的前 2 个通道作为 Resnet34 的输入。无论如何我可以加载每个图像的前 2 个通道吗?

【问题讨论】:

  • 请提供足够的代码,以便其他人更好地理解或重现问题。

标签: python pytorch computer-vision conv-neural-network resnet


【解决方案1】:

你有两个问题:

  1. 磁盘上的图像有 3 个通道,您需要在使用 Dataset 加载它们时删除一个。
  2. 您的网络 (ResNet-18) 需要 3 个通道的输入 - 现在它将只有两个。 (这可能会触发类似this one 的错误)。

您可以通过保留第三个通道但将其设置为零来解决这两个问题。 这可以使用自定义扩充轻松实现:

class ZeroThirdChannel(object):
  def __init__(self):
    pass
  def __call__(self, x):
    x[2, ...] = 0  # set the third channel to zero
    return x

将此扩充添加到您的Datasettransforms 之后 ToTensor()

【讨论】:

  • 这需要class关键字吗?
  • 我是说你给出的代码应该定义一个 python 类。它必须使用class 关键字引入才能成为有效的python。那里。我自己就是这么做的。一开始就应该这样做。
  • @ChristophRackwitz 感谢您的更正。我误解了你的第一条评论。
  • 感谢您的回答。我还有一个问题,将第三个通道设置为零是否与将双通道张量发送到 resnet 获得相同的分类精度?
  • @BEJ 你打算如何将两通道图像传递给预训练的三通道 ResNet?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-15
  • 2017-08-27
相关资源
最近更新 更多