【问题标题】:Why default FCN infer.py script only output a 1-channel Mat, How to get a RGB output?为什么默认 FCN infer.py 脚本只输出 1 通道 Mat,如何获得 RGB 输出?
【发布时间】:2017-01-21 18:42:48
【问题描述】:

我从github下载并运行FCN默认的infer.py脚本。

"score" 层的输出只是 1 通道 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)

【问题讨论】:

  • 1通道输出正确,为什么要/需要RGB输出?

标签: neural-network rgb deep-learning caffe image-segmentation


【解决方案1】:

您得到的输出确实是每个像素一个数字(2D 而不是 3D)。你得到的数字是班级编号(0 =“背景”,1 =“飞机”等)。为了将索引输出图像转换为 RGB,您需要(手动)将每个类标签映射到一种颜色。您应该有一个索引 0..20 -> (R,G,B) 的地图。

请参阅 voc_helper.py 了解实现此转换的类。

【讨论】:

  • 我明白你的意思,非常感谢你的帮助。之所以疑惑,是因为几个月前我的一个运行fcn forward脚本的朋友告诉我,他的输出是RGB格式,和我最近得到的不一样。所以我听了之后很疑惑。总之,非常感谢~
  • @YanhaoGE 应用地图 - 结果是 RGB,这是一个确定性阶段。所以在某种意义上你可以说输出是 RGB。
【解决方案2】:

FCN 被训练来执行分割。所以在最后一层,在 21 个输出的每个像素处,它会选择具有最大值的那个,并使用该索引来标记像素。所以我们得到了一个 1 通道的分割输出。

除非您从一开始就训练网络以输出 RGB 图像(这不是分割),否则无法获得 RGB 图像。

【讨论】:

  • 发送到 conv_1 的当前输入 Imgs 已经是 RGB,根据@Shai 的回答,如果我想以 RGB 可视化输出,那么我需要一个映射来将每个类映射到特定的颜色。所以关键是我不能直接从任何输出 blob 中获取 RGB 输出吗?
  • 没有。我不认为你可以。
  • 感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2012-12-19
  • 2019-04-21
  • 1970-01-01
  • 2019-09-05
  • 2020-01-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多