学习基于pytorch的VGG图像分类 day4

注:本系列博客在于汇总CSDN的精华帖,类似自用笔记,不做学习交流,方便以后的复习回顾,博文中的引用都注明出处,并点赞收藏原博主.

目录

VGG模型检测

一:导入必要的库和模块

二:主函数部分

1.调动cpu或者gpu

2.对图像的预处理

3.加载图像

4.运用预处理和扩展图像维度

5.读取json文件

6.创建模型和加载模型权重

[7. 对结果进行评估](#7. 对结果进行评估)

[8. 打印结果并显示图像](#8. 打印结果并显示图像)

9.运行主函数

小结


VGG模型检测

一:导入必要的库和模块

python 复制代码
# 导入所需的库和模块  
import os  # 导入操作系统相关的库  
import json  # 导入处理json数据的库  
  
import torch  # 导入PyTorch库  
from PIL import Image  # 导入处理图像数据的库  
from torchvision import transforms  # 导入PyTorch的图像预处理库  
import matplotlib.pyplot as plt  # 导入matplotlib库用于图像显示  
  
from model import vgg  # 从model模块中导入vgg模型  
  

二:主函数部分

1.调动cpu或者gpu
python 复制代码
    # 判断是否有GPU可用,并设置device变量  
    device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") 
2.对图像的预处理
python 复制代码
    # 定义图像预处理流程  
    data_transform = transforms.Compose(  
        [transforms.Resize((224, 224)),  # 将图像尺寸调整为224x224  
         transforms.ToTensor(),  # 将图像转换为Tensor格式  
         transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])  # 对图像进行标准化处理  
3.加载图像

这里我是用的是绝对路径,可以改成基于上级文件的路径。

python 复制代码
    # 加载图像  
    img_path = "F:/code/Python/pytorch/VGG_image_classifcation/tulip.jpg"  # 定义图像路径  
    assert os.path.exists(img_path), "file: '{}' does not exist.".format(img_path)  # 断言图像文件存在  
    img = Image.open(img_path)  # 使用PIL库打开图像文件  
    plt.imshow(img)  # 使用matplotlib显示图像  
4.运用预处理和扩展图像维度
python 复制代码
    # 对图像进行预处理  
    img = data_transform(img)  # 应用预处理流程  
    # 扩展图像数据的batch维度  
    img = torch.unsqueeze(img, dim=0)  # 将图像数据扩展为batch维度为1的张量  
5.读取json文件
python 复制代码
    # 读取类别索引字典  
    json_path = './class_indices.json'  # 定义json文件路径  
    assert os.path.exists(json_path), "file: '{}' does not exist.".format(json_path)  # 断言json文件存在  
  
    with open(json_path, "r") as f:  # 打开json文件  
        class_indict = json.load(f)  # 读取json文件内容到class_indict变量中
6.创建模型和加载模型权重
python 复制代码
    # 创建模型  
    model = vgg(model_name="vgg16", num_classes=4).to(device)  # 创建vgg16模型,并指定输出类别数为4,然后移动到指定的设备上  
    # 加载模型权重  
    weights_path = "./vgg16Net.pth"  # 定义模型权重文件路径  
    assert os.path.exists(weights_path), "file: '{}' does not exist.".format(weights_path)  # 断言权重文件存在  
    model.load_state_dict(torch.load(weights_path, map_location=device))  # 加载模型权重
7. 对结果进行评估
python 复制代码
    model.eval()  # 将模型设置为评估模式  
    with torch.no_grad():  # 不计算梯度,节省计算资源  
        # 预测类别  
        output = torch.squeeze(model(img.to(device))).cpu()  # 对图像进行预测,并去除batch维度,然后将结果移动到CPU上  
        predict = torch.softmax(output, dim=0)  # 对预测结果进行softmax计算,得到每个类别的概率  
        predict_cla = torch.argmax(predict).numpy()  # 找到概率最大的类别的索引
8. 打印结果并显示图像
python 复制代码
    # 打印预测结果  
    print_res = "class: {}   prob: {:.3}".format(class_indict[str(predict_cla)],  
                                                 predict[predict_cla].numpy())  # 格式化预测结果  
    plt.title(print_res)  # 设置图像标题为预测结果  
    for i in range(len(predict)):  # 遍历每个类别的概率  
        print("class: {:10}   prob: {:.3}".format(class_indict[str(i)],  
                                                  predict[i].numpy()))  # 打印每个类别的名称和概率  
    plt.show()  # 显示图像  
9.运行主函数
python 复制代码
    # 如果当前脚本被直接运行(而不是被其他脚本导入),则执行main函数  
if __name__ == '__main__':  
    main()

小结

1.记得导入VGG模型

2.结果进行可视化处理

相关推荐
小杨小杨、努力变强!6 小时前
python学习笔记
笔记·学习
Star(up up up)11 小时前
Redis Windows 安装教程:使用Windows 的 Redis 压缩包
redis·笔记·学习·程序人生·云原生·学习方法·改行学it
乌暮14 小时前
Spring AOP 与 Spring 事务:用大白话彻底理解原理与实践
java·数据库·spring boot·后端·sql·学习·spring
蒸蒸yyyyzwd18 小时前
从邓明学习的后端笔记
笔记·学习
机器学习之心19 小时前
基于变量相关图与残差学习的 GCN 多变量回归方法——混凝土 28 天抗压强度预测
学习·回归·gcn
Rabitebla1 天前
【Linux】进程控制(十二) 自定义 Shell(二):内建命令与进程工作目录管理
linux·c++·笔记·学习·bash
Gary移动存储固件1 天前
eMMC5.1协议中文学习讲解(6.6.17~6.6.22.4.6)
学习·ufs·emmc·nand·存储固件
一个天蝎座 白勺 程序猿1 天前
别让收藏夹替你学习:我搭AI知识体系的完整方法,脚本直接拿去用
人工智能·学习·ai·ai学习
楚山之石1 天前
【Nat Biomed Eng】Connectome 2.0 超高梯度扫描仪:500 mT/m 与 600 T/m/s 把活体人脑微观结构分辨推进到亚微米级
图像处理·学习·数据分析·mri
坤坤子吖1 天前
Linux网络编程:TCP 粘包与半包问题,如何正确处理 TCP 流式数据?
linux·服务器·网络·笔记·网络协议·学习