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