目标检测是计算机视觉中的一项重要任务,主要目的是在图像或视频中识别并定位感兴趣的对象。为了实现这一目标,目标检测算法通常会生成一系列候选边界框,这些框包围了图像中可能存在的目标对象。候选边界框技术对于减少目标检测的计算复杂度和提高检测精度至关重要。以下是一些我目前遇到的目标检测候选边界框技术:
- Selective Search
- Anchor based
- Anchor Free(扩展阅读)
1.Selective Search算法(SS算法)
1.1 流程
1.使用一种分割手段,将图像分割为1k-2k个小区域
2.查看现有的小区域,按照合并规则合并可能性最高的相邻两个区域。重复直至整张图像合并成一个区域位置。
3.输出区域
1.2 合并规则
1.颜色(颜色直方图)相近
2.纹理(梯度直方图)相近
3.合并后总面积较小的
为了保证合并的操作尺度较为均匀,避免一个大区域陆续合并小区域
如a-b-c-d-e-f=>ab-cd-ef=>abcd-efgh=>abcdefgh
而不是a-b-c-d-e-f=>ab-c-d-e-f=>abcd-e-f=>abcdef
4.合并后,总面积在其BBOX中所占比例最大的
✨ 2 Anchor Based
🍔 2.1 思想
在同一个像素点上,生成多个不同大小和比例的候选框(基于Anchor),覆盖几乎所有位置和尺度,每个参考框负责检测与其交并比大于阈值 (训练预设值,常用0.5或0.7) 的目标,然后通过偏移量进行位置精修完成目标检测。
💕 2.2 Anchor生成
anchor也叫做==锚,预先设置目标可能存在的大概位置==,然后再在这些预设边框的基础上进行精细化的调整。而它的本质就是为了解决标签分配的问题。
==生成步骤:==
- 用锚的==尺寸来设定边框的大小==,用锚的==长宽比来设定边框的形状==,生成Anchor模板。
- 用==网络提取特征图的点来定位边框的位置==。
🎃 2.3 Anchor模板
如下图所示,==由不同大小和长宽比的矩形组成==:
细数的话可以看见上图有9个矩形,其实这就是最常用的anchor,由尺寸sizes,和宽高比例ratios生成。
其中==尺寸sizes有两种决定方式==:
- 人工设计,比如Faster R-CNN取sizes=[128., 256., 512.]
- K-means聚类,比如YOLO系列
==高宽比ratios一般就是[0.5, 1., 2.]。==
这样的结构会==重复应用在特征图每个点上,因此称为Anchor模板==。
🎃 2.4 定位
如图所示,点S(grad_x, grad_y)代表网格一个点,我们以红框中的anchor为例,其高为h,宽w,那么定位后该anchor在该网格的坐标就是(grad_x+h/2,grad_y+w/2),其余anchor都做着这样的操作。
✨ 4 Anchor Free
将==目标检测问题转化为关键点检测问题==。 而按照关键点将基于Anchor Free的目标检测为两类:
- 角点检测
- 中心点检测
❤️ 3.1 角点检测
通过==定位目标物体的几个关键点来限定它的搜索空间,然后通过角点组合预测中心到边界的距离,形成检测框==。
经典论文cornerNet:https://arxiv.org/pdf/1808.01244v2.pdf:是Anchor free技术路线的开创之作,该网络提出了一种新的对象检测方法,将网络对目标边界框的检测转化为一对关键点的检测(即左上角和右下角),通过将对象检测为成对的关键点,而无需设计Anchor box作为先验框。
CornerNet只关注边缘和角点,缺乏目标内部信息,容易产生FP;该网络还是需要不少的后处理,比如如何选取分数最高的点,同时用offset来微调目标定位,也还需要做NMS。
一开始选择角点的原因:因为角点相比中心点更有利于训练的,比如说左上角的点,只会和两条边相关,而中心点要和四条边相关。但似乎后面更多的采用中心点的方式。