pytorch零基础实现语义分割项目(二)——标签转换与数据加载

本文是语义分割项目的第二部分,主要介绍如何将RGB标签转换为类别标签,以及如何处理数据加载,包括随机裁剪和数据加载类的设计,以适应大规模图像的训练需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目列表

语义分割项目(一)——数据概况及预处理

语义分割项目(二)——标签转换与数据加载

语义分割项目(三)——语义分割模型(U-net和deeplavb3+)

语义分割项目(四)——模型训练与预测


前言

在前面的文章中我们介绍了数据集的概况以及预处理,在训练之前除了数据预处理之外我们还需要对于标签进行处理,因为标签是以RGB格式存放的,我们需要把他们变换成常见的类别标签,并且因为语义分割问题是针对像素的分类,在数据量较大的情况下容易内存溢出(OOM),所以我们往往需要重写数据加载类针对大量数据进行加载。

### 使用PyTorch实现FCN进行语义分割的预测 为了完成使用PyTorch编写的FCN(全卷积网络)进行语义分割的任务,可以按照如下方式构建并应用模型: #### 加载预训练模型和数据准备 首先确保已经安装了必要的库,并加载预训练好的FCN模型。假设已有定义好的`FCN`类。 ```python import torch from torchvision import transforms from PIL import Image import numpy as np import matplotlib.pyplot as plt # 假设已存在上述提到的FCN类定义 model = FCN(num_classes=21) # 这里num_classes取决于具体的应用场景中的类别数量 checkpoint = torch.load('path_to_pretrained_model.pth') # 替换为实际路径 model.load_state_dict(checkpoint['state_dict']) model.eval() # 设置模型为评估模式 ``` #### 数据预处理 对于输入图片的数据预处理非常重要,这通常涉及到尺寸调整、标准化等操作。 ```python preprocess = transforms.Compose([ transforms.Resize((256, 256)), # 调整大小到固定尺寸 transforms.ToTensor(), # 将PIL图像转换成tensor transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) # 归一化 ]) img_path = 'your_image.jpg' # 输入待测图片路径 input_image = Image.open(img_path).convert('RGB') input_tensor = preprocess(input_image) input_batch = input_tensor.unsqueeze(0) # 创建批次维度 [batch_size, C, H, W] if torch.cuda.is_available(): model.to('cuda') input_batch = input_batch.to('cuda') with torch.no_grad(): # 不跟踪梯度计算以节省内存 output = model(input_batch)['out'][0] output_predictions = output.argmax(0) # 显示原始图片预测结果对比 plt.figure(figsize=(10, 5)) plt.subplot(1, 2, 1) plt.imshow(np.asarray(input_image)) plt.title("Original Image") plt.subplot(1, 2, 2) palette = torch.tensor([2 ** 25 - 1, 2 ** 15 - 1, 2 ** 21 - 1]) colors = torch.as_tensor([i for i in range(21)])[:, None] * palette colors = (colors % 255).numpy().astype("uint8") raster = Image.fromarray(output_predictions.byte().cpu().numpy()).resize(input_image.size) raster.putpalette(colors) plt.imshow(raster) plt.title("Segmentation Result") plt.show() ``` 此段代码展示了如何利用预先训练过的FCN模型来进行单幅图像的语义分割预测[^3]。通过这段代码可以看到完整的流程——从读取图片文件开始直到最终展示分割后的彩色标签图结束。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

艾醒(AiXing-w)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值