如何结合不同网络的概率(软)输出并得到硬输出?
How to combine the probability (soft) output of different networks and get the hard output?
我在caffe
中分别训练了三个不同的模型,可以得到属于每个class的概率进行语义分割。我想根据我得到的 3 个概率得到一个输出(例如,三个概率的 argmax)。这可以通过 net
模型和 deploy.prototxt
文件进行推断来完成。然后基于最终的软输出,硬输出显示最终的分割。
我的问题是:
- 如何获得这些网络的集成输出?
- 如何
end-to-end
三个网络的集成训练?是否有任何资源可以获得帮助?
- 如何根据最终的概率(如
argmax
三种概率)得到最终的分割,即软输出?
我的问题听起来可能很基本,对此我深表歉意。我仍在尝试逐步学习。非常感谢您的帮助。
有两种方法(至少我知道)可以解决 (1):
一种是使用pycaffe接口,实例化三个网络,通过它们各自转发一个输入图像,获取输出并执行你想要的任何操作结合所有三个概率。如果您打算使用更复杂的逻辑组合它们,这将特别有用。
另一种方法(不太优雅)是使用 caffe test
并通过每个网络分别处理所有输入,将概率保存到文件中。稍后再结合文件中的概率。
关于你的第二个问题,我从未训练过超过两个权重共享 CNN(siamese 网络)。据我了解,您的网络不共享权重,只共享架构。如果你想端到端地训练所有三个,请看看这个 tutorial made for siamese networks。作者在他们的 prototxt
中定义了两个 paths/branches,将每个分支的层连接到输入数据层,最后是一个损失层。
在你的情况下,你将定义三个分支(每个网络一个),连接输入数据层(检查每个分支是否处理相同的输入或不同的输入,例如,预处理相同的图像differently) 并用 loss 将它们联合起来,类似于教程。
现在,对于最后一个问题,Caffe 似乎有一个 ArgMax layer that may be what you are looking for. If you are familiar with python, you could also use a python layer 可以让你非常灵活地定义如何组合输出概率。
我在caffe
中分别训练了三个不同的模型,可以得到属于每个class的概率进行语义分割。我想根据我得到的 3 个概率得到一个输出(例如,三个概率的 argmax)。这可以通过 net
模型和 deploy.prototxt
文件进行推断来完成。然后基于最终的软输出,硬输出显示最终的分割。
我的问题是:
- 如何获得这些网络的集成输出?
- 如何
end-to-end
三个网络的集成训练?是否有任何资源可以获得帮助? - 如何根据最终的概率(如
argmax
三种概率)得到最终的分割,即软输出?
我的问题听起来可能很基本,对此我深表歉意。我仍在尝试逐步学习。非常感谢您的帮助。
有两种方法(至少我知道)可以解决 (1):
一种是使用pycaffe接口,实例化三个网络,通过它们各自转发一个输入图像,获取输出并执行你想要的任何操作结合所有三个概率。如果您打算使用更复杂的逻辑组合它们,这将特别有用。
另一种方法(不太优雅)是使用
caffe test
并通过每个网络分别处理所有输入,将概率保存到文件中。稍后再结合文件中的概率。
关于你的第二个问题,我从未训练过超过两个权重共享 CNN(siamese 网络)。据我了解,您的网络不共享权重,只共享架构。如果你想端到端地训练所有三个,请看看这个 tutorial made for siamese networks。作者在他们的 prototxt
中定义了两个 paths/branches,将每个分支的层连接到输入数据层,最后是一个损失层。
在你的情况下,你将定义三个分支(每个网络一个),连接输入数据层(检查每个分支是否处理相同的输入或不同的输入,例如,预处理相同的图像differently) 并用 loss 将它们联合起来,类似于教程。
现在,对于最后一个问题,Caffe 似乎有一个 ArgMax layer that may be what you are looking for. If you are familiar with python, you could also use a python layer 可以让你非常灵活地定义如何组合输出概率。