使用 PyTorch 的计算机视觉简介 (1/6)

news2024/12/27 2:48:12

一、说明

         Computer Vision(CV)是一个研究计算机如何从数字图像和/或视频中获得一定程度的理解的领域。理解这个定义具有相当广泛的含义 - 它可以从能够区分图片上的猫和狗,到更复杂的任务,例如用自然语言描述图像。

二、CV常见的问题

        计算机视觉最常见的问题包括:

  • 图像分类是最简单的任务,当我们需要将图像分类为许多预定义类别之一时,例如,区分照片上的猫和狗,或识别手写数字。
  • 目标检测是一项比较困难的任务,我们需要在图片上找到已知对象并对其进行定位,即返回每个识别对象的边界框。
  • 分割类似于对象检测,但我们需要返回一个精确的像素图,概述每个识别的对象,而不是给出边界框。

        我们将专注于图像分类任务,以及如何使用神经网络来解决它。与任何其他机器学习任务一样,要训练用于对图像进行分类的模型,我们需要一个标记的数据集,即每个类的大量图像。

三、图像作为张量

        计算机视觉适用于图像。您可能知道,图像由像素组成,因此可以将它们视为像素的矩形集合。

        在本单元的第一部分中,我们将处理手写数字识别。我们将使用 MNIST 数据集,该数据集由手写数字的灰度图像组成,28x28 像素。每个图像都可以表示为 28x28 数组,该数组的元素将表示相应像素的强度 - 在 0 到 1 范围内(在这种情况下使用浮点数),或者 0 到 255(整数)。一个名为numpy的流行python库通常用于计算机视觉任务,因为它允许有效地操作多维数组。

        为了处理彩色图像,我们需要一些方法来表示颜色。在大多数情况下,我们用 3 个强度值表示每个像素,对应于红色 (R)、绿色 (G) 和蓝色 (B) 分量。这种颜色编码称为RGB,因此大小为W×H的彩色图像将表示为大小
为3 × H × W的数组。

        使用多维数组来表示图像也有一个优势,因为我们可以使用额外的维度来存储图像序列。
例如,为了表示由 200 帧组成的视频片段,维度为 800 × 600,我们可以使用大小为 200 × 3 × 600 × 800 的张量。

        多维数组也称为张量。通常,当我们谈论一些神经网络框架时,我们指的是张量,例如 PyTorch。PyTorch 和 numpy 数组中的张量之间的主要区别在于,张量支持 GPU 上的并行操作(如果可用)。此外,PyTorch 在张量上操作时提供了额外的功能,例如自动微分。

四、导入包并加载 MNIST 数据集

!pip install -r https://raw.githubusercontent.com/MicrosoftDocs/pytorchfundamentals/main/computer-vision-pytorch/requirements.txt
#Import the packages needed.
import torch
import torchvision
import matplotlib.pyplot as plt
import numpy as np

        PyTorch有许多直接从库中可用的数据集。在这里,我们使用众所周知的手写数字MNIST数据集,可通过PyTorch中的torchvison.datasets.MNIST获得。数据集对象以 Python 想象库 (PIL) 图像的形式返回数据,我们通过传递 transform = ToTensor() 参数将其转换为张量。

        使用自己的笔记本时,您还可以尝试其他内置数据集,特别是FashionMNIST数据集

from torchvision.transforms import ToTensor

data_train = torchvision.datasets.MNIST('./data',
        download=True,train=True,transform=ToTensor())
data_test = torchvision.datasets.MNIST('./data',
        download=True,train=False,transform=ToTensor())

五、可视化数据集

现在我们已经下载了数据集,我们可以可视化数字。

fig,ax = plt.subplots(1,7)
for i in range(7):
    ax[i].imshow(data_train[i][0].view(28,28))
    ax[i].set_title(data_train[i][1])
    ax[i].axis('off')

六、数据集结构

        我们总共有 6000 张训练图像和 1000 张测试图像。拆分数据以进行训练和测试非常重要。我们还想做一些数据探索,以更好地了解我们的数据是什么样子的。

每个样本都是以下结构的元组:

  • 第一个元素是一个数字的实际图像,由形状为 1 × 28 × 28 的张量表示
  • 第二个元素是一个标签,用于指定张量表示哪个数字。它是一个张量,包含从 0 到 9 的数字

data_train是一个训练数据集,我们将使用它来训练我们的模型。data_test是一个较小的测试数据集,我们可以用来验证我们的模型。

print('Training samples:',len(data_train))
print('Test samples:',len(data_test))

print('Tensor size:',data_train[0][0].size())
print('First 10 digits are:', [data_train[i][1] for i in range(10)])
Training samples: 60000
Test samples: 10000
Tensor size: torch.Size([1, 28, 28])
First 10 digits are: [5, 0, 4, 1, 9, 2, 1, 3, 1, 4]

图像的所有像素强度都由介于 0 和 1 之间的浮点值表示:

print('Min intensity value: ',data_train[0][0].min().item())
print('Max intensity value: ',data_train[0][0].max().item())
Min intensity value:  0.0
Max intensity value:  1.0

祝你学习愉快!V笔记本

 

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

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

相关文章

提升网站效率与SEO优化:ZBlog插件集成解决方案

在创建和管理网站的过程中,使用合适的工具和插件可以大幅提升效率,并改善搜索引擎优化(SEO)结果。ZBlog插件是为ZBlogCMS设计的一组工具,它们帮助网站管理员轻松地满足各种需求,从采集内容到发布、推送和SE…

