网站如何做前后端分离,领导不愿意做招聘网站怎么办,网站地图灰色效果的怎么做的,乔拓云在线设计网站一、transforms 运行机制
torchvision是PyTorch的一个扩展库#xff0c;提供了许多计算机视觉相关的工具和功能。下面是关于torchvision中常用模块的介绍#xff1a;
torchvision.transforms#xff1a;提供了一系列常用的图像预处理方法#xff0c;用于对图像进行变换、…一、transforms 运行机制
torchvision是PyTorch的一个扩展库提供了许多计算机视觉相关的工具和功能。下面是关于torchvision中常用模块的介绍
torchvision.transforms提供了一系列常用的图像预处理方法用于对图像进行变换、缩放、裁剪、旋转、翻转等操作。例如ToTensor将PIL图像或numpy数组转换为TensorNormalize对图像进行标准化处理RandomCrop随机裁剪图像等。torchvision.datasets包含了一些常用的数据集的dataset实现方便用户加载和使用。例如MNIST是一个手写数字数据集CIFAR-10是一个包含10个类别的彩色图像数据集ImageNet是一个大规模的图像数据集等。这些数据集可以方便地用于训练和评估模型。torchvision.models提供了一些常用的预训练模型可以用于图像分类、目标检测、图像分割等任务。这些模型包括了经典的网络结构如AlexNet、VGG、ResNet、GoogLeNet等。用户可以通过加载预训练模型快速搭建和使用这些模型。torchvision.utils提供了一些辅助函数和工具用于计算机视觉任务中的常见操作。例如make_grid可以将多张图像拼接成一个网格显示save_image可以将Tensor保存为图像文件draw_bounding_boxes可以在图像上绘制边界框等。 torchvision.transforms
torchvision.transforms模块提供了一系列常用的图像预处理方法用于对图像进行各种变换和操作。以下是一些常用的图像预处理方法
数据中心化Data normalization Normalize(mean, std)对图像进行均值和标准差的归一化处理。 数据标准化Data standardization ToTensor()将PIL图像或numpy数组转换为Tensor并将像素值缩放到[0, 1]范围内。 缩放Resizing Resize(size)将图像的大小调整为指定的尺寸。RandomResizedCrop(size, scale(0.08, 1.0), ratio(0.75, 1.333))随机裁剪并缩放图像到指定的尺寸。 裁剪Cropping CenterCrop(size)从图像的中心裁剪出指定大小的区域。RandomCrop(size)随机裁剪图像的一部分。 旋转Rotation RandomRotation(degrees)随机旋转图像一定角度。 翻转Flipping RandomHorizontalFlip(p0.5)以给定的概率随机水平翻转图像。RandomVerticalFlip(p0.5)以给定的概率随机垂直翻转图像。 填充Padding Pad(padding)在图像周围填充指定数量的像素。 噪声添加Noise adding RandomNoise()向图像中添加随机噪声。 灰度变换Grayscale transformation Grayscale(num_output_channels1)将图像转换为灰度图像。 线性变换Linear transformation RandomAffine(degrees, translateNone, scaleNone, shearNone)随机仿射变换图像。 亮度、饱和度及对比度变换Brightness, saturation, and contrast transformation AdjustBrightness(brightness_factor)调整图像的亮度。AdjustSaturation(saturation_factor)调整图像的饱和度。AdjustContrast(contrast_factor)调整图像的对比度。 这些方法可以根据需要组合使用以实现对图像进行预处理和增强的目的。 transforms.Normalize
功能逐channel的对图像进行标准化
output (input - mean) / std
• mean各通道的均值 • std各通道的标准差 • inplace是否原地操作
transforms.Normalize(mean, std, inplaceFalse)是torchvision.transforms模块中的一个图像预处理方法用于对图像进行数据中心化data normalization的操作。 参数说明
mean用于数据中心化的均值可以是一个标量或一个长度为图像通道数的列表/元组。如果图像是灰度图像只需要提供一个标量如果图像是彩色图像需要提供每个通道的均值。std用于数据中心化的标准差可以是一个标量或一个长度为图像通道数的列表/元组。如果图像是灰度图像只需要提供一个标量如果图像是彩色图像需要提供每个通道的标准差。inplace是否原地操作默认为False。如果设置为True则会直接修改输入的Tensor否则会返回一个新的Tensor。 数据中心化data normalization是一种常用的图像预处理操作通过将图像的每个像素减去均值并除以标准差将图像的像素值归一化到均值为0、标准差为1的范围内。这样做的目的是消除不同图像之间的亮度差异使得图像在训练过程中更容易收敛。 使用示例
import torchvision.transforms as transforms
# 定义均值和标准差
mean [0.5, 0.5, 0.5] # RGB图像的均值
std [0.5, 0.5, 0.5] # RGB图像的标准差
# 定义Normalize变换
normalize transforms.Normalize(meanmean, stdstd)
# 对图像进行数据中心化
normalized_image normalize(image)上述示例中mean和std分别表示RGB图像的均值和标准差。normalize是一个Normalize对象可以将其应用于图像数据实现数据中心化的操作。最终得到的normalized_image是一个经过数据中心化处理后的图像。
代码示例 # file name : transforms_methods_1.py
# author : siuser
# brief : transforms方法(一)import osBASE_DIR os.path.dirname(os.path.abspath(__file__))
import numpy as np
import torch
import random
from torch.utils.data import DataLoader
import torchvision.transforms as transforms
from PIL import Image
from matplotlib import pyplot as pltpath_lenet os.path.abspath(os.path.join(BASE_DIR, .., .., model, lenet.py))
path_tools os.path.abspath(os.path.join(BASE_DIR, .., .., tools, common_tools.py))
assert os.path.exists(path_lenet), {}不存在请将lenet.py文件放到 {}.format(path_lenet, os.path.dirname(path_lenet))
assert os.path.exists(path_tools), {}不存在请将common_tools.py文件放到 {}.format(path_tools,os.path.dirname(path_tools))import sys# 获取当前文件所在目录的绝对路径
hello_pytorch_DIR os.path.abspath(os.path.dirname(__file__) os.path.sep .. os.path.sep ..)# 将hello_pytorch_DIR添加到sys.path中以便可以导入该目录下的模块
sys.path.append(hello_pytorch_DIR)from tools.my_dataset import RMBDataset
from tools.common_tools import set_seed, transform_invertset_seed(1) # 设置随机种子# 参数设置
MAX_EPOCH 10
BATCH_SIZE 1
LR 0.01
log_interval 10
val_interval 1
rmb_label {1: 0, 100: 1}# step 1/5 数据
# 获取数据集划分的路径
split_dir os.path.abspath(os.path.join(.., .., data, rmb_split))# 检查数据集划分路径是否存在如果不存在则抛出异常
if not os.path.exists(split_dir):raise Exception(r数据 {} 不存在, 回到lesson-06\1_split_dataset.py生成数据.format(split_dir))# 训练集路径
train_dir os.path.join(split_dir, train)# 验证集路径
valid_dir os.path.join(split_dir, valid)import torchvision.transforms as transformsnorm_mean [0.485, 0.456, 0.406] # RGB图像的均值
norm_std [0.229, 0.224, 0.225] # RGB图像的标准差# 定义训练集的数据预处理操作
train_transform transforms.Compose([transforms.Resize((224, 224)), # 调整图像大小为224x224# 1 CenterCrop# transforms.CenterCrop(512), # 512,将图像从中心位置裁剪为指定的大小即将图像的宽度和高度都调整为512像素# 2 RandomCrop# transforms.RandomCrop(224, padding16),# transforms.RandomCrop(224, padding(16, 64)),# transforms.RandomCrop(224, padding16, fill(255, 0, 0)),# transforms.RandomCrop(512, pad_if_neededTrue), # pad_if_neededTrue# transforms.RandomCrop(224, padding64, padding_modeedge),# transforms.RandomCrop(224, padding64, padding_modereflect),# transforms.RandomCrop(1024, padding1024, padding_modesymmetric),# 3 RandomResizedCrop# transforms.RandomResizedCrop(size224, scale(0.5, 0.5)),# 4 FiveCrop# transforms.FiveCrop(112),# transforms.Lambda(lambda crops: torch.stack([(transforms.ToTensor()(crop)) for crop in crops])),# 5 TenCrop# transforms.TenCrop(112, vertical_flipFalse),# transforms.Lambda(lambda crops: torch.stack([(transforms.ToTensor()(crop)) for crop in crops])),# 1 Horizontal Flip# transforms.RandomHorizontalFlip(p1),# 2 Vertical Flip# transforms.RandomVerticalFlip(p0.5),# 3 RandomRotation# transforms.RandomRotation(90),# transforms.RandomRotation((90), expandTrue),# transforms.RandomRotation(30, center(0, 0)),# transforms.RandomRotation(30, center(0, 0), expandTrue), # expand only for center rotationtransforms.ToTensor(), # 将图像转换为Tensor类型transforms.Normalize(meannorm_mean, stdnorm_std) # 对图像进行数据中心化
])valid_transform transforms.Compose([transforms.Resize((224, 224)), # 调整图像大小为224x224像素transforms.ToTensor(), # 将图像转换为张量格式将像素值从0-255映射到0-1之间transforms.Normalize(norm_mean, norm_std) # 对图像张量进行标准化处理使用给定的均值和标准差进行归一化
])# 构建MyDataset实例
train_data RMBDataset(data_dirtrain_dir, transformtrain_transform) # 构建训练数据集实例
valid_data RMBDataset(data_dirvalid_dir, transformvalid_transform) # 构建验证数据集实例# 构建DataLoader
train_loader DataLoader(datasettrain_data, batch_sizeBATCH_SIZE, shuffleTrue) # 构建训练数据加载器
valid_loader DataLoader(datasetvalid_data, batch_sizeBATCH_SIZE) # 构建验证数据加载器# step 5/5 训练
for epoch in range(MAX_EPOCH):for i, data in enumerate(train_loader):inputs, labels data # 获取输入数据和标签img_tensor inputs[0, ...] # 获取第一个样本的图像张量img transform_invert(img_tensor, train_transform) # 将图像张量转换为图像plt.imshow(img) # 显示图像plt.show() # 显示图像窗口plt.pause(0.5) # 暂停0.5秒plt.close() # 关闭图像窗口# bs, ncrops, c, h, w inputs.shape# for n in range(ncrops):# img_tensor inputs[0, n, ...] # C H W# img transform_invert(img_tensor, train_transform)# plt.imshow(img)# plt.show()# plt.pause(1)
os.path.abspath(file)
os.path.abspath(__file__)用于获取当前文件的绝对路径。 __file__是Python中的一个内置变量表示当前文件的路径。os.path.abspath()函数可以将相对路径转换为绝对路径。 以下是一个示例代码展示了如何使用os.path.abspath(__file__)获取当前文件的绝对路径
import os
# 获取当前文件的绝对路径
file_path os.path.abspath(__file__)
print(file_path)在这个示例中os.path.abspath(__file__)会返回当前文件的绝对路径并将其赋值给file_path变量。然后通过print()函数打印出file_path的值即当前文件的绝对路径。
assert os.path.exists(path_lenet)
assert是Python中的一个关键字用于在程序中进行断言assertion。断言是一种用于检查程序中的假设条件是否成立的方法。它是一种声明用于确保在程序执行过程中某个特定的条件为真。如果断言条件为真则程序继续执行如果断言条件为假则断言语句会抛出AssertionError异常并中断程序的执行。
os.path.exists()是os.path模块中的一个函数用于检查指定路径的文件或目录是否存在。它接受一个路径作为参数并返回一个布尔值表示指定路径是否存在。如果路径存在则返回True如果路径不存在则返回False。
sys.path.append和os.path.join的区别
sys.path.append()和os.path.join()都是Python中用于处理路径的函数但它们的作用和用法有所不同。
sys.path.append()是用于将路径添加到Python解释器搜索模块的路径列表中。在Python中当你导入一个模块时解释器会按照一定的顺序搜索模块所在的路径。sys.path是一个包含搜索路径的列表sys.path.append()可以将指定的路径添加到这个列表的末尾使得解释器能够搜索到该路径下的模块。
例如如果你有一个自定义的模块放在/path/to/my_module/目录下你可以使用sys.path.append(/path/to/my_module/)将该路径添加到搜索路径中然后就可以通过import my_module来导入该模块了。
os.path.join()是用于将多个路径组合成一个完整的路径。它接受多个路径作为参数并根据当前操作系统的规则将它们连接起来。这个函数会自动处理不同操作系统的路径分隔符确保生成的路径是正确的。
例如假设你有两个路径/path/to/directory/和file.txt你可以使用os.path.join(/path/to/directory/, file.txt)来将它们连接起来生成完整的路径/path/to/directory/file.txt。
总结一下
sys.path.append()用于将路径添加到Python解释器搜索模块的路径列表中以便能够导入该路径下的模块。os.path.join()用于将多个路径组合成一个完整的路径确保生成的路径是正确的。