9. FCOS网络

248 阅读5分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 1 天,点击查看活动详情

看累了基于Anchor的网络结构了,今天想来点不一样的~

前言

基于Anchor的目标检测网络有Faster RCNN、SSD、YOLOv2-v5。先是按照一定的尺寸在原图上生成密密麻麻的Anchor,然后基于这些Anchor去预测他们的类别、置信度以及位置参数,最终分类回归及NMS得到最终预测目标。

基于Anchor的算法通常有如下缺点:

  • 超参数:检测器的性能与Anchor的面积及比例的设定有关,这会使Anchor的设定参数像超参数一样需要人工的选择和调试。
  • 灵活性差:Anchor的面积和比例是固定的,所以很难处理形状特殊的目标。
  • 计算成本高:Anchor数量巨大,IOU计算昂贵。
  • 正负样本不均衡:为了高查全率,正负样本不均衡,负样本数量巨多。

回忆到我们的YOLO v1也是Anchor-free,YOLO v1是生成7×7的feature map,相当于原图上划分7×7个格子,每个格子生成2个bounding box,尺寸和位置按训练随意调整。

Anchor-free和Anchor-based之间的区别,我们可以想一下:Anchor-free是从feature map像素点找到感受野上的中心点,是基于点生成预测框,而且不限定预测框长宽和比例。Anchor-based则是修正偏移量dx,dyd_x,d_y,限定预测框长宽和比例。

FCOS以逐像素预测的方法解决目标检测的问题,类似于语义分割。FCOS的思想是,feature map上的点映射到图像上的感受野区域,感受野中心坐标作为(x,y)(x,y)可以通过一个公式计算出来,然后由中心坐标可以得到感受野的上下左右(t,b,l,r)(t,b,l,r)。 不断训练,类别可以接近目标类别,位置参数(t,b,l,r)(t,b,l,r)以及centerness可以接近GT box。

1. FCOS网络结构

FCOS的网络结构包括:

backbone:RetinaNet50的部分+

FPN:将P3-P7的输出作为最终的预测+

Classification&Centerness&Regression:分类预测,中心点预测,位置参数预测。

图片.png

图1-1 FCOS的网络结构

下图1-2为FCOS网络结构的精细版。

  • backbone中,输入是640×640×3大小的图片,经过Conv1(BN+ReLU)卷积池化,输出是320×320×64大小的feature map。
  • k3,s1,p1表示:卷积核大小为3×3,步距为1,padding为1的卷积操作。
  • Conv2d+GN+ReLUGN算法将一个样本的通道划分为多个group,然后再对每一个group进行标准化.

图片.png

图1-2 FCOS的网络结构精细版

1.1 Classification

输出为分类参数(h,w,80) ,在预测特征图上的每个点都会预测80个概率(MS COCO有80个类)。

1.2 Regression

输出为位置参数(h,w,4),这里的位置参数即中心点到左右上下的距离(l,r,t,b)(l,r,t,b)。如图1-3。

图片.png

图1-3 位置参数(l,r,t,b)

在预测特征图上某个点(x,y)(x,y)映射到原图上是一片感受野的区域,通过公式: (floor(s2+x×s),floor(s2+x×s))(floor(\frac{s}{2}+x×s),floor(\frac{s}{2}+x×s))可以对应到原图上那片感受野的中心坐标。

继而通过原图的中心坐标(x,y)(x,y)及感受野的左上(x0(i),y0(i))(x^{(i)}_0,y^{(i)}_0)右下角(x1(i),y1(i))(x^{(i)}_1,y^{(i)}_1)坐标我们可以计算出中心点的(左left,右right,上top,下bottom):

l=xx0(i),t=yy0(i)l=x-x^{(i)}_0,t=y-y^{(i)}_0

r=x1(i)x,b=y1(i)yr=x^{(i)}_1-x,b=y^{(i)}_1-y

1.3 Centerness

输出为中心位置参数(h,w,1),上面参数(l,r,t,b)(l,r,t,b)只能控制检测框的尺寸,但是并不能控制检测框的位置,那么就会使最终的检测框与GT有所出入,因此引入center-ness来控制检测框的偏移。

centerness=min(l,r)max(l,r)×min(t,b)max(t,b)centerness=\sqrt{\frac{min(l,r)}{max(l,r)}×\frac{min(t,b)}{max(t,b)}}

  • 这个参数的妙处在于,不设置中心点(x,y),利用了(l,r,t,b)(l,r,t,b),并没有引入超参数。
  • 范围是[0,1],即中心点恰好在检测框中间位置时,这个值就是1。
  • Centerness还有过滤作用:对每个边框进行打分,用centerness×classification_score将低分的边框过滤。

2. 正负样本不均衡问题

Anchor-based:一般会通过计算每个Anchor Box与每个GT的IoU配合事先设定的IoU阈值去匹配。比如某个Anchor Box与某个GT的IoU大于0.7,那么我们就将该Anchor Box设置为正样本。

Anchor-free:在FCOS中,对于预测特征图上的某一点(x,y)(x,y)落入GT box中心区域(2019年),并且在在(cxrs,cyrs,cx+rs,cy+rs)(c_x−rs,c_y−rs,c_x+rs,c_y+rs)这个sub-box范围内(2020年),那么该点所映射到原图的那个目标被视为正样本。

其中,(cx,cy)(c_x,c_y)是GT的中心点,ss是特征图相对原图的步距,rr是一个超参数控制距离GT中心的远近。

图片.png

图2-1 2020对于预测特征图(x,y)落入GT box中心区域要求更严格

3. Ambiguity问题

如果预测feature map上的某个点同时落入两个GT Box内,那么该点应该分配给哪个GT Box呢?

法一:默认将该点分配给给面积小的GT box。

法二:使用FPN结构,将不同尺寸目标分配给不同的特征层,根据公式将不同尺寸的目标给不同尺寸的feature map分配: mi1<max(l,t,r,b)<mim_{i-1}<max(l,t,r,b)<m_i。 其中,m1~m7=0,64,128,256,512。计算出该目标max(l,t,r,b)max(l,t,r,b)在哪个范围之内,根据i的坐标即得到PiP_i层。

这与FPN的分配公式有所不同:k=k0+log2(wh/224)k=k_0+log2(\sqrt{wh}/224)

第2节中sub-box范围对于Ambiguity问题也起到了一定的避免。

4. 损失函数

依次为Classification、Regression、Centerness的损失函数:

图片.png

图片.png