c++ - 计算机视觉问题的开源 CRF 实现?

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

<分区>

在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/

相关文章:

python - 根据像素值比较多个图像

opencv - 在不改变图像颜色的情况下改变opencv中的颜色空间

blackberry - 有助于开发的开源黑莓项目

c++ - 在不使用迭代器的情况下添加位于 vector 中的整数总和,总和是第一个和第二个元素的总和,依此类推

c++ - 使用正则表达式查找和替换

c++ - unordered_multimap::equal_range 慢

opencv - 使用 OpenCV 进行零件识别/分类

c++ - 推荐一个开源项目来帮助经验丰富的开发人员练习 C++

c++ - 需要数学编辑器来编写数学公式

c++ - 如何检查 uint8_t 是否作为类型而不是 unsigned char 存在?