【问题标题】:RuntimeError: Given groups=1, weight of size [64, 3, 3, 3], expected input[4, 5000, 5000, 3] to have 3 channels, but got 5000 channels insteadRuntimeError: 给定组=1,大小为 [64, 3, 3, 3] 的权重,预期输入 [4, 5000, 5000, 3] 有 3 个通道,但有 5000 个通道
【发布时间】:2019-11-09 08:35:02
【问题描述】:

所以,我有一个 U-Net 模型,我将 5000x5000x3 的图像输入到模型中,我得到了上面的错误。

这是我的模型。

import torch
import torch.nn as nn


def double_conv(in_channels, out_channels):
    return nn.Sequential(
        nn.Conv2d(in_channels, out_channels, 3, padding=1),
        nn.ReLU(inplace=True),
        nn.Conv2d(out_channels, out_channels, 3, padding=1),
        nn.ReLU(inplace=True)
    )


class UNeT(nn.Module):
    def __init__(self, n_class):
        super().__init__()
        self.dconv_down1 = double_conv(3, 64)
        self.dconv_down2 = double_conv(64, 128)
        self.dconv_down3 = double_conv(128, 256)
        self.dconv_down4 = double_conv(256, 512)
        self.maxpool = nn.MaxPool2d(2)
        self.upsample = nn.Upsample(scale_factor=2, mode='bilinear',
                                    align_corners=True)
        self.dconv_up3 = double_conv(256 + 512, 256)
        self.dconv_up2 = double_conv(128 + 256, 128)
        self.dconv_up1 = double_conv(128 + 64, 64)
        self.conv_last = nn.Conv2d(64, n_class, 1)

    def forward(self, x):
        conv1 = self.dconv_down1(x)
        x = self.maxpool(conv1)
        conv2 = self.dconv_down2(x)
        x = self.maxpool(conv2)
        conv3 = self.dconv_down3(x)
        x = self.maxpool(conv3)
        x = self.dconv_down4(x)
        x = self.upsample(x)
        x = torch.cat([x, conv3], dim=1)
        x = self.dconv_up3(x)
        x = self.upsample(x)
        x = torch.cat([x, conv2], dim=1)
        x = self.dconv_up2(x)
        x = self.upsample(x)
        x = torch.cat([x, conv1], dim=1)
        x = self.dconv_up1(x)
        out = self.conv_last(x)
        return out


我尝试做 model(inputs.unsqueeze_(0)) 但我得到了一个不同的错误。

【问题讨论】:

    标签: python image-processing deep-learning computer-vision pytorch


    【解决方案1】:

    pytorch 中的维度顺序与您期望的不同。您的输入张量具有shape4x5000x5000x3,您将其解释为一批大小4,图像为5000x5000 像素,每个像素有3 个通道。也就是说,您的尺寸是batch-height-width-channel

    但是,pytorch 预计张量维度的顺序不同:batch-channel-height-width。也就是说,channel 维度应该在宽度和高度空间维度之前。

    您需要permute 输入张量的维度来解决您的问题:

    model(inputs.permute(0, 3, 1, 2))
    

    更多信息,请参阅nn.Conv2d的文档。

    【讨论】:

      猜你喜欢
      • 2021-03-25
      • 1970-01-01
      • 2021-03-11
      • 2021-04-19
      • 2019-04-24
      • 1970-01-01
      • 1970-01-01
      • 2022-12-22
      • 1970-01-01
      相关资源
      最近更新 更多