深度学习图像处理技术

深度学习领域,图像分类、分割、目标识别等任务中,经常需要处理各种类型的数据。这些数据往往不是期望的格式,这时候就需要进行数据转换。本文将介绍如何使用PyTorch的torchvision.transforms模块来进行图像数据的转换和增强。

图像转换

图像转换是数据预处理的重要环节,它可以帮助将数据转换成适合训练的格式。以下是一些常用的图像转换技术:

PyTorch中,通常使用张量(tensor)来处理数据。如果输入数据是NumPy数组或PIL图像,可以使用ToTensor将其转换为张量格式。转换后的张量形式为(C * H * W),并且会将像素值从0-255的范围缩放到0-1。

transform = transforms.ToTensor()

标准化操作会根据均值和标准差对张量图像进行标准化。它有三个参数:mean、std和inplace。需要为三个通道提供均值序列作为'mean'参数,同样地,为'std'参数提供标准差序列。如果将'inplace'设置为True,则当前张量将反映这些变化。

transforms.Normalize([meanOfChannel1, meanOfChannel2, meanOfChannel3], [stdOfChannel1, stdOfChannel2, stdOfChannel3])

这个转换将在图像中心进行裁剪。可以提供想要的裁剪尺寸(高度,宽度)作为输入到transforms.CenterCrop()。如果提供的裁剪尺寸大于原始尺寸,图像将在边缘处用0填充。

transform = transforms.Compose([transforms.ToTensor(), transforms.CenterCrop((200, 100))])

这个转换将以给定的概率随机水平翻转图像。可以通过参数'p'设置这个概率。默认值p为0.5。

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

这个转换将随机旋转图像一个角度。可以将角度(以度为单位)作为输入提供给参数“degrees”。

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

这个转换将原始的RGB图像转换为灰度(即黑白)图像。可以提供想要的输出通道数作为参数“num_output_channels”。

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

这个转换将使用随机选择的高斯模糊对图像进行模糊处理。必须提供kernel_size参数。

transform = transforms.Compose([transforms.GaussianBlur(kernel_size=5)])

这个转换将随机应用给定的一系列转换,概率为p。

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

一直在使用Compose()。为了明确定义,它将多个转换组合在一起。

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

在所有学到的转换中,可能会注意到参数是随机生成的。这通常足以进行数据增强。但是,有时可能需要更精细地控制转换管道。在这种情况下,可以使用功能性转换。在这里,可以指定或生成所有参数。一个额外的好处是,一个特别定义的功能性转换可以应用于多个图像。

所有功能性转换都可以从torchvision.transforms.functional访问。

这个转换专注于调整图像的亮度。它以PyTorch张量的形式接受图像作为输入。它还有一个重要的参数“brightness_factor”。这将表示如何实际改变亮度。例如,如果值为1,将得到与输入相同的图像。如果值大于1,将得到一个更亮的图像。如果它小于1,将得到一个更暗的图像。可以根据需要传递一个浮点值。返回的图像将在张量或PIL图像中。

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

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

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

色调是图像的一个重要属性。PyTorch允许通过transforms.functional.adjust_hue来调整它。想知道它是怎么工作的吗?首先,图像将被转换为HSV(色调、饱和度、值)形式。变化将根据参数在H通道中进行。更改后,图像将被转换回其原始形式。这个的重要参数是“hue_factor”。它可以是一个在[-0.5, 0.5]范围内的浮点值。尝试实现以下示例。

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

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

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

可以通过这个转换调整图像的锐度。它接受一个浮点值作为“sharpness_factor”参数的输入。这个值可以是任何非负数。在下面的代码中,使用了一个锐度因子为10,这意味着转换后的图像将比原始图像锐利10倍。

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

这个转换将均衡化图像的直方图。这是如何发生的?它将对输入应用非线性映射,这将在输出中创建一个灰度值的均匀分布。

new_img = transforms.functional.equalize(image)

这些是一些重要的功能性转换,它们将帮助在图像预处理阶段。它们也可以以组合的方式一起使用。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485