Python 如何正确设置LPRNet模型的输入图像大小';RuntimeError:除了维度1..';

Python 如何正确设置LPRNet模型的输入图像大小';RuntimeError:除了维度1..';,python,computer-vision,pytorch,Python,Computer Vision,Pytorch,尝试为我自己的数据集调整LPRNet模型。原始模型是为尺寸为24x94像素的中国车牌图像设置的。我的数据集由只有数字的板组成,图像的尺寸为64x128。我尝试将“summary(lprnet,(3,24,94),device=“cpu”)替换为“summary(lprnet,(3,64128),device=“cpu”)时出错。 第一个代码运行良好,第二个代码get'RuntimeError:张量的大小必须匹配,维度1除外。在维度3中得到25和24(有问题的索引是1)”,这是代码的最后一行。 我

尝试为我自己的数据集调整LPRNet模型。原始模型是为尺寸为24x94像素的中国车牌图像设置的。我的数据集由只有数字的板组成,图像的尺寸为64x128。我尝试将“summary(lprnet,(3,24,94),device=“cpu”)替换为“summary(lprnet,(3,64128),device=“cpu”)时出错。 第一个代码运行良好,第二个代码get'RuntimeError:张量的大小必须匹配,维度1除外。在维度3中得到25和24(有问题的索引是1)”,这是代码的最后一行。 我看不出代码中还有什么地方需要更改参数。如果有任何线索我都会感激的! 原件:


您的代码的问题在于,对于(64128)输入大小,全局_上下文中四个张量的形状是不同的。对于形状(24,94),在
LRPNet
中,作者使用不适用于您的图像大小的平均池来确定(4,18)的所有张量的大小。要使其大小相同,您需要在枚举
keep_功能时更改
nn.AvgPool2d
的配置。您可以通过各种方式更新它们。我用以下配置更新了avgpool,它正常工作了:

            if i in [0, 1]:
                f = nn.AvgPool2d(kernel_size=(11, 24), stride=(7, 4))(f)

            elif i == 2:
                f = nn.AvgPool2d(kernel_size=(9, 11), stride=(7, 2))(f)
            elif i == 3:
                f = nn.AvgPool2d(kernel_size=(7, 2), stride=(5, 1))(f)
            f_pow = torch.pow(f, 2)
            f_mean = torch.mean(f_pow)
            f = torch.div(f, f_mean)
            global_context.append(f)```

非常感谢你,拉比巴!这也适用于我,你能更详细地解释一下你是如何找到解决方案的吗?我试图理解(24,94)的输入大小与(4,18)大小的张量之间的关系。你是怎么找到这些张量的(4,18)?首先,我得到了全局上下文张量的形状。在原始代码中,他们通过平均池将所有全局_上下文张量形成(4,18)。然而,在你的例子中,形状更大。要使它们全部(4,18)需要大量的信息压缩。所以我通过平均池将所有形状改为(8,26)。在进行平均池时,为了找出每个操作的内核大小和步幅,我只是遵循了本页中H{out}和W{out}的数学:希望它有帮助。它确实有帮助,非常感谢您的解释。我也用这些公式解决了另一个问题!
            if i in [0, 1]:
                f = nn.AvgPool2d(kernel_size=(11, 24), stride=(7, 4))(f)

            elif i == 2:
                f = nn.AvgPool2d(kernel_size=(9, 11), stride=(7, 2))(f)
            elif i == 3:
                f = nn.AvgPool2d(kernel_size=(7, 2), stride=(5, 1))(f)
            f_pow = torch.pow(f, 2)
            f_mean = torch.mean(f_pow)
            f = torch.div(f, f_mean)
            global_context.append(f)```