为什么默认 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