为什么默认 FCN infer.py 脚本只输出一个 1-channel Mat,如何获得 RGB 输出?
Why default FCN infer.py script only output a 1-channel Mat, How to get a RGB output?
我从 github 下载并 运行 FCN 的默认 infer.py
脚本。
"score"
层的输出只是1-channel Mat,无法转换为RGB img,我知道score层的原始输出blob是[1, 21, W, H]
,但我怎么才能得到3 通道 RGB 输出而不是 1 通道 img?
我尝试将输入数据层从 [1,3,W,H]
更改为 [3,3,W,H]
并使用 PIL.Image.convert('RGB')
,但是,两者都失败了。
我是图像分割的初学者,任何建议都有帮助,非常感谢~
infer.py
中的源代码,其中out.shape = [W, H]
(即1通道而不是3):
out = net.blobs['score'].data[0].argmax(axis=0)
FCN 经过训练可以执行分割。所以在最后一层,在 21 个输出的每个像素处,它选择具有最大值的那个并使用该索引来标记像素。这样我们就得到了1通道的分割输出。
除非从一开始就训练网络输出RGB图像(这不是分割),否则不可能得到RGB图像。
您得到的输出确实是每个像素一个数字(2D 而不是 3D)。您得到的数字是 class 数字(0 = "background"、1 = "aeroplane" 等)。为了将 索引输出图像 转换为 RGB,您需要(手动)将每个 class 标签映射到一种颜色。您应该有一张索引为 0..20 -> (R,G,B) 的地图。
有关 class 实施此转换的信息,请参阅 voc_helper.py
。
我从 github 下载并 运行 FCN 的默认 infer.py
脚本。
"score"
层的输出只是1-channel Mat,无法转换为RGB img,我知道score层的原始输出blob是[1, 21, W, H]
,但我怎么才能得到3 通道 RGB 输出而不是 1 通道 img?
我尝试将输入数据层从 [1,3,W,H]
更改为 [3,3,W,H]
并使用 PIL.Image.convert('RGB')
,但是,两者都失败了。
我是图像分割的初学者,任何建议都有帮助,非常感谢~
infer.py
中的源代码,其中out.shape = [W, H]
(即1通道而不是3):
out = net.blobs['score'].data[0].argmax(axis=0)
FCN 经过训练可以执行分割。所以在最后一层,在 21 个输出的每个像素处,它选择具有最大值的那个并使用该索引来标记像素。这样我们就得到了1通道的分割输出。
除非从一开始就训练网络输出RGB图像(这不是分割),否则不可能得到RGB图像。
您得到的输出确实是每个像素一个数字(2D 而不是 3D)。您得到的数字是 class 数字(0 = "background"、1 = "aeroplane" 等)。为了将 索引输出图像 转换为 RGB,您需要(手动)将每个 class 标签映射到一种颜色。您应该有一张索引为 0..20 -> (R,G,B) 的地图。
有关 class 实施此转换的信息,请参阅 voc_helper.py
。