Boosting Binary Keypoint Descriptors 论文笔记

今天读的是CVPR 2013的 Boosting Binary Keypoint Descriptors,是一篇有关用二进制来描述图像块(patch)的文章。另外mingming cheng 2013年也有一篇是用二进制的,不过是对整幅图像进行描述的,后面再介绍吧。
跟传统的用浮点数等高精度单位来描述特征点相比,二进制描述最大的优势是表达紧凑(compact), 即二进制描述只需要用1个bit来描述一个维度。另外,二进制操作也能显著提高计算的效率,这一点很好地体现在了上面所说的程明明的论文里。但二进制描述的缺点也很明显,因为只用1个bit来描述一个维度,因此信息量大大丢失,描述的准确度也因此而降低了。所以,这篇文章要解决的就是这样一个问题。

首先形式化地定义二进制描述:给定一个patch  , 它的二进制描述即是寻找一个描述子 , 使得, 其中是二进制描述子的维度(简单来说可以想象为用长度为  的01字符串来编码一个区域)。为了方便套用分类算法的框架等原因,作者用{1,-1} 而不是{1,0}。然后对于任意一维,有


这里假设我们有 个弱分类器,  代表了每个弱分类器的权重,  对应就是K个弱分类器。这里解释下它的核心思想,当取 的时候,也就是只有一个分类器的时候,用分类器对图像块在某个维度进行描述的思想其实可以看成分类器将图像块映射到一个实数上(类似hash)。然后又因为只用一个分类器往往结果不准确(例如把不同的图像块hash到同一个实数上去了),所以本文才套用Adaboost的方法,用 个弱分类器的加权和来提高其准确性。Adaboost这一常识性的工具就不多叙述了。整个文章方法的框架如下图所示:
 

有了目标函数以后,下一步就是构建训练集、损失函数,并训练分类器。首先作者随机选了一些点,然后以这些点为中心取了对图像块,记为,其中;当且仅当图像块是同一个块,否则等于-1。然后损失函数定义为


其中 为参数。式(1.2)含义也很直接,就是看分类器是否判断这两个块为同一个块,若判断结果与真实情况相同,则 同号,损失较小,否则损失较大,所以最小化 其实就是最大化 。然后Adaboost的核心思想是迭代优化,并对分类错误的样本对赋予较大的权重,所以优化模板进一步修改为

  就是第 个训练样本的权值,注意这里的 已经变成迭代次数而不是维度了(不知为何作者不用另外一个符号,难道是我的理解有误?)。另外就是因为sgn函数不可导,所以作者用它的度量值来等价于它的符号,即 ,再代入(1.3),化简可得要求解的 的Rayleigh quotient 的表达式。(感谢下Winsty的提醒)。而 则是选了另外的G. Shakhnarovich. Learning Task-Specific Similarity. PhDthesis, 2006里的方法(但我觉得初始化时将所有训练样本的权重都设为一样,然后定义一个弱分类器就好了,通过迭代产生不同的分类器和权值),作者的实现中单个弱分类器 的定义为:
 

其中就是patch包含的区域,是在中的某个元素(方向),是预定义阈值,点的梯度方向,是预定义的量化级别。式子(1.4)看起来很复杂,其实就是在区域的各个方向上求梯度,用梯度的方向描述一个区域。具体来说,在当且仅当,所以其实就是衡量点的梯度方向与方向的偏差是否在一定范围内,则是描述了patch内的所有像素梯度在某个方向上的强度,如果这个强度大于阈值,我们就将这个方向上的值标为-1,否则为1,那么就可以用位的字符串来表示这个区域了(梯度方向真是一个神器啊!)。然后不断迭代产生新的分类器,再将这些分类器做boosting得到最后的结果,整篇文章的内容到这里就结束了。还有最后找了下,发现他们12年NIPS的那篇Learning Image Descriptors with the Boosting-Trick的跟这篇几乎一样,╮(╯▽╰)╭,不知说什么好了…,难怪几个大神说CVPR 开始水起来了…今年我也去水一把试试…

转载自:http://blog.youkuaiyun.com/k123han123/article/details/24579697

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值