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

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

目录

VGG模型检测

        一:导入必要的库和模块

         二:主函数部分

                1.调动cpu或者gpu

                2.对图像的预处理

                 3.加载图像

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

                5.读取json文件

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

                7. 对结果进行评估

                8.  打印结果并显示图像

                9.运行主函数

        小结


VGG模型检测

        一:导入必要的库和模块

# 导入所需的库和模块  
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
    # 判断是否有GPU可用,并设置device变量  device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") 
                2.对图像的预处理
    # 定义图像预处理流程  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.加载图像

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

    # 加载图像  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.运用预处理和扩展图像维度
    # 对图像进行预处理  img = data_transform(img)  # 应用预处理流程  # 扩展图像数据的batch维度  img = torch.unsqueeze(img, dim=0)  # 将图像数据扩展为batch维度为1的张量  
                5.读取json文件
    # 读取类别索引字典  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.创建模型和加载模型权重
    # 创建模型  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. 对结果进行评估
    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.  打印结果并显示图像
    # 打印预测结果  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.运行主函数
    # 如果当前脚本被直接运行(而不是被其他脚本导入),则执行main函数  
if __name__ == '__main__':  main()

        小结

        1.记得导入VGG模型

        2.结果进行可视化处理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/812755.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Games101Homework【6】Acceleration structure(Including framework analysis)

Code Analysis&#xff1a; friend&#xff1a; C中友元&#xff08;友元函数和友元类&#xff09;的用法和功能_friend class a<b>-CSDN博客 [C&#xff1a;不如Coding]&#xff08;11&#xff09;&#xff1a;友元函数与友元类_哔哩哔哩_bilibili Here is a simple…

Rust开发笔记 | 系统编程的守护神

在如今这个信息技术不断发展的时代&#xff0c;系统编程语言演进的步伐从未停歇。Rust&#xff0c;作为现代化的系统编程语言&#xff0c;正凭借其出色的性能、安全性和并发处理能力赢得编程界的广泛赞誉。有别于传统的系统编程语言&#xff0c;Rust在保证高性能的同时&#xf…

二维数组---刷题

一维数组不想更了&#xff0c;弄点二维数组&#xff01; 1.对角线 已知一个6*6的矩阵&#xff0c;把矩阵两条对角线上的元素加上10&#xff0c;然后输出这个新矩阵。 思路 题目简单&#xff0c;6*636&#xff0c;可以得知有36个元素。数组就定义成a[7][7]&#xff0c;难点在与…

软考数据库---3.关系数据库

3.1 名词 属性分类 数据库实体属性分类主要包括以下几个方面&#xff1a; 标识属性 (Key Attribute / Identifier): 这些属性是用来唯一识别实体实例的关键属性&#xff0c;也称为主键&#xff08;Primary Key&#xff09;。在数据库表中&#xff0c;每个实体的实例&#xff0…

Linux--gcc和g++的区别

gcc 和 g 都是 GNU 编译器套件&#xff08;GNU Compiler Collection&#xff09;中的一部分&#xff0c;但它们用于编译不同类型的源代码。 gcc: gcc 是 GNU C Compiler 的缩写&#xff0c;主要用于编译 C 语言源代码。它能够将 C 代码编译成可执行程序或者目标代码。 g: g 是…

深入解析实时数仓Doris:介绍、架构剖析、应用场景与数据划分细节

码到三十五 &#xff1a; 个人主页 心中有诗画&#xff0c;指尖舞代码&#xff0c;目光览世界&#xff0c;步履越千山&#xff0c;人间尽值得 ! Doris是一款高性能、开源的实时分析数据仓库&#xff0c;旨在为用户提供毫秒级查询响应、高并发、高可用以及易于扩展的OLAP解决方…

【深度学习实战(5)】使用OPENCV库实现自己的letter_box操作

一、letter_box 深度学习模型输入图片的尺寸为正方形&#xff0c;而数据集中的图片一般为长方形&#xff0c;粗暴的resize会使得图片失真&#xff0c;采用letterbox可以较好的解决这个问题。该方法可以保持图片的长宽比例&#xff0c;剩下的部分采用灰色填充。 二、代码 本例…

c语言->贪吃蛇实战技巧结合EasyX简单实现页面管理(简单实现)

✅作者简介&#xff1a;大家好&#xff0c;我是橘橙黄又青&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;再无B&#xff5e;U&#xff5e;G-CSDN博客 1. 游戏背景 贪吃蛇是久负盛名的游戏&#xff0c;它也和俄罗斯⽅…

