昇思25天学习打卡营第6天|数据变换 Transforms

学习目标:熟练掌握数据变换操作

  • 熟悉mindspore.dataset.transforms接口
  • 实践掌握常用变换

昇思大模型平台学习心得记录
在这里插入图片描述


一、关于mindspore.dataset.transforms

1.1 变换

mindspore.dataset.transforms.Compose将多个数据增强操作组合使用。
mindspore.dataset.transforms.Concatenate在输入数据的某一个轴上进行数组拼接,目前仅支持拼接形状为1D的数组。
mindspore.dataset.transforms.Duplicate将输入的数据列复制得到新的数据列,每次仅可以输入1个数据列进行复制。
mindspore.dataset.transforms.Fill将Tensor的所有元素都赋值为指定的值。
mindspore.dataset.transforms.Mask用给条件判断输入Tensor的内容,并返回一个掩码Tensor。
mindspore.dataset.transforms.OneHot对输入标签进行OneHot编码
mindspore.dataset.transforms.PadEnd对输入Tensor进行填充,要求 pad_shape 与输入Tensor的维度保持一致。
mindspore.dataset.transforms.RandomApply指定一组数据增强处理及其被应用的概率,在运算时按概率随机应用其中的增强处理。
mindspore.dataset.transforms.RandomChoice从一组数据增强变换中随机选择一个进行应用。
mindspore.dataset.transforms.RandomOrder给一个数据增强的列表,随机打乱数据增强处理的顺序。
mindspore.dataset.transforms.Slice对输入进行切片
mindspore.dataset.transforms.TypeCast将输入的Tensor转换为指定数据类型
mindspore.dataset.transforms.Unique对输入张量进行唯一运算,每次只支持对一个数据列进行变换
mindspore.dataset.transforms.Relational关系运算符。

1.2图像视觉变换

