1.为什么需要候选区域?
目标检测这一计算机视觉任务不仅需要对图片中包含的目标进行分类—》输出类别标签的概率,还要对图片中的目标进行定位—》输出目标的边框(x,y,w,h)。
因此为了定位目标在图片中的位置,我们需要先选择一些子区域,在这个子区域内运行算法,输出类别概率值最大的子区域就是该目标的位置。因此候选区域就是目标的初步估计位置,在算法的后续工作中,会对候选区域进行非极大值抑制(去除一部分候选区域)以及修正(通过边界回归对位置进行微调),来得到相对精确的目标位置信息
2.候选区域产生方法
2.1 区域建议算法
2.1.1 基于滑动窗口法
滑动窗口法中,事先规定一个固定大小的窗口,使用这个窗口在原图中滑动,滑动到每个位置,那么窗口与图像重合的部分就是一个候选区域,候选区域用来后续的检测任务。(滑动窗口法类似于卷积神经网络中的卷积过程)如果图片尺寸很大,会导致一张图片就能产生数量极多的候选区域。滑动窗口的尺寸设置需要与物体的尺寸相匹配才能带来好的效果,因此对于检测任务来说,滑动窗口法效率很低并且性能不优
举例:EdgeBoxes
2.1.2 基于超像素分组法
例:选择性搜索,CPMC,MCG等
候选区域算法分割不同区域来识别潜在的物体。在分割的时候,要合并那些在某些方面(如颜色、纹理)类似的小区域。相比滑窗法在不同位置和大小的穷举,候选区域算法产生区域数量比滑窗法少的多,同时候选区域算法选定的范围天然兼顾了不同的大小和长宽比。
举例:selective search 选择性搜索
选择性搜索的两个步骤:
(1) 使用《Efficient Graph-Based Image Segmentation》论文里的方法产生初始的分割区域。如初始分割区域结果
(2) 使用相似度计算方法合并一些小的分割区域。
1.首先将所有分割区域的外框加到候选区域列表中
2.基于相似度(如颜色、纹理、大小和形状交叠)合并一些区域。
3.将合并后的分割区域作为一个整体,跳到步骤1
通过不停的迭代,候选区域列表中的区域越来越大。最后得到目标检测的候选区域。
2.1 区域建议网络RPN
这种方法,不是通过某一算法来实现候选区域的产生,而是通过一个网络如RPN网络,来产生候选区域。
参考:https://www.learnopencv.com/selective-search-for-object-detection-cpp-python/含代码实现