AndroidAutomotive模块介绍(二)应用及接口介绍

前言 上一篇文章中从整体角度描述了 Android Automotive 模块。本篇文章将对 Android Automotive 中的 APP 以及 API 部分展开描述。 上一篇&#xff1a;AndroidAutomotive模块介绍&#xff08;一&#xff09;整体介绍 下一篇&#xff1a;AndroidAutomotive模块介绍&#xff0…

python-study-day2

pycharm注释(也可修改) 快捷键ctrl /手敲一个 " # " 这个是单行注释""" """ 左边这个三个引号可以完成多行注释 基础知识 常用的数据类型 def hello(self):print("Hello")print(type(1)) print(type("1"…

图片超分辨率重构实战——SRGAN

数据与代码链接见文末 论文地址:Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network https://arxiv.org/abs/1609.04802v4 1.概述 通常来说,分辨率越低,图像越模糊,分辨率越高,图像越清晰,图像超分辨率重构就是将分辨率低的图像重…

OceanBase V4.2 MySQL模式下,如何通过DBLINK实现跨数据源访问

概述 跨数据源访问可通过 DBLINK&#xff08;以下简称DBLINK&#xff09;实现&#xff0c;从而使得业务代码能够像访问本地数据库一样轻松访问远端数据库。原先&#xff0c;DBLINK主要服务于Oracle模式&#xff0c;但由于OceanBase 的MySQL模式租户同样存在访问远端数据库的需…

基于Springboot+Vue的Java项目-旅游网站系统(附演示视频+源码+LW)

大家好&#xff01;我是程序员一帆&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &am…

K-means和逻辑回归

逻辑回归 一个事件的几率是该事件发生的概率/该事件不发生的概率&#xff1a;P/&#xff08;1-P&#xff09; 对数几率是&#xff1a;log(P/&#xff08;1-P&#xff09;) **考虑对输入x分类的模型&#xff1a;**log(P/&#xff08;1-P&#xff09;)wx 则 Pexp(wx)/(exp(w*x)…

Ubuntu上安装Python3.11-源码编译

1、下载依赖 sudo apt install -y wget build-essential libreadline-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev libffi-dev zlib1g-dev 2、上传文件 &#xff0c;解压并进入 tar -xf Python-3.11.0.tar.xz 3、编译 cd Pyt…

跟TED演讲学英文:The dark side of competition in AI by Liv Boeree

The dark side of competition in AI Link: https://www.ted.com/talks/liv_boeree_the_dark_side_of_competition_in_ai Speaker:Liv Boeree Date: October 2023 文章目录 The dark side of competition in AIIntroductionVocabularyTranscriptSummary后记 Introduction Co…

实验5 流程图和盒图ns图

一、实验目的 通过绘制流程图和盒图&#xff0c;熟练掌握流程图和盒图的基本原理。 能对简单问题进行流程图和盒图的分析&#xff0c;独立地完成流程图和盒图设计。 二、实验项目内容&#xff08;实验题目&#xff09; 1、用Microsoft Visio绘制下列程序的程序流程图。 若…

浏览器工作原理与实践--渲染流水线:CSS如何影响首次加载时的白屏时间

在上一篇文章中我们详细介绍了DOM的生成过程&#xff0c;并结合具体例子分析了JavaScript是如何阻塞DOM生成的。那本文我们就继续深入聊聊渲染流水线中的CSS。因为CSS是页面中非常重要的资源&#xff0c;它决定了页面最终显示出来的效果&#xff0c;并影响着用户对整个网站的第…

软件可靠性设计

1.软件可靠性设计概念 为了从根本上提高软件的可靠性&#xff0c;降低软件后期修改的成本和难度&#xff0c;人们提出了可靠性设计的概念。可靠性设计其实就是在常规的软件设计中&#xff0c;应用各种方法和技术&#xff0c;使程序设计在兼顾用户的功能和性能需求的同时&#x…

数据结构复习指导之绪论(数据结构的基本概念)

文章目录 绪论&#xff1a; 考纲内容 知识框架 复习提示 1.数据结构的基本概念 1.1基本概念和术语 1.数据 2.数据元素 3.数据对象 4.数据类型 5.数据结构 1.2数据结构三要素 1.数据的逻辑结构 2.数据的存储结构 3.数据的运算 绪论&#xff1a; 考纲内容 算法时…