首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >深度学习中的平均池化层和梯度伪影

深度学习中的平均池化层和梯度伪影
EN

Stack Overflow用户
提问于 2021-03-20 18:43:24
回答 1查看 188关注 0票数 1

我知道在卷积层中,核的大小需要是步幅的倍数,否则它会在梯度计算中产生伪影,比如棋盘问题。现在,它在池化层中也是这样工作的吗?我在某处读到,最大池化也会导致类似的问题。以鉴别器中的这一行为例:

代码语言:javascript
运行
复制
  self.downsample = nn.AvgPool2d(3, stride=2, padding=1, count_include_pad=False)

我有一个模型(MUNIT),这是它生成的图像:

它看起来像棋盘问题,或者至少是梯度问题,但我检查了我的卷积层,没有发现上面描述的错误。它们的大小均为4,步幅为2,或者步幅为1,大小不均匀。

EN

Stack Overflow用户

发布于 2021-03-20 19:25:33

老实说,这看起来不像是棋盘文物。我也不认为鉴别器会是问题,它通常是关于图像恢复(生成器或解码器)。

快速查看一下MUNIT,他们在Decoder中使用的是带有最近邻上采样的torch.nn.Upsample (精确的代码行here)。

您可以尝试在torch.nn.PixelShuffle后面使用torch.nn.Conv2d,如下所示:

代码语言:javascript
运行
复制
import torch

in_channels = 32
upscale_factor = 2
out_channels = 16

upsampling = torch.nn.Sequential(
    torch.nn.Conv2d(
        in_channels,
        out_channels * upscale_factor * upscale_factor,
        kernel_size=3,
        padding=1,
    ),
    torch.nn.PixelShuffle(upscale_factor),
)

image = torch.randn(1, 32, 16, 16)

upsampling(image).shape  # [1, 16, 32, 32]

这允许神经网络学习如何对图像进行上采样,而不是仅仅使用网络无法控制的torch.nn.Upsample (使用下面的技巧,它也应该没有棋盘伪影)。

此外,Conv2d的ICNR初始化也应该有所帮助(可能实现herehere)。此初始化方案初始化权重,使其在开始时的行为类似于最近邻上采样(研究论文here)。

票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66720639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档