mindspore.dataset.vision.AdjustBrightness调整输入图像的亮度
mindspore.dataset.vision.AdjustContrast调整输入图像的对比度
mindspore.dataset.vision.AdjustGamma对输入图像应用伽马校正
mindspore.dataset.vision.AdjustHue调整输入图像的色调
mindspore.dataset.vision.AdjustSaturation调整输入图像的饱和度
mindspore.dataset.vision.AdjustSharpness调整输入图像的锐度
mindspore.dataset.vision.Affine对输入图像进行仿射变换,保持图像中心不动。
mindspore.dataset.vision.AutoAugment应用AutoAugment数据增强方法,基于论文AutoAugment: Learning Augmentation Strategies from Data
mindspore.dataset.vision.AutoContrast在输入图像上应用自动对比度
mindspore.dataset.vision.BoundingBoxAugment对图像的随机标注边界框区域,应用给定的图像变换处理。
mindspore.dataset.vision.CenterCrop对输入图像应用中心区域裁剪
mindspore.dataset.vision.ConvertColor更改图像的色彩空间
mindspore.dataset.vision.Crop在输入图像上裁剪出指定区域。
mindspore.dataset.vision.CutMixBatch对输入批次的图像和标注应用剪切混合转换。
mindspore.dataset.vision.CutOut从输入图像数组中随机裁剪出给定数量正方形区域。
mindspore.dataset.vision.Decode将输入的压缩图像解码为RGB格式。
mindspore.dataset.vision.Equalize对输入图像进行直方图均衡化
mindspore.dataset.vision.Erase使用指定的值擦除输入图像。
mindspore.dataset.vision.FiveCrop在输入PIL图像的中心与四个角处分别裁剪指定尺寸大小的子图。
mindspore.dataset.vision.GaussianBlur使用指定的高斯核对输入图像进行模糊处理。
mindspore.dataset.vision.Grayscale将输入PIL图像转换为灰度图。
mindspore.dataset.vision.HorizontalFlip水平翻转输入图像。
mindspore.dataset.vision.HsvToRgb将输入的HSV格式numpy.ndarray图像换为RGB格式。
mindspore.dataset.vision.HWC2CHW将输入图像的shape从 <H, W, C> 转换为 <C, H, W>
mindspore.dataset.vision.Invert对输入的RGB图像进行色彩反转
mindspore.dataset.vision.LinearTransformation使用指定的变换方阵和均值向量对输入numpy.ndarray图像进行线性变换
mindspore.dataset.vision.MixUp随机混合一批输入的numpy.ndarray图像及其标签。
mindspore.dataset.vision.MixUpBatch对输入批次的图像和标注应用混合转换。
mindspore.dataset.vision.Normalize根据均值和标准差对输入图像进行归一化
mindspore.dataset.vision.NormalizePad根据均值和标准差对输入图像进行归一化,然后填充一个全的额外通道。
mindspore.dataset.vision.Pad填充图像。
mindspore.dataset.vision.PadToSize将图像填充到固定大小
mindspore.dataset.vision.Perspective对输入图像进行透视变换
mindspore.dataset.vision.Posterize减少图像的颜色通道的比特位数,使图像变得高对比度和颜色鲜艳,类似于海报或印刷品的效果。
mindspore.dataset.vision.RandAugment对输入图像应用RandAugment数据增强方法。
mindspore.dataset.vision.RandomAdjustSharpness以给定的概率随机调整输入图像的锐度
mindspore.dataset.vision.RandomAffine对输入图像应用随机仿射变换
mindspore.dataset.vision.RandomAutoContrast以给定的概率自动调整图像的对比度
mindspore.dataset.vision.RandomColor随机调整输入图像的颜色
mindspore.dataset.vision.RandomColorAdjust随机调整输入图像的亮度、对比度、饱和度和色调
mindspore.dataset.vision.RandomCrop对输入图像进行随机区域裁剪
mindspore.dataset.vision.RandomCropDecodeResize"裁剪"、"解码"和"调整尺寸大小"的组合处理。
mindspore.dataset.vision.RandomCropWithBBox在输入图像的随机位置进行裁剪并相应地调整边界框
mindspore.dataset.vision.RandomEqualize以给定的概率随机对输入图像进行直方图均衡化
mindspore.dataset.vision.RandomErasing按照指定的概率擦除输入numpy.ndarray图像上随机矩形区域内的像素
mindspore.dataset.vision.RandomGrayscale按照指定的概率将输入PIL图像转换为灰度图。
mindspore.dataset.vision.RandomHorizontalFlip对输入图像按给定的概率进行水平随机翻转
mindspore.dataset.vision.RandomHorizontalFlipWithBBox按给定的概率,对输入图像及其边界框进行随机水平翻转
mindspore.dataset.vision.RandomInvert以给定的概率随机反转图像的颜色
mindspore.dataset.vision.RandomLighting将AlexNet PCA的噪声添加到图像中。
mindspore.dataset.vision.RandomPerspective按照指定的概率对输入PIL图像进行透视变换
mindspore.dataset.vision.RandomPosterize随机减少图像的颜色通道的比特位数,使图像变得高对比度颜色鲜艳
mindspore.dataset.vision.RandomResizedCrop对输入图像进行随机裁剪,并使用指定的 mindspore.dataset.vision.Inter 插值方式去调整为指定的尺寸大小。
mindspore.dataset.vision.RandomResizedCropWithBBox对输入图像进行随机裁剪且随机调整纵横比,并将处理后的图像调整为指定的尺寸大小并相应地调整边界框
mindspore.dataset.vision.RandomResize对输入图像使用随机选择的 mindspore.dataset.vision.Inter 插值方式去调整它的尺寸大小。
mindspore.dataset.vision.RandomResizeWithBBox对输入图像使用随机选择的 mindspore.dataset.vision.Inter 插值方式去调整它的尺寸大小,并相应地调整边界框的尺寸大小。
mindspore.dataset.vision.RandomRotation在指定的角度范围内,随机旋转输入图像。
mindspore.dataset.vision.RandomSelectSubpolicy策略列表中随机选择一个子策略以应用于输入图像。
mindspore.dataset.vision.RandomSharpness在固定或随机的范围调整输入图像的锐度
mindspore.dataset.vision.RandomSolarize从给定阈值范围内随机选择一个子范围,对位于给定子范围内的像素,将其像素值设置为(255 - 原本像素值)。
mindspore.dataset.vision.RandomVerticalFlip以给定的概率对输入图像在垂直方向进行随机翻转
mindspore.dataset.vision.RandomVerticalFlipWithBBox以给定的概率对输入图像和边界框垂直方向进行随机翻转
mindspore.dataset.vision.Rescale基于给定的缩放平移因子调整图像的像素大小。
mindspore.dataset.vision.Resize对输入图像使用给定的尺寸mindspore.dataset.vision.Inter 插值方式去调整为给定的尺寸大小。
mindspore.dataset.vision.ResizedCrop裁切输入图像的指定区域并放缩到指定尺寸大小。
mindspore.dataset.vision.ResizeWithBBox将输入图像调整为给定的尺寸大小相应地调整边界框的大小。
mindspore.dataset.vision.RgbToHsv将输入的RGB格式numpy.ndarray图像换为HSV格式。
mindspore.dataset.vision.Rotate将输入图像旋转指定的度数。
mindspore.dataset.vision.SlicePatches在水平和垂直方向上将Tensor片为多个
mindspore.dataset.vision.Solarize通过反转阈值内的所有像素值,对输入图像进行曝光
mindspore.dataset.vision.TenCrop在输入PIL图像的中心与四个角分别裁剪指定尺寸大小的子图,并将其翻转图一并返回。
mindspore.dataset.vision.ToNumpy将输入PIL图像转换为numpy.ndarray图像。
mindspore.dataset.vision.ToPIL将 numpy.ndarray 格式的解码图像转换为 PIL.Image.Image 格式的图像。
mindspore.dataset.vision.ToTensor将输入PIL图像或numpy.ndarray图像转换为指定类型的numpy.ndarray图像,图像的像素值范围将从[0, 255]放缩为[0.0, 1.0]shape将从<H, W, C>调整为<C, H, W>
mindspore.dataset.vision.ToType将输入转换为指定的MindSpore数据类型或NumPy数据类型。
mindspore.dataset.vision.TrivialAugmentWide对输入图像应用TrivialAugmentWide数据增强方法。
mindspore.dataset.vision.UniformAugment从指定序列中均匀采样一批数据处理操作,并按顺序随机执行,即采样出的操作也可能不被执行。
mindspore.dataset.vision.VerticalFlip对输入图像进行垂直翻转


