图像语义分割 Deeplab v3+报错[`predictions` out of bound]解决办法

在Windows 10环境下,使用Tensorflow 1.6.0和Python 3.6.4进行图像语义分割时,运行DeeplabV3+的eval.py报错。经过排查,错误根源在于VOC2012数据集的SegmentationClass标签文件格式错误,原本为3通道RGB,需要转换为单通道'L'格式。转换后程序运行正常,得到MIOU值,但由于仅训练了30步,结果不佳。

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

  运行环境:windows10 + Tensorflow 1.6.0 + Python 3.6.4(笔记本无GPU)

  参考文章:https://blog.youkuaiyun.com/qq_32799915/article/details/80070711(图像语义分割 DeepLab v3+ 训练自己的数据集)            

  运行DeeplabV3+,数据集为VOC2012,整个过程参考上文,在运行eval.py时报错,报错的页面如下:Predictions out of bound,刚开始以为是dataset.ignore_label = 255,导致Predictions里出现255,而VOC总共类别数为21(包括背景),从而报错,然而修改ignore_label的值也仍然报错。

   曾一度以为可能是版本问题,但仔细查看报错信息,否决了自己的这个想法。

     最终不断尝试后发现:是Label数据存在问题

  DeeplabV3+的数据集应包括2个部分,images和labels,image为[n*m*3],jpg格式,label为[n*m*1],png格式。而VOC2012 SegmentationClass中的label数据格式为[n*m*3],只需将label数据从RGB的3通道转为’L'的单通道即可,代码如下:

import numpy as np
from PIL 
### DeepLabv3+ 实现语义分割的教程 #### 项目简介 本项目采用 PyTorch 实现了 Deeplabv3+ 算法来训练用于自动驾驶场景中的语义分割模型。数据集由 LabelMe 工具标注,共包含六个类别:车辆、虚线、右车道、中间车道、坑洼以及背景[^1]。 #### 模型准备 为了提高训练效率,在未对底部模块进行预训练的情况下,建议先让底模搭配图像分类任务的头部通过图像分类任务进行预训练,然后再将其参数迁移到 Deeplab 中[^2]。 #### 关键技术点 Deeplab V3+ 利用了空洞卷积(Atrous Convolution),这使得网络能够在不增加计算量的同时扩大感受野范围,从而更好地捕捉上下文信息[^3]。 对于低级特征图,使用 \(1 \times 1\) 卷积降低其维度至48个通道;随后将这些经过降维后的低层特征映射与来自 ASPP 的高层特征映射相结合,并利用双线性插值调整大小以匹配输入图像尺寸。最终输出具有相同分辨率于原始输入图片的结果图象[^5]。 以下是简化版本的 Python 代码片段展示如何构建并运行一个简单的 Deeplab v3+: ```python import torch from torchvision import models, transforms from PIL import Image import numpy as np def load_model(): model = models.segmentation.deeplabv3_resnet101(pretrained=True) model.eval() return model transform = transforms.Compose([ transforms.Resize((513, 513)), transforms.ToTensor(), transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) ]) image_path = "path_to_your_image" img = Image.open(image_path).convert('RGB') input_tensor = transform(img).unsqueeze(0) model = load_model() with torch.no_grad(): output = model(input_tensor)['out'][0] output_predictions = output.argmax(0) 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") r = Image.fromarray(output_predictions.byte().cpu().numpy()).resize(img.size) r.putpalette(colors) plt.imshow(r) plt.show() ``` 此段脚本展示了加载预训练好的 ResNet-101 版本的 DeeplabV3+, 对单张测试图片执行推理操作的过程,并可视化预测结果。
评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值