学习目标:熟练掌握数据变换操作
- 熟悉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