图模型中mincut算法的理解

利用图分割算法对图片进行分割是目前比较流行的算法之一。利用这种方法对图片进行分割时需要对相应的能量函数进行最小值搜索,当能量函数在定义域中属于凸函数时利用梯度下降法、EM等经典算法可以得到唯一的极值解,该解便是全局最小解。但是对于能量函数在定义域中不是凸函数,利用上面的经典算法很容易陷入局部极小值问题,从而很难得到理想效果。虽然采用模拟退火方法可以减轻陷入局部极小值可能性,但是这并不是最优的解法。

利用图模型求解能量函数最优解给这类问题的解答带来了新的途径,而mincut算法就是求解图模型的一种有效的方法。下面就直观的介绍mincut算法最终目的是什么?它的一种求解算法max-flow其基本思路是什么?并给出一个mincut算法的例子

mincut算法最终目的是解决能量函数问题

      利用能量函数构建等价的图模型结构,将能量函数的优化求解转化为等价直观的图模型分割问题。mincut算法就是分割图模型的方法,从而得到能量函数的最优解。下面介绍能量函数和图模型的关系。假设有如下的能量函数,右边第一项是单节点势能函数,第二项是节点之间的势能函数,在本例中x在{0,1}中取值。要解决的问题是如何分配n个x的值使得能量函数取值最小。

下面是图模型及其分割的示例图,s节点和平面上灰色节点之间权重为lambda,t节点和平面上灰色节点之间权重为-lambda,平面灰色节点之间的权重值取beta。通过mincut算法得到下图右边绿线的分割结果。该结果表明绿线上面p、q一遍的灰色节点归于s,另一面归于t,这样分割的结果就是元素{s}和{t}之间权重的综合最小,也就是对应目标能量函数的能量最小。具体的过程最后给出一个具体的实现例子,这里的解释可以见文献“Exact
maximum a posteriori estimation for binary images”该文献是第一个提出利用图模型解决能量函数优化问题的。

        max-flow算法基本思想

    从max-flow字面意思便可以看出该算法和流量有关系,下面是一个说明该算法基本思想的一个示例图。将下图s看成一个水源,t是水源的归属地,中间是边缘是一系列的管道,管道的最大流量由边缘上面的数据(x,y)中x规定,y表示当该管道系统达到最大流量时每个管道的实际流量。例如v0和v3之间管道最大流量是5,当管道系统达到最大流量时该管道的实际流量为4。由图示可以看出,当该管道系统达到最大流量时,一共有3根管道流量达到满载荷状态,这3根管道是s->v0,s->v1,v2->v5这3根管道决定了该图模型的分割结果,该结果如途中虚线所示。系统达到最大流量时对应能量函数的最小值这两者是等价关系,并不矛盾。

       一个mincut算法的例子

这里有一个2*2的图模型,利用mincut算法对其进行分割,该算法的源代码可以在该网站下载http://pub.ist.ac.at/~vnk/software.html

add_edge(node_id _i, node_id _j, captype cap, captype rev_cap)

该函数定义节点i和j之间的权重,cap是i->j的权重,rev_cap是j->i的权重。这个是有方向的。

add_tweights(node_id i, tcaptype cap_source, tcaptype cap_sink)

该函数定义节点i和s、t之间的权重,cap_source是i和s的权重,cap_sink是i和t的权重。这个没有方向。

下面是整个图模型的描述代码运行结果如下图所示,结果表明节点0,1归于t集、节点2,3归于s集,并显示目前系统最大流量为8。

以上分析的具体过程如下:

现在有{2,3,s}、{0,1,t}这两种分类下面是得出{2,3,s}->{0,1,t}权重和的过程,权重求和只计算有边缘连接的情况,如s->t不存在边缘所以不计算这两者的权重。

s到0和1的权重和为1+3=4;

2到1和t的权重和为1+1=2;因为2和3不相邻所以没有权重或者权重为0;

3到0和t的权重和为1+1=2;

C=4+2+2=8;

