【问题标题】: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 和其他类似的操作是可区分的,因此不会导致学习问题。

【讨论】:

    猜你喜欢
    • 2017-04-16
    • 1970-01-01
    • 2017-03-25
    • 2013-07-01
    • 2013-03-03
    • 2016-10-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-05
    相关资源
    最近更新 更多