基于dq0变换的三相并联有源电力滤波器模拟模型(Simulink)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

CSS——grid网格布局的基本使用

网格布局在实现页面自适应,大屏可视化中常常使用,在这篇博客里,记录一下网格布局的基本使用。 参考文档:网格布局_菜鸟教程 文章目录 1. 体会grid的自适应性2. grid-template-arr配置网格行列3. 网格单位fr与repeat()简写属性值4…

API(十一) 获取openresty编译信息

一 ngx.config 说明: 不常用,了解即可 ngx.config.subsystem 说明: 用的四层还是七层代理 ngx.config.debug 说明: 返回的是boolean类型, openresty rpm安装一般没有 --with-debug编译选项对比: nginx rpm 安装一般携带 --wi…

【JDK 8-集合框架】5.2 map 和 filter 函数

一、map 函数 1. 上节例子 2. DO 转 DTO 对象 Stage 1:创建数据库映射对象(DO)> User.java Stage 2:前端数据传输对象(DTO)> UserDTO.java Stage 3:DO 转 DTO Stage 4:…

Flutter的启动和渲染流程

一、Flutter的启动流程 1、Flutter启动初始化 在安卓平台上启动App时,会先创建应用进程,然后创建FlutterApplication并执行其onCreate方法。在FlutterApplication的onCreate方法中,会执行Flutter相关的初始化,主要包括Flutter编…

VB过程的递归调用,求4的阶乘

VB过程的递归调用,求4的阶乘 过程的递归调用,求4的阶乘 Private Function fact(n As Integer) As IntegerIf n 1 Thenfact 1Elsefact n * fact(n - 1)End If End Function Private Sub Command1_Click()Dim n As Integern 4Print fact(n) End Sub

【活动回顾】Rust:构建新时代基础设施的首选语言 @Qcon

以「启航 • AIGC 软件工程变革」为主题的 QCon 全球软件开发大会北京站于 9 月 5 日在北京富力万丽酒店圆满落幕!此次大会包含向量数据库、云原生、异构计算、面向 AI 的存储、微服务架构治理、FinOps 等近 30 个精彩专题。Databend Labs 作为深耕云原生数据库领域…

uniapp实现表格冻结

效果图如下: 思路: 1.由于APP项目需要,起初想去插件市场直接找现成的,结果找了很久没找到合适的(有的不支持vue2有的不能都支持APP和小程序) 2.后来,就只能去改uni-table源码了,因…

Vue3中watch用法

在 Vue3 中的组合式 API 中,watch 的作用和 Vue2 中的 watch 作用是一样的,他们都是用来监听响应式状态发生变化的,当响应式状态发生变化时,都会触发一个回调函数。 当需要在数据变化时执行异步或开销较大的操作时,com…

推三返一模式:电商运营的新趋势

商行业在近年来发展迅速,各种平台和产品层出不穷,竞争也越来越激烈。如何在这样的环境中脱颖而出,吸引和留住用户,提高销售和利润,是每一个电商企业家都面临的挑战。有没有一种运营模式,可以让用户主动购买…

解决报错:npm ERR! code 1

我是 npm install --legacy-peer-deps 成功了 解决方案: 升级swiper库:你可以尝试升级你的项目中的swiper库到5.2.0或更高版本,以满足vue-awesome-swiper的需求。你可以使用以下命令来进行升级: npm install swiperlatest 注意…

MPLS VPN跨域A

拓扑设计 拓扑介绍 如图,上海分公司与山东分公司之间为保证业务可以互通,需要使用MPLS VPN技术进行连接。中间R3与R4之间运行IGP,使用IGP传递路由,因为网络需要经过联通与移动两个AS域,所以使用MPLS VPN OptionA方案来…

SDXL prompt 笔记

模型 模型有两个,分别是 stable-diffusion-xl-base-1.0、stable-diffusion-xl-refiner-1.0。 base 模型是用来做文生图,refiner 模型是用来做图生图的。 SDXL 模型之 base、refiner 和 VAE_云水木石的博客-CSDN博客 分辨率 默认是1024*1024&#xf…

SAP MM学习笔记33 - 请求书照合中修改 带勘定设定Category(科目分配)的发票

请求书照合,对照的是 客户或供应商发过来发票。 带勘定设定Category(科目分配)的发票,一般是消耗品。 不过是否是消耗品,对供应商来说,跟他们没关系,供应商只是卖商品给你,怎么用是…

【建造者模式】

🏅我是默,一个在CSDN分享笔记的博主。📚📚 🌟在这里,我要推荐给大家我的专栏《20种Java设计模式》。🎯🎯 🚀无论你是编程小白,还是有一定基础的程序员&#x…

【AIGC】文心一言 - 生成中秋祝福语、诗词、图像、相关代码等

文心一言 - 生成中秋祝福词、诗、画 引言一、中秋祝福语二、中秋诗词三、中秋图像 - 闪亮的月亮四、中秋代码 引言 文心一言是百度推出国产聊天GPT产品,不仅可以与人对话互动,回答问题,协助创作,还能进行数据分析、逻辑判断、绘画…

代码随想录算法训练营day53|1143.最长公共子序列|1035.不相交的线|53. 最大子序和

1143.最长公共子序列 力扣题目链接 给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列的长度。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何…

【链表】反转链表 II-力扣 92 题

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…