欢迎访问宙启技术站
智能推送

PyTorch实现VGG:在Python中使用torchvision.models.vgg进行图像分类

发布时间:2023-12-31 14:24:34

VGG是一种卷积神经网络架构,广泛应用于图像分类任务。在PyTorch中,可以使用torchvision.models.vgg模块来快速实现VGG网络。

首先,导入必要的库和模块:

import torch
from torchvision import models, transforms

# 设置输入图片的数据预处理
preprocess = transforms.Compose([
    transforms.Resize(256),
    transforms.CenterCrop(224),
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])

然后,加载预训练的VGG模型(如VGG16):

model = models.vgg16(pretrained=True)
model.eval()  # 设置模型为评估模式,即不进行训练

现在,可以使用VGG模型对图像进行分类。首先,需要将输入图像转换为模型可接受的张量格式,并进行预处理:

image_path = 'example.jpg'  # 输入图像路径
image = Image.open(image_path)
input_tensor = preprocess(image)
input_batch = input_tensor.unsqueeze(0)  # 添加批次维度,因为VGG模型以批次进行预测

接下来,将输入张量传递给VGG模型,并获取预测结果:

with torch.no_grad():
    output = model(input_batch)

# 根据VGG的输出维度(1000个类别),得到对应每个类别的概率
probabilities = torch.nn.functional.softmax(output[0], dim=0)

# 加载ImageNet的类标签
with open('imagenet_labels.txt') as f:
    labels = [line.strip() for line in f.readlines()]

# 打印出前5个预测结果
top5_prob, top5_label = torch.topk(probabilities, 5)
for i in range(5):
    print(f"预测结果:{labels[top5_label[i]]}, 概率:{top5_prob[i].item() * 100}%")

上述代码中,使用了一个名为imagenet_labels.txt的文本文件,其中包含了VGG模型的预测类别。可以根据需要修改此文件,以适应不同的任务。

通过上述代码,您可以使用预训练的VGG模型对输入图像进行分类,并获取预测结果。这是使用torchvision.models.vgg实现图像分类的一个简单示例。