anchor和正负样本

提示:在学习faster-rcnn和anchor的时候,对正负样本有点迷惑,记录下

文章目录

Anchor的概念

  • Faster R-CNN 定义三组纵横比ratio = [0.5,1,2]和三种尺度scale =
    [8,16,32],可以组合成9种不同的形状和大小的边框。
  • YOLO则不是使用预设的纵横比和尺度的组合,而是使用k-means聚类的方法,从训练集中学习得到不同的Anchor。

Yolov3中输入图片大小为416 × 416 × 3,分别经过32倍、16倍、8倍下采样,得到三层特征图,13 × 13 × 255、 26 × 26 × 255、 52 ×52 × 255。

每张特征图上会提前设定3个anchor box。即yolov3中一共9个anchor box。
13 ×13的特征图感受野最大,使用大的anchor(116×90),(156×198),(373×326),
26 × 26特征图使用中等的anchor box (30×61),(62×45),(59×119),适合检测中等大小的目标。
52 × 52特征图感受野最小,使用最小的anchor box(10×13),(16×30),(33×23),适合检测较小的目标。

这些anchor的大小是对于原图像(416× 416)来说的。Anchor的作用是来回归出预测框,当我们标记的ground truth 与anchor 相交时,挑选出IOU最大值所对应的anchor,用这个anchor来回归预测框。

一、正负样本

Loss计算中,主要包含”负责预测目标”(即正样本)和背景(即负样本),以及不参与计算loss的部分.

正样本
如果Ground Truth的中心点落在一个区域中,该区域就负责检测该物体。然后计算这个grid的9个先验框(anchor)和目标真实位置的IOU值(直接计算,不考虑二者的中心位置),取IOU值最大的先验框和目标匹配。
于是,找到的该grid(网格)中的该anchor负责预测这个目标,其余的网格、anchor都不负责。将与该物体有最大IoU的预测框作为正样本。
注意:这里没有用到ignore thresh,即使该最大IoU

; 二、Anchor free中的正负样本

1、FCOS

论文链接
代码链接

作为Anchor-free的方法,FOCS直接对feature map中每个位置对应原图的边框都进行回归,如果位置 (x,y) 落入任何真实边框,就认为它是一个正样本,它的类别标记为这个真实边框的类别。可以理解为他是基于物体的一个key point点进行回归的。在实际的anchor-free中也会遇到一些问题,为了解决这些问题,FCOS做了如下工作:

  1. 为了解决anchor-free的方式在真实边框重叠带来的模糊性和低召回率(不像anchor-based可以有多重不同尺寸的anchor),FCOS采用类似FPN中的多级检测,就是在不同级别的特征层检测不同尺寸的目标。
  2. 为了解决距离目标中心较远的位置产生很多低质量的预测边框,FCOS提出了一种简单而有效的策略来抑制这些低质量的预测边界框,而且不引入任何超参数。具体来说,FCOS添加单层分支,与分类分支并行,以预测”Center-ness”,可以这这个理解成为一个度量值,于中心距离的一个度量值,与中心点较远,则度量值较低,与中心点越近,度量值越高,以此来让置信度更高的像素产生更高的贡献。

正负样本匹配方式的实现
Step1:分配目标给哪一层预测。 根绝目标的尺寸将目标分配到不同的特征层上进行预测。

具体实现:引入了min_size和max_size,具体设置是0, 64, 128, 256, 512和无穷大。例如,对于输出的第一个预测层而言,其stride=8,负责最小尺度的物体,对于该层上面的任何一个点,如果有gt bbox映射到特征图上,满足0 < max(中心点到4条边的距离) < 64,那么该gt bbox就属于第1层负责,其余层也是采用类似原则。总结来说就是第1层负责预测尺度在0~ 64范围内的gt,第2层负责预测尺度在64~128范围内的gt,以此类推。通过该分配策略就可以将不同大小的gt分配到最合适的预测层进行学习。

Step2:确定正负样本区域。 对于每一层feature map,设定一个以GT中心为圆心,固定半径的圆,如果像素落在该圆内,则标记为positive样本,否则为negative。

具体实现:通过center_sample_radius参数,确定在半径范围内的样本都属于正样本区域,其余区域作为负样本。默认配置center_sample_radius=1.5。例如,第1层的stride=8,那么在该输出层上,对于任何一个gt,基于gt bbox中心点为起点,在半径为1.5*8=12个像素范围内点都属于正样本区域。

Step3:centerness找到目标的中心点。 为了使靠近GT中心的像素能学到更多的信息,故给予他更高的权重,而离GT中心越远的点,贡献则递减。

具体实现:使得离目标中心越近,输出值越大,反之越小。Center-ness的定义如下公式:

anchor和正负样本

可见最中心的点的centerness为1,距离越远的点,centerness的值越小。在推测的时候直接将中心度分数centerness乘到分类分数上,将偏离很远的检测框分值进行惩罚。

总结
FCOS采用物体center的匹配方式来进行回归,在正负样本匹配的时候,采用了top-k的策略进行匹配,并且使用centerness来对不同距离的匹配样本进行不同程度的惩罚,以达到资源倾斜于贡献最佳者的目的。
参考链接

; 2.读入数据

代码如下(示例):

data = pd.read_csv(
    'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())

该处使用的url网络请求的数据。

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

Original: https://blog.csdn.net/yiersab/article/details/123396764
Author: 看大海
Title: anchor和正负样本

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/682225/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球