当前位置: 首页 > article >正文

AI开发-三方库-torch-torchvision

1 需求

  • 数据集:torchvision.datasets 
    • torchvision.datasets.MNIST
  • 数据变换:torchvision.transforms 
    • torchvision.transforms.Compose
    • torchvision.transforms.ToTensor
    • torchvision.transforms.Normalize
  • 模型:torchvision.models
  • 可视化工具:torchvision.utils 

2.1 torchvision.datasets

  • torchvision.datasets.MNIST

CLASS torchvision.datasets.MNIST(root: Union[str, Path], train: bool = True, transform: Optional[Callable] = None, target_transform: Optional[Callable] = None, download: bool = False)

  • root
  • train
  • transform
  • download 

MNIST — Torchvision 0.20 documentation


2.2 torchvision.transforms

  • torchvision.transforms
  • torchvision.transforms.Compose
  • torchvision.transforms.ToTensor
  • torchvision.transforms.Normalize

torchvision.transforms

torchvision.transforms — Torchvision 0.11.0 documentation

Transforming and augmenting images — Torchvision 0.20 documentation


CLASS torchvision.transforms.Compose(transforms)

Compose — Torchvision 0.20 documentation


CLASS torchvision.transforms.ToTensor

ToTensor — Torchvision 0.20 documentation


CLASS torchvision.transforms.Normalize(mean, std, inplace=False)

Normalize — Torchvision 0.20 documentation


3 示例

import torchvision.transforms as transforms
from PIL import Image

transforms = transforms.Compose([
    transforms.ToTensor()
])

image = Image.open("./Data/1.png")

tensor_image = transforms(image)

print(tensor_image)

torchvision 是一个基于 PyTorch 的用于计算机视觉任务的库,它提供了诸多便捷的工具、数据集和模型等资源,极大地简化了计算机视觉相关深度学习项目的开发流程。以下是对它的详细介绍:

3.1 数据集(Datasets)

  • torchvision.datasets 模块包含了许多常见的计算机视觉数据集的加载器,比如:
    • MNIST:这是一个手写数字识别数据集,包含了大量的手写数字图像(0 - 9)以及对应的标签,常用于图像分类任务的入门练习和研究。
    • CIFAR - 10:由 10 个不同类别的 60000 张彩色小图像组成,每类有 6000 张图像,图像尺寸较小(32×32 像素),同样广泛应用于图像分类任务的实验和模型评估等。
    • CIFAR - 100:与 CIFAR - 10 类似,但包含 100 个不同的类别,图像数量和尺寸与 CIFAR - 10 相同,可用于更具挑战性的分类任务。
    • ImageNet:一个非常大规模的图像数据集,涵盖了众多的类别(超过 1000 个)和大量的图像,是许多先进的计算机视觉模型训练和评估的重要基础数据集,不过其完整数据集体积庞大,使用时可能需要根据具体需求进行部分下载或采用其预训练模型。

这些数据集加载器使得获取和预处理这些常用数据集变得十分容易,只需简单设置参数(如是否下载、数据集根目录、数据变换等)就可以将数据集加载到内存并转换为适合模型训练的格式(通常是张量格式)。

3.2 数据变换(Transforms)

  • torchvision.transforms 模块提供了一系列用于对图像进行变换的操作,主要用于数据增强和数据预处理,具体如下:
    • 几何变换:包括裁剪(如中心裁剪 CenterCrop、随机裁剪 RandomCrop)、翻转(如水平翻转 RandomHorizontalFlip、垂直翻转 RandomVerticalFlip)、旋转(RandomRotation)等操作,这些操作可以改变图像的几何形状,有助于模型学习到图像不同位置和姿态下的特征,同时也是数据增强的重要手段。
    • 颜色变换:例如通过 ColorJitter 可以对图像的亮度、对比度、饱和度和色调进行随机调整,让模型能够适应不同颜色状态下的图像,提高模型的鲁棒性。
    • 归一化(Normalize):对图像的像素值进行归一化处理,通常是将像素值转换为均值为 0、标准差为 1 的分布,这样可以使数据分布更加符合模型训练的假设,有助于模型更快地收敛,避免梯度消失或梯度爆炸等问题。
    • 类型转换(ToTensor):将图像数据从常见的格式(如 PIL 图像或者 numpy 数组)转换为 torch 中的张量格式,并且在转换过程中会自动将像素值范围从 [0, 255] 转换为 [0, 1](对于单通道图像)或者 [0, 1] 区间内的浮点数张量(对于多通道图像),这是使用 torchvision 数据集和模型的基本前提,因为 torch 中的模型需要以张量作为输入。

