我在caffe
中分别训练了三个不同的模型,并且我可以获得属于每个类的概率以进行语义分割。我希望得到一个基于我得到的3个概率的输出(例如,三个概率的argmax)。这可以通过net
模型和deploy.prototxt
文件进行推断来完成。然后根据最终的软输出,硬输出显示最终的分割。
我的问题是:
end-to-end
培训?有没有资源可以获得帮助? argmax
)获得最终分段,这是软输出? 我的问题听起来可能是非常基本的问题,我为此道歉。我仍在努力逐步学习。我非常感谢你的帮助。
答案 0 :(得分:1)
有两种方法(至少我知道)可以解决(1):
一种方法是使用 pycaffe 接口,实例化三个网络,通过每个网络转发输入图像,获取输出并执行您希望组合所有三个概率的任何操作。如果您打算使用更复杂的逻辑组合它们,这将特别有用。
替代方法(不那么优雅)是使用caffe test
并通过每个网络分别处理所有输入,将概率保存到文件中。然后在以后合并文件中的概率。
关于你的第二个问题,我从未训练超过两个分担体重的CNN(暹罗网络)。根据我的理解,您的网络不会分享权重,只有架构。如果您想对所有三个端到端进行培训,请查看此tutorial made for siamese networks。作者在prototxt
两个路径/分支中定义,将每个分支的层连接到输入数据层,最后连接到丢失层。
在您的情况下,您将定义三个分支(每个网络一个),连接输入数据层(检查每个分支是否处理相同的输入或不同的输入,例如,相同的图像预处理不同)与教程一样,将它们与损失联合起来。
现在,对于最后一个问题,Caffe似乎有ArgMax layer可能正是您正在寻找的。如果你熟悉python,你也可以使用python layer,它允许你非常灵活地定义如何组合输出概率。