0

我在 中分别训练了三个不同的模型caffe,可以得到属于每个类的概率进行语义分割。我想获得基于我得到的 3 个概率的输出(例如,三个概率的 argmax)。这可以通过net模型和deploy.prototxt文件进行推断来完成。然后根据最终的软输出,硬输出显示最终的分割。我的问题是:

  1. 如何获得这些网络的集成输出?
  2. 如何进行end-to-end三个网络的集成训练?有什么资源可以得到帮助吗?
  3. 如何根据最终概率(例如argmax三个概率)得到最终分割,即软输出?

我的问题可能听起来很基本,对此我深表歉意。我仍在尝试一步一步地学习。我真的很感谢你的帮助。

4

1 回答 1

1

有两种方法(至少我知道)可以解决(1)

  1. 一种是使用pycaffe接口,实例化三个网络,通过每个网络转发输入图像,获取输出并执行您希望组合所有三个概率的任何操作。如果您打算使用更复杂的逻辑组合它们,这将特别有用。

  2. 另一种方法(不太优雅)是caffe test通过每个网络分别使用和处理所有输入,将概率保存到文件中。然后稍后结合文件中的概率。

关于你的第二个问题,我从来没有训练过两个以上的权重共享 CNN(连体网络)。据我了解,您的网络不共享权重,仅共享架构。如果您想端到端地训练所有三个,请查看为连体网络制作的本教程。作者在他们的prototxt两个路径/分支中定义,将每个分支的层连接到输入数据层,最后连接一个损失层。

在您的情况下,您将定义三个分支(每个网络一个),与输入数据层连接(检查每个分支是否处理相同的输入或不同的输入,例如,以不同方式预处理的相同图像)并将它们联合起来有损失,类似于教程。

现在,对于最后一个问题,Caffe 似乎有一个ArgMax 层,这可能是您正在寻找的。如果您熟悉 python,您还可以使用python 层,它允许您非常灵活地定义如何组合输出概率。

于 2018-02-01T01:32:24.910 回答