[论文阅读]随机蕨:FAST Key Points Recognition Using Random Ferns

来源:互联网 发布:网络不可用是怎么回事 编辑:程序博客网 时间:2024/06/07 04:00

        论文阅读,记录一下自己阅读论文的收获,如有谬误,希望能得到指正!

------------------------------------------------------------------------------------------------------------------------------------------------------------

         随机蕨可以理解为一种简化版本的随机树。对于每一个图片的特征点,把其周围的块(Patch)可能的取值看作一个类,用二值测试进行分类,具体说来,就是选择一定的模式位,对这些模式的像素进行二值测试,来对Patch进行分类。随机蕨把这种分层的随机树结构进行简化,变为非层次的结构,同时也能和随机树一样保持很好的分类效果。

       

        比如,上图中左边是一个随机树,通过对随机树每一层采用同样的测试,变为中间的树形结构,其等价于右边的结构,这就是文章所谓的蕨。

        之所以要这样做是因为原来的树空间中虽然维度更高,但是能去得到的值的位置个数和蕨空间中一样。例如在上图(a)中,数空间能取值的只有绿色的四个点,这和右图中蕨空间取值个数一样。

------------------------------------------------------------------------------------------------------------------------------------------------------------        

        一、问题的表示

         给定一个特征点,得到包围其的Patch的二值特征集,我们的目标是通过这些二值特征集来对其进行分类:

        

其中,f1...fN 是对待分类Patch进行计算得到的二值特征,ci为具体的类别。C是代表具体类别的随机变量


         由贝叶斯公式可以得到:

       


        假设先验 P(C)是均匀分布(针对具体问题可以替换为具体的概率分布,或许会有更好的结果),对于一个特定的分类问题,其特征也都是固定的,所以分母也可以去掉,最后我们的问题变成了:

      


       在实现中,每一个二值特征fj只决定于选定的两个像素的相对大小:

       

        I 代表图片的Patch,这些特征很简单,所以需要足够多的数量来保证分类的精度,通常N=300。因此(1)式的联合概率需要为每一个类存储2^N个实体。


       一种简化的方式是Naive Bayesian,即假设所有的特征之间是完全独立的,于是问题简化为:

       

        但是这种方式过于极端了,完全忽略了特征之间的一些依赖关系。于是作者提出了一个折中的方式,先对所有的特征进行分组,然后再在组内部考虑依赖关系,组之间假设完全独立,把这些组成为蕨(Ferns),把N个特征分为M个组,每个组有S个特征,即N=S*M,于是条件概率变为下列式子了:

       

             

        Fk代表第k个蕨,δ(k,j)是一个从1到N的随机值。这种方式也被称为是 Semi-Naive Bayesian 方式。因此可以组内部对特征的依赖进行Model。之前的 2^N 被减小到了 M x 2^S,对于N=450时,S=11,M在30到50之间,M x 2^S大约为80,000,要比 2^N 小多了。这种表示方式也很灵活,因为可以通过改变蕨的数目和大小,在性能和占用内存大小之间进行折中。


        二、训练

       这里说明一下,随机蕨的随机体现在特征选择和分组都是随机的。训练的时候,对每一个蕨进行操作。k表示选定的二值特征组成数的大小,k取1,2,...,2^S。

       

        最简单的方式是用极大似然估计,分子 N(k,ci)表示训练样本中类别为ci、蕨的二值特征大小为k的样本数量,分母 Nci 表示类别ci的样本总数量:

       

         由于有些 N(k,ci)会为0,导致(2)式乘起来为 0,变为了下列式子,Nr取1就可以:

      

      


0 0
原创粉丝点击