首页 > 解决方案 > 在提取 vgg19 pytorch 特征时,“顺序”对象没有属性“特征”

问题描述


我正在尝试使用VGG19网络提取图像的特征(输出应该是暗淡的: [1 , 7 , 7 , 512] 每帧
这里是我使用的代码:

    deep_net = models.vgg19(pretrained=True).cuda()
    deep_net = nn.Sequential(*list(deep_net.children())[:-2])
    deep_net.eval()
    save_file_sample_path = '/media/data1/out.npy'
    input_image = torch.zeros(1, 3, 224, 224)
    output_feat = np.zeros(shape=[1, 49, 512])
    with torch.no_grad():
      im = default_loader('/media/data1/images/frame612.jpg')
      im = transform(im)
      input_image[0, :, :] = im
      input_image = input_image.cuda()
      output_feat = deep_net(input_image)
      output_feat = output_feat.features[:-2].view(1, 512, 49).transpose(1, 2)

但我收到以下错误:

AttributeError:“顺序”对象没有属性“特征”

在线:

          output_feat = output_feat.features[:-2].view(1, 512, 49).transpose(1, 2)

知道为什么这不再起作用了吗?以及如何解决?
谢谢!

标签: deep-learningpytorch

解决方案


这是因为你正在重建deep_netnn.Sequential所以它失去了属性features

deep_net = models.vgg19(pretrained=True)
deep_net.features
Sequential(
  (0): Conv2d(3, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
  (1): ReLU(inplace=True)
  ...
  (36): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
)
deep_net = nn.Sequential(*list(deep_net.children())[:-2])
deep_net.features
AttributeError: 'Sequential' object has no attribute 'features'

您现在想要的等价物是:

list(deep_net.children())[0][:-2]

推荐阅读