可以通过 torchvision.transforms.Compose 将多个变换操作组合在一起,形成一个完整的数据预处理流程。

3.3 模型(Models)

  • torchvision.models 模块提供了许多预训练好的计算机视觉模型,这些模型都是基于 PyTorch 构建的,常见的有:
    • AlexNet:早期具有开创性意义的深度学习模型之一,在图像分类任务上取得了显著的成果,为后续模型的发展奠定了基础。
    • VGG 系列:如 VGG16、VGG19 等,具有较深的网络结构,通过堆叠多个小卷积核的卷积层来实现较好的图像特征提取效果,在图像分类等任务中表现出色。
    • ResNet 系列:包括 ResNet18、ResNet34、ResNet51 等,引入了残差连接的概念,有效解决了随着网络深度增加而出现的梯度消失或梯度爆炸问题,在图像分类、目标检测等多个计算机视觉任务中广泛应用。
    • DenseNet 系列:采用了密集连接的方式,使得网络中的每个层都与前面的所有层直接相连,进一步提高了特征提取的效率和效果,在一些计算机视觉任务中也有很好的表现。

这些预训练模型可以直接用于预测任务,或者在其基础上进行微调(fine - tuning)以适应特定的视觉任务,如目标分类、目标检测等。通过简单设置参数就可以加载这些模型,并利用其已有的知识(即预训练的参数)来加速新任务的学习过程。

3.4 可视化工具(Utils)

  • torchvision.utils 模块提供了一些工具来帮助可视化图像数据和模型输出。例如:
    • make_grid:可以将一批图像整理成一个网格形式的张量,便于在训练过程中查看图像批次的情况,了解数据的分布和变化。
    • save_image:用于保存可视化后的图像,方便记录和分析训练过程中的各种图像相关结果。

这些可视化工具对于理解模型的行为和性能很有帮助,能够让开发者更直观地观察到模型在训练过程中的表现以及数据的处理情况。

总的来说,torchvision 是 PyTorch 生态系统中不可或缺的一部分,为计算机视觉领域的深度学习项目提供了全方位的支持。


4 参考资料


http://www.kler.cn/a/381026.html

相关文章:

  • nodejs入门教程4:nodejs创建第一个应用
  • centos7 kafka高可用集群安装及测试
  • [CUDA] ptx使用笔记
  • Prim算法与Dijstra算法
  • 【解决办法】无法使用右键“通过VSCode打开文件夹”
  • net core Autofac 替换默认的服务容器 DI,微软自动的容器 不支持命名选项的
  • Redis学习:BigKey、缓存双写一致性更新策略和案例
  • 小土堆学习笔记15:搭建小实战和Sequential的使用
  • w~自动驾驶~合集4
  • 【深度学习】DreamClear:提升图片分辨率的模型
  • git cherry-pick 小技巧
  • 【日志】初学顺序表
  • 基于springboot+vue实现的网上预约挂号管理系统 (源码+L文+ppt)4-104
  • 如何应对Oracle SQL语句的数据去重问题,应该考虑哪几个方面?
  • BFS-专题
  • 【Python】Python自习课:第一个python程序
  • GPT原理;ChatGPT 等类似的问答系统工作流程如下;当用户向 ChatGPT 输入一个问题后:举例说明;ChatGPT不是通过索引搜索的传统知识库
  • C++ explicit 关键字
  • 基于Arcpy和MATLAB批量提取指定经纬度点的栅格数据并转换为矩阵格式
  • 计算机系统结构为什么用architecture 而不是structure?
  • redis:set集合命令,内部编码,使用场景
  • 软件测试学习笔记丨Vue常用指令-条件渲染(v-if)
  • 矩阵NFC碰一碰发视频源码开发技术解析,支持OEM
  • ‌Vue 3相比Vue 2的主要改进‌?
  • SQL server 中 CROSS APPLY的使用
  • SpringBoot+Shiro权限管理