论文:Fully Convolutional One-Stage Object Detection
论文链接:https://arxiv.org/pdf/1904.01355.pdf
代码链接:https://github.com/tianzhi0549/FCOS
文章目录
- 1 为什么要提出 FCOS ?
- 2 FCOS 网络框架
- 3 FCOS 实现细节
- 3.1 如何预测目标bbox?
- 3.2 什么是中心度?
- 3.3 为什么需要预测中心度?
- 3.4 为什么不同特征层的heas是共享的?
- 3.5 为何用FPN网络?
- 3.6 FPN网络需要注意哪些细节?
- 3.7 loss设计
- 4 FCOS 性能效果
- 5 总结
FCOS
是 anchor-free
的目标检测经典算法,今天我们就一起来分析这个算法。现在主流的目标检测网络如 RetinaNet
, SSD
, YOLOv3
和 Faster R-CNN
都是基于anchor-based
,即先在特征图上生成 anchor box
,随后调整这些anchor box
的位置和尺寸生成最后的预测值。而本文提出单阶段的 anchor-free
目标检测算法,无需事先生成 anchor
,下面开始今天的正题!
1 为什么要提出 FCOS ?
之前目标检测算法有如下不足:
- 检测性能对
anchor boxes
的数量和宽高比(aspect ratio
)敏感; - 由于
anchor boxes
的宽高比是固定的,难以处理尺度差异大的目标,尤其是小目标检测困难; - 为了提高
recall
,anchor-based detector
需要在输入图片上设置密集的anchor boxes
,其中大部的anchor boxes
是负样本,造成正负样本不平衡问题; -
anchor boxes
涉及例如IOU
的大量计算; - 一些
FCN-based
检测框架如DenseBox
使用图像金字塔,对图片进行裁剪和缩放,以处理不同尺度的bbox
,违背了FCN
一次计算的原则。
FCOS 做了如下改进:
- 提出
anchor-free
的目标检测框架,避免了上述anchor-based
方法带来的问题; - 为了处理不同尺度大小的
bbox
,提出使用FPN
网络进行图像的一次计算; - 提出使用
center-bess
分支,来弥补预测像素点与对应bbox
中心的误差。
2 FCOS 网络框架
FCOS采用类似语义分割方法的预测,主体网络框架如下:
- 输入端 — 输入端表示输入的图片。该网络的输入图像大小为 和
- 基准网络 — 基准网络用来提取图片特征。论文使用
FPN
网络,对每个像素点进行多尺度预测。 - Head输出端 — Head用来完成目标检测结果的输出。输出
head
有5个,这5个head是共享权重的,每个head有三个分支,分别为:目标类别classification
(H×W×C),中心度centerness
(H×W×1),和目标尺寸Regerssion
(H×W×4)。
3 FCOS 实现细节
3.1 如何预测目标bbox?
以下图左边人物目标为例,其bbox
区域内所有黄色像素位置的类别都为person
。bbox
区域内的对应的特征图上每个像素点都有其对应的回归目标,对于某个像素的坐标:
上述回归目标为正数,所以网络输出时还需要进行指数运算,最后预测的bbox为( , , , , , )。
3.2 什么是中心度?
中心度是衡量边界与目标中心的归一化距离,假设回归目标为 , , 和 ,则center-ness目标为:
当像素在目标区域的中心位置时,则有 且
当像素位于目标区域的其他位置时,比如当像素刚好在图像的边界上,则会有或者,此时中心度的值为0;
所以中心度取值范围为 ,越往目标中心,中心度值越大,如下图,红色代表1,蓝色代表0。
3.3 为什么需要预测中心度?
作者在论文中提到原因如下,如果不加这一项,FCOS性能会弱于anchor-based的检测模型,原因是模型会生成很多偏离目标中心的低质量bbox。
中心度使用方法:
- 在训练阶段:使用
BCE loss
,加入到代价函数中一起训练网络; - 在测试阶段:对预测的
bbox
进行打分:,所低质量的bbox
最后会通过NMS过滤掉。
3.4 为什么不同特征层的heas是共享的?
论文中提到共享 head 的原因有2点:(1) 可以减少运算量;(2)可以提高模型性能。
3.5 为何用FPN网络?
由 3.1节可知,FCOS对目标bbox内的每个像素点做预测,如果2个目标bbox重叠,那么这个像素点预测哪个目标呢?这就是 ambiguity 问题,解决思路是在不同尺度的特征层上分别预测这2个目标,这里其实有一个bug,如果2个目标的尺度是相同的,那就难以将目标分配到不同尺度的特征层上了,总之作者在这里使用FPN网络来处理,进行多尺度预测,分别预测大小不同的目标。
3.6 FPN网络需要注意哪些细节?
由于FCOS使用的是FPN网络,进行多尺度预测,需要注意如下实施细节:
- 每个特征层处理的正负样本是不同的,比如P3层用于预测小目标 (size范围[0, 64]) ,P4层用于预测较大目标 (size范围 [64, 128] ),每个特征层只负责回归满足如下条件的目标:
式中: 表示特征层 需要回归某个目标的最大距离,论文中的设置: ,,,, 和 - 每个 head 处理不同的特征尺度,所以 head 最后输出时进行的指数运算不是常规的 ,而是 ,其中
3.7 loss设计
FCOS
使用的代函数如下:
式中: 采用 focal loss
; 采用 IOU loss
; 是正样本数量; 为
4 FCOS 性能效果
在COCO数据集上,FCOS 使用 ResNeXt-64x4d-101-FPN基础网络,改进后的 AP 值达到44.7%,高于RetinaNet 5.6个点,以及CornerNet 4.2个点。
所做出的改进Improvements
是指:
- 将centerness分支移到regression分支上;
- 只将GT boxes的中心作为正样本;
- IOU loss 使用 GIOU;
- 对 bbox 的 l, r, t, b loss 计算时,使用FPN的不同步距做标准化
5 总结
FCOS 论文的主要贡献包括以下几点:
- FCOS 以很小的设计复杂度,取得了优于anchor-based 的 RetinaNet,YOLO 和 SSD 等检测网络的性能。
- FCOS 摆脱了anchor-based算法导致的复杂计算和超参调优。
- FCOS 还可以拓展应用到二阶段检测网络如 Faste R-CNN 的RPN网络,并且效果更好。