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




















