用替代的上采样操作替换 nn.Upsample
Replacing nn.Upsample with alternative upsample operation
我有一个 UNet++(view in private, code for model at the bottom of the article) which I'm trying to reconfigure. I'm getting some artifacts in some images so I'm following this article 建议先进行上采样,然后再进行卷积运算。
我正在用如下所示的顺序操作替换上采样层,但我的模型没有学习。我怀疑这与我配置频道的方式有关,所以我想听听其他意见。
旧的上采样操作:
self.up = nn.Upsample(scale_factor=2, mode='bilinear', align_corners=True)
新操作:
class upConv(nn.Module):
"""
Up sampling/ deconv block by factor of 2
"""
def __init__(self, in_ch, out_ch):
super().__init__()
self.upc = nn.Sequential(
nn.Upsample(scale_factor=2, mode='bilinear', align_corners=True),
nn.Conv2d(in_ch, out_ch*2, 3, stride=1, padding=1),
nn.BatchNorm2d(out_ch*2),
nn.ReLU(inplace=True)
)
def forward(self, x):
out = self.upc(x)
return out
我的问题是这两个操作在我的模型中是否具有相同的 output/function?
Do these two operations have the same output/function within my model?
如果out_ch*2 == in_ch
,则:是的,它们具有相同的输出形状。
如果输入 x
是 BatchNorm+ReLU
操作的输出,那么它们可能更相似。
我有一个 UNet++(view in private, code for model at the bottom of the article) which I'm trying to reconfigure. I'm getting some artifacts in some images so I'm following this article 建议先进行上采样,然后再进行卷积运算。
我正在用如下所示的顺序操作替换上采样层,但我的模型没有学习。我怀疑这与我配置频道的方式有关,所以我想听听其他意见。
旧的上采样操作:
self.up = nn.Upsample(scale_factor=2, mode='bilinear', align_corners=True)
新操作:
class upConv(nn.Module):
"""
Up sampling/ deconv block by factor of 2
"""
def __init__(self, in_ch, out_ch):
super().__init__()
self.upc = nn.Sequential(
nn.Upsample(scale_factor=2, mode='bilinear', align_corners=True),
nn.Conv2d(in_ch, out_ch*2, 3, stride=1, padding=1),
nn.BatchNorm2d(out_ch*2),
nn.ReLU(inplace=True)
)
def forward(self, x):
out = self.upc(x)
return out
我的问题是这两个操作在我的模型中是否具有相同的 output/function?
Do these two operations have the same output/function within my model?
如果out_ch*2 == in_ch
,则:是的,它们具有相同的输出形状。
如果输入 x
是 BatchNorm+ReLU
操作的输出,那么它们可能更相似。