开启掘金成长之旅!这是我参与「掘金日新计划 · 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则是修正偏移量,限定预测框长宽和比例。
FCOS以逐像素预测的方法解决目标检测的问题,类似于语义分割。FCOS的思想是,feature map上的点映射到图像上的感受野区域,感受野中心坐标作为可以通过一个公式计算出来,然后由中心坐标可以得到感受野的上下左右。 不断训练,类别可以接近目标类别,位置参数以及centerness可以接近GT box。
1. FCOS网络结构
FCOS的网络结构包括:
backbone:RetinaNet50的部分+
FPN:将P3-P7的输出作为最终的预测+
Classification&Centerness&Regression:分类预测,中心点预测,位置参数预测。
图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+ReLU中GN算法将一个样本的通道划分为多个group,然后再对每一个group进行标准化.
图1-2 FCOS的网络结构精细版
1.1 Classification
输出为分类参数(h,w,80) ,在预测特征图上的每个点都会预测80个概率(MS COCO有80个类)。
1.2 Regression
输出为位置参数(h,w,4),这里的位置参数即中心点到左右上下的距离。如图1-3。
图1-3 位置参数(l,r,t,b)
在预测特征图上某个点映射到原图上是一片感受野的区域,通过公式: 可以对应到原图上那片感受野的中心坐标。
继而通过原图的中心坐标及感受野的左上右下角坐标我们可以计算出中心点的(左left,右right,上top,下bottom):
1.3 Centerness
输出为中心位置参数(h,w,1),上面参数只能控制检测框的尺寸,但是并不能控制检测框的位置,那么就会使最终的检测框与GT有所出入,因此引入center-ness来控制检测框的偏移。
- 这个参数的妙处在于,不设置中心点(x,y),利用了,并没有引入超参数。
- 范围是[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中,对于预测特征图上的某一点落入GT box中心区域(2019年),并且在在这个sub-box范围内(2020年),那么该点所映射到原图的那个目标被视为正样本。
其中,是GT的中心点,是特征图相对原图的步距,是一个超参数控制距离GT中心的远近。
图2-1 2020对于预测特征图(x,y)落入GT box中心区域要求更严格
3. Ambiguity问题
如果预测feature map上的某个点同时落入两个GT Box内,那么该点应该分配给哪个GT Box呢?
法一:默认将该点分配给给面积小的GT box。
法二:使用FPN结构,将不同尺寸目标分配给不同的特征层,根据公式将不同尺寸的目标给不同尺寸的feature map分配: 。 其中,m1~m7=0,64,128,256,512。计算出该目标在哪个范围之内,根据i的坐标即得到层。
这与FPN的分配公式有所不同:
第2节中sub-box范围对于Ambiguity问题也起到了一定的避免。
4. 损失函数
依次为Classification、Regression、Centerness的损失函数: