label should be a 1 channel image?如何解决 已解决
收藏
快速回复
label should be a 1 channel image?如何解决 已解决
收藏
快速回复

这是怎么回事啊?该怎么解决呀?

GT
已解决
2# 回复于2021-07
看样子是Label的通道数问题。 一般在语义分割中,Label是单通道且标签连续的,例如像素值0代表背景类,1代表第一类,2代表第二类... 虽然机器能分清楚他们区别,然而对人而言,一般的灰度图像取值范围在0-255。如果一张图片里只有1、2、3这样非常低的数值,人类很难通过肉眼+直觉判断出哪片区域对应的是什么类别。 [图片] 伪彩色Label就可以解决这样的问题,它将单通道的图像变成了三通道RGB图像。 [图片] 然而,这样的图像是不能直接被训练的,也是为什么会有`Label should be a 1 channel image`这样的报错信息,因为本身连续的标签为了可视化变得不再连续。 可能最开始像素值0代表背景类,1代表第一类,2代表第二类,现在则是RGB#000000表示背景类,RGB#487731表示了第一类,RGB#040263表示了第二类,即使转换为数字也是不连续的,这将会增大训练难度,甚至严重影响训练性能和效果,所以部分语义分割工具不接受这样的数据,也自然会给出上述的报错信息。 当然,伪彩色图像并非不可逆,只需撰写转换脚本,记录一个离散想RGB数值,并将其定义为一个从0开始的连续单通道值即可,例如刚刚的`RGB#000000表示背景类,RGB#487731表示了第一类,RGB#040263表示了第二类`可以通过遍历整个数据集得到RGB#000000表示为0,RGB#487731表示为1,RGB#040263表示为2,并生成一个以这样格式为基准的Label。整体上代码量不超过30行,时间也不会浪费很久,可以尝试一下。  
展开
0
收藏
回复
全部评论(2)
时间顺序
GT
#2 回复于2021-07

看样子是Label的通道数问题。

一般在语义分割中,Label是单通道且标签连续的,例如像素值0代表背景类,1代表第一类,2代表第二类...

虽然机器能分清楚他们区别,然而对人而言,一般的灰度图像取值范围在0-255。如果一张图片里只有1、2、3这样非常低的数值,人类很难通过肉眼+直觉判断出哪片区域对应的是什么类别。

伪彩色Label就可以解决这样的问题,它将单通道的图像变成了三通道RGB图像。

然而,这样的图像是不能直接被训练的,也是为什么会有`Label should be a 1 channel image`这样的报错信息,因为本身连续的标签为了可视化变得不再连续。

可能最开始像素值0代表背景类,1代表第一类,2代表第二类,现在则是RGB#000000表示背景类,RGB#487731表示了第一类,RGB#040263表示了第二类,即使转换为数字也是不连续的,这将会增大训练难度,甚至严重影响训练性能和效果,所以部分语义分割工具不接受这样的数据,也自然会给出上述的报错信息。

当然,伪彩色图像并非不可逆,只需撰写转换脚本,记录一个离散想RGB数值,并将其定义为一个从0开始的连续单通道值即可,例如刚刚的`RGB#000000表示背景类,RGB#487731表示了第一类,RGB#040263表示了第二类`可以通过遍历整个数据集得到RGB#000000表示为0,RGB#487731表示为1,RGB#040263表示为2,并生成一个以这样格式为基准的Label。整体上代码量不超过30行,时间也不会浪费很久,可以尝试一下。

 
0
回复
PangAY
#3 回复于2021-08
GT #2
看样子是Label的通道数问题。 一般在语义分割中,Label是单通道且标签连续的,例如像素值0代表背景类,1代表第一类,2代表第二类... 虽然机器能分清楚他们区别,然而对人而言,一般的灰度图像取值范围在0-255。如果一张图片里只有1、2、3这样非常低的数值,人类很难通过肉眼+直觉判断出哪片区域对应的是什么类别。 [图片] 伪彩色Label就可以解决这样的问题,它将单通道的图像变成了三通道RGB图像。 [图片] 然而,这样的图像是不能直接被训练的,也是为什么会有`Label should be a 1 channel image`这样的报错信息,因为本身连续的标签为了可视化变得不再连续。 可能最开始像素值0代表背景类,1代表第一类,2代表第二类,现在则是RGB#000000表示背景类,RGB#487731表示了第一类,RGB#040263表示了第二类,即使转换为数字也是不连续的,这将会增大训练难度,甚至严重影响训练性能和效果,所以部分语义分割工具不接受这样的数据,也自然会给出上述的报错信息。 当然,伪彩色图像并非不可逆,只需撰写转换脚本,记录一个离散想RGB数值,并将其定义为一个从0开始的连续单通道值即可,例如刚刚的`RGB#000000表示背景类,RGB#487731表示了第一类,RGB#040263表示了第二类`可以通过遍历整个数据集得到RGB#000000表示为0,RGB#487731表示为1,RGB#040263表示为2,并生成一个以这样格式为基准的Label。整体上代码量不超过30行,时间也不会浪费很久,可以尝试一下。  
展开

谢谢!

0
回复
在@后输入用户全名并按空格结束,可艾特全站任一用户