PyTorch深度学习:基于transforms的图像数据增强理解与实现
创作时间:
作者:
@小白创作中心
PyTorch深度学习:基于transforms的图像数据增强理解与实现
引用
CSDN
1.
https://blog.csdn.net/tingyunye/article/details/146017191
在深度学习中,数据增强是提高模型泛化能力的重要手段之一。PyTorch的torchvision.transforms模块提供了丰富的图像变换操作,从基本的图像预处理到复杂的增强策略,助力高效完成从数据加载到模型输入的标准化流程。本文将详细介绍transforms模块的主要功能和常用参数,并通过具体代码示例展示如何实现各种图像增强效果。
一、transforms 简介
torchvision.transforms
是 PyTorch 中用于图像预处理和数据增强的核心模块,提供了丰富的图像变换操作,助力高效完成从数据加载到模型输入的标准化流程。
transforms 主要用于将原始图像转换为适合深度学习模型处理的张量格式,并通过标准化、裁剪、翻转等操作提升模型的泛化能力。
使用dir()
函数可以列出模块中所有可用的属性和方法。运行以下代码:
import torchvision.transforms as transforms
print(dir(transforms))
可以发现这是一些与图像增强相关的类和函数,以下是其中一些常用参数的解释:
- AugMix: 一种数据增强方法,将多个增强操作组合在一起应用于图像。
- AutoAugment: 自动图像增强算法,通过搜索算法优化得到最佳的增强策略。
- AutoAugmentPolicy: 自动图像增强策略,定义了一系列增强操作的组合方式。
- CenterCrop: 中心裁剪,将图像从中心位置裁剪为指定尺寸。
- ColorJitter: 颜色抖动,随机调整图像的亮度、对比度、饱和度和色相。
- Compose: 将多个图像增强操作组合在一起使用。
- ConvertImageDtype: 将图像的数据类型转换为指定类型。
- ElasticTransform: 弹性变换,通过扭曲图像来增加变化。
- GaussianBlur: 高斯模糊,通过卷积操作来模糊图像。
- Grayscale: 灰度化,将图像转换为灰度图像。
- InterpolationMode: 图像插值方式,用于调整图像大小时的插值算法选择。
- Lambda: 自定义函数,可以在图像上执行自定义的操作。
- LinearTransformation: 线性变换,通过应用线性变换矩阵来改变图像的亮度、对比度等。
- Normalize: 归一化,将图像像素值归一化到指定范围内。
- PILToTensor: 将PIL图像转换为张量(tensor)。
- Pad: 填充,用指定的颜色在图像周围填充额外的像素。
- RandAugment: 随机图像增强算法,通过随机选择增强操作来增强图像。
- RandomAdjustSharpness: 随机调整图像锐化度。
- RandomAffine: 随机仿射变换,平移、缩放、旋转和剪切图像。
- RandomApply: 随机应用一组图像增强操作。
- RandomAutocontrast: 随机自动对比度调整。
- RandomChoice: 随机选择一种图像增强操作应用于图像。
- RandomCrop: 随机裁剪,从图像中随机裁剪出指定尺寸的区域。
- RandomEqualize: 随机直方图均衡化,增强图像的对比度。
- RandomErasing: 随机擦除,随机擦除图像的一部分区域。
- RandomGrayscale: 随机灰度化,以一定的概率将图像转换为灰度图像。
- RandomHorizontalFlip: 水平翻转,以一定的概率水平翻转图像。
- RandomInvert: 随机反转,以一定的概率反转图像的像素值。
- RandomOrder: 随机顺序,随机改变一组图像增强操作的顺序。
- RandomPerspective: 随机透视变换,通过仿射变换来产生透视效果。
- RandomPosterize: 随机颜色位数减少,降低图像的颜色位数。
- RandomResizedCrop: 随机裁剪并调整大小,随机裁剪出指定尺寸的区域并调整到指定大小。
- RandomRotation: 随机旋转,随机旋转图像的角度。
- RandomSolarize: 随机太阳化,对图像进行随机的太阳化处理。
- RandomVerticalFlip: 垂直翻转,以一定的概率垂直翻转图像。
- Resize: 调整大小,将图像调整到指定尺寸。
- TenCrop: 十次裁剪,将图像裁剪为指定数量的子图像。
- ToPILImage: 将张量(tensor)转换为PIL图像。
- ToTensor: 将PIL图像转换为张量(tensor)。
- TrivialAugmentWide: 广义的平凡数据增强方法。
- functional: 包含一些图像增强的函数。
- transforms: 包含一些常用的图像增强操作。
二、部分图像增强参数应用的示例
图像高度和宽度的调整
import PIL.Image as Image
import torch
from torchvision import transforms
import matplotlib.pyplot as plt
import numpy as np
import warnings
def imshow(img_path, transform):
'''
显示数据增强效果的函数
参数 img_path: 图像的路径
参数 transform: 要应用的数据增强技术
'''
img = Image.open(img_path)
fig, ax = plt.subplots(1, 2, figsize=(15, 4))
ax[0].set_title(f'Original image {img.size}')
ax[0].imshow(img)
img = transform(img)
ax[1].set_title(f'Transformed image {img.size}')
ax[1].imshow(img)
# 图像路径
path = 'fruit.jpg'
# 定义数据增强技术:将图像的高度和宽度调整为我们想要的特定大小
transform = transforms.Resize((224, 224))
imshow(path, transform) # 调用函数并显示结果
图像的裁剪
transform = transforms.CenterCrop((224, 224))# 将要选择的图像的一部分应用于新图像。例如,使用 CenterCrop 来返回一个中心裁剪的图像。
imshow(path, transform)
图像的裁剪和调整大小
transform = transforms.RandomResizedCrop((100, 300)) # 裁剪和调整大小。
imshow(path, transform)
图像的随机旋转
# RandomRotation: 随机旋转,随机旋转图像的角度。
transform = transforms.RandomRotation(45)
imshow(path, transform)
图像的水平或垂直翻转
transform = transforms.RandomHorizontalFlip() # 水平或垂直翻转图像
imshow(path, transform)
图像的指定填充
# 填充包括在图像的所有边缘上按指定的数量填充。如将每条边填充50像素。
transform = transforms.Pad((50,50,50,50))
imshow(path, transform)
图像的高斯模糊模糊处理
'''
它的构造函数接受两个参数,分别为 kernel_size 和 sigma。
kernel_size 表示高斯核的大小,它决定了模糊的程度。通常情况下,kernel_size 应为一个奇数,比如 3、5、7 等,以保证有一个中心点。
sigma 表示高斯核的标准差,用于控制模糊的强度。较大的 sigma 值会产生更强的模糊效果。
'''
transform = transforms.GaussianBlur(7, 3)
imshow(path, transform)
彩色图像转换灰度
transform = transforms.Grayscale(num_output_channels=3)
imshow(path, transform)
图像的亮度调整
# 改变图像的亮度当与原始图像对比时,生成的图像变暗或变亮。
transform = transforms.ColorJitter(brightness=2)
imshow(path, transform)
图像的对比度调整
# 图像最暗和最亮部分之间的区别程度被称为对比度。图像的对比度也可以作为增强进行调整。
transform = transforms.ColorJitter(contrast=2)
imshow(path, transform)
图像的饱和度
transform = transforms.ColorJitter(saturation=20)
imshow(path, transform)
图像的色调
# 色调被定义为图片中颜色的深浅。
transform = transforms.ColorJitter(hue=(-0.2, 0.2))
imshow(path, transform)
热门推荐
立遗嘱让孩子继承是否有效?这些条件需满足
枢轴点是什么?定义和交易策略分析
女性腰痛怎么办有效果的方法
奉化十大必玩景点,去过九处才算真正玩转奉化
交叉验证大揭秘:提升机器学习模型稳定性和性能的5个技巧
家庭教育指导师收入怎么样 工作内容有哪些
一天大便3次和3天一次,哪个更危险?几天排便一次才健康?
多所高校上线DeepSeek大模型:从论文写作到口语练习全覆盖
寻访名著中的大美江苏|一条大运河 半部文学史
崩坏星穹铁道刃六命怎么样
鼻塞喉咙痛时喝什么水?五种饮品助你缓解不适
细致入微,确保安全——车间员工复岗培训的探索与实践
巩膜炎的期初症状有哪些
悄然变化!车企的生存、生死和未来
在MacOS上,U盘/移动硬盘用什么格式好?
男生发型推荐✅根据不同脸型挑选适合自己的发型
医生提醒:柿子和酒不能一起吃,当心胃里长“石头”
尿酸高的人能吃鸭肉吗?营养师的权威解答
准“85后”陈震任贵州省文旅厅副厅长,曾任“村BA”发源地县委书记
法律裁判文书网的创建与实践
财政形势分析之三:主要税收收入
三亚市椰梦长廊
眼眶病常见的临床表现有哪些
国债表现的评估指标有哪些?这些评估指标的可靠性如何?
什么是升值保值?实现升值保值的途径和方法有哪些?
三角洲行动steam和wegame能一起玩吗 不同渠道区别
玩家对游戏不满时,极端对冲是否明智?
逾期贷款利息计算公式是什么
学会这招,在家轻松做出美味口水鸡
蓝莓,你真的会吃吗?专家教你正确打开方式