关于Efficient Subwindow Search 的小测试

来源:互联网 发布:sha1算法 汇编 编辑:程序博客网 时间:2024/06/05 19:18

关于Efficient Subwindow Search 的小测试

ESSBeyond Sliding Windows: Object Localization by Efficient Subwindow Search( CVPR 2008 ) 中提到的一种快速定位算法ESS要解决的问题很简单,给出一个classifier function, 找出使classifier function  值最大的subwindow.

对于一张图片,我们可以把它看作是一个二维矩阵,如果图片中的每个像素对应的classifier function值是固定的(或者说可以提前计算出的),那么很显然,ESS就等同于最大子矩阵问题.

对于最大子矩阵问题,经典的DP算法复杂度是O(N^3),而这篇paper提到ESS在实际运行中相当于O(N^2)的效率。

ESS的本质是 Branch - and - Bound Search, 将问题的解空间用[T,B,L,R](对应矩形的上下左右4条轴)4 个区间来表示,每次选取最长的一个区间split,并计算解空间的分数上限(空间内最大矩形的正值和 + 空间内最小矩形的负值和),并以此进行priority search.

作者提到的O(N^2)的复杂度实在是很诱人,于是我决定测试一下ESS. 分别实现了最大子矩阵的DP和ESS版本,然后随机生成了一个1000*1000的矩阵,结果DP跑了2妙多,而ESS等了许久爆内存了(估计是搜的点太多了)。上网找了作者的源码包,用包里的数据测试了一下,ESS的确很快!一看数据我就明白了,矩阵相当稀疏(其实一张图片的特征点对应像素点是很稀疏).之后我又对几组稀疏程度不同的矩阵做了测试,以下是测试结果

1000*1000的矩阵,DP的平均时间为2.58s

ESS 的结果

稀疏度    time(s)
0.001      0.063
0.002      0.186
0.003      0.322
0.004      0.807
0.005      0.758
0.006      1.764
0.007      2.051
0.008      2.004
0.009      3.936
0.010      3.223

由此可以看出ESS是依赖于矩阵中数据分布的,对一般化的最大子矩阵问题并不一定适用.

Efficient Algorithms for Subwindow Search in Object Detection and Localization.

文章对其进行了改进,减少了运算时间。

原创粉丝点击