查看原文
其他

十大PyTorch最常用的转换函数

The following article is from 深度学习与计算机视觉 Author 磐怼怼

点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

介绍

Pytorch是一个深度学习框架,广泛用于图像分类、分割、目标识别等各种任务。在这种情况下,我们必须处理各种类型的数据。很可能在大多数情况下,数据可能不是我们所需要的格式。PyTorch转换就是救星。

torchvision.transforms模块提供了可以使用的各种图像转换。我们使用变换对数据进行一些操作,使其适合于训练torchvision模块,PyTorch为常见的图像变换提供变换有关的函数。这些变换可以使用Compose链接在一起。

让我们在本文中看看其中的几个!准备好了吗?

1. ToTensor

这是一个非常常用的转换。在PyTorch中,我们主要处理张量形式的数据。如果输入数据是NumPy数组或PIL图像的形式,我们可以使用ToTensor将其转换为张量格式。

最后一个张量的形式是(C * H * W)。同时,还执行从0–255到0–1的范围内的缩放操作。

让我们用一个例子来更好地理解它。在这个博客中,我将使用Ragnar(我最喜欢的虚构角色)的图像来执行转换。


2.  Normalize

此操作将获取张量图像,并使用平均值和标准差对其进行归一化。它有3个参数:mean, std, inplace。我们需要为3个通道提供一系列平均值,作为参数“mean”,“std”类似。如果将“inplace”设为True,则将计算得到的值覆盖之前的值。

torchvision.transforms.Normalize([meanOfChannel1, meanOfChannel2, meanOfChannel3], [stdOfChannel1, stdOfChannel2, stdOfChannel3])
#Example:
transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))

3. CenterCrop

这将在中心裁剪给定的张量图像。你可以以(高度、宽度)的形式向transforms.CenterCrop()提供要裁剪的大小作为输入。让我们在图像上实现这个并进行检查。

transform = transforms.Compose([transforms.ToTensor(),transforms.CenterCrop((200,100))])
tensor_img = transform(image)
tensor_img.shape
Output: torch.Size([3, 200, 100])

如果只提供一个尺寸标注而不是两个尺寸标注,会发生什么情况?

它将假设它是一个正方形,并且将生成一个(size, size))的裁剪。

如果给定的尺寸比原来的尺寸大呢?

沿着这些边,图像将填充0!

4. RandomHorizontalFlip

此变换将以给定的概率水平(随机)翻转图像。你可以通过参数“p”来设置这个概率。p的默认值为0.5。

检查我下面的例子来理解。

transform = transforms.Compose([transforms.RandomHorizontalFlip(p=0.9)])
tensor_img = transform(image)
tensor_img

查看原始图像和翻转的图像!


5. RandomRotation

此变换将图像随机旋转一个角度。以度为单位的角度可以作为参数“degrees”的输入。

transform = transforms.Compose([transforms.RandomRotation(degrees=180)])
tensor_img = transform(image)
tensor_img

查看上述代码的转换!


旋转图像

6. Grayscale

此转换将把原始RGB图像更改为灰度(即黑白)。你可以提供你想要多少个通道作为参数“num_output_channels”的输入。

transform = transforms.Compose([transforms.Grayscale(num_output_channels=1)])
tensor_img = transform(image)
tensor_img

输出如下所示。


7. GaussianBlur

在这里,图像将被随机选择的高斯模糊所模糊。必须提供参数kernel_size。

transform = transforms.Compose([transforms.GaussianBlur(kernel_size=501)])
tensor_img = transform(image)
tensor_img



8. RandomApply

此转换将随机应用给定的转换列表。

transform = transforms.RandomApply([transforms.RandomSizedCrop(200),transforms.RandomHorizontalFlip()],p=0.6)
tensor_img = transform(image)

9. Compose

在本文中,我们一直在使用Compose() 。为了清楚地定义它,它将几个变换组合在一起。

transforms.Compose([transforms.Grayscale(1),transforms.CenterCrop(10), transforms.ToTensor()])

一些转换将以所需格式处理数据。然而,对于图像数据增强,则需要灰度、随机水平翻转和随机旋转等变换。

10. 函数变换

在我们学习到的所有变换中,你可以注意到参数是随机生成的。这通常足以进行数据扩充。但是,有时你可能需要对转换管道进行更细粒度的控制。在这种情况下,可以使用函数变换。在这里,你可以指定或生成所有参数。一个附加的优点是,一个特定定义的函数变换可以应用于多个图像。

可以从torchvision.transforms.functional访问所有函数转换。

现在让我们深入了解PyTorch提供的不同功能转换。

A) 调整亮度:adjust_brightness

这主要是调整图像的亮度。它以PyTorch张量的形式将图像作为输入。它还有一个重要参数“亮度系数”。这将表示如何实际更改亮度。

例如,如果值为1,则会得到与输入相同的图像。如果该值大于1,将获得更亮的图像。如果它小于1,你会得到一个更暗的图像。可以相应地传递浮点值。返回的图像将是张量或PIL图像。

new_img = transforms.functional.adjust_brightness(image,brightness_factor=2)
new_img



B) 调整对比度:adjust_contrast

上面我们看到了如何调整亮度,这里我们有另一个用于调整图像对比度的变换。它需要两个输入参数:张量形式的图像和“对比度因子”。第二个参数将输入一个浮点值,它将告诉你如何调整对比度。但不能是负的。

new_img = transforms.functional.adjust_contrast(image,contrast_factor=3.8)
new_img

C) 调整色调:adjust_hue

色调是图像的一个重要属性。Pytorch允许你通过transforms.functional.adjust_hue进行调整。

想知道它是怎么工作的吗?

首先,图像将被转换成HSV(色调,饱和度,值)形式。将根据我们的参数在H通道中进行更改。更改后,图像将转换为其原始形式。重要的参数是“色调因子”。它可以是[-0.5.0.5]范围内的浮点值。尝试实现下面的示例。

new_img = transforms.functional.adjust_hue(image,hue_factor=0.3)
new_img



D) 调整饱和度:adjust_saturation

这是为了调整输入图像的颜色饱和度。与上述情况类似,我们有一个“饱和度系数”参数,它决定了饱和度的变化方式。这将输入一个浮点值。如果将其设置为0,则会得到黑白图像。

new_img = transforms.functional.adjust_saturation(image,saturation_factor=6)

输出如下图所示!



E) 调整锐度:adjust_sharpness

你可以通过此变换调整图像的清晰度。它采用浮点值作为“锐度系数”参数的输入。此值可以是除负值以外的任何值。

在下面的代码中,我使用了10的锐度因子,这意味着变换后的图像将是原始图像的10倍锐度。

new_img = transforms.functional.adjust_sharpness(image,sharpness_factor=10)

检查输出!



F) 均衡:equalize

这种变换将均衡图像的直方图。

怎么会这样?

它将对输入应用非线性映射,从而在输出中创建灰度值的均匀分布。

new_img = transforms.functional.equalize(image)

这些是一些重要的函数转换,将有助于在图像预处理阶段。它们也可以组合使用。

下载1:OpenCV-Contrib扩展模块中文版教程
在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲
在「小白学视觉」公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲
在「小白学视觉」公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群


欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存