<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>沙克</title>
	<atom:link href="http://www.suzker.cn/feed" rel="self" type="application/rss+xml" />
	<link>http://www.suzker.cn</link>
	<description>可怜之人必有可恨之处</description>
	<lastBuildDate>Sun, 29 Aug 2010 15:53:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>HMM中的维特比解码(Viterbi Agorithm)</title>
		<link>http://www.suzker.cn/computervision/viterbi-algorithm-for-hmm.html</link>
		<comments>http://www.suzker.cn/computervision/viterbi-algorithm-for-hmm.html#comments</comments>
		<pubDate>Fri, 27 Aug 2010 03:40:14 +0000</pubDate>
		<dc:creator>Suz</dc:creator>
				<category><![CDATA[计算机视觉]]></category>
		<category><![CDATA[AGORITHM]]></category>
		<category><![CDATA[Computer Vision]]></category>
		<category><![CDATA[dynamic programming]]></category>
		<category><![CDATA[HMM]]></category>
		<category><![CDATA[VITERBI]]></category>
		<category><![CDATA[基础知识]]></category>

		<guid isPermaLink="false">http://www.suzker.cn/?p=393</guid>
		<description><![CDATA[本文讨论了HMM中另一种基本算法，维特比算法。以下为部分摘要，点击阅读更多：

...在之前的文章中，已经分别介绍了隐马科夫模型（HMM）的概况以及HMM中广泛应用的一种解决估值问题的算法：前向法(Forward Algorithm)。在本文将介绍解决HMM另外一个问题，解码问题，的算法：维特比算法(Viterbi Agorithm)，也属于HMM中的一个基本算法，而且算法本身很像Forward的这个概念，理解起来相对容易。...

...可以说viterbi算法至此完成了两个任务：1、利用递归方法避开了重复运算提高了效率。2、在结果中找出了“局部最优解”，并将这些最优解拼成一个完整的解。...

...我们需要特别注意到，当前我们面临的问题被称为解码问题，也称为寻找最优解问题。对于最优解，还分为全局最优解与局部最优解(Partial best paths)。上面提到的穷举法就属于全局最优解，因为它已经在全局范围内枚举了所有可能，一个不漏。而刚刚提到的维特比算法则属于寻找局部最优解的方法。... <span style="color:#777"> . . . &#8594; Read More: <a href="http://www.suzker.cn/computervision/viterbi-algorithm-for-hmm.html">HMM中的维特比解码(Viterbi Agorithm)</a></span>]]></description>
			<content:encoded><![CDATA[<blockquote><p>在之前的文章中，已经分别介绍了<a href="http://www.suzker.cn/computervision/the-hmm-model.html" target="_blank">隐马科夫模型（HMM）</a>的概况以及HMM中广泛应用的一种解决估值问题的算法：<a href="http://www.suzker.cn/computervision/forward-agorithm-for-hmm.html" target="_blank">前向法(Forward Algorithm)</a>。在本文将介绍解决HMM另外一个问题 &#8211; 解码问题 &#8211; 的算法：维特比算法(Viterbi Agorithm)，也属于HMM中的一个基本算法，而且算法本身很像Forward的这个概念，理解起来相对容易。</p>
<p>本文目录：</p>
<ul>
<li>Page 1: 前文提要</li>
<li>Page 2: 一般算法与高效维的特比算法</li>
<li>Page 3: 实例与伪代码</li>
<li>Page 4: 参考资料</li>
</ul>
</blockquote>
<blockquote>
<p style="text-align: right;"><em>Last Modified：2010/08/29 00:21 All rights reserved.</em></p>
</blockquote>
<h2>前文提要：</h2>
<p>在之前的HMM文章中提到，HMM模型将涉及到3个问题：</p>
<ol>
<li>给定一个观察到得序列O，及参数<img title="\lambda" src="http://s.wordpress.com/latex.php?latex=%5Clambda&amp;bg=ffffff&amp;fg=000000&amp;s=0" alt="\lambda" />，求出<img title="P(O|\lambda)" src="http://s.wordpress.com/latex.php?latex=P%28O%7C%5Clambda%29&amp;bg=ffffff&amp;fg=000000&amp;s=0" alt="P(O|\lambda)" />，即发生这种观察序列的可能性。对应上面例子中，即是我给定一个最终确定了的水果序列S，求我选到这样的水果的可能性。</li>
<li><span style="color: #0000ff;">给定一个观察到的序列O，及参数<img title="\lambda" src="http://s.wordpress.com/latex.php?latex=%5Clambda&amp;bg=ffffff&amp;fg=000000&amp;s=0" alt="\lambda" />，求出最有可能产生这种序列的状态序列S。对应上面例子中，即我给定一个最终确定了的水果序列S，求我最可能的选水果筐路径。</span></li>
<li>同样给定一个观察得到的序列O，求如何调整参数<img title="\lambda" src="http://s.wordpress.com/latex.php?latex=%5Clambda&amp;bg=ffffff&amp;fg=000000&amp;s=0" alt="\lambda" />，使<img title="P(O|\lambda)" src="http://s.wordpress.com/latex.php?latex=P%28O%7C%5Clambda%29&amp;bg=ffffff&amp;fg=000000&amp;s=0" alt="P(O|\lambda)" />最大。</li>
</ol>
<p>对于问题1，我们已经讨论过Forward Algorithm并成功高效地解决了这个问题。接下来我们将讨论解决平时称为“解码问题”的问题二的解决方法。</p>
<p>在问题二中，对应选水果的例子，我们需要解决的问题是，当我们知道最后选出来的水果序列，以及框选水果(Emission Matrix)、框转框(Transition Matrix)这两个概率，求可能选出这种水果序列的框路径。</p>
<p>* 在讨论这个问题之前，可以先复习一下之前的前向法，因为整体思路跟前向法类似。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.suzker.cn/computervision/viterbi-algorithm-for-hmm.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>大侠是怎样练成的-周昆</title>
		<link>http://www.suzker.cn/babble/what-makes-you-super.html</link>
		<comments>http://www.suzker.cn/babble/what-makes-you-super.html#comments</comments>
		<pubDate>Sun, 22 Aug 2010 16:24:52 +0000</pubDate>
		<dc:creator>Suz</dc:creator>
				<category><![CDATA[杂谈]]></category>
		<category><![CDATA[计算机视觉]]></category>
		<category><![CDATA[MSRA]]></category>
		<category><![CDATA[周昆]]></category>
		<category><![CDATA[经验]]></category>

		<guid isPermaLink="false">http://www.suzker.cn/?p=356</guid>
		<description><![CDATA[来自MSRA的周昆大侠简述了他成为大侠的历程，我认为非常值得借鉴。以下是一些摘要，点击阅读更多：

...周昆，2002年从浙江大学计算机学院获得工学博士学位，同年加入微软亚洲研究院，历任副研究员、研究员和项目负责人。2008年受聘*长江学者特聘教授，回到浙江大学计算机学院工作。在微软工作6年期间曾在国际计算机图形学大会ACM SIGGRAPH上发表17篇论文，其中多项技术被应用在Windows图形系统DirectX，XBOX游戏Halo 3，以及三维电影特技制作软件中。...

...在科研过程中，往往会遇到很多没有设想到、但很有意思的现象，便导致了很多意外的新发现。因此，当一项科研成果出来的时候，你可以相信在其背后可能隐藏着另外一个不为人所知的故事。当然你所能看到的几乎所有的科研论文在讲述研究历程时都是运用“指哪打哪”法的，但是它这个结论的发现过程很有可能是“打哪指哪”出来的——没有打到目标A，却把目标B做出来了。...

...“打哪指哪”法对于刚刚进入研究一两年，脑海中只是有些模糊想法但是又未必做不出来的研究人员比较适用。2003年我们没有做出豹子皮，只是在马身上生成了豹皮的斑点图案，看上去像是披着豹皮的马。两年之后，在2005年的SIGGRAPH上我们真正做到了“指哪打哪”，用纹理映射的方法生成了豹子。... <span style="color:#777"> . . . &#8594; Read More: <a href="http://www.suzker.cn/babble/what-makes-you-super.html">大侠是怎样练成的-周昆</a></span>]]></description>
			<content:encoded><![CDATA[<blockquote><p>最近老师跟我们讲了很多学习以外的道理，我回来以后想了好一会儿，觉得的确非常有道理，不仅学习了别人成功的经验，也看清了自己的不足。以后应该好好地整理出来这些经验、例子。</p>
<p>无独有偶，今天在cvchina看到的这个链接，我觉得这位大侠成功路上的经验也很值得我们细细品读。</p>
<p>作者介绍：</p>
<p>周昆，2002年从浙江大学计算机学院获得工学博士学位，同年加入微软亚洲研究院，历任副研究员、研究员和项目负责人。2008年受聘*长江学者特聘教授，回到浙江大学计算机学院工作。在微软工作6年期间曾在国际计算机图形学大会ACM SIGGRAPH上发表17篇论文，其中多项技术被应用在Windows图形系统DirectX，XBOX游戏Halo 3，以及三维电影特技制作软件中。</p>
<p>原文链接：<a href="http://vip.book.sina.com.cn/book/chapter_76425_46819.html">http://vip.book.sina.com.cn/book/chapter_76425_46819.html</a></p></blockquote>
<p>转眼之间，我已经在MSRA（微软亚洲研究院）工作了将近六年，回想六年来的研究经历，感触很多。就和练习武功一样，我从一个学徒，到略通精义的武林中人，再到凭借一技所长叱咤一方的的大侠，我在研究院度过了不平凡的六年。</p>
<p>一．2003年：“打哪指哪”与“指哪打哪”</p>
<p>2002年我加入微软亚洲研究院，刚开始是跟着资深研究员做项目。当时我的老板郭百宁提出了一个很有挑战性的想法：能否用纹理合成技术模拟出豹子皮这样一类的纹理。于是，在实现他这个想法的过程中，我学会了“打哪指哪”的研究方法。</p>
<p>这个项目的研究过程异常艰苦。在最开始的几个月里，我们尝试了很多种方法，可无论如何，我们做出来的豹子皮都像是假的。直到项目结束期限前的一个月，百宁总结了我们能做出来的最好结果，发现尽管我们不能做出豹子皮这种纹理，但是已经能做出一大类有累进变化的纹理。于是，围绕着这个思路，我们对已经取得的算法和结果进行了整理。最后论文被SIGGRAPH录用，这也是我的第一篇SIGGRAPH论文。</p>
<p>我在学校里受过的科研训练一般是首先有一个好的想法，接着进行实现，通过写程序和做实验来验证想法是否可行，这种方式可以总结为“指哪打哪”法，就是说目标指向哪里，就打向哪里。可是，我在研究院的第一个项目确教会了另外一种不同的研究门路——“打哪指哪”。比如说百宁给我提供的想法就像一个目标，而需要我想办法把这个目标击中。可是，由于我的知识和研究实力等方面的限制或者本身这个想法就不是很成熟，极有可能这个目标在当时的情况下是实现不了的。可是，就在这个做不出来的过程中，你有可能做出一些科研环节中的副产品来。虽然，之前是沿着一条研究主路一直在前进，但是却会产生很多的分叉与分支出来，逐渐偏离了原来的研究方向。当走了一段时间之后，会恍然发现其实本来就不应该走原来的那条路，要走的就是现在这条走出来的“弯路”。当时的假定目标是A，后来竟做出了一个B出来，而当我们要总结科研成果，撰写科研论文时，我们会总结说其实我们真正要做目标的是B，这就是所谓的“打哪指哪”，J。</p>
<p>在科研过程中，往往会遇到很多没有设想到、但很有意思的现象，便导致了很多意外的新发现。因此，当一项科研成果出来的时候，你可以相信在其背后可能隐藏着另外一个不为人所知的故事。当然你所能看到的几乎所有的科研论文在讲述研究历程时都是运用“指哪打哪”法的，但是它这个结论的发现过程很有可能是“打哪指哪”出来的——没有打到目标A，却把目标B做出来了。</p>
<p>“打哪指哪”法对于刚刚进入研究一两年，脑海中只是有些模糊想法但是又未必做不出来的研究人员比较适用。2003年我们没有做出豹子皮，只是在马身上生成了豹皮的斑点图案，看上去像是披着豹皮的马。两年之后，在2005年的SIGGRAPH上我们真正做到了“指哪打哪”，用纹理映射的方法生成了豹子。</p>
<p>二．2004年：科研成果的产品转换</p>
<p>2004年我发明了一个叫做Iso-charts的技术，主要是借助机器学习的方法对三维网格模型进行自动分片，并且生成纹理坐标。网格参数化是计算机图形学一个非常基础的功能，在游戏和电影产业都被广泛适用。在这一年的工作中，我认识到做研究不只需发论文来展示自己的科研成果，其实还需要看重这项技术的实际价值。被工业界所应用和承认，或许能带来更大的成就感。</p>
<p><span id="more-356"></span></p>
<p>通过技术转化组的胡志鹏工程师的辛勤工作，我们成功地在DirectX的Code Base里贡献了三万行代码，使得这项技术成为DirectX中任意网格参数化工具UVAtlas。现在做贴图的程序员和游戏开发者都会用到UVAtlas这个工具，而且这项技术还用在了微软自行研发的Halo 3游戏引擎里。这就是企业研究院区别于其他科研机构的地方，在企业研究院我们不仅可以发表高水平的顶级论文使得科研成果得到学术界的充分认可，而且还可以使自己的科技成果进行产品转化，被成千上万的用户所使用从而体现其更广泛和深远的价值和影响。</p>
<p>非常有意思是，这个项目起源于一个SIGGRAPH项目，我们的投稿不幸被拒了，可是万幸的是它转化进了微软的产品中，而且获得了研究院2005年的最佳技术成果转换奖。同时，这篇论文也是我第一次与微软总部的研究员合作完成的论文。</p>
<p>三．2005年：渐入佳境</p>
<p>2005年对我来说是丰收的一年，我投了三篇SIGGRAPH论文都被录用了，而且三篇都是以第一作者的身份发表的。在同一年里面以第一作者的身份发表三篇论文，这在SIGGRAPH历史上是前所未有的。这一年的丰收标志着我在SIGGRAPH上成熟，也非常庆幸在这一年找到了可以真正命中SIGGRAPH的感觉和信心。当在这种感觉的指引下做出来的三篇论文得到业界同行认可的时候，即充分证明了自己也可以与他们一样跻身世界领先的行列。</p>
<p>总的来说这一年的收获主要体现在两个方面，首先是2003年金钱豹纹路的创想终于在这一年找到了完美的解决。另一方面就是自己的研究视野更加开阔了，从几何和纹理伸延到了绘制，对图形学本身有了更为深入的探索和了解。我一直觉得计算机图形学是个相对较窄的学科，如果连这个较窄的学科都不能做到比较透彻的理解的话，我担心自己今后能到达的研究高度会非常有限的。我希望自己能在研究的深度和广度上并重。</p>
<p>我不停地扩展自己的研究范围，尝试去学习更多的东西，试图在多个方向上寻找可以解决的问题。在某个方向上的研究功力体现在发现问题的能力，如果连问题都不知道的话，解决问题就无从谈起。可是有太多的文献和太多的方向，使得发现问题变得相当困难。即使当你找到一些问题之后，有些问题可能是十几年/几十年没有解决的问题。那么，就需要创新性地在当前的范围里找到一个可解的问题，这其中的难度可能并不比找问题难。</p>
<p>四．2006年：从运动员到教练员</p>
<p>这个阶段我主要从一名运动员转换到同时带学生的教练员，如何培养学生做研究成了我的一个新课题。在研究院工作是幸运的，有很多非常优秀有潜力的学生跟我一起做研究，比如任重、孙鑫、施晓晗、侯启明等。 我在培养学生方面也经历了一个比较有意思的发展过程：</p>
<p>阶段	我	学生</p>
<p>阶段一: 全包培养	从Idea, 方法,实验,论文起草都由我来完成	主要从事一些编程的工作</p>
<p>阶段二: 轻轻放手	提出Idea，论文起草由我完成	让学生去寻找一些解决方法，从事编程工作</p>
<p>阶段三: 大胆放手	只提出Idea	鼓励学生自己寻找方法，尝试撰写论文，从事编程工作</p>
<p>阶段四: 理想状态	只提出大的研究方向	从Idea, 方法,实验,论文起草都由学生完成，从事编程工作</p>
<p>计算机图形学研究对实习生的要求相对比较严格，因为它的门槛很高，除了要有idea，还需要把这个idea实现到极致，做出最漂亮的结果。我对学生的要求非常严厉，但是从另一方面而言，学生出成果也很快很出色。我有责任让这些学生学到知识，提高能力，做出成绩，这样才对得起把这些学生交给我的老师和家长。对学生要求严格的一个简单方法就是以身作则，如果我对自己要求更严，比学生还用功，那么这种工作态度就会激励身边的学生一起热情地投入到项目中。</p>
<p>就像Harry和百宁常说的，我们从全国各地选拔上来的学生就像是一些优秀的的运动员苗子。我们要培养的是能参与国际竞争的奥林匹克团队。进入研究院的学生都是很好的苗子，但是真的要把这些好的苗子培养成世界一流运动员，需要一个艰巨和漫长的过程。在这个过程中，教练员必须要保持耐心。</p>
<p>五．2007年：科学研究中的猜想</p>
<p>研究院是一个智商密度很高的地方，不仅有许多聪明员工和实习生在这里工作，而且有很多世界一流的科学家络绎不绝地到这里交流访问，形成了一个非常宽松而活跃的学术交流平台。在与这些海内外知名学者的交流中，我总能在研究方法和思路上深受启发。比如每次和前任院长沈向洋的交谈都让我受益匪浅。他会经常鼓励我思考一些视觉和图形学交叉领域的研究问题。与另外一位理论组的访问学者滕尚华 教授的交流也极大地帮助我开拓了研究思路。</p>
<p>2005年尚华第一次来研究院访问的时候，我们一起做了一个网格形变的项目，尚华对这个项目中涉及到一些非线性优化算法的稳定性和收敛性做出了重要贡献。我们合作的论文也发表在SIGGRAPH 2006上。此后，每次尚华来研究院我们都会在一起聊天。尽管尚华是一个计算机理论科学家，他对应用领域的很多研究问题却有着浓厚的兴趣。有一次在闲聊时候，他提到在做研究的过程中直觉很重要，有的时候对一些没有把握的方向需要做出猜想（conjecture）。他还提到了自己的一个非常好的研究工作就是这样做出来的。当时理论界已经证明单纯形法 在最坏情况下具有指数复杂度。按照常理这样一个高复杂度的算法应当很难被应用，可是单纯形法却在工业界被广泛应用。尚华和他的合作者就猜想既然实践已经证明了单纯形法的实用性，那么一定存在着某种限定条件使得单纯形法的复杂度远远低于指数复杂度。沿着这一思路，他们最终证明了在大量的工业应用中单纯形法只是多项式复杂度。这一研究工作在理论界和工业界都产生了深刻的影响，相对于传统的最坏情况分析（worst case analysis），这一工作开创了光滑分析（*oothed analysis）。他们的论文也在2008年获得了计算机理论学界享有盛名的G?del奖。</p>
<p>当时，我在做一个关于动态散射媒体/烟雾的实时绘制项目，但是却碰到很多困难。烟雾的数据表达是一个包含有很多高频特性的体数据，我们尝试用一些数学模型去近似表达烟雾的数据，然后在这个数学模型上进行有效绘制计算。但是根据这些数学模型得到的绘制效果却不让人满意，因为原始数据在数学函数的逼近下会丢失掉一些细节，所以烟雾绘制出来的效果总是太过光滑，真实感颇为欠缺。另一方面，直接采用烟雾的原始数据会极大地降低绘制效率并且增加存储开销。这时候我们的项目基本上陷入了停顿。而尚华的关于科研猜想的一番谈话如醍醐灌顶般激发了我的灵感——是不是可以尝试不要丢掉残差（原始数据减去函数逼近而剩下的即为残差），在绘制过程中通过某种途径把残差补偿进去（当时完全不知道该如何补偿）。有了这个思路，我马上找任重一起讨论如何利用残差。很快我们就解决了残差数据的有效存储和绘制算法，实验结果表明这个猜想非常完美地把富有真实感的细节表现出来了。这项研究成果也发表在2008年的SIGGRAPH上。就是这样，一个利用早期被我们丢弃的残差数据的算法成为了这整个项目中最核心的部分，而大胆猜想为我们在穷途末路中找到了重新开路的明灯。</p>
<p>六．2008年： 从计算机图形学到计算机科学</p>
<p>如果说过去5年的目标是对计算机图形学有一个透彻的了解，那么从2008年开始我把研究范畴扩展到计算机科学中的一些更基础的领域：数据结构和编程语言。</p>
<p>近年来多核技术（包括多核CPU和GPU）的发展已经成为趋势，如何在多核环境下进行有效的算法设计和程序开发成为整个计算机科学的一个热点研究方向。这对我们图形学研究人员来说也是一个难得的机遇，因为没有人比我们更了解GPU，J。2007年年初我们就计划在 GPU上开发一些基本数据结构的构建算法，并在暑假的时候确定了要设计一个全新的GPU编程语言的目标。到目前为止我们已经开发了包括八叉树，KD树在内的多个基本数据结构，这些数据结构被应用到图形学和视觉等多个领域。</p>
<p>另外我的学生侯启明和我设计开发的BSGP编程语言使得程序员可以象编写串行C语言程序一样在GPU上进行并行程序设计，大大提高了GPU程序的可读性、可写性和可维护性，使得编程效率提高２~３倍。而我们的BSGP编译器生成的代码可以达到与现有的编程语言相似甚至更高的运行性能。这项成果已经被2008年的SIGGRAPH大会录用。目前我们正在努力把这个新的编程语言产品化。我梦想着有一天我们在数据结构和编程语言上的这些研究工作和成果会为并行计算时代的计算机科学奠定基础。</p>
<p>科学研究是一个没有止境的、艰苦的历程，如果你能保持耐心，并学会享受这一历程，你就能达到自己想象不到的高度。我希望这篇短文中提到一些的科研经历能对刚开始进行计算机图形学研究工作的新手们有所帮助。请你们相信，也许目前你觉得要成为一名计算机图形学专家是一件遥不可及的事情，但是只要你不断努力，你一定会被学术界所认可；也许你还会觉得成为计算机科学家是遥不可及的，那么只要你坚持，你同样可以证明自己可以成为一流的计算机科学家。就象Harry经常和我们说的，the sky is the only limit（天空是唯一的局限，引申为永无止境）!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.suzker.cn/babble/what-makes-you-super.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>最简单的MATLAB车牌字符分割（附源码）</title>
		<link>http://www.suzker.cn/computervision/the-simplest-licenses-plate-segment.html</link>
		<comments>http://www.suzker.cn/computervision/the-simplest-licenses-plate-segment.html#comments</comments>
		<pubDate>Sun, 25 Jul 2010 18:25:33 +0000</pubDate>
		<dc:creator>Suz</dc:creator>
				<category><![CDATA[编程]]></category>
		<category><![CDATA[计算机视觉]]></category>
		<category><![CDATA[LPR]]></category>
		<category><![CDATA[MATLAB]]></category>
		<category><![CDATA[字符分割]]></category>
		<category><![CDATA[车牌识别]]></category>

		<guid isPermaLink="false">http://www.suzker.cn/?p=306</guid>
		<description><![CDATA[此文介绍一个非常简单的字符分割步骤，文章最后附带源码。以下是摘要，点击阅读更多：

...有一天，王老师说，他的车牌识别率可以达到86%（当然，不知道是以什么标准，在怎样的环境下，识别怎样的车牌），我总觉得我能用我的方法做得再好一点。试着写了下面这一个简单的字符分割Script，出来结果后才发现自己是多么幼稚阿···

...不要以为去噪就是传统的高斯、中值滤波之类的东西，在自然环境中，干扰是无穷无尽的。对于我们的车牌识别程序，干扰我们的通常会有光照、车牌上的污点等等，这些干扰通常会使用普通图像处理手段来解决，比如用高斯等平滑滤波，用直方图均衡化等。然而，还有另外一些干扰也要引起我们的注意，就是车牌的边沿、螺丝等等，这些是几乎每个车都有的问题，因此解决这种问题更显得程序的通用性。... <span style="color:#777"> . . . &#8594; Read More: <a href="http://www.suzker.cn/computervision/the-simplest-licenses-plate-segment.html">最简单的MATLAB车牌字符分割（附源码）</a></span>]]></description>
			<content:encoded><![CDATA[<blockquote><p>有一天，王老师说，他的车牌识别率可以达到86%（当然，不知道是以什么标准，在怎样的环境下，识别怎样的车牌），我总觉得我能用我的方法做得再好一点。试着写了下面这一个简单的字符分割Script，出来结果后才发现自己是多么幼稚阿··· 这笨方法只能当作入门了。</p></blockquote>
<p>先说明，这是一个最简单的车牌字符分割程序，结果连我自己都觉得惨不忍睹··· 太打击了。</p>
<p>正如前文提到的，传统LPR通常要求在识别任务前先做一个字符分割。应该算是整个LPR程序中最简单的一步了。只是，就连这么简单的步骤也需要我们的很多考虑，需要牺牲大量的脑细胞来得到个还算说得过去的办法。你看完就知道了。</p>
<p>程序大概分为3步：1、灰度化/二值化/直方图均衡化/归一化大小；  2、去噪； 3、分割。</p>
<p>由于使用MATLAB作为平台，第一步几乎可以以一句话完成。这里不做过多陈述：</p>
<pre style="padding-left: 30px;">bgs_img = filter2(fspecial('average',2),im2bw(histeq(rgb2gray(ori_img)),0.8));</pre>
<p>而对于去噪一步，需要花一点心思。不要以为去噪就是传统的高斯、中值滤波之类的东西，在自然环境中，干扰是无穷无尽的。对于我们的车牌识别程序，干扰我们的通常会有光照、车牌上的污点等等，这些干扰通常会使用普通图像处理手段来解决，比如用高斯等平滑滤波，用直方图均衡化等。然而，还有另外一些干扰也要引起我们的注意，就是车牌的边沿、螺丝等等，这些是几乎每个车都有的问题，因此解决这种问题更显得程序的通用性。</p>
<div id="attachment_307" class="wp-caption alignleft" style="width: 433px"><a href="http://www.suzker.cn/wp-content/uploads/2010/07/0001.jpg"><img class="size-full wp-image-307" title="网上摘录的车牌" src="http://www.suzker.cn/wp-content/uploads/2010/07/0001.jpg" alt="MM520" width="423" height="150" /></a><p class="wp-caption-text">网上摘录的车牌</p></div>
<p>给出一个网上摘录下来的车牌（好牌号呀！），我们可以看到，尽管车牌已经比较完美地定位（切割）了出来，但是对于提取纯字符任务来说，我们还面临着边沿、螺丝、空隙等挑战。</p>
<p>在这里尝试采用比较常见的统计手段来解决这个问题：</p>
<p>在得到二值化图像之后，我们可以得到一个二值矩阵（这不废话），当某位置的值等于0的时候，表示该像素点为全黑，反之，则该像素点为纯白。然后我们可以对此二值矩阵分别对行、列进行求和统计。</p>
<p><strong><span style="color: #ff0000;">下一页是代码摘要和详解</span></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.suzker.cn/computervision/the-simplest-licenses-plate-segment.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>试谈MATLAB代码性优化及编程策略</title>
		<link>http://www.suzker.cn/programming/optimize-your-matlab-code.html</link>
		<comments>http://www.suzker.cn/programming/optimize-your-matlab-code.html#comments</comments>
		<pubDate>Sun, 11 Jul 2010 05:17:59 +0000</pubDate>
		<dc:creator>Suz</dc:creator>
				<category><![CDATA[编程]]></category>
		<category><![CDATA[MATLAB]]></category>
		<category><![CDATA[代码优化]]></category>
		<category><![CDATA[性能优化]]></category>

		<guid isPermaLink="false">http://www.suzker.cn/?p=281</guid>
		<description><![CDATA[本文着重介绍各种Matlab代码及执行性能的优化方法，由平时的实战经验积累，归纳出各种技巧，主要分为：【速度优化】、【系统资源】这两类技巧。以下是摘要，点击阅读更多：

...相信用过Matlab的朋友，特别是需要处理大数据（matrix/cell/structure…）的朋友，必然深深地体会到Matlab的“慢”与“肥”。不仅脚本执行效率不高（不是不高，是Matlab简直就是性能低下），就连Initialize都要半天。还有经常性清脆地“滴”一声之后，出现红色的提示“Out of memory”。还有对多线程的支持不好、CPU无法满载、打开*.mat数据大小限制等等问题，总之一言难尽。...

...其实Matlab中不一定要先定义变量，因为Matlab中的变量是非常灵活的。但是这种灵活性不代表Matlab就会智能到知晓一切，比如你的变量的大小。于是很多人都可能会忽略一点就是，在循环中让你的矩阵变量不定型地变换大小是非常致命的（总要自己试过才知道是多致命）。而唯一的终极解决的方法就是不要那么懒（大忌），在循环之前先计算好矩阵的大小，然后预先给你的矩阵指定大小（用zeros或者ones，随你）。如此，速度可能会是1000倍速以上，不信你试试··· <span style="color:#777"> . . . &#8594; Read More: <a href="http://www.suzker.cn/programming/optimize-your-matlab-code.html">试谈MATLAB代码性优化及编程策略</a></span>]]></description>
			<content:encoded><![CDATA[<blockquote><p>相信用过Matlab的朋友，特别是需要处理大数据（matrix/cell/structure…）的朋友，必然深深地体会到Matlab的“慢”与“肥”。不仅脚本执行效率不高（不是不高，是Matlab简直就是性能低下），就连Initialize都要半天。还有经常性清脆地“滴”一声之后，出现红色的提示“Out of memory”。还有对多线程的支持不好、CPU无法满载、打开*.mat数据大小限制等等问题，总之一言难尽。</p>
<p>在写了不多，但是也不算少的matlab程序之后，特别是大量跟数据搏斗的程序，我开始渐渐有些体会。这里提出一些方法，是一些小技巧，是小人物、破机器跟贱数据搏斗之后，大难不死的一些心得，也有一些是引用别人的心得。趁着假期将它们逐渐整理出来，或许不是很全，有一些曾经注意过的地方有遗漏，所以或许还会有续集。</p></blockquote>
<p>Matlab性能优化，通过优化代码，通常主要优化的对象是两个，一是<span style="text-decoration: underline;">效率、速度</span>，二是<span style="text-decoration: underline;">系统资源的占用</span>。</p>
<ul>
<li><span style="color: #0000ff;"><strong><span style="text-decoration: underline;">【速度优化】慎用for、while循环，多用矩阵运算(Vectorizing your code)。</span></strong></span></li>
</ul>
<ol>习惯于c/c++等非高级语言的朋友在开始接触Matlab的时候通常会忽略很重要的一点，就是matlab它自身带有非常强大的矩阵运算(Vectorized function)，不习惯或者不知晓这种方式的朋友通常会选择使用for等循环方式来对矩阵中的单元格进行遍历处理。其实for循环在Matlab当中是非常慢的，尽管有文章声称Matlab已经改进一些Matlab基础方法(basic components)的速度，但是在2009b版本仍然没有看到太大的改善。所以在需要对矩阵进行操作时候，最好灵活应用矩阵运算方法。</ol>
<ol>矩阵运算方法是一个不大不小的学问，其实我觉得看书的能学到的技巧微乎其微，关键还是要靠自己平时的积累，以下列<strong><span style="text-decoration: underline;">举一个遍历矩阵的实例</span></strong>：需要遍历一个30&#215;30的矩阵A，找出等于7的项，并对其执行相应的操作。</ol>
<ol>
<pre>
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;">

position = find(A==9);</blockquote>
</pre>
</ol>
<ol>上面的命令返回一个列向量指出A中等于7的位置</ol>
<ol>然后我们对A进行操作，对等于7的地方赋予717，对于第一种用find命令得到的position可以这样写：</ol>
<ol>
<pre>
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;">

A(position)=717;</blockquote>
</pre>
</ol>
<ol>又或者，如果position变量你只用到一次的话，其实可以省下一个position变量，直接这样写：</ol>
<ol>
<pre>
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;">

A(find(A==7))=717;</blockquote>
</pre>
</ol>
<ol><strong><span style="text-decoration: underline;">再举一例吧</span></strong>，这次假设我们一定非得要用for循环来对矩阵进行遍历，这时候我们只需要一个for循环就可以实现对矩阵实行遍历：</ol>
<ol>
<pre>
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;">

for i=1:(size(A,1)*size(A,2))
    Do_Something_Here();
end</blockquote>
</pre>
</ol>
<ol>因为Matlab中矩阵的格子有一个单一的索引号从第一列开始从上到下数完全部行之后再移到下一列，因此只一个for循环就ok了。</ol>
<ol><strong><span style="text-decoration: underline;">忍不住再举一例</span></strong>，也算是一个技巧。某些情况下我们还是需要用两个for循环来对矩阵进行操作，这时候我们可以把对列(column)的循环写到外面，把对行(row)的循环写到里面。因为这样会快一倍左右。至于为什么会快一点呢？我懒得翻译了，直接给出传说中的答案：</ol>
<blockquote>
<ol>Modern CPUs use a fast cache to reduce the average time taken to access main memory. Your code achieves maximum cache efficiency when it traverses monotonically increasing memory locations. Because MATLAB stores matrix columns in monotonically increasing memory locations, processing data column-wise results in maximum cache efficiency.</ol>
</blockquote>
<ol>最后列出一些常用的矩阵运算时候经常用到的命令：</ol>
<ol>
<table border="0" cellspacing="0" cellpadding="4">
<tbody>
<tr valign="top">
<td>all</td>
<td>end</td>
<td>logical</td>
<td>repmat</td>
<td>squeeze</td>
</tr>
<tr valign="top">
<td>any</td>
<td>find</td>
<td>ndgrid</td>
<td>reshape</td>
<td>sub2ind</td>
</tr>
<tr valign="top">
<td>cumsum</td>
<td>ind2sub</td>
<td>permute</td>
<td>shiftdim</td>
<td>sum</td>
</tr>
<tr valign="top">
<td>diff</td>
<td>ipermute</td>
<td>prod</td>
<td>sort</td>
<td>-</td>
</tr>
</tbody>
</table>
</ol>
<p><strong> </strong></p>
<ul>
<li><strong><span style="color: #0000ff;"><span style="text-decoration: underline;">【速度优化】先定义矩阵大小，防止矩阵在程序中不断变换大小。</span></span></strong></li>
</ul>
<ol>其实Matlab中不一定要先定义变量，因为Matlab中的变量是非常灵活的。但是这种灵活性不代表Matlab就会智能到知晓一切，比如你的变量的大小。于是很多人都可能会忽略一点就是，在循环中让你的矩阵变量不定型地变换大小是非常致命的（总要自己试过才知道是多致命）。而唯一的终极解决的方法就是不要那么懒（大忌），在循环之前先计算好矩阵的大小，然后预先给你的矩阵指定大小（用zeros或者ones，随你）。如此，速度可能会是1000倍速以上，不信你试试···</ol>
<ul>
<li><strong><span style="text-decoration: underline;"><span style="color: #0000ff;">【速度优化】function比script更快</span></span></strong></li>
</ul>
<ol>其实这个我也是在网上看到的，说是运行脚本会把不必要的变量加载到内存，而函数只加载一次。我自己并没有太多感觉。但是function的确比script好的一个地方就是，function结束以后，除了在function头定义的输出变量之外，并没有其他任何function所涉及到的变量会被保留，这个首先就是不会造成宝贵的内存空间的浪费，再就是debug的时候不会头晕晕将变量都搞糊涂了（除非你有非常统一的变量命名规则，我就不信你永远都不会用i、j之类的临时循环计数变量）。</ol>
<ul>
<li><strong><span style="text-decoration: underline;"><span style="color: #0000ff;">【速度优化】关于Matlab中的I/O</span></span></strong></li>
</ul>
<ol>先说说数据文件格式的选择。当我们保存数据、再读取数据的时候，我们应该首先考虑mat类型的数据文件格式。首先mat类型的通用性比较好，只要Include一个mat.h的头文件，在c程序中也可以实现读取mat文件，而不必担心它的格式不通用的问题。再者，由mat文件读入数据后，可以轻易地用Matlab自带函数(如csvwrite、xlswrite等)将其转换成其他通用数据格式诸如csv、xls。还有一个考虑到的地方将会在下面提到，是关于Matlab中I/O命令的执行效率问题。</ol>
<ol>在Matlab中，load/save命令是加载mat格式文件用到的两个命令，其已经对读取文件进行过优化，效率要比fopen之类的要高。所以在I/O命令的选择上面，除非碰到.txt/.dat之类的非通用格式的文件没办法外，我们一般都建议使用load/save来加载mat文件。</ol>
<ol>最后还有非常重要的地方要提一下，就是在进行对硬盘中文件I/O操作的时候，千万不要再开其他程序对那些文件或者其所在的文件夹进行读取或者写入。首先，两个程序同时对一个文件夹操作会造成文件检索、文件读写缓慢，甚至能让Matlab假死的情况出现。平时我用Linux系统的时候更是感觉文件系统不及windows快速，打开多文件的文件夹速度明显不如windows，不知道是GNOME桌面还是Nautilus的问题。还有一点，就是一个程序在那个文件夹里面增加/减少文件，会导致另外一个程序的I/O错误，比如说这边删掉了一个文件，那边却正在读那个文件，当然就是crash啦。</ol>
<ul>
<li><strong><span style="color: #0000ff;"><span style="text-decoration: underline;">【速度优化】关于不必要的变量(Unnecessary Variables)</span></span></strong></li>
</ul>
<p style="padding-left: 30px;">有人可能会认为，不必要的变量只是会占用内存空间而已（虽然已经够致命了）。其实不然，多余的变量还会影响速度。试用下面两个代码段作比较：</p>
<ol>
<blockquote>
<pre><span style="color: #99cc00;">%% segment 1.</span>
tic;
x=myfun(x);
t_seg1=toc;
disp(t_seg1);</pre>
<pre><span style="color: #99cc00;">%% segment 2.</span>
tic;
y=myfun(x);
t_seg2=toc;
disp(t_seg2);</pre>
</blockquote>
</ol>
<ol>结果是t_seg2比t_seg1大了两个数量级，两个代码的区别是seg1比sge2少创建一个不必要的变量y。至于为什么减少不必要的变量可以使速度变快呢？原因很简单，还是那个，你创建一个新变量，必须在内存中给它allocate一个空间，必须赋值给它，这些都是需要时间的，虽然处理小数据的时候，这些并没有什么太大分别，但是当你需要与大数据、小内存搏斗时，你就要开始考虑这些细节了。</ol>
<p><strong><span style="color: #ff0000;">还有下一页&#8230; 好臭好长&#8230;</span></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.suzker.cn/programming/optimize-your-matlab-code.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HMM中的前向法(Forward Agorithm)</title>
		<link>http://www.suzker.cn/computervision/forward-agorithm-for-hmm.html</link>
		<comments>http://www.suzker.cn/computervision/forward-agorithm-for-hmm.html#comments</comments>
		<pubDate>Fri, 09 Jul 2010 09:55:15 +0000</pubDate>
		<dc:creator>Suz</dc:creator>
				<category><![CDATA[计算机视觉]]></category>
		<category><![CDATA[Computer Vision]]></category>
		<category><![CDATA[dynamic programming]]></category>
		<category><![CDATA[Forward Agorithm]]></category>
		<category><![CDATA[HMM]]></category>
		<category><![CDATA[基础知识]]></category>

		<guid isPermaLink="false">http://www.suzker.cn/?p=209</guid>
		<description><![CDATA[本文主要介绍隐马科夫模型(HMM)中的一个重要算法：前向法(Foward Algorithm)。将普通算法与前向法优化算法对比，详细分析其实现过程。以下是摘要，点击阅读更多：

...各位应该不难想象，最普通最直接的计算[latex]P(O&#124;\lambda)[/latex]的方法就是枚举所有可能的隐状态序列(S)，然后用Transition Matrix与Emission Matrix的数据，对每一个隐状态序列S求我们的目标观察序列O的一个概率。...

...我们在面对一种所谓的可以简化计算、加速计算的方法面前，应该首先考虑到底这种算法是如何简化？在哪一步发生了奇妙的变化？为什么这样可行？...

...记得在上一页提到的普通穷举算法中，对于所有的可能隐状态路径计算，其实都有很大部分的重复。比如，我要分别算(S1 > S2 > S1 > S3 > S2)这个路径与(S1 > S2 > S1 > S3 > S4)这个路径的概率时候，这两个路径的t<=4的那些状态(S1 > S2 > S1 > S3 >..)其实是相同的。我们的加速算法，切入点就是这里，去掉重复的地方使速度变快，复杂度降低。... <span style="color:#777"> . . . &#8594; Read More: <a href="http://www.suzker.cn/computervision/forward-agorithm-for-hmm.html">HMM中的前向法(Forward Agorithm)</a></span>]]></description>
			<content:encoded><![CDATA[<blockquote><p>在假期的前几天颓废了好一阵之后，终于重新拾起未完成的事情。根据计划是按照HMM -&gt; MEM -&gt; CRF -&gt; hCRF 这个伟大目标前进的。HMM已经在之前写了一个<a href="http://www.suzker.cn/computervision/the-hmm-model.html" target="_blank">文章</a>(惊喜地发现在google里面搜“HMM模型”，它出现在了第一页 <img src='http://www.suzker.cn/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> )，这里写的是HMM中，解决第一个问题，即估值问题的一个快速算法 &#8211; 前向法(Forward Agorithm)。过几天还会陆续完全弄懂、写好Viterbi与Baum-Welch算法。</p>
<p>本文目录：</p>
<ul>
<li>Page 1: 前文提要</li>
<li>Page 2: 普通的穷举算法</li>
<li>Page 3: 可行的替代算法 &#8211; 前向法</li>
<li>Page 4: 参考书目</li>
</ul>
</blockquote>
<blockquote style="text-align: right;"><address><span style="color: #888888;">Last Modified：2010/08/29 23:40 All rights reserved.</span></address>
</blockquote>
<h2>前文提要：</h2>
<p>在之前的HMM文章中提到，HMM模型将涉及到3个问题：</p>
<ol>
<li><span style="color: #0000ff;">给定一个观察到得序列O，及参数<img src='http://s.wordpress.com/latex.php?latex=%5Clambda&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='\lambda' title='\lambda' class='latex' />，求出<img src='http://s.wordpress.com/latex.php?latex=P%28O%7C%5Clambda%29&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='P(O|\lambda)' title='P(O|\lambda)' class='latex' />，即发生这种观察序列的可能性。对应上面例子中，即是我给定一个最终确定了的水果序列S，求我选到这样的水果的可能性。</span></li>
<li>给定一个观察到的序列O，及参数<img src='http://s.wordpress.com/latex.php?latex=%5Clambda&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='\lambda' title='\lambda' class='latex' />，求出最有可能产生这种序列的状态序列S。对应上面例子中，即我给定一个最终确定了的水果序列S，求我最可能的选水果筐路径。</li>
<li>同样给定一个观察得到的序列O，求如何调整参数<img src='http://s.wordpress.com/latex.php?latex=%5Clambda&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='\lambda' title='\lambda' class='latex' />，使<img src='http://s.wordpress.com/latex.php?latex=P%28O%7C%5Clambda%29&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='P(O|\lambda)' title='P(O|\lambda)' class='latex' />最大。</li>
</ol>
<p>这里讨论的将会是第一个问题，即所谓的估值问题。</p>
<p>再次，在问题一中我们的目标是求出可见序列O在参数集<img src='http://s.wordpress.com/latex.php?latex=%5Clambda&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='\lambda' title='\lambda' class='latex' />(包含Transition Matrix、Emission Matrix、N、M、Pi)中的发生概率，即求<img src='http://s.wordpress.com/latex.php?latex=P%28O%7C%5Clambda%29&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='P(O|\lambda)' title='P(O|\lambda)' class='latex' />，请着眼于这个概率，以下将以<img src='http://s.wordpress.com/latex.php?latex=P%28O%7C%5Clambda%29&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='P(O|\lambda)' title='P(O|\lambda)' class='latex' />作为主角。</p>
<p><span style="color: #ff0000;"><strong>(请留意换页&#8230; Next Page »)</strong></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.suzker.cn/computervision/forward-agorithm-for-hmm.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Way Life&#8217;s Meant to Be</title>
		<link>http://www.suzker.cn/cultural/music/the-way-lifes-meant-to-be.html</link>
		<comments>http://www.suzker.cn/cultural/music/the-way-lifes-meant-to-be.html#comments</comments>
		<pubDate>Mon, 28 Jun 2010 02:09:45 +0000</pubDate>
		<dc:creator>Suz</dc:creator>
				<category><![CDATA[音乐]]></category>
		<category><![CDATA[Electric Light Orchester]]></category>
		<category><![CDATA[青春]]></category>

		<guid isPermaLink="false">http://www.suzker.cn/?p=194</guid>
		<description><![CDATA[听"The Way Life's Meant to Be"这首歌的时候忽然很有感触，从未有过的悲哀。附带歌词翻译，以下是摘要，点击阅读更多：

...Well, I came a long way to be here today
And I left you so long on this avenue
And here I stand in the strangest land
Not knowing what to say or do
As I gaze around at these strangers in town
I guess the only stranger is me
And I wonder (yes, I wonder)
Yes, I wonder (oh, I wonder)
Is this the way life's meant to be?

当我长途跋涉终于又回到这里
在此你我已相隔千里
当我站在这个陌生的地方时
不知所措
当我偷偷打量这里的陌生事物时
才发现奇怪陌生的只有我而已
然后我就疑惑...
对，我就在想...
难道生活就应该是这样么？...
 <span style="color:#777"> . . . &#8594; Read More: <a href="http://www.suzker.cn/cultural/music/the-way-lifes-meant-to-be.html">The Way Life&#8217;s Meant to Be</a></span>]]></description>
			<content:encoded><![CDATA[<p>忽然听这首歌的时候很有感触，从未有过的悲哀。</p>
<div>
<p><span style="font-family: verdana, arial, sans-serif; color: #555555;"><span style="line-height: 18px;"> </span></span></p>
<div class="wp-caption alignnone" style="width: 310px"><img title="Electric Light Orchester - Light (the cover)" src="http://ecx.images-amazon.com/images/I/41Ic7xkuMjL._SL500_AA300_.jpg" alt="Electric Light Orchester - Light (the cover)" width="300" height="300" /><p class="wp-caption-text">Electric Light Orchester - Light (the cover)</p></div>
<p><object id="KugouPlayer" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="200" height="46" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="name" value="KugouPlayer" /><param name="align" value="middle" /><param name="src" value="http://disk.kugou.com/player/0/8/0/0/default/200/9C9791F90B26FD13/mini.swf" /><param name="wmode" value="transparent" /><param name="quality" value="high" /><embed id="KugouPlayer" type="application/x-shockwave-flash" width="200" height="46" src="http://disk.kugou.com/player/0/8/0/0/default/200/9C9791F90B26FD13/mini.swf" quality="high" wmode="transparent" align="middle" name="KugouPlayer"></embed></object></p>
<blockquote><p><span style="font-family: sans-serif; border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;">It seemed to be [a pessimistic view] on that song. Yeah, well, and absolute that song&#8230; He&#8217;s walking down the same street that it was before, like say a hundred years before. But uh, even though he&#8217;s on the same bit of ground, everything that he knew is, like, buried under this new shit, y&#8217;know, that&#8217;s growing up&#8230; on top of it, all these plastic towers and stuff. Ah, the castanets. It was a bit Russian but we put castanets on it and it became Spanish.</span></p>
<p><span style="font-family: sans-serif; border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;">- wiki: <a href="http://en.wikipedia.org/wiki/The_Way_Life's_Meant_to_Be">The Way Life&#8217;s Meant to Be</a>.</span></p></blockquote>
</div>
<div><span style="font-family: verdana, arial, sans-serif; color: #666666; font-size: x-small;"><span style="line-height: 13px;"><br />
</span></span></div>
<div><em><span style="text-decoration: underline;">&#8220;The Way Life&#8217;s Meant to Be&#8221;</span></em></div>
<div><em><span style="text-decoration: underline;"><br />
</span></em></div>
<p>Well, I came a long way to be here today<br />
And I left you so long on this avenue<br />
And here I stand in the strangest land<br />
Not knowing what to say or do<br />
As I gaze around at these strangers in town<br />
I guess the only stranger is me<br />
And I wonder (yes, I wonder)<br />
Yes, I wonder (oh, I wonder)<br />
Is this the way life&#8217;s meant to be?</p>
<p>当我长途跋涉终于又回到这里<br />
在此你我已相隔千里<br />
当我站在这个陌生的地方时<br />
不知所措<br />
当我偷偷打量这里的陌生事物时<br />
才发现奇怪陌生的只有我而已<br />
然后我就疑惑&#8230;<br />
对，我就在想&#8230;<br />
难道生活就应该是这样么？</p>
<p>Although it&#8217;s only a day since I was taken away<br />
And left standing here looking in wonder<br />
(It&#8217;s your life, it&#8217;s your life)<br />
Ah, the ground at my feet, maybe it&#8217;s just the old street<br />
But everything that I know lies under<br />
(It&#8217;s your life, it&#8217;s your life)<br />
And when I see what they&#8217;ve done<br />
To this place that was home<br />
Shame is all that I feel<br />
Oh, and I wonder (oh, I wonder)<br />
Yes, I wonder (wonder, wonder, wonder, wonder)<br />
Is this the way life&#8217;s meant to be?</p>
<p>尽管我只离开了一天<br />
呆呆地站在原地无奈地张望<br />
（这就是你的生活，这就是你的生活）<br />
啊，我脚下的土地，可能就是我曾经熟悉的老街<br />
但是所有我熟悉的一切却已被深埋地下<br />
当我看到他们对这里，<br />
对这个曾经是家的地方所做的一切<br />
我只能感到深深的耻辱<br />
噢，我就奇怪了<br />
难道这就是生活本该有的样子？</p>
<p>Too late, too late to cry<br />
The people say<br />
Too late for you, too late for me<br />
You&#8217;ve come so far, now you know everything my friend<br />
Look and see the wonders of our world&#8230;</p>
<p>人们说：<br />
“太迟了，你哭也没用了”<br />
“对你我而言，都太迟了”<br />
你都已经长大了，你都已经知道太多关于这个世界的事情了<br />
睁开双眼看看我们这个光怪陆离的世界吧！</p>
<p>And I wonder (oh, I wonder)<br />
Yes, I wonder (yes, I wonder)<br />
Is this the way life&#8217;s meant to be?</p>
<p>然后，我就奇怪了<br />
是的，我就奇怪了！<br />
难道这就是生活本来的面目么？</p>
<p>As I wander around this wreck of a town<br />
Where people never speak aloud<br />
With its ivory towers and its plastic flowers<br />
I wish I was back in 1981<br />
Just to see your face instead of this place<br />
Now I know what you mean to me<br />
And I wonder (oh, I wonder)<br />
Yes, I wonder (yes, I wonder)<br />
Is this the way life&#8217;s meant to be?</p>
<p>以前这里的人们甚至都不曾大声说话<br />
当我在这鬼地方游荡的时候<br />
看着这里的高塔和那些塑料花儿<br />
我多想回到1981<br />
去看看你的样子，而不是这个鬼地方<br />
到现在我才真正懂得，对我而言你是多么珍贵<br />
然后，我就奇怪了<br />
是的，我又奇怪了<br />
难道这就是生活的摸样么？</p>
<p>And I wonder (oh, I wonder)<br />
Yes, I wonder, wonder, wonder, wonder<br />
Is this the way life&#8217;s meant to be?<br />
Ooohh, I wonder<br />
Oh, I wonder, wonder, wonder<br />
Is this the way life&#8217;s meant to be?<br />
Oh, is this the way life&#8217;s meant to be?<br />
Mmmmm, is this the way life&#8217;s meant to be?<br />
I wanna know now<br />
Is this the way life&#8217;s meant to be?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.suzker.cn/cultural/music/the-way-lifes-meant-to-be.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>总有一些事情你来不及 &#8211; Google Goggles</title>
		<link>http://www.suzker.cn/babble/theres-always-someting-youre-late-for-google-goggles.html</link>
		<comments>http://www.suzker.cn/babble/theres-always-someting-youre-late-for-google-goggles.html#comments</comments>
		<pubDate>Sun, 20 Jun 2010 02:42:10 +0000</pubDate>
		<dc:creator>Suz</dc:creator>
				<category><![CDATA[杂谈]]></category>
		<category><![CDATA[计算机视觉]]></category>
		<category><![CDATA[Computer Vision]]></category>
		<category><![CDATA[GOC]]></category>
		<category><![CDATA[Goggles]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[MSRA]]></category>

		<guid isPermaLink="false">http://www.suzker.cn/babble/%e6%80%bb%e6%9c%89%e4%b8%80%e4%ba%9b%e4%ba%8b%e6%83%85%e4%bd%a0%e6%9d%a5%e4%b8%8d%e5%8f%8a-google-goggles.html</guid>
		<description><![CDATA[...用图片搜索是在大概两年前就想的一个东西，那时候一窍不通（当然现在也是），整天爱幻想很多东西。现在才知道，这就是所谓的General Object classify（GOC），通用目标识别，就好比大小老幼通杀的一种解决方案，可以识别所有物体的类别。但是，Goggles现在只能识别一定的类别的物体，兼容最好的就是书籍封面、DVD封面、landmarks等内容，食物、车、植物、动物等仍然不在列。...

以上为文章摘要，点击阅读更多 <span style="color:#777"> . . . &#8594; Read More: <a href="http://www.suzker.cn/babble/theres-always-someting-youre-late-for-google-goggles.html">总有一些事情你来不及 &#8211; Google Goggles</a></span>]]></description>
			<content:encoded><![CDATA[<p>早上无聊，打算找个google reader在手机上玩玩，结果找到了这<a href="http://www.google.com/mobile/goggles/" target="_blank">Google Goggles</a>，一个用图片作为key word的搜索服务。看罢，主要有两个感觉，一个是后悔买了WM系统的 &#8212; 十分后悔！另外一个是，总有一些事情你来不及做，想做的东西总要被人先想到了。</p>
<p>用图片搜索是在大概两年前就想的一个东西，那时候一窍不通（当然现在也是），整天爱幻想很多东西。现在才知道，这就是所谓的General Object classify（GOC），通用目标识别，就好比大小老幼通杀的一种解决方案，可以识别所有物体的类别。但是，Goggles现在只能识别一定的类别的物体，兼容最好的就是书籍封面、DVD封面、landmarks等内容，食物、车、植物、动物等仍然不在列。</p>
<p>但是开发人员表示，当前版本的Goggles仍然是“还没深入”(scratches the surface of the visual search technology.)。Google的创意当然也不会就此止步，开发人员还表示，将来的开发将会使Goggles可以通过植物的叶子来识别植物，甚至通过一个棋盘残局的照片来给你下一步棋的建议。</p>
<p>就当前的功能来看，的确还停留在普通的思维方式上，即某种特征提取（不会就是SIFT或者ASIFT吧··= =），然后是通过比对google早已运算好的一个数据库得出结果。Goggles里面还有ORC技术等运用，说白了整个Goggles就相当于一个大杂烩。如此看来，说不定后续的开发，比如上面提到的通过叶子识别植物，也是需要先指定当前的识别任务是要识别叶子才行。个人觉得，假如无法突破这种方式，将很难达到GOC的标准。相反，Google应该对自己的庞大搜索数据库好好利用，不要将眼光局限于当前的理论，如何将图片真正当成一个key word接入搜索服务中才是一种正道。</p>
<p>尽管Goggles可能仍然需要大的突破才能达到这种GOC标准，但是单单用图片搜索一项已经够激动人心的了，也很酷。反而是微软，MSRA做了这么多图像的研究，每年一堆学者发这个发那个图像论文，却是仍然没有做一个玩意出来让大家玩玩。Google这种大胆的尝试，确实是理论转为实际应用的一个很好的尝试。<span id="more-182"></span></p>

<div class="ngg-imagebrowser" id="ngg-imagebrowser-5-182">

	<h3>goggles_contact</h3>

	<div class="pic">
<a href="http://www.suzker.cn/wp-content/gallery/posts/goggles_contact.png" title="" class="shutterset_posts">
	<img alt="goggles_contact" src="http://www.suzker.cn/wp-content/gallery/posts/goggles_contact.png"/>
</a>
</div>
	<div class="ngg-imagebrowser-nav"> 
		<div class="back">
			<a class="ngg-browser-prev" id="ngg-prev-42" href="http://www.suzker.cn/nggallery/post/theres-always-someting-youre-late-for-google-goggles/image/42">&#9668; 上一张</a>
		</div>
		<div class="next">
			<a class="ngg-browser-next" id="ngg-next-37" href="http://www.suzker.cn/nggallery/post/theres-always-someting-youre-late-for-google-goggles/image/37">下一张 &#9658;</a>
		</div>
		<div class="counter">图片 1 的 7</div>
		<div class="ngg-imagebrowser-desc"><p></p></div>
	</div>	

</div>	


<p><!--more--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.suzker.cn/babble/theres-always-someting-youre-late-for-google-goggles.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>月之暗面场景重现 英国人怀念Pink Floyd经典专辑</title>
		<link>http://www.suzker.cn/cultural/reproducing_the_dark_side_of_the_moon_scene.html</link>
		<comments>http://www.suzker.cn/cultural/reproducing_the_dark_side_of_the_moon_scene.html#comments</comments>
		<pubDate>Wed, 26 May 2010 01:52:46 +0000</pubDate>
		<dc:creator>Suz</dc:creator>
				<category><![CDATA[人文]]></category>
		<category><![CDATA[音乐]]></category>
		<category><![CDATA[Dark Side of The Moon]]></category>
		<category><![CDATA[Pink Floyd]]></category>

		<guid isPermaLink="false">http://www.suzker.cn/?p=94</guid>
		<description><![CDATA[...UK-based satellite TV station Sky Arts have created a pyramid on London's Primrose Hill to publicise their showing of Pink Floyd's Earl's Court 1994 performance of The Dark Side of The Moon on Sky Arts 1 in high definition....

...The large 'prism' uses diffused LED lighting to create the album art's glowing effect. Lasers were installed behind the structure, a white laser emitting from the left hand side and coloured beams emitting from the right hand side, to re-create the image that appears on the famous Pink Floyd album cover.... <span style="color:#777"> . . . &#8594; Read More: <a href="http://www.suzker.cn/cultural/reproducing_the_dark_side_of_the_moon_scene.html">月之暗面场景重现 英国人怀念Pink Floyd经典专辑</a></span>]]></description>
			<content:encoded><![CDATA[<blockquote><p>转载于brain-damage网：<a href="http://www.brain-damage.co.uk/latest/point-me-at-the-sky-dark-side-tribute-on-primrose-hill.html" target="_blank">http://www.brain-damage.co.uk/latest/point-me-at-the-sky-dark-side-tribute-on-primrose-hill.html</a></p>
<div id="attachment_103" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.suzker.cn/wp-content/uploads/2010/05/dsotm_sky_arts.jpg"><img class="size-full wp-image-103" title="dsotm_sky_arts" src="http://www.suzker.cn/wp-content/uploads/2010/05/dsotm_sky_arts.jpg" alt="Dark Side of The Moon Sky Arts tribute" width="600" height="450" /></a><p class="wp-caption-text">Dark Side of The Moon Sky Arts tribute</p></div></blockquote>
<p>UK-based satellite TV station Sky Arts have created a pyramid on  London&#8217;s Primrose Hill to publicise their showing of Pink Floyd&#8217;s Earl&#8217;s  Court 1994 performance of The Dark Side of The Moon on Sky Arts 1 in  high definition.</p>
<p>The 5-metre high pyramid, shown to the right with the London skyline  [click thumbnail], promotes the screening of Pulse: The Dark Side Of The  Moon Live, which transmits on Sky Arts 1 and Sky Arts 1 HD today  (Friday October 23rd) at 10am and 4pm.</p>
<p>The large &#8216;prism&#8217; uses diffused LED lighting to create the album art&#8217;s  glowing effect. Lasers were installed behind the structure, a white  laser emitting from the left hand side and coloured beams emitting from  the right hand side, to re-create the image that appears on the famous  Pink Floyd album cover.</p>
<p><strong>UPDATE:</strong> The people behind this very impressive  installation documented the creation, and the following video gives a  whistle-stop guide to the construction, and a look at how it appeared on  Primrose Hill:  <!-- JW AllVideos Plugin (v2.4) starts here --></p>
<p><script src="http://www.brain-damage.co.uk/mambots/content/plugin_jw_allvideos/gz_eolas_fix.js" type="text/javascript"></script> <script type="text/javascript">// <![CDATA[
// <![CDATA[
var jsval = '<span class="mceItemObject"  style=\"width:400px; height:323px;\">
<span  name=\"movie\" value=\"http://www.youtube.com/v/uleQ6ZGyifQ\" class="mceItemParam"></span>
<span  name=\"wmode\" value=\"transparent\" class="mceItemParam"></span><span class="mceItemEmbed"  src=\"http://www.youtube.com/v/uleQ6ZGyifQ\"  wmode=\"transparent\" type=\"application/x-shockwave-flash\" style=\"width:400px; height:323px;\"></span></span>';
writethis(jsval);
// ]]&gt;</script></p>
<p><span id="more-94"></span></p>
<p>以下是制作视频时长1分22秒：</p>
<p style="text-align: center;"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="400" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="wmode" value="opaque" /><param name="src" value="http://www.tudou.com/v/_xdAIbcnK_M/v.swf" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="480" height="400" src="http://www.tudou.com/v/_xdAIbcnK_M/v.swf" wmode="opaque" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.suzker.cn/cultural/reproducing_the_dark_side_of_the_moon_scene.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>隐马科夫(HMM)模型</title>
		<link>http://www.suzker.cn/computervision/the-hmm-model.html</link>
		<comments>http://www.suzker.cn/computervision/the-hmm-model.html#comments</comments>
		<pubDate>Sun, 16 May 2010 06:30:01 +0000</pubDate>
		<dc:creator>Suz</dc:creator>
				<category><![CDATA[计算机视觉]]></category>
		<category><![CDATA[Computer Vision]]></category>
		<category><![CDATA[Hidden-state variable]]></category>
		<category><![CDATA[HMM]]></category>
		<category><![CDATA[Multi-Class]]></category>
		<category><![CDATA[Multi-Instance]]></category>
		<category><![CDATA[基础知识]]></category>

		<guid isPermaLink="false">http://www.suzker.cn/?p=24</guid>
		<description><![CDATA[本文介绍非常基础、通用的一个分类模型：隐马科夫模型（HMM），尽量以平实的语言，分别通过实例、图片来说明HMM的过程，并简述了HMM的三个问题和解决方法。以下为文章摘要，点击阅读更多：

...隐马科夫(HMM)模型全称：Hidden Markov model，是一种统计学的模型，是马科夫链与无法观察的状态的结合。在这里，我假设看这篇文章的人已经对马科夫过程(Markov Process)有了初步的认识，对概率论有过初步的学习。...

...那么这个HMM模型，隐马模型到底“隐”在哪里呢？其实解释起来也不难，这里...t-1, t, t+1...各个时刻的x状态是一个随机过程，试想一下，你总不能确定一个随机过程中的每个状态吧？所以，上图的x状态对于我们来说，在没有到达t时间之前，他仍然是未知的，隐藏的（Hidden）。这些x被称为“unobserved state”。...

...HMM过程是，我从任意一个筐开始选水果，我去到那一个框那里，随机拿起里面的一个水果，然后把这个水果记录下来，然后再随机地去另外一个筐里面选水果，不断地重复这个过程，知道我选够了L个水果，我就停止。... <span style="color:#777"> . . . &#8594; Read More: <a href="http://www.suzker.cn/computervision/the-hmm-model.html">隐马科夫(HMM)模型</a></span>]]></description>
			<content:encoded><![CDATA[<blockquote><p>HMM已经有很多人研究过了，而我要研究它的目的只是为了那个让我我纠结多天的Hidden-state Variable。说起这个Hidden-state Variable，真是惭愧，应该是我很笨或者很懒的问题，从JMLMIL理论开始，我就一直开始搞不懂Hidden-state Variable究竟是怎么样来的，虽然我知道它的物理意义和怎么使用。可能很多人看论文都会有这样的感觉吧，即使当你清楚了某个东西的框架，也认同这个框架，但是当你细细深入并打算实现的时候，才会发现现实跟框架是有很多差距的啊！</p>
<p>不好意思，扯远了。我从JMLMIL开始追寻这个Hidden-state variable，到HCRF，到CRF，到HMM。而如今对HMM的理解算是对这个Hidden-state Variable的理解的一个开始吧。当我完全搞懂这个Hidden的东西之后，我会详细的把这些东西都串起来。现在，先看看HMM吧。</p></blockquote>
<p>隐马科夫(HMM)模型全称：Hidden Markov model，是一种统计学的模型，是马科夫链与无法观察的状态的结合。在这里，我假设看这篇文章的人已经对马科夫过程(<a href="http://en.wikipedia.org/wiki/Markov_process" target="_blank">Markov Process</a>)有了初步的认识，对概率论有过初步的学习。</p>
<p>用一句话描述马科夫过程，就是后一个事件发生的概率只与当前时间发生的概率相关。在下面的图里面，我们可以清楚看到&#8221;马科夫过程&#8221;这一属性，注箭头意x(t-1), x(t), x(t+1)之间的的指向，就用这个箭头表示他们之间的关系，这个箭头是单向的，对于t这一个时间的状态x(t)，只有t-1时刻的状态x(t-1)指向它，说明影响t时刻的状态x(t)的，只有t-1时刻的状态x(t-1)。</p>
<div id="attachment_74" class="wp-caption aligncenter" style="width: 510px"><a href="http://www.suzker.cn/wp-content/uploads/2010/05/500px-Hmm_temporal_bayesian_net.svg_.png"><img class="size-full wp-image-74" title="500px-Hmm_temporal_bayesian_net.svg" src="http://www.suzker.cn/wp-content/uploads/2010/05/500px-Hmm_temporal_bayesian_net.svg_.png" alt="Hmm temporal bayesian net" width="500" height="128" /></a><p class="wp-caption-text">Hmm temporal bayesian net</p></div>
<p>那么这个HMM模型，隐马模型到底“隐”在哪里呢？其实解释起来也不难，这里&#8230;t-1, t, t+1&#8230;各个时刻的x状态是一个随机过程，试想一下，你总不能确定一个随机过程中的每个状态吧？所以，上图的x状态对于我们来说，在没有到达t时间之前，他仍然是未知的，隐藏的（Hidden）。这些x被称为“unobserved state”。</p>
<p><strong><span style="color: #ff0000;">Turn to the next page for more.</span></strong></p>
<p><span id="more-24"></span></p>
<p>了解了这个“隐”的概念之后，我们可以深入HMM的一个整体结构和过程了。</p>
<p>为了更好理解，我引用一个实例来说明HMM的结构和过程。</p>
<p>假设我们有5个筐装着很多不同水果，水果的种类有6种（下图中用不同颜色的图案表示）。</p>
<div id="attachment_25" class="wp-caption aligncenter" style="width: 275px"><a rel="attachment wp-att-25" href="http://www.suzker.cn/computervision/the-hmm-model.html/attachment/hmm_1"><img class="size-medium wp-image-25" title="hmm_1" src="http://www.suzker.cn/wp-content/uploads/2010/05/hmm_1-265x300.png" alt="HMM模型的实例_1" width="265" height="300" /></a><p class="wp-caption-text">HMM模型的实例_01</p></div>
<p>HMM过程是，我从任意一个筐开始选水果，我去到那一个框那里，随机拿起里面的一个水果，然后把这个水果记录下来，然后再随机地去另外一个筐里面选水果，不断地重复这个过程，知道我选够了L个水果，我就停止。</p>
<p>在我选水果的过程中，我将遵循以下准则：</p>
<ul>
<li>我从某一个框选完水果后移到另外一个框的概率用一个 Transition-probabilty Matrix来表示。</li>
</ul>
<ul>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="97" valign="top">筐     |     筐</td>
<td width="94" valign="top">1</td>
<td width="94" valign="top">2</td>
<td width="94" valign="top">3</td>
<td width="94" valign="top">4</td>
<td width="94" valign="top">5</td>
</tr>
<tr>
<td width="97" valign="top">1</td>
<td width="94" valign="top">0.5</td>
<td width="94" valign="top">0.1</td>
<td width="94" valign="top">0.2</td>
<td width="94" valign="top">0.2</td>
<td width="94" valign="top">0</td>
</tr>
<tr>
<td width="97" valign="top">2</td>
<td width="94" valign="top">0.3</td>
<td width="94" valign="top">0.4</td>
<td width="94" valign="top">0.1</td>
<td width="94" valign="top">0.1</td>
<td width="94" valign="top">0.1</td>
</tr>
<tr>
<td width="97" valign="top">3</td>
<td width="94" valign="top">0.1</td>
<td width="94" valign="top">0.5</td>
<td width="94" valign="top">0.1</td>
<td width="94" valign="top">0</td>
<td width="94" valign="top">0.3</td>
</tr>
<tr>
<td width="97" valign="top">4</td>
<td width="94" valign="top">0.3</td>
<td width="94" valign="top">0.3</td>
<td width="94" valign="top">0.2</td>
<td width="94" valign="top">0.1</td>
<td width="94" valign="top">0.1</td>
</tr>
<tr>
<td width="97" valign="top">5</td>
<td width="94" valign="top">0</td>
<td width="94" valign="top">0.1</td>
<td width="94" valign="top">0.2</td>
<td width="94" valign="top">0.1</td>
<td width="94" valign="top">0.6</td>
</tr>
</tbody>
</table>
<li>而我从第i个框中选6仲水果中的概率也用一定的概率分布表示，称为这个框中水果的概率分布(Emission-probability Matrix)。（以下概率值省略）</li>
</ul>
<ul>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="83" valign="top">筐   |   水果</td>
<td width="81" valign="top">1</td>
<td width="81" valign="top">2</td>
<td width="81" valign="top">3</td>
<td width="81" valign="top">4</td>
<td width="81" valign="top">5</td>
<td width="78" valign="top">6</td>
</tr>
<tr>
<td width="83" valign="top">1</td>
<td width="81" valign="top">&#8230;</td>
<td width="81" valign="top"></td>
<td width="81" valign="top"></td>
<td width="81" valign="top"></td>
<td width="81" valign="top"></td>
<td width="78" valign="top"></td>
</tr>
<tr>
<td width="83" valign="top">2</td>
<td width="81" valign="top"></td>
<td width="81" valign="top">&#8230;</td>
<td width="81" valign="top"></td>
<td width="81" valign="top"></td>
<td width="81" valign="top"></td>
<td width="78" valign="top"></td>
</tr>
<tr>
<td width="83" valign="top">3</td>
<td width="81" valign="top"></td>
<td width="81" valign="top"></td>
<td width="81" valign="top">&#8230;.</td>
<td width="81" valign="top"></td>
<td width="81" valign="top"></td>
<td width="78" valign="top"></td>
</tr>
<tr>
<td width="83" valign="top">4</td>
<td width="81" valign="top"></td>
<td width="81" valign="top"></td>
<td width="81" valign="top"></td>
<td width="81" valign="top">&#8230;</td>
<td width="81" valign="top"></td>
<td width="78" valign="top"></td>
</tr>
<tr>
<td width="83" valign="top">5</td>
<td width="81" valign="top"></td>
<td width="81" valign="top"></td>
<td width="81" valign="top"></td>
<td width="81" valign="top"></td>
<td width="81" valign="top">&#8230;</td>
<td width="78" valign="top">&#8230;.</td>
</tr>
</tbody>
</table>
<li>我们还必须牢记一点，因为下一次转移到哪一个框是不确定的，所以当我还没选够水果的之前，你还是不会准确得知我的路径的。我选的水果你也将不会准确得知。</li>
</ul>
<p>实例的一个结果是这样的： 我选完水果之后，发现我的路径是[筐2&gt;筐1&gt;筐1&gt;筐5&gt;筐2&gt;筐3&gt;筐4]，即我选了7个水果，L=7。而我最终选出来的水果依次是[f2, f1, f3, f5, f5, f2, f4]。</p>
<p>之前已经假设过大家已经了解了一点Markov process和随机过程，所以这里你们应该会很自然地想到其实这个HMM就是这两个过程的结合：</p>
<p style="text-align: center;"><span style="text-decoration: underline;">[Markov process：选框] &gt; [普通随机过程：选水果]；</span></p>
<p style="text-align: left;">假设我们的模型参数是 lambda(N, M, pi, A, B);</p>
<ul>
<li>L: 将会观察的长度。对应上面例子中的我将要选取的水果个数。</li>
<li>N: 状态数目。对应上面例子中，水果筐的个数。</li>
<li>M:每个状态可能的观察值数。对应上面例子中，水果的种类。</li>
<li>pi: 初始状态空间的分布。对应上面例子中，哪个水果筐将会成为我选的第一个筐的概率。</li>
<li>A: 代表状态转移矩阵(Transition-probability matrix)。对应上面例子中，我从某个筐移到另外一个筐的概率。</li>
<li>B: 代表观察值的概率分布(Emission-probability matrix)。对应上面例子中，某个筐中，水果的分布概率。</li>
</ul>
<p>状态的序列标记为S。对应上面例子中，我最终选筐的移动路径[筐2&gt;筐1&gt;筐1&gt;筐5&gt;筐2&gt;筐3&gt;筐4]。</p>
<p>观察到的序列标记为O。对应上面例子中，我最终选出来的水果序列[f2&gt; f1&gt; f3&gt; f5&gt; f5&gt; f2&gt; f4]。</p>
<p>HMM将涉及以下三个问题：</p>
<ol>
<li>给定一个观察到得序列O，及参数lambda，求出P(O|lambda)，即发生这种观察序列的可能性。对应上面例子中，即是我给定一个最终确定了的水果序列S，求我选到这样的水果的可能性。</li>
<li>给定一个观察到的序列O，及参数lambda，求出最有可能产生这种序列的状态序列S。对应上面例子中，即我给定一个最终确定了的水果序列S，求我最可能的选水果筐路径。</li>
<li>同样给定一个观察得到的序列O，求如何调整参数lambda，使P(O|lambda)最大。</li>
</ol>
<p>由于涉及具体算法和论证，这里不再详述这三个问题的解决算法。只简单地标出：</p>
<ol>
<li>问题一的一种有效解决算法是前向法(<a href="http://en.wikipedia.org/wiki/Forward_algorithm" target="_blank">forward algorithm</a>)，是一种<a href="http://en.wikipedia.org/wiki/Dynamic_programming" target="_blank">动态规划</a>的方法，用来减少程序运算的复杂度。</li>
<li>问题二的一种有效解决算法是维特比算法(<a href="http://en.wikipedia.org/wiki/Viterbi_algorithm" target="_blank">Viterbi algorithm</a>)，也是一种动态的规划方法，用来找出最可能的状态路径。</li>
<li>问题三的一种有效解决算法是<a href="http://en.wikipedia.org/wiki/Baum-Welch_algorithm" target="_blank">Baum-Welch</a>算法，通过给定一个O，不断估算一个适合的lambda参数，使发生这个O的概率P(O|lambda)最大。</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.suzker.cn/computervision/the-hmm-model.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
