文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

pytorch transforms图像增强怎么实现

2023-07-05 22:17

关注

这篇文章主要介绍“pytorch transforms图像增强怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“pytorch transforms图像增强怎么实现”文章能帮助大家解决问题。

一、前言

本文基于的是pytorch3.7.1

二、图像处理

深度学习是由数据驱动的,而数据的数量和分布对于模型的优劣具有决定性作用,所以我们需要对数据进行一定的预处理以及数据增强,用于提升模型的泛化能力。

一般来说深度学习神经网络训练前都需要做数据增强 (Data Augmentation) 又称为数据增广、数据扩增,它是对 训练集 进行变换,使训练集更丰富,从而让模型更具 泛化能力

下面为常见的图像变换

1.原始图片

显示图片,并读取图片大小

from torchvision import transformsfrom PIL import Image # 用于读取图片import  matplotlib.pyplot as plt # 用于显示图片image_path = './dog.jpg'image = Image.open(image_path)plt.imshow(image)print(image.size)plt.show()

2.调整图片大小transforms.Resize

2.1.transforms.Resize(x)

主要用于调整PILImage对象的尺寸大小,图片短边缩放至x,长宽比保持不变

将图片短边缩放至x,长宽比保持不变,上述图片执行transforms.Resize(300)

from torchvision import transformsfrom PIL import Image # 用于读取图片import  matplotlib.pyplot as plt # 用于显示图片# 图片显示,打印图片大小image_path = './dog.jpg'image = Image.open(image_path)resize = transforms.Resize(300)image1 = resize(image)plt.imshow(image1)print(image1.size)plt.show()
2.2.transforms.Resize([x, y])

同时指定图片长宽,这样会改变长宽比例但是不是裁剪,可以恢复

from torchvision import transformsfrom PIL import Image # 用于读取图片import  matplotlib.pyplot as plt # 用于显示图片# 图片显示,打印图片大小image_path = './dog.jpg'image = Image.open(image_path)resize = transforms.Resize([512, 300])image1 = resize(image)plt.imshow(image1)print(image1.size)plt.show()
2.3关于图片的恢复

测试代码

from torchvision import transformsfrom PIL import Image # 用于读取图片import  matplotlib.pyplot as plt # 用于显示图片# 图片显示,打印图片大小image_path = './dog.jpg'image = Image.open(image_path)w, h = image.sizeresize = transforms.Resize([512, 300])image1 = resize(image)resize2 = transforms.Resize([h, w])image2 = resize2(image1)plt.imshow(image2)print(image2.size)plt.show()

注意这里要使用transforms.Resize([h, w])

3.图片裁剪

3.1中心裁剪transforms.CenterCrop

作用:中心裁剪图片

主要参数:size,表示需要裁剪的图片大小

代码示例:

from torchvision import transformsfrom PIL import Imageimport matplotlib.pyplot as plttransform = transforms.CenterCrop(512)image_path= "./dog.jpg"image = Image.open(image_path)image1 = transform(image)plt.imshow(image1)print(image1.size)plt.show()image1.save('./dog_clipping.jpg')
3.2随机裁剪transforms.RandomCrop(size,padding=None,pad_if_needed=False,fill=0,padding_mode='constant')

主要参数:

size:为需要裁剪的图片大小

padding:设置填充大小

大小为a:表示上下左右都填充a个元素

大小为(a, b):表示左右填充a个元素,上下填充b个元素

大小为(a, b, c, d):表示左上右下填充a, b, c, d个元素

pad_if_needed:若图像小于设定 size,则填充,此时该项需要设置为 True

padding_mode:填充模式,主要有四种

fill:当填充模式为padding_mode的填充值

代码示例:

 from torchvision import transformsimport matplotlib.pyplot as pltfrom PIL import Imagetransform = transforms.RandomCrop(size=(512, 512), padding=50, pad_if_needed=True, fill=0,padding_mode="constant")image_path = "./dog.jpg"image = Image.open(image_path)random_crop_image = transform(image)print(random_crop_image.size)plt.imshow(random_crop_image)plt.show()random_crop_image.save("./random_crop_image.jpg")
3.3transforms.RandomResizedCrop

RandomResizedCrop(size,scale=(0.08,1.0),ratio=(3/4,4/3),interpolation)

将给定图像随机裁剪为不同的大小和宽高比,然后缩放所裁剪得到的图像为制定的大小;

主要参数:

size:为最终图片要resize的大小

scale:为随机采样最少要覆盖原图的比例,在resize前

ratio:为随机采样宽高的比例,也在resize前

interpolation:插值方法

代码示例:

from torchvision import transformsimport matplotlib.pyplot as pltfrom PIL import Imagetransform = transforms.RandomResizedCrop(size=(256, 256),                                         scale=(0.08, 1),                                         ratio=(3/ 4, 4/3),                                         interpolation=Image.NEAREST)image_path = "./dog.jpg"image = Image.open(image_path)random_resize_crop_image = transform(image)print(random_resize_crop_image.size)plt.imshow(random_resize_crop_image)plt.show()random_resize_crop_image.save("./dog_random_resize_crop.jpg")

4.图片翻转与旋转

4.1.transforms.RandomHorizontalFlip(p=0.5)水平翻转

p为旋转的概率

代码示例:

from torchvision import transformsimport matplotlib.pyplot as pltfrom PIL import Imagetransform = transforms.RandomHorizontalFlip(p=0.7)image_path = "./dog.jpg"image = Image.open(image_path)RandomHorizontalFlip_image = transform(image)print(RandomHorizontalFlip_image.size)plt.imshow(RandomHorizontalFlip_image)plt.show()RandomHorizontalFlip_image.save("./RandomHorizontalFlip_image.jpg")
4.2transforms.RandomVerticalFlip垂直翻转

代码示例

from torchvision import transformsimport matplotlib.pyplot as pltfrom PIL import Imagetransform = transforms.RandomVerticalFlip(p=0.8)image_path = "./dog.jpg"image = Image.open(image_path)RandomVerticalFlip_image = transform(image)print(RandomVerticalFlip_image.size)plt.imshow(RandomVerticalFlip_image)plt.show()RandomVerticalFlip_image.save("./RandomVerticalFlip_image.jpg")
4.3旋转transforms.RandomRotation
RandomRotation(degrees,resample=False,expand=False,center=None)

主要参数:

        当为 a 时,在 (-a, a) 之间随机选择旋转角度。

        当为 (a, b) 时,在 (a, b) 之间随机选择旋转角度。

代码示例:

from torchvision import transformsimport matplotlib.pyplot as pltfrom PIL import Imagetransform = transforms.RandomRotation(degrees=90,resample=False, expand=True, center=None, fill=0)image_path = "./dog.jpg"image = Image.open(image_path)RandomRotation_image = transform(image)print(RandomRotation_image.size)plt.imshow(RandomRotation_image)plt.show()RandomRotation_image.save("./RandomRotation_image.jpg")

关于“pytorch transforms图像增强怎么实现”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网行业资讯频道,小编每天都会为大家更新不同的知识点。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