Anchor-Based 与 Anchor-Free
学习视频:番外 | anchor-based 与 anchor-free 、anchor 与 anchor-point、grid cell_哔哩哔哩_bilibili
这个b站博主讲的非常好,她的其他讲解视频也很牛,非常推荐大家看一下
目录
1. grid cell
2. Anchor-Based
2.1 anchor宽高
2.2 网络输出形式
2.3 预测框坐标计算
3. Anchor-Free
3.1 anchor point
3.2 网络输出形式
3.3 预测框坐标计算
1. grid cell
grid cell
如上图,如果把某个 grid cell 按照对应的缩放倍数给映射到原图像中,映射到原图上的网格大小就是这个像素对应的感受野
2. Anchor-Based
一般我们所说的 anchor 指的是只有宽高信息的 anchor ,因为 anchor 的位置是约定俗成的指每个 feature map 像素的位置
2.1 anchor宽高
- 一般根据经验,或者通过对数据集中的所有真实框的宽高进行聚类确定 anchors 的宽高,它是一个先验信息
- 针对每个 feature map (不同尺度),一般会设计 3 个不同尺寸(宽高)的 anchor
比如, YOLOv5 网络输出 3 个不同尺寸的 feature map ,每个 feature map 对应 3 个尺寸的anchor
举例:
YOLOv5网络输出p和anchors
feature map 中的每一个像素都会生成该尺度下的 3 个不同尺寸的 anchor
所以, anchor 的数量一共有:(80 x 80 + 40 x 40 + 20 x 20)x 3 = 25200 个
相应的,预测框的数量就是 25200 个
2.2 网络输出形式
网络输出的定位部分/回归部分形式为:
举例:
对于 YOLOv5 的目标检测任务来说,它的分类检测头和定位检测头用的是同一个,是耦合在一起的,所以它的分类部分预测数据和定位部分的预测数据是在一起的,都是包含在下图例子中的 85 里面
例子
2.3 预测框坐标计算
预测框坐标计算方法如下图所示
预测框坐标计算
YOLOv3 、 YOLOv5 都是 anchor-based
(1)预测框的中心点坐标都是基于 feature map 中像素左上角点 cx,cy 计算得到
(2)预测框的宽高都是基于 anchor 的宽高计算得到,这也是 Anchor-Based 名称的由来,即预测框的宽和高是 based 在 anchor 宽和高上的
3. Anchor-Free
Anchor-Free 即移除了 anchor ,所以不再需要提前设计 anchor 的宽和高. YOLOv8 就是基于 Anchor-Free
3.1 anchor point
anchor point:是 feature map 中每个像素点的中心坐标(亚像素坐标)
下图是以 YOLOv8 举例,其网络同样是输出三个 feature map
每个 anchor point 对应一个预测框,所以 YOLOv8 预测框数量 = anchor point 数量 = 80 x 80 + 40 x 40 + 20 x 20 = 8400,相较于 YOLOv5 ,预测框数量少了 2/3
3.2 网络输出形式
网络输出的定位部分/回归部分形式为:(l,t,r,b)
以 YOLOv8 举例:
3.3 预测框坐标计算
(l,t,r,b)的含义
预测出的 l、t、r、b 数值是相对 feature map 尺寸的,要映射回原图像尺寸,还要乘以 s (s为 feature map 相对于原图像的缩放比例)
所以,预测出的 bbox 在原图上的坐标分别为:
预测框坐标计算
上图中,是预测框在 feature map 尺度下的坐标,
是在原图像尺度下的坐标