mindspore.dataset.transforms
通用
此模块用于通用数据增强,其中一部分增强操作是用C++实现的,具有较好的高性能,另一部分是基于Python实现,使用了NumPy模块作为支持。
在API示例中,常用的模块导入方法如下:
import mindspore.dataset as ds
import mindspore.dataset.transforms as transforms
注意:旧的API导入方式已经过时且会逐步废弃,因此推荐使用上面的方式,但目前仍可按以下方式导入:
from mindspore.dataset.transforms import c_transforms
from mindspore.dataset.transforms import py_transforms
更多详情请参考 通用数据变换 。
常用数据处理术语说明如下:
TensorOperation,所有C++实现的数据处理操作的基类。
PyTensorOperation,所有Python实现的数据处理操作的基类。
变换
将多个数据增强操作组合使用。 |
|
在Tensor的某一个轴上进行元素拼接,目前仅支持拼接形状为1D的Tensor。 |
|
将输入的数据列复制得到新的数据列,每次仅可以输入1个数据列进行复制。 |
|
将Tensor的所有元素都赋值为指定的值。 |
|
用给条件判断输入Tensor的内容,并返回一个掩码Tensor。 |
|
将Tensor进行OneHot编码。 |
|
对输入Tensor进行填充,要求 pad_shape 与输入Tensor的维度保持一致。 |
|
指定一组数据增强处理及其被应用的概率,在运算时按概率随机应用其中的增强处理。 |
|
在一组数据增强中随机选择部分增强处理进行应用。 |
|
给一个数据增强的列表,随机打乱数据增强处理的顺序。 |
|
使用给定的slices,对Tensor进行切片操作。 |
|
将输入的Tensor转换为指定的数据类型。 |
|
对输入张量进行唯一运算,每次只支持对一个数据列进行变换。 |
工具
关系操作符。 |
视觉
此模块用于图像数据增强,其中有一部分增强是基于C++ OpenCV实现的,具有较好的性能,而另一部分是基于Python Pillow实现的。
API样例中常用的导入模块如下:
import mindspore.dataset as ds
import mindspore.dataset.vision as vision
import mindspore.dataset.vision.utils as utils
注意:旧的API导入方式已经过时且会逐步废弃,因此推荐使用上面的方式,但目前仍可按以下方式导入:
import mindspore.dataset.vision.c_transforms as c_vision
import mindspore.dataset.vision.py_transforms as py_vision
from mindspore.dataset.transforms import c_transforms
更多详情请参考 视觉数据变换 。
常用数据处理术语说明如下:
TensorOperation,所有C++实现的数据处理操作的基类。
PyTensorOperation,所有Python实现的数据处理操作的基类。
数据增强操作可以放入数据处理Pipeline中执行,也可以Eager模式执行:
Pipeline模式一般用于处理数据集,示例可参考 数据处理Pipeline介绍 。
Eager模式一般用于零散样本,图像预处理举例如下:
import numpy as np import mindspore.dataset.vision as vision from PIL import Image,ImageFont,ImageDraw # 画圆形 img = Image.new("RGB", (300, 300), (255, 255, 255)) draw = ImageDraw.Draw(img) draw.ellipse(((0, 0), (100, 100)), fill=(255, 0, 0), outline=(255, 0, 0), width=5) img.save("./1.jpg") with open("./1.jpg", "rb") as f: data = f.read() data_decoded = vision.Decode()(data) data_croped = vision.RandomCrop(size=(250, 250))(data_decoded) data_resized = vision.Resize(size=(224, 224))(data_croped) data_normalized = vision.Normalize(mean=[0.485 * 255, 0.456 * 255, 0.406 * 255], std=[0.229 * 255, 0.224 * 255, 0.225 * 255])(data_resized) data_hwc2chw = vision.HWC2CHW()(data_normalized) print("data: {}, shape: {}".format(data_hwc2chw, data_hwc2chw.shape), flush=True)
变换
调整输入图像的亮度。 |
|
调整输入图像的对比度。 |
|
对输入图像应用伽马校正。 |
|
调整输入图像的色调。 |
|
调整输入图像的饱和度。 |
|
调整输入图像的锐度。 |
|
对输入图像进行仿射变换,保持图像中心不动。 |
|
应用AutoAugment数据增强方法,基于论文 AutoAugment: Learning Augmentation Strategies from Data 。 |
|
在输入图像上应用自动对比度。 |
|
对图像的随机标注边界框区域,应用给定的图像变换处理。 |
|
对输入图像应用中心区域裁剪。 |
|
更改图像的色彩空间。 |
|
在输入图像上裁剪出指定区域。 |
|
对输入批次的图像和标注应用剪切混合转换。 |
|
从输入图像数组中随机裁剪出给定数量的正方形区域。 |
|
将输入的压缩图像解码为RGB格式。 |
|
对输入图像进行直方图均衡化。 |
|
使用指定的值擦除输入图像。 |
|
在输入PIL图像的中心与四个角处分别裁剪指定尺寸大小的子图。 |
|
使用指定的高斯核对输入图像进行模糊处理。 |
|
将输入PIL图像转换为灰度图。 |
|
水平翻转输入图像。 |
|
将输入的HSV格式numpy.ndarray图像转换为RGB格式。 |
|
将输入图像的shape从 <H, W, C> 转换为 <C, H, W>。 |
|
在 RGB 模式下对输入图像应用像素反转。 |
|
使用指定的变换方阵和均值向量对输入numpy.ndarray图像进行线性变换。 |
|
随机混合一批输入的numpy.ndarray图像及其标签。 |
|
对输入批次的图像和标注应用混合转换。 |
|
根据均值和标准差对输入图像进行归一化。 |
|
根据均值和标准差对输入图像进行归一化,然后填充一个全零的额外通道。 |
|
填充图像。 |
|
将图像填充到固定大小。 |
|
对输入图像进行透视变换。 |
|
减少图像的颜色通道的比特位数,使图像变得高对比度和颜色鲜艳,类似于海报或印刷品的效果。 |
|
对输入图像应用RandAugment数据增强方法。 |
|
以给定的概率随机调整输入图像的锐度。 |
|
对输入图像应用随机仿射变换。 |
|
以给定的概率自动调整图像的对比度。 |
|
随机调整输入图像的颜色。 |
|
随机调整输入图像的亮度、对比度、饱和度和色调。 |
|
对输入图像进行随机区域的裁剪。 |
|
"裁剪"、"解码"和"调整尺寸大小"的组合处理。 |
|
在输入图像的随机位置进行裁剪并相应地调整边界框。 |
|
以给定的概率随机对输入图像进行直方图均衡化。 |
|
按照指定的概率擦除输入numpy.ndarray图像上随机矩形区域内的像素。 |
|
按照指定的概率将输入PIL图像转换为灰度图。 |
|
对输入图像按给定的概率进行水平随机翻转。 |
|
对输入图像按给定的概率进行水平随机翻转并相应地调整边界框。 |
|
以给定的概率随机反转图像的颜色。 |
|
将AlexNet PCA的噪声添加到图像中。 |
|
按照指定的概率对输入PIL图像进行透视变换。 |
|
随机减少图像的颜色通道的比特位数,使图像变得高对比度和颜色鲜艳。 |
|
对输入图像进行随机裁剪,并使用指定的 |
|
对输入图像进行随机裁剪且随机调整纵横比,并将处理后的图像调整为指定的尺寸大小,并相应地调整边界框。 |
|
对输入图像使用随机选择的 |
|
对输入图像使用随机选择的 |
|
在指定的角度范围内,随机旋转输入图像。 |
|
从策略列表中随机选择一个子策略以应用于输入图像。 |
|
在固定或随机的范围调整输入图像的锐度。 |
|
从给定阈值范围内随机选择一个子范围,对位于给定子范围内的像素,将其像素值设置为(255 - 原本像素值)。 |
|
以给定的概率对输入图像在垂直方向进行随机翻转。 |
|
以给定的概率对输入图像和边界框在垂直方向进行随机翻转。 |
|
基于给定的缩放和平移因子调整图像的像素大小。 |
|
对输入图像使用给定的 |
|
裁切输入图像的指定区域并放缩到指定尺寸大小。 |
|
将输入图像调整为给定的尺寸大小并相应地调整边界框的大小。 |
|
将输入的RGB格式numpy.ndarray图像转换为HSV格式。 |
|
将输入图像旋转指定的度数。 |
|
在水平和垂直方向上将Tensor切片为多个块。 |
|
通过反转阈值内的所有像素值,对输入图像进行曝光。 |
|
在输入PIL图像的中心与四个角处分别裁剪指定尺寸大小的子图,并将其翻转图一并返回。 |
|
将输入PIL图像转换为numpy.ndarray图像。 |
|
将已解码的numpy.ndarray图像转换为PIL图像。 |
|
将输入PIL图像或numpy.ndarray图像转换为指定类型的numpy.ndarray图像,图像的像素值范围将从[0, 255]放缩为[0.0, 1.0],shape将从<H, W, C>调整为<C, H, W>。 |
|
将输入转换为指定的MindSpore数据类型或NumPy数据类型。 |
|
对输入图像应用TrivialAugmentWide数据增强方法。 |
|
从指定序列中均匀采样一批数据处理操作,并按顺序随机执行,即采样出的操作也可能不被执行。 |
|
对输入图像进行垂直翻转。 |
工具
不同数据集的自动增强策略。 |
|
边界填充方式枚举类。 |
|
图像色彩空间转换模式枚举类。 |
|
图像批处理输出格式枚举类。 |
|
图像文件读取方式枚举类。 |
|
图像插值方式枚举类。 |
|
Tensor切片方式枚举类。 |
|
将输入的图像编码为JPEG数据。 |
|
将输入的图像编码为PNG数据。 |
|
获取输入图像通道数。 |
|
获取输入图像的大小为[高度, 宽度]。 |
|
以二进制模式读取文件。 |
|
读取图像文件并解码为3通道RGB彩色数据或灰度数据。 |
|
使用二进制模式将一维uint8类型数据数组写到文件。 |
|
将图像数据保存为JPEG文件。 |
|
将图像数据保存为PNG文件。 |
文本
此模块用于文本数据增强,包括 transforms 和 utils 两个子模块。
transforms 是一个高性能文本数据增强模块,支持常见的文本数据增强处理。
utils 提供了一些文本处理的工具方法。
在API示例中,常用的模块导入方法如下:
import mindspore.dataset as ds
from mindspore.dataset import text
更多详情请参考 文本数据变换 。
常用数据处理术语说明如下:
TensorOperation,所有C++实现的数据处理操作的基类。
TextTensorOperation,所有文本数据处理操作的基类,派生自TensorOperation。
数据增强操作可以放入数据处理Pipeline中执行,也可以Eager模式执行:
Pipeline模式一般用于处理数据集,示例可参考 数据处理Pipeline介绍 。
Eager模式一般用于零散样本,文本预处理举例如下:
from mindspore.dataset import text from mindspore.dataset.text import NormalizeForm # 构造词汇表 vocab_list = {"床": 1, "前": 2, "明": 3, "月": 4, "光": 5, "疑": 6, "是": 7, "地": 8, "上": 9, "霜": 10, "举": 11, "头": 12, "望": 13, "低": 14, "思": 15, "故": 16, "乡": 17, "繁": 18, "體": 19, "字": 20, "嘿": 21, "哈": 22, "大": 23, "笑": 24, "嘻": 25, "UNK": 26} vocab = text.Vocab.from_dict(vocab_list) tokenizer_op = text.BertTokenizer(vocab=vocab, suffix_indicator='##', max_bytes_per_token=100, unknown_token='[UNK]', lower_case=False, keep_whitespace=False, normalization_form=NormalizeForm.NONE, preserve_unused_token=True, with_offsets=False) # 分词 tokens = tokenizer_op("床前明月光,疑是地上霜,举头望明月,低头思故乡。") print("token: {}".format(tokens), flush=True) # 根据单词查找id ids = vocab.tokens_to_ids(tokens) print("token to id: {}".format(ids), flush=True) # 根据id查找单词 tokens_from_ids = vocab.ids_to_tokens([15, 3, 7]) print("token to id: {}".format(tokens_from_ids), flush=True)
变换
接口名 |
概述 |
说明 |
将分词(token)添加到序列的开头或结尾处。 |
||
按照指定规则对输入的UTF-8编码字符串进行分词。 |
Windows平台尚不支持 BasicTokenizer |
|
使用Bert分词器对字符串进行分词。 |
Windows平台尚不支持 BertTokenizer |
|
将UTF-8编码字符串中的字符规范化为小写,相比 |
Windows平台尚不支持 CaseFold |
|
将Wikipedia XML格式转储过滤为仅由小写字母(a-z,从A-Z转换而来)和空格(从不连续)组成的“干净”文本。 |
Windows平台尚不支持 FilterWikipediaXML |
|
使用Jieba分词器对中文字符串进行分词。 |
必须保证隐式马尔科夫模型分词(HMMSEgment)和最大概率法分词(MPSegment)所使用的词典文件的完整性 |
|
根据词表,将分词标记(token)映射到其索引值(id)。 |
||
从1-D的字符串生成N-gram。 |
||
对UTF-8编码的字符串进行规范化处理。 |
Windows平台尚不支持 NormalizeUTF8 |
|
使用用户自定义的分词器对输入字符串进行分词。 |
||
根据正则表达式对UTF-8编码格式的字符串内容进行正则替换。 |
Windows平台尚不支持 RegexReplace |
|
根据正则表达式对字符串进行分词。 |
Windows平台尚不支持 RegexTokenizer |
|
使用SentencePiece分词器对字符串进行分词。 |
||
在输入数据的某个维度上进行滑窗切分处理,当前仅支持处理1-D的Tensor。 |
||
将字符串的每个元素转换为数字。 |
||
根据输入向量表查找向量中的tokens。 |
||
截断输入序列,使其不超过最大长度。 |
||
截断一对 1-D 字符串的内容,使其总长度小于给定长度。 |
||
使用Unicode分词器将字符串分词为Unicode字符。 |
||
使用UnicodeScript分词器对UTF-8编码的字符串进行分词。 |
Windows平台尚不支持 UnicodeScriptTokenizer |
|
基于ICU4C定义的空白字符(' ', '\\t', '\\r', '\\n')对输入的UTF-8字符串进行分词。 |
Windows平台尚不支持 WhitespaceTokenizer |
|
将输入的字符串切分为子词。 |
工具
接口名 |
概述 |
说明 |
CharNGram对象,用于将 tokens 映射到预训练的向量中。 |
||
用于将tokens映射到向量的FastText对象。 |
||
用于将tokens映射到向量的GloVe对象。 |
||
Unicode规范化模式 枚举类。 |
||
SentencePiece分词方法的枚举类。 |
||
用于执行分词的SentencePiece对象。 |
||
用于将tokens映射到向量的Vectors对象。 |
||
用于查找单词的Vocab对象。 |
||
基于 encoding 字符集对每个元素进行编码,将 string 的NumPy数组转换为 bytes 的数组。 |
||
基于 encoding 字符集对每个元素进行解码,借此将 bytes 的NumPy数组转换为 string 的数组。 |
音频
此模块用于音频数据增强,包括 transforms 和 utils 两个子模块。 transforms 是一个高性能音频数据增强模块,支持常见的音频数据增强操作。 utils 提供了一些音频处理的工具方法。
API样例中常用的导入模块如下:
import mindspore.dataset as ds
import mindspore.dataset.audio as audio
常用数据处理术语说明如下:
TensorOperation,所有C++实现的数据处理操作的基类。
AudioTensorOperation,所有音频数据处理操作的基类,派生自TensorOperation。
数据增强操作可以放入数据处理Pipeline中执行,也可以Eager模式执行:
Pipeline模式一般用于处理数据集,示例可参考 数据处理Pipeline介绍 。
Eager模式一般用于零散样本,音频预处理举例如下:
import numpy as np import mindspore.dataset.audio as audio from mindspore.dataset.audio import ResampleMethod # 音频输入 waveform = np.random.random([1, 30]) # 增强操作 resample_op = audio.Resample(orig_freq=48000, new_freq=16000, resample_method=ResampleMethod.SINC_INTERPOLATION, lowpass_filter_width=6, rolloff=0.99, beta=None) waveform_resampled = resample_op(waveform) print("waveform reampled: {}".format(waveform_resampled), flush=True)
变换
给音频波形施加双极点全通滤波器,其中心频率和带宽由入参指定。 |
|
将输入音频从振幅/功率标度转换为分贝标度。 |
|
计算复数序列的角度。 |
|
给音频波形施加双极点带通滤波器。 |
|
给音频波形施加双极点巴特沃斯(Butterworth)带通滤波器。 |
|
给音频波形施加双极点巴特沃斯(Butterworth)带阻滤波器。 |
|
给音频波形施加低音控制效果,即双极点低频搁架滤波器。 |
|
给音频波形施加双二阶滤波器。 |
|
计算复数序列的范数。 |
|
计算频谱的delta系数,也叫差分系数。 |
|
给音频波形施加对比度增强效果。 |
|
将音频波形从分贝转换为功率或振幅。 |
|
对输入音频波形施加直流移位。 |
|
给音频波形施加CD(IEC 60908)去重音(一种高音衰减搁置滤波器)效果。 |
|
检测音调频率。 |
|
通过消除非线性截断失真,来抖动增加存储在特定位深的音频的动态感知范围。 |
|
给音频波形施加双二次均衡器滤波器。 |
|
向波形添加淡入和/或淡出。 |
|
对音频波形施加正反向IIR滤波。 |
|
给音频施加镶边效果。 |
|
给音频波形施加频域掩码。 |
|
放大或衰减整个音频波形。 |
|
使用Griffin-Lim算法从线性幅度频谱图中计算信号波形。 |
|
给音频波形上施加双二阶高通滤波器。 |
|
使用转换矩阵从梅尔频率STFT求解普通频率的STFT。 |
|
计算输入频谱的反向频谱,以恢复原始音频信号。 |
|
计算音频信号的线性频率倒谱系数。 |
|
根据指定的差分方程施加IIR滤波器。 |
|
给音频波形施加双极点低通滤波器。 |
|
将shape为(..., 2)的复值光谱图分离,输出幅度和相位。 |
|
对音频波形应用掩码。 |
|
对音频波形沿 axis 轴应用掩码。 |
|
将普通STFT转换为梅尔尺度的STFT。 |
|
计算原始音频信号的梅尔频谱。 |
|
计算音频信号的梅尔频率倒谱系数。 |
|
解码mu-law编码的信号,参考 mu-law算法 。 |
|
基于mu-law压缩的信号编码。 |
|
给音频波形施加过载效果。 |
|
给音频波形施加相位效果。 |
|
对给定的STFT频谱,在不改变音高的情况下以一定比率进行加速。 |
|
将信号从一个频率重采样至另一个频率。 |
|
将波形的音调移动 n_steps 步长。 |
|
对输入音频波形施加RIAA均衡。 |
|
对每个话语应用滑动窗口倒谱均值(和可选方差)归一化。 |
|
计算每个通道沿时间轴的频谱中心。 |
|
从音频信号创建其频谱。 |
|
给音频波形施加时域掩码。 |
|
以给定的比例拉伸音频短时傅里叶(Short Time Fourier Transform, STFT)频谱的时域,但不改变音频的音高。 |
|
给音频波形施加高音音调控制效果。 |
|
语音活动检测器。 |
|
调整波形的音量。 |
工具
填充模式。 |
|
密度函数类型。 |
|
淡入淡出形状。 |
|
增益类型。 |
|
音频波形的插值模式。 |
|
梅尔标度实现类型。 |
|
调制类型。 |
|
标准化模式。 |
|
标准化类型。 |
|
重采样方法。 |
|
音频标度枚举类。 |
|
窗函数类型。 |
|
创建一个shape为( n_mels , n_mfcc )的DCT变换矩阵,并根据范数进行标准化。 |
|
创建一个线性三角滤波器组。 |
|
创建频率变换矩阵。 |