当前位置: 首页 > article >正文

昇思MindSpore进阶教程--轻量化数据处理

大家好,我是刘明,明志科技创始人,华为昇思MindSpore布道师。
技术上主攻前端开发、鸿蒙开发和AI算法研究。
努力为大家带来持续的技术分享,如果你也喜欢我的文章,就点个关注吧

正文开始

在资源条件允许的情况下,为了追求更高的性能,一般使用Pipeline模式执行数据变换Transforms。

基于Pipeline模式执行的最大特点是需要使用map方法,如下图中将Resize、Crop、HWC2CHW交由map调度,由其负责启动和执行给定的Transform,对Pipeline的数据进行映射变换。
在这里插入图片描述

虽然构建数据管道可以批量处理输入数据,但是数据管道的API设计要求用户从构建输入源开始,逐步定义数据管道中的各个Transform,仅当在定义map的时候才会涉及与用户输入数据高度相关的Transform。

无疑,用户只想重点关注这些与其相关度最高的代码,但其他相关度较低的代码却在整个代码场景中为用户增加了不必要的负担。

因此,MindSpore提供了一种轻量化的数据处理执行方式,称为Eager模式。

在Eager模式下,执行Transforms不需要依赖构建数据管道map,而是以函数式调用的方式执行Transforms。因此代码编写会更为简洁且能立即执行得到运行结果,推荐在小型数据增强实验、模型推理等轻量化场景中使用。
在这里插入图片描述

MindSpore目前支持在Eager模式执行各种Transform,具体如下所示,更多数据变换接口参见API文档。

  • vision模块
    子模块transforms,基于OpenCV/Pillow实现的数据变换。
  • text模块
    子模块transforms,基于Jieba/ICU4C等库实现的数据变换。
  • transforms模块
    子模块transforms,基于C++/Python/NumPy实现的通用数据变换。

Eager模式

下面将简要介绍各Transforms模块的Eager模式使用方法。使用Eager模式,只需要将Transform本身当成可执行函数即可。

数据准备

以下示例代码将图片数据下载到指定位置。

from download import download

url = "https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/notebook/datasets/banana.jpg"
download(url, './banana.jpg', replace=True)

vision

此示例将使用mindspore.dataset.vision模块中的Transform,对给定图像进行变换。

您仅需要关注使用何种数据变换,而不需要关注数据管道的任何代码。

Vision Transform的Eager模式支持numpy.array或PIL.Image类型的数据作为入参。

import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
import mindspore.dataset.vision as vision

img_ori = Image.open("banana.jpg").convert("RGB")
print("Image.type: {}, Image.shape: {}".format(type(img_ori), img_ori.size))

# Apply Resize to input immediately
op1 = vision.Resize(size=(320))
img = op1(img_ori)
print("Image.type: {}, Image.shape: {}".format(type(img), img.size))

# Apply CenterCrop to input immediately
op2 = vision.CenterCrop((280, 280))
img = op2(img)
print("Image.type: {}, Image.shape: {}".format(type(img), img.size))

# Apply Pad to input immediately
op3 = vision.Pad(40)
img = op3(img)
print("Image.type: {}, Image.shape: {}".format(type(img), img.size))

# Show the result
plt.subplot(1, 2, 1)
plt.imshow(img_ori)
plt.title("original image")
plt.subplot(1, 2, 2)
plt.imshow(img)
plt.title("transformed image")
plt.show()

在这里插入图片描述

text

此示例将使用text模块中Transforms,对给定文本进行变换。

Text Transforms的Eager模式支持numpy.array类型数据的作为入参。

import mindspore.dataset.text.transforms as text
import mindspore as ms

# Apply UnicodeCharTokenizer to input immediately
txt = "Welcome to Beijing !"
txt = text.UnicodeCharTokenizer()(txt)
print("Tokenize result: {}".format(txt))

# Apply ToNumber to input immediately
txt = ["123456"]
to_number = text.ToNumber(ms.int32)
txt = to_number(txt)
print("ToNumber result: {}, type: {}".format(txt, txt[0].dtype))

transforms

此示例将使用transforms模块中通用Transform,对给定数据进行变换。

通用Transform的Eager模式支持numpy.array类型的数据作为入参。

import numpy as np
import mindspore.dataset.transforms as trans

# Apply Fill to input immediately
data = np.array([1, 2, 3, 4, 5])
fill = trans.Fill(0)
data = fill(data)
print("Fill result: ", data)

# Apply OneHot to input immediately
label = np.array(2)
onehot = trans.OneHot(num_classes=5)
label = onehot(label)
print("OneHot result: ", label)


http://www.kler.cn/news/325334.html

相关文章:

  • 【HTTPS】中间人攻击和证书的验证
  • 手写SpringMVC
  • Subdominator:一款针对漏洞奖励计划的子域名安全枚举工具
  • Rustrover2024.2 正式发布:个人非商用免费,泰裤辣
  • 更新日志-Python OS
  • 动态规划(3)——dp多状态问题Ⅰ
  • 云舟观测:集成开源Grafana Faro构建前端页面性能监控平台
  • Linux开机logo设置
  • Spring MVC 拦截器总结
  • 数据结构:树、森林
  • 峟思助力堤防工程安全:构建多功能防洪屏障
  • Qt+toml文件读写
  • 【Linux】环境变量(初步认识环境变量)
  • C++不同的头文件中各种函数的操作使用(长期更新,找到新的就补充进来)
  • Jenkins提示Host key verification failed的解决办法
  • Linux Reverse(1)-LD_PRELOAD
  • workerman 接入文心一言的流式输出
  • 解决错误Cloning failed using an ssh key for authentication
  • android system_server进程
  • 【QT 开发日志】QT 基础控件详解:按钮、文本框与标签的使用
  • AlmaLinux 安裝JDK8
  • 嵌入式学习--LinuxDay04
  • 设计模式之模版方法模式
  • 低代码可视化-uniapp蓝牙标签打印-代码生成器
  • 天龙八部怀旧单机微改人面桃花+安装教程+GM工具+虚拟机一键端
  • @overload实际并无作用
  • C# 调用虚拟打印,尝试隐藏进度窗体
  • AfuseKt1.3.6-10110功能强大的安卓网络视频播放器,支持多种在线存储和媒体管理平台!
  • The First项目报告:解读跨链互操作性平台Wormhole
  • 点餐小程序实战教程13餐桌管理