PyTorch 深度学习实战
方远
LINE China 数据科学家
10381 人已学习
新⼈⾸单¥59
登录后,你可以任选3讲全文学习
课程目录
已完结/共 32 讲
开篇词 (1讲)
PyTorch 深度学习实战
15
15
1.0x
00:00/00:00
登录|注册

07 | Torchvision(中):数据增强,让数据更加多样性

你好,我是方远。
上一节课,我们一同迈出了训练开始的第一步——数据读取,初步认识了 Torchvision,学习了如何利用 Torchvision 读取数据。不过仅仅将数据集中的图片读取出来是不够的,在训练的过程中,神经网络模型接收的数据类型是 Tensor,而不是 PIL 对象,因此我们还需要对数据进行预处理操作,比如图像格式的转换。
与此同时,加载后的图像数据可能还需要进行一系列图像变换与增强操作,例如裁切边框、调整图像比例和大小、标准化等,以便模型能够更好地学习到数据的特征。这些操作都可以使用torchvision.transforms工具完成。
今天我们就来学习一下,利用 Torchvision 如何进行数据预处理操作,如何进行图像变换与增强。

图像处理工具之 torchvision.transforms

Torchvision 库中的torchvision.transforms包中提供了常用的图像操作,包括对 Tensor 及 PIL Image 对象的操作,例如随机切割、旋转、数据类型转换等等。
按照torchvision.transforms 的功能,大致分为以下几类:数据类型转换、对 PIL.Image 和 Tensor 进行变化和变换的组合。下面我们依次来学习这些类别中的操作。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Torchvision数据增强技术让数据更多样化,为模型训练提供更丰富的数据特征。文章介绍了利用Torchvision进行数据预处理操作和图像变换与增强的方法。首先讲解了数据类型转换的方法,包括PIL.Image或Numpy.ndarray格式的数据转化为Tensor格式以及反向操作。接着详细介绍了对PIL.Image和Tensor进行变换的操作,包括Resize、剪裁、翻转等。最后,介绍了针对Tensor的变换操作中最常用的标准化方法。文章还提到了使用Compose类将多个变换组合起来进行连续操作,以及如何结合datasets使用这些操作。通过这些技术,读者可以在数据加载的同时进行一系列图像变换与数据增强操作,加快模型收敛速度,让模型更好地学习到数据特征。下一节课将介绍Torchvision中其他有趣的功能,包括经典网络模型的实例化与其他有用的函数。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《PyTorch 深度学习实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(19)

  • 最新
  • 精选
  • 上岸吧,Adagio
    老师您好,请问 img1 = transforms.ToTensor()(img) img2 = transforms.ToPILImage()(img1) 是怎么使用的呢? transforms.ToTensor是一个类,为什么不把img当做参数传给这个类做初始化呢? transforms.ToTensor()是创建一个对象吗?为什么后面又直接传入了(img)参数呢? 不太懂这一块的细节,请老师帮忙解答下~

    作者回复: Hi,感谢你的提问。 transforms.ToTensor() 相当于创建了一个ToTensor的实例。 transforms.ToTensor()(img) 是执行了ToTensor中的__call__方法(如下链接)。 https://github.com/pytorch/vision/blob/main/torchvision/transforms/transforms.py#L123 这部分属于Python的知识,详细的内容你可以看看Python中__call__的作用。简单来说__call__的作用是使实例能够像函数一样被调用。 transforms.ToPILImage()同理。^^

    2021-12-01
    9
  • Yuhan
    老师您好,感觉应该注明一下display函数的来源,是Ipython.display 里面的display函数吗?

    作者回复: 你好,Yuhan,感谢你的留言。 display的来源是: from IPython.display import display 在jupyter中可以直接调用无需import。^^

    2021-10-25
    5
    9
  • vcjmhg
    Torchvision 中 transforms 模块的作用:封装了常用的图像操作,例随机切割、旋转、数据类型转换、tensor 与 numpy 和 PIL Image 的互换等。

    作者回复: 你好,谢谢留言。完美👍🏻👍🏻👍🏻👍🏻👍🏻👍🏻👍🏻👍🏻👍🏻👍🏻。:)加油~

    2021-10-27
    6
  • 汤火火火
    老师您好,我想问一下,在训练时对图像做了标准化,那测试的时候需要对测试图像做标准化吗?

    作者回复: 你好,汤火火火,感谢留言。 需要,预测时数据做的预处理(标准化之类的)操作要与训练时做的预处理操作一毛一样。

    2022-01-20
    3
    3
  • 天凉好个秋
    老师你好,在使用 Resize 的时候,出现以下 warning: UserWarning: Argument interpolation should be of type InterpolationMode instead of int. Please, use InterpolationMode enum. 在之前的回答中给的解决方案的第二条:将Image.BICUBIC 替换为InterpolationMode.BICUBIC,这个是在哪儿替换?transforms.py的源代码中也没有相关代码

    作者回复: Hi, 是resize中的interpolation参数。 例如,torchvision.transforms.Resize((128, 128), interpolation=InterpolationMode.BICUBIC)。 这个参数接收int也可以,就是当int的时候,就会报这个warning。

    2021-12-18
    3
  • 亚林
    Torchvision 中 transforms 模块的作用图像数据的预处理。怎么标准化,这些标准化参数是如何确定的类?

    作者回复: 你好,亚林 是说标准化的参数如何确定的是吧。 通常来说如果使用其他人的模型做微调的话,就要与原作者的数据处理方式一致,例如后面的图像分类中讲的EfficientNet。我想这也是大部分会遇到的情况。 如果是完全自己重新训练的话,可以参考一些ImageNet上的预处理方式,其实也就那几种,减均值,除以标准差之类的。

    2022-05-12
    2
  • 问鼎苍穹
    老师您好,transforms是只能对图像的tensor数据进行处理是吧,对于表格类型的数据是不能进行数据增强的操作是吗,如果要对表格类型的数据进行数据增强应该如何操作呢

    作者回复: 你好,感谢留言。 应该也是可以的,不过我没试过。

    2022-09-11归属地:北京
    1
  • 快快🔥
    老师,我想问下,在transform.dataset()中进行transforms的转换操作,是会将原图像数据覆盖掉吗,还是产生新的转换后的数据。

    作者回复: hi,你好。感谢留言。输入给模型的数据是转换后的数据。原始图像不会变。

    2021-11-28
    1
  • ifelse
    transform可以进行图片与tensor的数据转类型转换,还可以进行旋转,裁剪,缩放等操作,与datasets搭配使用时,可以在加载数据的过程中,完成数据的增强操作。

    作者回复: 👍🏻

    2023-11-25归属地:浙江
  • Jacob.C
    方远老师好,像FiveCrop这样一个样本变多个样本的变换,dataset加载的时候,标签如何跟着变多呢?不然会对不齐呀。

    作者回复: hi,你好,这块Pytorch会帮我们搞定,不需要额外处理

    2023-01-24归属地:广东
收起评论
显示
设置
留言
19
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部