深度学习中用来训练的train.py 探究学习2.1( 数据预处理)

下列为mmcls中数据预处理部分 

train_pipeline是一个训练过程的配置列表,用于定义数据预处理的步骤。下面是train_pipeline中各个步骤的介绍:

1. LoadImageFromFile:从文件中加载图像。

2. RandomResizedCrop:随机缩放裁剪图像到指定大小。

3. RandomFlip:以一定的概率随机水平翻转图像。

4. Normalize:对图像进行归一化处理。

5. ImageToTensor:将图像转换为张量。

6. ToTensor:将标签转换为张量。

7. Collect:将图像和标签组合成一个集合。

这些步骤按照顺序依次进行,每个步骤都会对输入数据进行一定的处理。通过这些步骤,可以对训练数据进行预处理,以便于后续的模型训练。

train_pipeline = [
    dict(type='LoadImageFromFile'),
    dict(type='RandomResizedCrop', size=448),  # 随机缩放裁剪
    dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'),  # 随机翻转
    dict(type='Normalize', **img_norm_cfg),
    dict(type='ImageToTensor', keys=['img']),
    dict(type='ToTensor', keys=['gt_label']),
    dict(type='Collect', keys=['img', 'gt_label'])  # 图像和标签的集合
]

 1.LoadImageFromFile

LoadImageFromFile是一个常用的图片处理方法,用于从文件中加载图像数据。它通常是图像处理的第一步,续的处理都是基于已加载的图像数据进行的。

以下是一个示例代码,演示了如何使用LoadImageFromFile方法加载图像文件:

from PIL import Image

def LoadImageFromFile(file_path):
    image = Image.open(file_path)
    return image

# 调用LoadImageFromFile方法加载图像文件
image_path = 'path/to/image.jpg'
image = LoadImageFromFile(image_path)

# 可以对加载的图像进行进一步的处理
# ...

在上述示例中,我们首先导入了PIL库中的Image模块,然后定义了一个LoadImageFromFile函数,该函数接受一个文件路径作为参数,并使用Image.open方法加载图像文件。最后,我们可以对加载的图像进行进一步的处理。

2.RandomResizedCrop

RandomResizedCrop是一个图像预处理操作,用于随机裁剪和调整图像大小。它可以在给定的图像中随机选择一个区域,并将其调整为指定的大小。

以下是一个使用RandomResizedCrop的示例代码:

import torch
from torchvision import transforms

# 定义一个RandomResizedCrop操作
transform = transforms.RandomResizedCrop(224)

# 加载图像
image = Image.open('image.jpg')

# 对图像进行预处理
image = transform(image)

# 显示预处理后的图像
image.show()

在这个示例中,我们首先导入了torch和transforms模块。然后,我们定义了一个RandomResizedCrop操作,并将目标大小设置为224。接下来,我们加载了一张图像,并将其传递给RandomResizedCrop操作进行预处理。最后,我们显示了预处理后的图像。

3.RandomFlip

RandomFlip是一种数据增强操作,它可以随机翻转图像。在MMClassification中,可以使用以下配置来实现RandomFlip:

aug_cfg = dict(
    type='RandomFlip',
    flip_prob=0.5  # 翻转概率,这里设置为0.5表示50%的概率进行翻转
)

这里的flip_prob参数表示进行翻转的概率,设置为0.5表示50%的概率进行翻转。你可以根据需要调整翻转的概率。‘

4.ToTensor和ImageToTensor 的区别

ToTensor和ImageToTensor都是将图像数据转换为张量的操作,但它们的输入和输出形状略有不同。

ToTensor是PyTorch中的一个函数,它将PIL图像或numpy数组转换为张量。它的输入可以是灰度图像、RGB图像或多通道图像,输出的张量形状为(C, H, W),其中C是通道数,H是高度,W是宽度。对于灰度图像,C为1;对于RGB图像,C为3;对于多通道图像,C为通道数。

ImageToTensor是torchvision.transforms模块中的一个类,它也将PIL图像转换为张量。它的输入和输出形状与ToTensor相同,都是(C, H, W)。但是,ImageToTensor还可以处理带有alpha通道的图像,并将alpha通道作为额外的通道添加到输出张量中。

因此,ToTensor适用于大多数常见的图像转换任务,而ImageToTensor适用于需要处理带有alpha通道的图像的任务。

下面是一个示例,演示了ToTensor和ImageToTensor的使用:

from PIL import Image
import torchvision.transforms as transforms

# 加载图像
img = Image.open('image.jpg')

# 使用ToTensor进行转换
to_tensor = transforms.ToTensor()
tensor1 = to_tensor(img)
print("ToTensor output shape:", tensor1.shape)

# 使用ImageToTensor进行转换
image_to_tensor = transforms.ImageToTensor()
tensor2 = image_to_tensor(img)
print("ImageToTensor output shape:", tensor2.shape)

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
xiaoxingxing的头像xiaoxingxing管理团队
上一篇 2023年12月26日
下一篇 2023年12月26日

相关推荐