假如另一种分割方法:0属于s,1,2,3属于t此时的C=18,比理想分割方法要大,这种方法虽然C值大但是实际流量并不会这么大,因为从1,2,3到t的管道不能实现这么大的流量。

s到1,2,3权重和为3+5+4=12;

0到1,3,t的权重和为1+1+4=6;

C=12+6=18;

int main()
{
 typedef Graph<int,int,int> GraphType;
 GraphType *g = new GraphType(/*estimated # of nodes*/ 2, /*estimated # of edges*/ 1);

 g -> add_node();
 g -> add_node();
 g -> add_node();
 g -> add_node();

 g -> add_tweights( 0,   /* capacities */  1, 4 );//表示节点0和s的权重为1,节点0和t的权重为4
 g -> add_tweights( 1,   /* capacities */  3, 4 );
 g -> add_tweights( 2,   /* capacities */ 5, 1 );
 g -> add_tweights( 3,   /* capacities */  4, 1 );
 g -> add_edge( 0, 1,    /* capacities */  1, 1 );//表示节点0->1的权重为1,<span style="line-height: 1.5; font-family: SimSun;">表示节点1->0的权重为1</span>

 g -> add_edge( 1, 2,    /* capacities */  1, 1);
 g -> add_edge( 2, 3,    /* capacities */  1, 1 );
 g -> add_edge( 3, 0,    /* capacities */  1, 1 );
 int flow = g -> maxflow();

 printf("Flow = %d\n", flow);
 printf("Minimum cut:\n");
 if (g->what_segment(0) == GraphType::SOURCE)
  printf("node0 is in the SOURCE set\n");
 else
  printf("node0 is in the SINK set\n");
 if (g->what_segment(1) == GraphType::SOURCE)
  printf("node1 is in the SOURCE set\n");
 else
  printf("node1 is in the SINK set\n");
 if (g->what_segment(2) == GraphType::SOURCE)
  printf("node2 is in the SOURCE set\n");
 else
  printf("node2 is in the SINK set\n");
 if (g->what_segment(3) == GraphType::SOURCE)
  printf("node3 is in the SOURCE set\n");
 else
  printf("node3 is in the SINK set\n");

 delete g;
 system("pause");
 return 0;
}
时间: 2024-10-11 22:24:34

图模型中mincut算法的理解的相关文章

维特比算法在隐马尔可夫模型中的应用

前言 文章标题的两个概念也许对于许多同学们来说都相对比较陌生,都比较偏向于于理论方面的知识,但是这个算法非常的强大,在很多方面都会存在他的影子.2个概念,1个维特比算法,1个隐马尔可夫模型.你很难想象,输入法的设计也会用到其中的一些知识. HMM-隐马尔可夫模型 隐马尔可夫模型如果真的要展开来讲,那短短的一篇文章当然无法阐述的清,所以我会以最简单的方式解释.隐马尔可夫模型简称HMM,根据百度百科中的描述,隐马尔可夫模型描述的是一个含有隐含未知参数的马尔可夫模型.模型的本质是从观察的参数中获取隐含

数据结构基础温故-5.图(中):最小生成树算法

图的“多对多”特性使得图在结构设计和算法实现上较为困难,这时就需要根据具体应用将图转换为不同的树来简化问题的求解. 一.生成树与最小生成树 1.1 生成树 对于一个无向图,含有连通图全部顶点的一个极小连通子图成为生成树(Spanning Tree).其本质就是从连通图任一顶点出发进行遍历操作所经过的边,再加上所有顶点构成的子图. 采用深度优先遍历获得的生成树称为深度优先生成树(DFS生成树),采用广度优先遍历获得的生成树称为广度优先生成树(BFS生成树).如下图所示,无向图的DFS生成树和BFS

[ css 深入理解 inline box 模型中line boxes ] css中深入理解line-height(行高)产生的原因:看不见的 line boxes

