【问题标题】:Convolutional layers convolve the wrong way around(Pytorch)?卷积层以错误的方式卷积(Pytorch)?
【发布时间】:2021-11-09 00:50:40
【问题描述】:

我一直在尝试可视化 VGG-16 网络的输出。但是输出似乎是错误的。如您所知,卷积不会翻译图片的语义部分。就像下图一样,如果头部在图片的顶部,它应该在卷积完成后仍然在图片的顶部。但似乎并非如此。我使用下面的代码来提取中间层。

class vgg16(torch.nn.Module):
    def __init__(self, pretrained=True):
        super(vgg16, self).__init__()
        vgg_pretrained_features = tv.vgg16(pretrained=pretrained).features
        self.layerss = torch.nn.Sequential()
        for x in range(30):
            self.layerss.add_module(str(x), vgg_pretrained_features[x])
        self.layerss.eval()
    def forward(self, x):
      output=[]
      for i,layer in enumerate( self.layerss):
        # print (i)
        x=layer(x)
        output.append(x)
      return output
model=vgg16()
output=model.forward(img)
import matplotlib.pyplot as plt
plt.imshow(output[0][0][0].detach())

这里是原图和VGG网络第一层第一通道的输出:

如你所见,脸一直向下移动,脖子一直向上,图片的整体结构被打破了

【问题讨论】:

    标签: neural-network pytorch conv-neural-network vgg-net


    【解决方案1】:

    不翻译图片的语义片段,

    我有点理解你来自哪里。这可能是真的,但事情是这样的:您的模型并不完全包含卷积层。它还具有最大池化层(即nn.MaxPool2d)。这些层确实会干扰输入图像中最初明显的空间相干性。

    结合相当高的感受野(这种类型的 CNN 就是这种情况),拥有观察到的输出并非不可想象。

    那么理解为什么会这样是另一个我没有答案的问题。您在此处提取的特征应该反映更高级别的信息。这些最终取决于在模型上执行的预训练,即在此推理之前,模型在哪种类型的任务上进行了训练和数据集。

    【讨论】:

    • 非常感谢您花时间回答这个问题。对这个主题有一个全面的了解
    猜你喜欢
    • 2019-01-16
    • 1970-01-01
    • 2020-03-26
    • 2018-11-11
    • 1970-01-01
    • 2021-04-13
    • 2019-07-21
    • 2020-02-09
    • 1970-01-01
    相关资源
    最近更新 更多