Transforms的使用

Transform 主要是用于图像变换的操作,可以对图像进行裁剪、标准化等,在使用前需要先将图像转换成张量的形式。 Transform 属于 torchvision 这个库,torchvision 是专门用于计算机视觉的库,所谓的计算机视觉就是让计算机能够读取图像和视频数据并进行相关的处理,如图像识别、图像分类等。

通过transforms.ToTensor看两个问题

1:transforms该如何使用(python)

传入一个img类型的图像自动转成tensor类型的 

示例:

此处控制台输出了类型为tensor

使用步骤:

img = Image.open(img_path)

# 转换类型
trans_tensor = transforms.ToTensor()#创建对象
img_tensor = trans_tensor(img)

2:   为什么需要Tensor数据类型

Tensor数据类型包装了反向神经网络理论所需的一些参数

代码步骤详解:

要用于演示如何使用 PyTorch 的 torchvision.transforms 模块来对图像进行预处理,并使用 torch.utils.tensorboard.SummaryWriter 将处理后的图像记录到 TensorBoard 中进行可视化。下面是每个步骤的详细解释:

1. 导入必要的库

from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms

- PIL (Pillow): 用于打开和操作图像。

SummaryWriter: 用于将数据写入 TensorBoard,这是一个可视化工具,可以帮助理解、调试和优化模型。

transforms: 包含多种图像转换方法,用于数据增强和预处理。

2. 加载图像

img_path = "practice/train/bees_image/16838648_415acd9e3f.jpg"

img = Image.open(img_path)

- 指定图像的路径并使用 Image.open 方法加载图像。

3. 图像转换为张量

trans_tensor = transforms.ToTensor()

img_tensor = trans_tensor(img)

- transforms.ToTensor():将 PIL 图像或 NumPy ndarray 转换为 FloatTensor,并将图像的像素值从 [0, 255] 缩放到 [0.0, 1.0]。这一步是必要的,因为大多数神经网络模型都预期输入是张量形式。

4. 初始化 TensorBoard 写入器

writer = SummaryWriter("logs")

- 创建一个 SummaryWriter 实例,用于写入日志到指定的目录(这里是 "logs")。

5. 将图像写入 TensorBoard

writer.add_image("Tensor", img_tensor, 0)

- 使用 add_image 方法将图像张量写入 TensorBoard,可以在 TensorBoard 中查看原始图像。

6. 标准化图像

tensor_norm = transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])
img_norm = tensor_norm(img_tensor)
writer.add_image("Normalization", img_norm, 0)

- transforms.Normalize(mean, std):对张量图像进行标准化,使用公式 (input - mean) / std。这有助于模型训练时的收敛,因为它使数据具有零均值和单位方差。

7. 调整图像大小

trans_resize = transforms.Resize((512, 512))

img_resize = trans_resize(img_tensor)

writer.add_image("Resize", img_resize)

- transforms.Resize:调整图像的尺寸。这通常用于确保输入图像符合模型的预期输入尺寸。

8. 组合转换

trans_resize_2 = transforms.Resize((512, 512))

trans_comp = transforms.Compose([trans_resize_2, trans_tensor])

img_comp = trans_comp(img)

writer.add_image("Resize", img_comp, 1)

9. 随机裁剪图像

trans_crop = transforms.RandomCrop((100,100), 50)
for i in range(10):
    img_crop = trans_crop(img_tensor)
    writer.add_image("RandomCrop", img_crop, i)

10. 关闭 TensorBoard 写入器

writer.close()

完整代码:

from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms

# 图像文件路径
img_path = "practice/train/bees_image/16838648_415acd9e3f.jpg"
# 使用PIL库打开图像
img = Image.open(img_path)

# 创建一个将PIL图像转换为张量的转换操作
trans_tensor = transforms.ToTensor()
# 将图像转换为张量,调整存储格式和值的范围
img_tensor = trans_tensor(img)

# 创建一个TensorBoard摘要写入器,用于记录图像
writer = SummaryWriter("logs")
# 将转换后的张量图像写入TensorBoard
writer.add_image("Tensor", img_tensor, 0)

# 创建一个标准化转换操作,用于图像数据的标准化处理
tensor_norm = transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])
# 应用标准化
img_norm = tensor_norm(img_tensor)
# 将标准化后的图像写入TensorBoard
writer.add_image("Normalization", img_norm, 0)

# 创建一个调整图像大小的转换操作
trans_resize = transforms.Resize((512, 512))
# 应用大小调整
img_resize = trans_resize(img_tensor)
# 将调整大小后的图像写入TensorBoard
writer.add_image("Resize", img_resize)

# 创建另一个调整大小的转换操作,并与转换为张量的步骤组合
trans_resize_2 = transforms.Resize((512, 512))
trans_comp = transforms.Compose([trans_resize_2, trans_tensor])
# 应用组合的转换操作
img_comp = trans_comp(img)
# 将组合转换后的图像写入TensorBoard
writer.add_image("Resize", img_comp, 1)

# 创建一个随机裁剪的转换操作
trans_crop = transforms.RandomCrop((100,100), 50)
# 应用随机裁剪多次,并记录每次的结果
for i in range(10):
    img_crop = trans_crop(img_tensor)
    writer.add_image("RandomCrop", img_crop, i)

# 关闭TensorBoard写入器
writer.close()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值