到底这个line-height行高怎么就产生了高度呢: 在inline box模型中,有个line boxes,这玩意是看不见的,这个玩意的工作就是包裹每行文字.一行文字一个line boxes.例如“艾佛森退役”这5个字,如果它们在一行显示,你艾佛森再牛逼,对不起,只有一个line boxes罩着你:但“春哥纯爷们”这5个字,要是竖着写,一行一个,那真是够爷们,一个字罩着一个line boxes,于是总计五个line boxes.line boxes什么特性也没有,就高度.所以一个没有设置he

NLP —— 图模型(二)条件随机场(Conditional random field,CRF)

本文简单整理了以下内容: (一)马尔可夫随机场(Markov random field,无向图模型)简单回顾 (二)条件随机场(Conditional random field,CRF) 这篇写的非常浅,基于 [1] 和 [5] 梳理.感觉 [1] 的讲解很适合完全不知道什么是CRF的人来入门.如果有需要深入理解CRF的需求的话,还是应该仔细读一下几个英文的tutorial,比如 [4] . (一)马尔可夫随机场简单回顾 概率图模型(Probabilistic graphical model,P

信息论、最大熵模型与EM算法

七月在线4月机器学习算法班课程笔记--No.8 1. 统计学习基础回顾 1.1 先验概率与后验概率 先验概率:根据以往经验和分析得到的概率,如全概率公式,它往往作为"由因求果"问题中的"因"出现. 后验概率:依据得到"结果"信息所计算出的最有可能是那种事件发生,如贝叶斯公式中的,是"执果寻因"问题中的"因".后验概率可以根据通过贝叶斯公式,用先验概率和似然函数计算出来. 贝叶斯定理:假设B1,B2,...,

想了解概率图模型?你要先理解图论的基本定义与形式

图论一直是数学里十分重要的学科,其以图为研究对象,通常用来描述某些事物之间的某种特定关系.而在机器学习的世界里,我们希望从数据中挖掘出隐含信息或模型.因此,如果我们将图中的结点作为随机变量,连接作为相关性关系,那么我们就能构造出图模型,并期望解决这一问题.本文将为构造该模型提供最基础的概念. 我们都知道机器学习里的决策树,其可以表示为给定特征条件下类的条件概率分布.并且我们知道决策树由结点和有向边组成,结点又由表示特征的内部结点和表示类的叶结点构成.而通常决策树的学习又包括了特征的选择.决策树的

机器学习中各个算法的优缺点(四)

在前面的文章中我们给大家介绍了很多关于机器学习的算法,这些算法都是能够帮助大家更好地理解机器学习,而机器学习的算法各种各样,要想好好地使用这些算法就需要对这些算法一个比较透彻的了解.我们在这篇文章中接着给大家介绍一下机器学习中涉及到的算法的最后一部分内容. 首先说一下聚类算法,聚类算法是指对一组目标进行分类,属于同一组的目标被划分在一组中,与其他组目标相比,同一组目标更加彼此相似.聚类算法的例子有很多,比如说K-均值(k-Means).k-Medians 算法.Expectation Maxim

推荐系统中常用算法 以及优点缺点对比

推荐系统中常用算法 以及优点缺点对比 在 推荐系统简介中,我们给出了推荐系统的一般框架.很明显,推荐方法是整个推荐系统中最核心.最关键的部分,很大程度上决定了推荐系统性能的优劣.目前,主要的推荐方法包括:基于内容推荐.协同过滤推荐.基于关联规则推荐.基于效用推荐.基于知识推荐和组合推荐. 一.基于内容推荐 基于内容的推荐(Content-based Recommendation)是信息过滤技术的延续与发展,它是建立在项目的内容信息上作出推荐的,而不需要依据用户对项目的评价意见,更多地需要用机 器

(第三章)Java内存模型(中)

一.volatile的内存语义 1.1 volatile的特性 理解volatile特性的一个好办法是把对volatile变量的单个读/写,看成是使用同一个锁对这些单个读/写操作做了同步.下面通过具体的示例来说明,示例代码如下: class VolatileFeaturesExample { volatile Long vl = 0L; //使用volatile声明64位的Long型变量 public void set(Long l) { vl = l; //单个volatile变量的写 } p