开源CRF实现计算机视觉问题?

gal*_*ica 1 c++ opencv open-source machine-learning computer-vision

在C++中有几种条件随机字段(CRF)的开源实现,例如CRF ++,FlexCRF等.但是从手册中我只能理解如何将它们用于文本标记等一维问题,目前尚不清楚如何在二维视觉问题中应用它们,假设我已经计算了每个节点的关联电位和每个边缘的相互作用电位.

有没有人将这些包用于视力问题,例如分割?或者他们根本不能以这种方式使用?

总而言之,是否有针对视力问题的CRF的开源软件包?

非常感谢!

Dav*_*ing 6

最新版本的dlib支持在任意图形结构(包括二维网格)上学习成对马尔可夫随机场模型.它以最大边际意义(即使用结构SVM)而不是最大似然意义(即CRF)估计参数,但如果您想要做的就是预测图形标记,那么任何一种方法都同样好.

有一个示例程序,它显示了如何在一个简单的示例图上使用这些东西.该示例将特征向量放在每个节点上,结构化SVM使用它们来学习如何正确标记图中的节点.请注意,您可以通过修改文件顶部的typedef来更改要素向量的维度.此外,如果您已经拥有完整的模型并且只想找到最可能的标签,那么您可以直接调用基础的基于min-cut的推理例程.

一般来说,我认为解决这些问题的最佳方法是定义您想要使用的图形模型,然后选择适合它的参数学习方法.所以在这种情况下,我想你会对某种成对马尔可夫随机场模型感兴趣.特别是,可以使用最小割/最大流算法找到最可能的分配的模型.然后在这种情况下,结果SVM是查找模型参数的自然方式,因为结构SVM仅需要能够找到最大概率分配.通过最大似然找到参数(即将其视为CRF)将需要您另外有一些方法来计算图变量的总和,但这对于这些类型的模型来说非常困难.对于这种模型,我所知道的所有CRF方法都是近似值,而dlib中的SVM方法使用精确求解器.我的意思是,算法的一个参数是一个epsilon值,它表示"运行直到找到最佳参数达到epsilon精度",并且算法每次都能有效地完成.

在今年的计算机视觉和模式识别会议上有一个关于这个主题的很好的教程.还有一本关于计算机视觉中的结构化预测和学习的好书,由主持人撰写.