您的位置:首页 > 编程语言

论文阅读四:结合mmdetection代码理解FCOS目标检测算法

2020-05-13 10:41 1266 查看

FCOS: Fully Convolutional One-Stage Object Detection,全卷积一阶目标检测,但是与经典的one_stage检测器,例如ssd,yolo不一样的是,FCOS摆脱了anchor框的限制,即anchor_free。本博文以mmdetection中的fcos代码为走向,来介绍这个检测器。

一、网络整体框架

C3,C4,C5是基础网络输出的feature map,P3,P4,P5是FPN的结构,P6由P5下采样得到,P7则由P6下采样获得,P3,P4,P5,P6,P7 是用来做分类和回归的特征层。
下图是输入图片是800x1024的情况下的网络尺寸,从网络输出有三个分支,从上到下依次是cls_scores分支,centerness分支和box_pred分支。

二、feature map原图映射点,get_points函数

P3、P4、P5、P6、P7这5个级别的特征图按照
的映射关系,将特征图上的坐标(x,y)映射到原图上的相应坐标,其中s是每个级别层上的stride,例如P3层,stride是8,坐标(0,0)映射到原图为(4,4)。

P3到P7的预测点为100x128+50x64+25x32+13x16+7x8=17064个点,到映射到原图上。
mmdetection中获取point的代码如下:

三、根据gt_boxes将points分为正负样本点,并计算正样本点与gt_boxes的偏移量,get_target函数

计算所有的points与每个gt_boxes的位置偏移量,即(l,t,r,b)例如下图黄色框是gt_box,其左上角坐标为(xmin,ymin)(x_{min}, y_{min})(xmin​,ymin​),右下角的坐标为(xmax,ymax)(x_{max}, y_{max})(xmax​,ymax​),黄色圆点是point预测点,坐标为(x,y)(x, y)(x,y)。计算公式如下:
l=x−xmin l = x - x_{min}l=x−xmin​ t=y−ymin t = y - y_{min}t=y−ymin​ r=xmax−xr = x_{max} - xr=xmax​−x b=ymax−y b = y_{max} - yb=ymax​−y

但是,并不是所有的17064个point点都是正样本,因此正样本point有两个条件:1、point在gt_boxes内部,即(l,t,r,b)最小值大于0;2、限制回归值在每层的回归范围内,P3层到P7层的回归范围依次是(-1, 64), (64, 128), (128, 256), (256, 512),(512, INF),即(l,t,r,b)最大值要在当前层的范围内。剩下的都看作是负样本点。当然,在两个条件后,有些正样本点对应多个gt_boxes,我们选择面积最小的那个gt_boxe和该点匹配。
mmdetection中计算box_target的代码如下:

四 计算centerness分支的target值,即centerness_target函数

fcos虽然也使用了多层预测,但是fcos和anchor_base的检测器还是有性能的差距,主要是因为,正样本点中,在目标框中心的正样本点的要比偏离中心点的正样本点质量好,那些低质量的正样本点影响了回归的准确率。于是提出center_ness的策略来抑制低质量的检测框。
计算centerness_target是为了训练centerness分支,centerness_target的计算方式,直接反映了该分支的作用:

center_ness即中心点度量的意思,通过上面的公式,来度量样本点距离中心点的距离,centerness的值范围是(0,1),接近1时,说明该point在目标框的中心点附近,接近0时,说明距离中心点很远,那些些距离中心点很远的都是低质量的预测边界框,因此,centerness相当于样本点的权重来使用。
在训练时,centerness分支是回归loss的权重,在测试时,centreness分支与score分支相乘,作为最终的目标框分数。

上图是center_ness的热力图,红色、蓝色、中间色分别代表1,0,0到1的其他值,可以看到,靠近中心点的正样本的center_ness值区域1,偏离中心点的趋于0。
mmdetection中计算centerness_target的代码如下:

五 三个分支的训练loss

cls_scores分支,采用focal_loss;
bbox_pred分支,采用iou_loss,centerness值为权值
center_ness分支,采用CrossEntropyLos

六 总结

anchor_base的检测器中,anchor相当于预先设定的滑动框,分类器的正负样本是基于anchor框的,然后在正样本anchor框的基础上,回归目标框的位置。anchor框需要很多参数来设定,不同的检测场景,需要调整anchor框的参数来提高检测召回率。除此之外,正负样本的判断是anchor框和gt框的iou值是否大于阈值,阈值的设定,对检测结果的设定影响也很大。另外anchor_base的检测器,是在预定anchor的基础上进行回归操作的,这种回归,anchor框的设定直接影响结果。
fcos是anchor_free检测器,不需要在样本点上预先设定anchor框,而是直接在样本点上进行回归,正负样本点的判断是根据该样本点是否在目标框中,而不在依据样本点上的anchor框与gt框的iou来判定。虽然没有anchor框宽高的设定,但是设置了每层的回归范围,例如P3层的回归范围是(-1,64)。anchor框类似于离散的宽和高,回归范围类似于连续的(-1,64)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: