【问题标题】:Pixelwise regression. How to go from Nx1xHxW to Nx3xHxW?逐像素回归。如何从 Nx1xHxW 到 Nx3xHxW?
【发布时间】:2021-04-30 11:59:32
【问题描述】:
我有一个 Nx1xHxW 特征图。我需要添加第二个头,它生成 Nx3xHxW 代表像素回归,每个像素都有一个三元组。
问题是:您将如何从 Nx1xHxW 变为 Nx3xHxW?就引入的参数而言,全连接层的成本太高了。
这就是我正在尝试的 1x1x3 卷积滤波器,在 PyTorch 中将步长 1 定义为 nn.Conv2d(1, 3, (1, 1), stride=1, bias=True) 但结果似乎并不令人鼓舞。欢迎提出任何建议。
最好的
【问题讨论】:
标签:
computer-vision
pytorch
convolution
【解决方案1】:
您可以在前向函数中的任意点使用非参数操作扩展数据的维度,以强制输出为这种形状。例如:
def forward(input):
input = input.repeat(1,3,1,1)
output = self.layers(input)
return output
或:
def forward(input):
intermediate = self.layers(input)
intermediate.repeat(1,3,1,1)
output = self.more_layers(intermediate)
return output
理论上,在给定一维输入的情况下,有一些非线性函数会产生 3d 像素级输出。您可以尝试使用一系列 NN 层来学习这个非线性函数,但是,正如您在上面所指出的,这可能不会产生很好的结果,而且可能很难学好。相反,您可以在某个点简单地扩展输入,以便学习具有 NN 层的 3d 到 3d 逐像素非线性函数。 torch.repeat 和其他类似的操作是可区分的,因此不会导致学习问题。