pred
and `label should be equal, but there are [1, 420, 520] and [1, 421, 520].在百度飞浆的图像分割相关套件paddleseg中训练segnet时的报错。
设备硬件以及相关配置:
GPU:GeForce RTX 3050 Laptop GPU
CUDA:11.7
cuDNN:8.8.0
paddlepaddle-gpu==2.4.2
项目文件夹版本:paddleseg-2.7
调用的配置文件:segnet_cityscapes_1024x512_80k.yml
修改之后的内容见下:
_base_: '../_base_/cityscapes.yml'
batch_size: 4
iters: 160000
train_dataset: #训练数据设置
type: Dataset #指定加载数据集的类。数据集类的代码在`PaddleSeg/paddleseg/datasets`目录下。
dataset_root: data/150images_dataset #数据集路径
train_path: data/150images_dataset/train.txt #数据集中用于训练的标识文件
num_classes: 2 #指定类别个数(背景也算为一类)
mode: train #表示用于训练
transforms: #模型训练的数据预处理方式。
- type: ResizeStepScaling #将原始图像和标注图像随机缩放为0.5~2.0倍
min_scale_factor: 0.5
max_scale_factor: 2.0
scale_step_size: 0.25
- type: RandomPaddingCrop #从原始图像和标注图像中随机裁剪512x512大小
crop_size: [256, 128]
- type: RandomHorizontalFlip #对原始图像和标注图像随机进行水平反转
- type: RandomDistort #对原始图像进行亮度、对比度、饱和度随机变动,标注图像不变
brightness_range: 0.5
contrast_range: 0.5
saturation_range: 0.5
- type: Normalize #对原始图像进行归一化,标注图像保持不变
val_dataset: #验证数据设置
type: Dataset #指定加载数据集的类。数据集类的代码在`PaddleSeg/paddleseg/datasets`目录下。
dataset_root: data/150images_dataset #数据集路径
val_path: data/150images_datasetal.txt #数据集中用于验证的标识文件
num_classes: 2 #指定类别个数(背景也算为一类)
mode: val #表示用于验证
transforms: #模型验证的数据预处理的方式
- type: Normalize #对原始图像进行归一化,标注图像保持不变
loss: #设定损失函数的类型
types:
- type: BinaryCrossEntropyLoss
model:
type: SegNet
pretrained: Null
num_classes: 2
在训练fcn时,训练到第一批验证集的时候报错:ValueError: Shape of pred
and `label should be equal, but there are [1, 420, 520] and [1, 421, 520].并停止运行
报错如上图,报错含义大概是“标签和数据组存在尺寸不匹配的问题”,可是检查了我的数据集划分之后的val.txt文档中的图片,在“images”和“labels”文件夹中找到对应图片进行检查之后并没有发现尺寸问题,如下图所示,原图和标签的尺寸是一样的。
我还查看了离报错最近的metrics.py文件,里面报错的地方大致就是说pred图片和label的尺寸不一样而报错,但是我思来想去并不知道为什么会这样,pred图片的高度莫名其妙的比原图少了一个像素点。然后在各大平台各种找也没有找到解决方案。
希望有有经验的人士能给一些建议
[1, 420, 520] and [1, 421, 520]
怎么搞第二个多了一个,检查下为什么不对应
您好,您的提议我有考虑,但是正如上面我问答的正文所说,原图和对应标签的尺寸经过检查都是一样的,也没有损坏的文件,而且同样的数据集我现在在用fcn跑并没有出现报错的情况,说明数据集应该是没有问题的。
我猜测不同的网络在读入数据集时作出了不同的运算,可能segnet在我的数据集上的运算有一些bug,导致运算之后原图和标签尺寸不匹配,但是本人短时间内并没有找到,还希望能给出相关建议@蓝白、波罗歌
该回答引用于gpt与OKX安生共同编写:
首先,建议检查输入数据的尺寸是否正确、在数据预处理过程中是否有对图像进行裁剪、缩放等操作。可以在数据预处理的代码中添加日志来帮助你更好地了解数据变换的过程。
其次,如果数据的尺寸没有问题,则可能是网络结构中存在维度调整的问题,需要仔细检查网络结构的实现代码。你使用的是SegNet,可以查看网络中的上采样过程是否正确实现。
最后,你还可以考虑将batch size设置为1进行训练,并逐步增加batch size的大小。这可以帮助你找到导致维度不一致的具体原因,并进行针对性的调整。
希望这些建议能够帮助你解决问题。
以下答案由GPT-3.5大模型与博主波罗歌共同编写:
根据报错信息,它是在验证集上的迭代中出现了问题,具体是显示“pred”和“label”的尺寸不匹配。这个问题通常会发生在数据集划分之后,有一些图像文件无法正确配对。在你的情况中,“pred”的高度比“label”的高度少1像素,这表明有一些图像的尺寸不匹配。
我建议你检查验证集中是否有损坏的图像文件或损坏的标签文件。此外,你可能需要删除验证集中的某些图像/标签,这些图像/标签与训练集的图像/标签没有匹配。
如果你使用了提供的cityscapes.yml作为基础配置文件,这可能不是最好的选择,因为它是用于训练cityscapes数据集的。你可能需要根据自己的数据集进行更改。
如果我的回答解决了您的问题,请采纳!