昇思25天学习打卡营第3天 |昇思MindSpore 数据变换 Transforms学习与总结

在深度学习过程中,原始数据通常需要经过预处理才能输入到神经网络中进行训练。MindSpore提供了丰富的数据变换(Transforms)工具,用于不同类型的数据预处理。本文在学习中,总结了MindSpore中的常用数据变换,包括图像、文本和音频数据的处理,并配以图表和思维导图帮助理解。

一、常用Transforms

1. Compose

Compose接收一个数据增强操作序列,并将其组合成一个单一的操作。以下示例展示了在MNIST数据集上的应用。

composed = transforms.Compose([
    vision.Rescale(1.0 / 255.0, 0),
    vision.Normalize(mean=(0.1307,), std=(0.3081,)),
    vision.HWC2CHW()
])
常用Transforms总结
Transform参数作用示例
Composetransforms (list)组合多个数据增强操作transforms.Compose([vision.Rescale(1.0 / 255.0, 0), vision.Normalize(mean=(0.1307,), std=(0.3081,)), vision.HWC2CHW()])

二、图像Transforms

1. Rescale

用于调整图像像素值的大小,包括缩放因子rescale和平移因子shift

rescale = vision.Rescale(1.0 / 255.0, 0)
rescaled_image = rescale(random_image)
2. Normalize

对输入图像进行归一化处理。

normalize = vision.Normalize(mean=(0.1307,), std=(0.3081,))
normalized_image = normalize(rescaled_image)
3. HWC2CHW

转换图像格式,从(height, width, channel)转换为(channel, height, width)。

hwc2chw = vision.HWC2CHW()
chw_image = hwc2chw(hwc_image)
图像Transforms总结
Transform参数作用示例
Rescalerescale (float), shift (float)调整图像像素值vision.Rescale(1.0 / 255.0, 0)
Normalizemean (tuple), std (tuple)对图像进行归一化vision.Normalize(mean=(0.1307,), std=(0.3081,))
HWC2CHW-转换图像格式vision.HWC2CHW()

三、文本Transforms

1. PythonTokenizer

用于分词(Tokenize)。

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

test_dataset = test_dataset.map(text.PythonTokenizer(my_tokenizer))
2. Lookup

将Token转换为Index。

vocab = text.Vocab.from_dataset(test_dataset)
test_dataset = test_dataset.map(text.Lookup(vocab))
文本Transforms总结
Transform参数作用示例
PythonTokenizertokenizer_func (function)文本分词test_dataset.map(text.PythonTokenizer(my_tokenizer))
Lookupvocab (Vocab)Token转换为Indextest_dataset.map(text.Lookup(vocab))

四、Lambda Transforms

Lambda函数可以用于定义任意的数据处理操作。

示例1:简单的Lambda函数
test_dataset = test_dataset.map(lambda x: x * 2)
示例2:复杂的Lambda函数
def func(x):
    return x * x + 2

test_dataset = test_dataset.map(lambda x: func(x))
Lambda Transforms总结
Transform参数作用示例
Lambdalambda_func (function)应用任意Lambda函数test_dataset.map(lambda x: x * 2)

五、思维导图

为更好地展示数据变换的分类和关系,下面是一个简单的思维导图:

数据变换
Common Transforms
Vision Transforms
Text Transforms
Lambda Transforms
Compose
Rescale
Normalize
HWC2CHW
PythonTokenizer
Lookup
Simple Lambda
Complex Lambda

六、其他工具的总结

下面是使用表格展示 mindspore.dataset.transformsmindspore.dataset.vision 两大模块的数据增强操作的信息。信息来源于mindspore.dataset.text

通用数据增强

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

视觉数据增强

