利用预训练的VGG提取图像特征(pytorch)

核心部分

a=vgg.features(img)#使用feature获取特征层(卷积层)的特征;输出特征维度为【1,512,4,4】
b=vgg.avgpool(a)#使用vgg定义的池化操作;输出特征维度为【1,512,7,7】
b=torch.flatten(b,1)#将特征变成一维度;输出特征维度为【1,25088】
c=vgg.classifier[:1]#使用分类层的的第一层,当然可以选择数;输出特征维度为【1,4096】

前言

需要pytorch预训练模型VGG19提取图像特征,但VGG19最后一层输出1000维的图像分类结果。我们仅仅需要模型中某一层的输出特征,例如全连接层4096维度的特征。

1、配置预训练模型

import torch
import torchvision.models as models
# 如果联网使用pytorch的预训练模型,
# 将pretrained设置为True, 就会自动下载vgg19的模型放在本地缓存中.
vgg = models.vgg19(pretrained=True)

2、输出网络结构

print(vgg)

可以看到vgg有features,avgpool,classifier三部分组成

3、查看vgg实现细节

在vgg19下右击鼠标,依次选择goto,implementations
利用预训练的VGG提取图像特征(pytorch)_第1张图片
找到forward部分,我们发现vgg总共分四步执行,这样我们可以分步获得图像的特征
利用预训练的VGG提取图像特征(pytorch)_第2张图片
4、自定义获取图像的特征

a=vgg.features(img)#使用feature获取特征层(卷积层)的特征;输出特征维度为【1,512,4,4】
b=vgg.avgpool(a)#使用vgg定义的池化操作;输出特征维度为【1,512,7,7】
b=torch.flatten(b,1)#将特征变成一维度;输出特征维度为【1,25088】
c=vgg.classifier[:1]#使用分类层的的第一层,当然可以选择数;输出特征维度为【1,4096】

你可能感兴趣的:(pytorch,pytorch,深度学习,机器学习)