目标检测算法可以分为两大类别,anchor-based和anchor-free算法,前者是主流的做法,比如yolo-v3、ssd、faster rcnn等,它存在如下缺点,
(1)引入很多需要优化的超参数, 比如anchor number、anchor size、anchor ratio等;
(2)为了保证算法效果,需要很多的anchors,存在正负样本类别不均衡问题;
(3)在训练的时候,需要计算所有anchor box同ground truth boxes的IoU,计算量较大;
那么可不可以不使用anchor box呢,这便是第二种思路,anchor-free,代表性的算法包括yolo-v1、cornernet、FSAF(见笔者之前的文章https://blog.csdn.net/diligent_321/article/details/88384588)。
本文也属于anchor-free类别的算法,且效果在anchor-free派系中算SOTA了。它的主要优点如下:
(1)因为输出是pixel-based预测,所以可以复用semantic segmentation方向的tricks;
(2)可以修改FCOS的输出分支,用于解决instance segmentation和keypoint detection任务;
FCOS的网络结构如下图,显然,它包含了如下3个部分,
(1)backbone网络;
(2)feature pyramid结构;
(3)输出部分(classification/Regression/Center-ness);
对于输出部分 H × W H\times W H×W的特征图,每一个像素点需要输出类别打分、中心打分、回归坐标,它们的维度分别为C、1和4。
大家应该也都注意到了,feature pyramid结构部分并不是标准的FPN结构,P6和P7层似乎有些多余,所以实验部分(Table 7)和Retinanet做对比,证明FCOS输出部分网络设计的优势,笔者认为就有些差强人意了。
center-ness,可以译成中心点打分,它表征了当前像素点是否处于ground truth target的中心区域,以下面的热力图为例,红色部分表示center-ness值为1,蓝色部分表示center-ness值为0,其他部分的值介于0和1之间。
数学公式表示如下,
其中, ∗ * ∗表示ground truth。
从公式中也可以看出,当 l ∗ 、 r ∗ l^{*}、r^{*} l∗、r∗相等时, m i n ( l ∗ , r ∗ ) m a x ( l ∗ , r ∗ ) = 1 \frac{min(l^{*}, r^{*})}{max(l^{*}, r^{*})}=1 max(l∗,r∗)min(l∗,r∗)=1,当 l ∗ = 0 l^{*}=0 l∗=0或者 r ∗ = 0 r^{*}=0 r∗=0时, m i n ( l ∗ , r ∗ ) m a x ( l ∗ , r ∗ ) = 0 \frac{min(l^{*}, r^{*})}{max(l^{*}, r^{*})}=0 max(l∗,r∗)min(l∗,r∗)=0,也即 c e n t e r n e s s ∗ centerness^{*} centerness∗衡量了当前像素偏离真实目标的中心点的程度,值越小,偏离越大。
(1)分类和定位分支
分类和定位分支的优化目标如下,
其中, p x , y p_{x, y} px,y表示特征图的位置 ( x , y ) (x, y) (x,y)处的分类概率, t x , y t_{x, y} tx,y表示特征图的位置 ( x , y ) (x, y) (x,y)处的回归坐标。
(2)centerness分支
该分支直接回归处公式(3)中的 c e n t e r n e s s ∗ centerness^{*} centerness∗。笔者刚开始看时,一直觉得这个分支多余,因为基于回归任务的输出,是可以计算出来 c e n t e r n e s s centerness centerness的。尽管作者在实验部分Table 5给出了这种想法的对比结果,说明了效果不好,但是缺乏理论解释,笔者认为这里还是可以出一些有价值的工作的。
这里还需要提及一下,作者增加了一组实验,如果使用ground truth center-ness值,那么AP会从36.6提升到42.1,显然会有很大的提升。既然作者已经指明了方向,大家如果想发paper可以沿着这个方向思考。
由下表可以看出,FCOS的结果优于RetinaNet近2个点。并且,同FSAF算法相比,FSAF联合anchor-based分支和anchor-free分支的结果是40.9,而单独使用anchor-free分支无明显提升,所以,FCOS的效果还是可以的。
(1)虽然Yolo-v1也是anchor-free算法,区别在于,yolo-v1只利用了目标的中心区域的点做预测,因此recall较低。而FCOS利用了目标的整个区域内的点,recall和anchor-based算法相当;
(2)尽管centerness确实带来效果上的明显提升,但是缺乏理论可解释性;
(3)作为一种新的anchor-free算法,它的效果确实超过了yolo-v1、cornernet、FSAF,但是,既然是one-stage算法,推理速度是固有优势,而论文中却始终未提速度,可见,开发anchor-free且速度较快的检测算法,还有一段路要走。
https://arxiv.org/abs/1904.01355