操作名称描述
AdjustBrightness调整输入图像的亮度
AdjustContrast调整输入图像的对比度
AdjustGamma对输入图像应用伽马校正
AdjustHue调整输入图像的色调
AdjustSaturation调整输入图像的饱和度
AdjustSharpness调整输入图像的锐度
Affine对输入图像进行仿射变换
AutoAugment应用 AutoAugment 数据增强方法
AutoContrast在输入图像上应用自动对比度
BoundingBoxAugment对图像的随机标注边界框区域应用给定的图像变换处理
CenterCrop对输入图像应用中心区域裁剪
ConvertColor更改图像的色彩空间
Crop在输入图像上裁剪出指定区域
CutMixBatch对输入批次的图像和标注应用剪切混合转换
CutOut从输入图像数组中随机裁剪出给定数量的正方形区域
Decode将输入的压缩图像解码为 RGB 格式
Equalize对输入图像进行直方图均衡化
Erase使用指定的值擦除输入图像
FiveCrop在输入 PIL 图像的中心与四个角处分别裁剪指定尺寸大小的子图
GaussianBlur使用指定的高斯核对输入图像进行模糊处理
Grayscale将输入 PIL 图像转换为灰度图
HorizontalFlip水平翻转输入图像
HsvToRgb将输入的 HSV 格式图像转换为 RGB 格式
HWC2CHW将输入图像的 shape 从 <H, W, C> 转换为 <C, H, W>
Invert对输入的 RGB 图像进行色彩反转
LinearTransformation使用指定的变换方阵和均值向量对输入图像进行线性变换
MixUp随机混合一批输入的图像及其标签
Normalize根据均值和标准差对输入图像进行归一化
Pad填充图像
PadToSize将图像填充到固定大小
Perspective对输入图像进行透视变换
Posterize减少图像的颜色通道的比特位数,使图像变得高对比度和颜色鲜艳
RandAugment对输入图像应用 RandAugment 数据增强方法
RandomAdjustSharpness以给定的概率随机调整输入图像的锐度
RandomAffine对输入图像应用随机仿射变换
RandomAutoContrast以给定的概率自动调整图像的对比度
RandomColor随机调整输入图像的颜色
RandomColorAdjust随机调整输入图像的亮度、对比度、饱和度和色调
RandomCrop对输入图像进行随机区域的裁剪
RandomEqualize以给定的概率随机对输入图像进行直方图均衡化
RandomErasing按指定的概率擦除输入图像上随机矩形区域内的像素
RandomGrayscale按指定的概率将输入图像转换为灰度图
RandomHorizontalFlip对输入图像按给定的概率进行水平随机翻转
RandomInvert以给定的概率随机反转图像的颜色
RandomPerspective按指定的概率对输入图像进行透视变换
RandomPosterize随机减少图像的颜色通道的比特位数
RandomResizedCrop对输入图像进行随机裁剪,并使用指定的插值方式调整为指定的尺寸大小
RandomRotation在指定的角度范围内,随机旋转输入图像
RandomSelectSubpolicy从策略列表中随机选择一个子策略应用于输入图像
RandomSharpness在固定或随机的范围调整输入图像的锐度
RandomSolarize从给定阈值范围内随机选择一个子范围,对位于给定子范围内的像素,将其像素值设置为(255 - 原本像素值)
RandomVerticalFlip以给定的概率对输入图像在垂直方向进行随机翻转
Rescale基于给定的缩放和平移因子调整图像的像素大小
Resize对输入图像使用给定的插值方式调整为给定的尺寸大小
RgbToHsv将输入的 RGB 格式图像转换为 HSV 格式
Rotate将输入图像旋转指定的度数
SlicePatches在水平和垂直方向上将 Tensor 切片为多个块
Solarize通过反转阈值内的所有像素值,对输入图像进行色调调节
SwapRedBlue将输入图像的红蓝通道进行互换
TenCrop在输入 PIL 图像的中心和四个角上裁剪指定尺寸大小的子图,并对每个裁剪的子图进行水平翻转
ToNumpy将 PIL 图像转换为 NumPy 格式
ToPIL将 NumPy 图像转换为 PIL 格式
ToTensor将 PIL 图像或 NumPy 图像转换为 Tensor
ToType将 NumPy 数据类型转换为 Tensor 数据类型
TrivialAugment应用 TrivialAugment 数据增强方法
UniformAugment应用 UniformAugment 数据增强方法
VerticalFlip垂直翻转输入图像

示例代码

Compose
transform = [vision.Resize((224, 224)), vision.RandomHorizontalFlip()]
trans = vision.Compose(transform)
data = ds.ImageFolderDataset(DATA_DIR).map(operations=trans)
RandomCrop
trans = vision.RandomCrop((224, 224))
data = ds.ImageFolderDataset(DATA_DIR).map(operations=trans)
Normalize
trans = vision.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
data = ds.ImageFolderDataset(DATA_DIR).map(operations=trans)
  • 20
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值