目标检测(1)-Selective Search
基于region proposal的RCNN系列:RCNN、Fast RCNN、Faster RCNN
基于区域划分的YOLO、SSD
基于强化学习的AttentionNet等,还有最新的Mask RCNN。
我们将用一周时间先详细介绍每个模型然后通过Tensorflow跑一遍模型。
说到基于region proposal的目标检测方法不得不提到RCNN所使用的Selective Search方法。
文章地址:http://www.huppelen.nl/publications/selectiveSearchDraft.pdf
摘要
为了了解目标检测区域建议的复杂性,我们先看一组图片:
![](https://pic2.zhimg.com/80/v2-78ea3707a1bc2c7d572a5d60486d5975_720w.png)
可用的特征有很多,到底什么特征是有用的呢?我们看第二副图片的两只猫咪,他们的纹理是一样的,因此纹理特征肯定不行了。而如果通过颜色则能很好区分。但是第三幅图变色龙可就不行了,这时候边缘特征、纹理特征又显得比较有用。而在最后一幅图中,我们很容易把车和轮胎看作是一个整体,但是其实这两者的特征差距真的很明显啊,无论是颜色还是纹理或是边缘都差的太远了。而这这是几种情况,自然图像辣么多,我们通过什么特征去区分?应该区分到什么尺度?
selective search的策略是,既然是不知道尺度是怎样的,那我们就尽可能遍历所有的尺度好了,但是不同于暴力穷举,我们可以先得到小尺度的区域,然后一次次合并得到大的尺寸就好了,这样也符合人类的视觉认知。既然特征很多,那就把我们知道的特征都用上,但是同时也要照顾下计算复杂度,不然和穷举法也没啥区别了。最后还要做的是能够对每个区域进行排序,这样你想要多少个候选我就产生多少个,不然总是产生那么多你也用不完不是吗?好了这就是整篇文章的思路了,那我们一点点去看。
产生多尺度的区域建议
![](https://pic4.zhimg.com/80/v2-dbe9a62adc7d904ad59cb0e2d8249f47_720w.png)
保持多样性的策略
为了尽最大可能去分割所有情景的图片我们得保持特征的多样性啊,该文章主要通过两种方式保持特征多样性,一方面是通过色彩空间变换,将原始色彩空间转换到多达八中的色彩空间。然后通过多样性的距离计算方式,综合颜色、纹理等所有的特征。
- 颜色空间变换
这么多的颜色空间,反正我认识的不认识的都在里面了。
- 距离计算方式
距离计算方式需要满足两个条件,其一速度得快啊,因为毕竟我们这么多的区域建议还有这么多的多样性。其二是合并后的特征要好计算,因为我们通过贪心算法合并区域,如果每次都需要重新计算距离,这个计算量就大太多了。
- 颜色距离
我们费劲心思搞了这么多的色彩空间,首先当然就是应该计算颜色的距离了啊。
![](https://pic1.zhimg.com/80/v2-2f0a1e96eec6b444adc5a256b9b501dc_720w.png)
2.纹理距离
![](https://pic4.zhimg.com/80/v2-b99515e2b9920eed0fdff6091bf8945b_720w.png)
3.优先合并小的区域
如果仅仅是通过颜色和纹理特征合并的话,很容易使得合并后的区域不断吞并周围的区域,后果就是多尺度只应用在了那个局部,而不是全局的多尺度。因此我们给小的区域更多的权重,这样保证在图像每个位置都是多尺度的在合并。
![](https://pic3.zhimg.com/80/v2-78e6d61af4a6e5f62b7c577030cad5f6_720w.png)
不仅要考虑每个区域特征的吻合程度,区域的吻合度也是重要的,吻合度的意思是合并后的区域要尽量规范,不能合并后出现断崖的区域,这样明显不符合常识,体现出来就是区域的外接矩形的重合面积要大。因此区域的合适度距离定义为:
![](https://pic3.zhimg.com/80/v2-7e2a63c642735a9c6031097e17526b2a_720w.png)
现在各种距离都计算出来,我们要做的就是整合这些距离,通过多种策略去得到区域建议,最简单的方法当然是加权咯:
![](https://pic3.zhimg.com/80/v2-d8b1780ad60b09d995fb3578106f635a_720w.png)
我们基于基于图的图像分割得到初始区域,而这个初始区域对于最终的影响是很大的,因此我们通过多种参数初始化图像分割,也算是扩充了多样性。
给区域打分
通过上述的步骤我们能够得到很多很多的区域,但是显然不是每个区域作为目标的可能性都是相同的,因此我们需要衡量这个可能性,这样就可以根据我们的需要筛选区域建议个数啦。
这篇文章做法是,给予最先合并的图片块较大的权重,比如最后一块完整图像权重为1,倒数第二次合并的区域权重为2以此类推。但是当我们策略很多,多样性很多的时候呢,这个权重就会有太多的重合了,排序不好搞啊。文章做法是给他们乘以一个随机数,毕竟3分看运气嘛,然后对于相同的区域多次出现的也叠加下权重,毕竟多个方法都说你是目标,也是有理由的嘛。这样我就得到了所有区域的目标分数,也就可以根据自己的需要选择需要多少个区域了。
基于Selective Search的目标识别
![](https://pic1.zhimg.com/80/v2-d6846f5108fb6088da0d862487d18f24_720w.png)