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
收藏
请登录后评论
看样子是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行,时间也不会浪费很久,可以尝试一下。
谢谢!