问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

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)

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号