大气手机网站模板网站设计规划信息技术教案
news/
2025/9/22 20:54:46/
文章来源:
大气手机网站模板,网站设计规划信息技术教案,WordPress的login在哪里改,商标设计图案文章目录 0. 前言1. 基本用法1.1 转换为Tensor1.2 图像大小调整1.3 随机裁剪1.4 中心裁剪1.5 随机翻转1.6 随机旋转1.7 填充1.8 组合变换 2. 进阶用法2.1 归一化2.2 色彩空间转换2.3 颜色抖动2.4 随机仿射2.5 透视变换2.6 自定义变换 0. 前言 按照国际惯例#xff0c;首先声明… 文章目录 0. 前言1. 基本用法1.1 转换为Tensor1.2 图像大小调整1.3 随机裁剪1.4 中心裁剪1.5 随机翻转1.6 随机旋转1.7 填充1.8 组合变换 2. 进阶用法2.1 归一化2.2 色彩空间转换2.3 颜色抖动2.4 随机仿射2.5 透视变换2.6 自定义变换 0. 前言 按照国际惯例首先声明本文只是我自己学习的理解虽然参考了他人的宝贵见解及成果但是内容可能存在不准确的地方。如果发现文中错误希望批评指正共同进步。 在PyTorch框架中torchvision.transforms 模块提供了一系列用于图像预处理和数据增强的方法。这个模块主要用于对计算机视觉任务中的图像数据进行标准化、转换和增强操作以满足深度学习模型训练和验证的需求。
本文将基于实例详细介绍torchvision.transforms 模块实例介绍均使用下面400×300图像。 1. 基本用法
1.1 转换为Tensor
ToTensor(): 最基本的、也是必用的方法将PIL Image或者numpy数组转换为Tensor并将数据类型转换为float且范围调整至[0, 1]。
import torchvision
import PILimg PIL.Image.open(car.png)
transform torchvision.transforms.ToTensor()print(transform(img))输出
tensor([[[0.1647, 0.1647, 0.1647, ..., 0.2824, 0.2824, 0.2824],[0.1647, 0.1647, 0.1647, ..., 0.2824, 0.2824, 0.2824],[0.1686, 0.1686, 0.1647, ..., 0.2824, 0.2824, 0.2824],...,[0.1647, 0.1647, 0.1647, ..., 0.2039, 0.2000, 0.1961],[0.1608, 0.1608, 0.1608, ..., 0.2000, 0.1961, 0.1961],[0.1569, 0.1569, 0.1569, ..., 0.1961, 0.1922, 0.1922]],[[0.2078, 0.2078, 0.2078, ..., 0.2627, 0.2627, 0.2627],[0.2078, 0.2078, 0.2078, ..., 0.2627, 0.2627, 0.2627],[0.2078, 0.2078, 0.2078, ..., 0.2627, 0.2627, 0.2627],...,[0.2039, 0.2078, 0.2078, ..., 0.2235, 0.2235, 0.2235],[0.2000, 0.2039, 0.2000, ..., 0.2196, 0.2196, 0.2196],[0.2000, 0.1961, 0.1961, ..., 0.2196, 0.2196, 0.2196]],[[0.2431, 0.2431, 0.2431, ..., 0.2510, 0.2510, 0.2510],[0.2431, 0.2431, 0.2431, ..., 0.2510, 0.2510, 0.2471],[0.2431, 0.2431, 0.2431, ..., 0.2510, 0.2510, 0.2510],...,[0.2392, 0.2392, 0.2392, ..., 0.2392, 0.2392, 0.2392],[0.2353, 0.2353, 0.2353, ..., 0.2353, 0.2392, 0.2392],[0.2314, 0.2314, 0.2314, ..., 0.2353, 0.2353, 0.2353]],[[1.0000, 1.0000, 1.0000, ..., 1.0000, 1.0000, 1.0000],[1.0000, 1.0000, 1.0000, ..., 1.0000, 1.0000, 1.0000],[1.0000, 1.0000, 1.0000, ..., 1.0000, 1.0000, 1.0000],...,[1.0000, 1.0000, 1.0000, ..., 1.0000, 1.0000, 1.0000],[1.0000, 1.0000, 1.0000, ..., 1.0000, 1.0000, 1.0000],[1.0000, 1.0000, 1.0000, ..., 1.0000, 1.0000, 1.0000]]])这里可能有人会疑惑为什么输出的tensor有4个通道这是因为原图格式为RGBAPIL.PngImagePlugin.PngImageFile image modeRGBA size400x300 at 0x25BC96CA950最后一个通道为透明度全为1.0000的那个通道。 1.2 图像大小调整
Resize(size): 调整图像到指定尺寸。
import torchvision
import PILimg PIL.Image.open(car.png)
transform torchvision.transforms.Resize((100,200))transform(img).show()输出 这里需要注意.Resize()输入元组为(height, width)。 1.3 随机裁剪
RandomCrop(size): 随机裁剪图像为给定尺寸。
import torchvision
import PILimg PIL.Image.open(car.png)
transform torchvision.transforms.RandomCrop((200,300))transform(img).show()输出 会有多种随机输出数据增强的主要手段之一。
1.4 中心裁剪
CenterCrop(size): 从图像中心裁剪出指定尺寸的区域。
import torchvision
import PILimg PIL.Image.open(car.png)
transform torchvision.transforms.CenterCrop((200,200)) #也可以简写为transform torchvision.transforms.CenterCrop(200)transform(img).show()输出 不同于随机裁剪中心裁剪只有一个确定的输出。
1.5 随机翻转
RandomHorizontalFlip(p): 水平方向上以概率p进行随机翻转。
import torchvision
import PILimg PIL.Image.open(car.png)
transform torchvision.transforms.RandomHorizontalFlip(p1)transform(img).show()输出
1.6 随机旋转
RandomRotation(degrees): 随机旋转图像。
import torchvision
import PILimg PIL.Image.open(car.png)
transform torchvision.transforms.RandomRotation(90)transform(img).show()输出
1.7 填充
Pad(padding, fill, padding_mode): 在图像周围添加指定宽度的填充。
import torchvision
import PILimg PIL.Image.open(car.png)
transform torchvision.transforms.Pad((100,100,200,200),padding_modeedge)transform(img).show()Pad的参数说明 padding这是一个表示填充大小的元组。它可以是单个整数值在所有边都应用相同的填充或者一个包含四个整数的元组 (padding_left, padding_right, padding_top, padding_bottom)分别表示左、右、上、下的填充大小。fill填充像素的颜色值默认为0即黑色对于灰度图和RGB图分别代表灰度值和RGB三通道颜色。这个值可以是整数如0-255之间的数字、浮点数在归一化到[0, 1]范围的图像中使用或者是元组在RGB图像中每个元素分别代表R、G、B通道的填充颜色。padding_mode定义填充的方式可选选项包括 - constant用给定的常数值填充。 - edge复制图像边缘的像素值进行填充。 - reflect以镜像的方式从图像边缘反射像素来填充。 - replicate与’edge’类似但是不考虑镜像对称简单地重复最接近边界的像素值。 输出
1.8 组合变换
Compose(transforms): 将多个transform操作有序地组合在一起执行。
import torchvision
from torchvision.transforms import CenterCrop, RandomRotation, RandomHorizontalFlip
import PILimg PIL.Image.open(car.png)
transform torchvision.transforms.Compose([CenterCrop(200),RandomRotation(90), RandomHorizontalFlip(p1)])transform(img).show()输出
2. 进阶用法
2.1 归一化
Normalize(mean, std): 将图像按照指定均值和标准差进行归一化。具体的处理方法为normalized_image (original_image - mean) / std。
import PIL
from torchvision.transforms import Compose,Normalize,ToTensorimg PIL.Image.open(car.png)
transform Compose([ToTensor(),Normalize(mean[0.1,0.1,0.1,0],std[0.3,0.3,0.3,1])])
print(transform(img))输出
tensor([[[0.2157, 0.2157, 0.2157, ..., 0.6078, 0.6078, 0.6078],[0.2157, 0.2157, 0.2157, ..., 0.6078, 0.6078, 0.6078],[0.2288, 0.2288, 0.2157, ..., 0.6078, 0.6078, 0.6078],...,[0.2157, 0.2157, 0.2157, ..., 0.3464, 0.3333, 0.3203],[0.2026, 0.2026, 0.2026, ..., 0.3333, 0.3203, 0.3203],[0.1895, 0.1895, 0.1895, ..., 0.3203, 0.3072, 0.3072]],[[0.3595, 0.3595, 0.3595, ..., 0.5425, 0.5425, 0.5425],[0.3595, 0.3595, 0.3595, ..., 0.5425, 0.5425, 0.5425],[0.3595, 0.3595, 0.3595, ..., 0.5425, 0.5425, 0.5425],...,[0.3464, 0.3595, 0.3595, ..., 0.4118, 0.4118, 0.4118],[0.3333, 0.3464, 0.3333, ..., 0.3987, 0.3987, 0.3987],[0.3333, 0.3203, 0.3203, ..., 0.3987, 0.3987, 0.3987]],[[0.4771, 0.4771, 0.4771, ..., 0.5033, 0.5033, 0.5033],[0.4771, 0.4771, 0.4771, ..., 0.5033, 0.5033, 0.4902],[0.4771, 0.4771, 0.4771, ..., 0.5033, 0.5033, 0.5033],...,[0.4641, 0.4641, 0.4641, ..., 0.4641, 0.4641, 0.4641],[0.4510, 0.4510, 0.4510, ..., 0.4510, 0.4641, 0.4641],[0.4379, 0.4379, 0.4379, ..., 0.4510, 0.4510, 0.4510]],[[1.0000, 1.0000, 1.0000, ..., 1.0000, 1.0000, 1.0000],[1.0000, 1.0000, 1.0000, ..., 1.0000, 1.0000, 1.0000],[1.0000, 1.0000, 1.0000, ..., 1.0000, 1.0000, 1.0000],...,[1.0000, 1.0000, 1.0000, ..., 1.0000, 1.0000, 1.0000],[1.0000, 1.0000, 1.0000, ..., 1.0000, 1.0000, 1.0000],[1.0000, 1.0000, 1.0000, ..., 1.0000, 1.0000, 1.0000]]])然后我们再把它重新转换回图像
import PIL
from torchvision.transforms import Compose,Normalize,ToTensor, ToPILImageimg PIL.Image.open(car.png)
transform Compose([ToTensor(),Normalize(mean[0.1,0.1,0.1,0],std[0.3,0.3,0.3,1])])
tensor transform(img)
pil_image ToPILImage()
pil_image(tensor).show()输出图像为
2.2 色彩空间转换
Grayscale(num_output_channels1): 将图像转换为灰度图。
import PIL
import torchvisionimg PIL.Image.open(car.png)
transform torchvision.transforms.Grayscale()
transform(img).show()输出
2.3 颜色抖动
ColorJitter(brightness, contrast, saturation, hue) 用于对图像的颜色属性进行随机抖动具体包括亮度、对比度、饱和度以及色调hue的变化。
import PIL
import torchvisionimg PIL.Image.open(car.png)
transform torchvision.transforms.ColorJitter(brightness0.2, contrast0.2, saturation0.6, hue0.4)
transform(img).show()ColorJitter的参数说明 brightness: 亮度调整因子默认值为0不改变。给定一个浮点数例如0.2会在 [max(1 - brightness, 0), 1 brightness] 范围内随机选择一个比例来调整图像整体的亮度。contrast: 对比度调整因子默认值也为0不改变。给定一个浮点数例如0.2会在相应范围内随机选择一个比例来调整图像的整体对比度。对比度的变化会影响图像中所有像素的相对亮度差异。saturation: 饱和度调整因子同样默认0。例如0.6意味着饱和度将在原图的基础上乘以一个范围在 [1 - saturation, 1 saturation] 内的随机系数。饱和度越高颜色越鲜艳反之则趋向于灰色调。hue: 色调调整因子默认也是0即不改变色调。当设置为非零值如0.4时会随机改变图像的色调色彩的色相角度。这对于模拟光照条件变化或色彩偏移非常有用。 因为ColorJitter的调整参数是根据输入随机选择因此输出也不唯一
2.4 随机仿射
RandomAffine(degrees, translate, scale, shear) 它实现了对输入图像进行随机的仿射变换包括旋转、缩放、剪切和平移等操作。与前面介绍的方法有部分重复不再详细说明。这里仅说明其参数 degrees: 表示图像随机旋转的角度范围可以是单个数值表示固定角度或者一个元组来指定随机选择的角度区间。translate: 指定水平和垂直方向上的随机平移幅度以图像宽度或高度的百分比形式给出。scale: 指定随机缩放的比例范围输入的是一个包含最小和最大缩放因子的元组。shear: 控制图像在两个坐标轴之间的随机剪切角度范围。
2.5 透视变换
RandomPerspective(distortion_scale, p, interpolation, fill) 透视变换能够模拟相机位置、视角或物体距离变化导致的三维空间到二维图像投影的变化从而增加模型对这类几何变换的鲁棒性。
import PIL
import torchvisionimg PIL.Image.open(car.png)
transform torchvision.transforms.RandomPerspective(distortion_scale0.5, p1.0, interpolation2, fill0)
transform(img).show()RandomPerspective参数说明 distortion_scale控制透视变换的强度数值越大图像扭曲程度越强。p概率参数表示该变换应用于每个样本的概率默认值是1.0即总会应用透视变换。interpolation插值方式用于确定如何从原始像素生成新像素。默认是2对应于 PIL.Image.BILINEAR 双线性插值。 fill当图像边界因变换而扩大时填充的颜色默认是0。 透视变换的具体效果会随机产生并且不会改变图像的尺寸大小但可能会造成图像某些部分的拉伸、压缩或者移位。输出为
2.6 自定义变换
transforms.Lambda()允许用户直接传入一个函数作为变换操作。
import torchvisionimg PIL.Image.open(car.png)def image_operation(image):return torchvision.transforms.ToTensor()(image)**0.5 #对像素值进行0.5次方transform torchvision.transforms.Lambda(image_operation)
torchvision.transforms.ToPILImage()(transform(img)).show()输出
以上罗列了torchvision.transforms的各种应用方法实际使用时应根据具体问题的需求灵活选择和组合这些变换方法。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/910343.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!