二、实践mindspore.dataset.transforms.Compose

写法

import mindspore.dataset.transforms as transforms

composed = transforms.Compose(
    [
        vision.Rescale(1.0 / 255.0, 0),
        vision.Normalize(mean=(0.1307,), std=(0.3081,)),
        vision.HWC2CHW()
    ]
)

应用实践:手写数字Mnist数据集为例

# Begin to show your code!
# Download data from open datasets
import numpy as np
from PIL import Image
import mindspore
from mindspore import nn
from mindspore.dataset import MnistDataset, GeneratorDataset, transforms, vision, text
from download import download
from mindvision.dataset import Mnist

url = "https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/" \
      "notebook/datasets/MNIST_Data.zip"
# 运行过一次,后面就可注释download语句
path = download(url, "./", kind="zip", replace=True)
train_dataset = MnistDataset('MNIST_Data/train')
test_dataset = MnistDataset('MNIST_Data/test')
print(train_dataset.get_col_names())


# MindSpore的dataset使用数据处理流水线(Data Processing Pipeline)
def datapipe(dataset, batch_size):
    image_transforms = [
        vision.Rescale(1.0 / 255.0, 0),
        vision.Normalize(mean=(0.1307,), std=(0.3081,)),
        vision.HWC2CHW()
    ]
    label_transform = transforms.TypeCast(mindspore.int32)

    dataset = dataset.map(image_transforms, 'image')
    dataset = dataset.map(label_transform, 'label')
    dataset = dataset.batch(batch_size)
    return dataset


def my_tokenizer(content):
    return content.split()


composed = transforms.Compose(
    [
        vision.Rescale(1.0 / 255.0, 0),
        vision.Normalize(mean=(0.1307,), std=(0.3081,)),
        vision.HWC2CHW()
    ]
)

# Map vision transforms and batch dataset
train_dataset = datapipe(train_dataset, 64)
test_dataset = datapipe(test_dataset, 64)

if __name__ == "__main__":
    train_dataset = MnistDataset('MNIST_Data/train')
    train_dataset = train_dataset.map(composed, 'image')
    image, label = next(train_dataset.create_tuple_iterator())
    print(image.shape)
    for image, label in test_dataset.create_tuple_iterator():
        print(f"Shape of image [N, C, H, W]: {image.shape} {image.dtype}")
        print(f"Shape of label: {label.shape} {label.dtype}")
        break

在这里插入图片描述


以下是一些使用transforms进行数据增强的代码示例: 1. 使用FiveCrop进行数据增强: ```python train_transform = transforms.Compose(\[ transforms.Resize((224, 224)), transforms.FiveCrop(112), transforms.Lambda(lambda crops: torch.stack(\[(transforms.ToTensor()(crop)) for crop in crops\])) \]) ``` 2. 使用TenCrop进行数据增强: ```python train_transform = transforms.Compose(\[ transforms.Resize((224, 224)), transforms.TenCrop(112, vertical_flip=False), transforms.Lambda(lambda crops: torch.stack(\[(transforms.ToTensor()(crop)) for crop in crops\])) \]) ``` 3. 使用RandomHorizontalFlip进行数据增强: ```python train_transform = transforms.Compose(\[ transforms.Resize((224, 224)), transforms.RandomHorizontalFlip(), transforms.CenterCrop(196) \]) ``` 这些代码示例展示了如何使用transforms模块中的不同函数来进行数据增强操作,包括裁剪、翻转和缩放等。你可以根据自己的需求选择适合的数据增强方式来提升模型的性能和鲁棒性。 #### 引用[.reference_title] - *1* *2* *3* [PyTorch :transforms 数据增强:裁剪、翻转、旋转](https://blog.csdn.net/qq_54641516/article/details/126981414)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柏常青

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值