【问题标题】:open source CRFs implementation for computer vision problems? [closed]计算机视觉问题的开源 CRF 实现? [关闭]
【发布时间】:2012-07-26 14:14:45
【问题描述】:

C++中条件随机场(CRFs)的开源实现有好几种,比如CRF++、FlexCRF等。但是从手册上我只能理解如何将它们用于文本标注等一维问题,目前尚不清楚如何将它们应用于二维视觉问题,假设我已经计算了每个节点的关联势和每个边缘的交互势。

是否有人将这些软件包用于解决视觉问题,例如分割?或者它们根本不能以这种方式使用?

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

非常感谢!

【问题讨论】:

  • 偶然遇到了这个问题,只想说我为CRF学习做了一个适用于视觉应用的结构化支持向量机的python实现:github.com/amueller/pystruct

标签: c++ opencv open-source machine-learning computer-vision


【解决方案1】:

最新版本的 dlib 支持在任意图结构(包括二维网格)上学习成对马尔可夫随机场模型。它以最大边距意义(即使用结构 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还有一本好书。

【讨论】:

  • 非常感谢戴维斯!我不是机器学习专家,所以有几个问题:1)。基于图形模型学习的结构化 SVM 方法的术语/名称是什么,也许是一些关于它的论文或教程? 2)。我想做的是从文档中分割表结构,你认为结构 SVM 会更合适吗?如果您还没有实现 CRF,您可能会考虑这样做,因为在不同模型上进行比较很有趣:D。更具体的问题如下。
  • 3) 我的工作需要学习,否则max-flow/min-cut算法就足够了。我只是快速查看了您的指针:似乎每个节点中的数据条目本质上是一维的,即 data[0] = 1 表示假,data[1] = 1 表示真。是否可以将特征向量传递给每个节点,这样我就不必自己决定数据值?理想情况下,我想将关联电位传递给每个节点,将交互电位(都是浮点值特征向量)传递给每个边。您能否就这方面做一些说明?感谢您的宝贵时间!
  • 我更新了我的答案以尝试回答您的问题。我也是 dlib 的作者,所以如果你有更多关于 dlib 的问题,你可以给我发电子邮件或在 dlib 论坛上发帖 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-02
  • 2011-07-25
  • 2013-02-07
  • 2013-11-27
  • 2012-03-25
相关资源
最近更新 更多