<分区>
在C++中有几种条件随机场(CRF)的开源实现,例如CRF++、FlexCRF等。但是从手册中,我只能了解如何将它们用于文本标记等一维问题,目前尚不清楚如何将它们应用于二维视觉问题,假设我已经计算了每个节点的关联势和每条边的相互作用势。
有没有人将这些包用于视觉问题,例如分割?或者它们根本不能以这种方式使用?
总而言之,有没有针对视力问题的CRF的开源包?
非常感谢!
<分区>
在C++中有几种条件随机场(CRF)的开源实现,例如CRF++、FlexCRF等。但是从手册中,我只能了解如何将它们用于文本标记等一维问题,目前尚不清楚如何将它们应用于二维视觉问题,假设我已经计算了每个节点的关联势和每条边的相互作用势。
有没有人将这些包用于视觉问题,例如分割?或者它们根本不能以这种方式使用?
总而言之,有没有针对视力问题的CRF的开源包?
非常感谢!
最佳答案
最新版本的 dlib 支持在任意图形结构(包括二维网格)上学习成对马尔可夫随机场模型。它在最大间隔意义上(即使用结构 SVM)而不是在最大似然意义上(即 CRF)估计参数,但如果你只想预测图形标记,那么任何一种方法都一样好。
有一个example program这显示了如何在一个简单的示例图中使用这些东西。该示例将特征向量放在每个节点上,结构化 SVM 使用它们来学习如何正确标记图中的节点。请注意,您可以通过修改文件顶部的 typedef 来更改特征向量的维度。另外,如果你已经有了一个完整的模型,只想找到最可能的标签,那么你可以调用底层 min-cut based inference routine直接地。
一般来说,我认为解决这些问题的最佳方法是定义您要使用的图形模型,然后选择适用于它的参数学习方法。所以在这种情况下,我想你对某种成对马尔可夫随机场模型感兴趣。特别是,可以使用最小切割/最大流算法找到最可能分配的模型。那么在这种情况下,事实证明结构 SVM 是找到模型参数的自然方法,因为结构 SVM 只需要找到最大概率分配的能力。通过最大似然法查找参数(即将其视为 CRF)将需要您另外有一些方法来计算图形变量的总和,但这对于这些类型的模型来说非常困难。对于这种模型,我所知道的CRF方法都是近似的,而dlib中的SVM方法使用的是精确求解器。我的意思是,该算法的一个参数是一个 epsilon 值,表示“运行直到找到最佳参数以达到 epsilon 精度”,并且该算法每次都可以高效地执行此操作。
有一个很好的tutorial在今年的计算机视觉和模式识别 session 上讨论了这个话题。 Structured Prediction and Learning in Computer Vision也有一本好书由主持人撰写。
关于c++ - 计算机视觉问题的开源 CRF 实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11695623/