FCOS: Fully Convolutional One-Stage Object Detection 算法解析

    这是一篇使用 anchor free 方法做目标检测的工作,相对于其他的工作,没有本质上的变化,但是我觉得有两个创新点是很有意思的。

    文章:FCOS: Fully Convolutional One-Stage Object Detection

    论文地址:https://arxiv.org/pdf/1904.01355.pdf

    代码地址:https://github.com/tianzhi0549/FCOS

    文章的内容从名字上就能看出来,就是一种单步的anchor free 目标检测算法,为什么要用 单步 -- 很简单,因为速度快,在工程应用的落地上有优势, 为什么要用anchor free -- 文章的解释是,引入 anchor 的同时,也引入了大量的超参数,手动调整需要大量的工程经验才能调出好的效果,同时anchor 的引入会附带很多额外的计算量,比如Faster RCNN中RPN的 NMS。而anchor free 的方式结构简单,效果也能做的很不错。

一、 算法流程:

FCOS: Fully Convolutional One-Stage Object Detection 算法解析_第1张图片

      算法的流程很简单,首先是一个骨干网络,文章用了resnet101 和resneXt,这个并不关键。然后是一个 FPN ,最后在FPN的feature map上跟了一堆检测头,这种做法也比较常见。

二、标签和回归

    我一直认为,在行人检测或者其他目标检测中,单纯的调整CNN网络结构其实并没有什么卵用。因为那根本就没有从本质上去分析这个问题,我认为在检测问题中最有价值的两个方面就是 标签的处理 和 predict box的后处理。这篇文章的标签处理还是很有意思的:

     和CSP一样,网络的前向输出是一张图 H*W*C 和 H*W*4 的图。那标签也就是这么大的两张图,问题来了,怎么标呢?

     1、我们把标签的 feature map 叫做 true label ,把神经网络输出的 feature map 叫做 predict。首先true label 上的每个点都可以对应到原图上,如果这个点落在了 Ground Truth 上,那么这个点就可以当作正样本拿来训练,该点还对应了4个值,分别是l、t、r、b(light 、top、right、bottom),四个参数的定义如下图所示,公式的话就是这个公式(1),若果出现右边的情况,这个点当成蓝色框的回归(因为这个目标小)

FCOS: Fully Convolutional One-Stage Object Detection 算法解析_第2张图片

     2、有了第一步,我们就能把原图 转化成两张feature map,一张 H*W*C 另外一张 H*W*4 。用他们就可以和predict做Loss训练网络了。

    3. Loss函数:这篇文章的Loss就是很普通的Loss了 由Loss cls 和 Loss regr构成,分别描述了分类精度和坐标精度。公式如下:

FCOS: Fully Convolutional One-Stage Object Detection 算法解析_第3张图片

     参数解释:Pxy是神经网络前向预测的分类概率,和Cxy做一个交叉熵再除以 positive 的数量得到分类损失。Loss regr则是将预测得到的四个坐标和该中心点,缩放之后还原到原图上,用还原的框和GT做一个 IoU Loss 得到定位损失。

     这个标签的设计是很有意思的,她一定程度上解决了正负样本极度不平衡的问题。anchor base 的算法中,是IOU>0.7算正样本。而在这里,只要你的这个点落在了GT的范围内,这就是一个正样本正样本的数量是坑定能提升的。另外,这样的方式能够是目标周围得到更多的比较好的predict结果。有利于提升检测精度。

三、中心度的概念(center-ness)

     这篇文章的第二个创新点就是这里了,提出了一个中心度的概念。很巧妙,但我觉得和CSP中的那种正态分布标签的目的是相同的,手段上略有差别:CSP利用Focal Loss 抑制边缘对于Loss 的贡献,这篇就很粗暴了,直接扣分--score*centerness。

    上述的工作完成之后,作者发现算法整体的效果还是有问题。因为,在距离目标中心较远的位置上,出现了很多质量比较低的框。那么很自然的想法就是抑制这些框啊,让他们这些点的最终得分减少,这样就可以用NMS将他们抑制掉了。于是就有了这样一个式子:

FCOS: Fully Convolutional One-Stage Object Detection 算法解析_第4张图片

     稍微想一下就能知道,当前点距离GT中心点越近centerness 越接近于1,否则就接近于0,将这个数直接乘在predict 的score上,就能将那些边缘上的点的分数变得很低,从而是NMS更容易的抑制他们。

    中心度的实际效果就是这张图,红色的部分得分最高,越是接近边缘得分就越低。

FCOS: Fully Convolutional One-Stage Object Detection 算法解析_第5张图片

     

四、看看实验

     1、 有没有centerness的对比,这用坑定要做的,毕竟提出一个概念,要证明他有没有用:

FCOS: Fully Convolutional One-Stage Object Detection 算法解析_第6张图片

     可以看出,这个centerness还是挺有用的,而且只是在检测头上加了一个小分支,用起来也挺方便的

     2、 和目前最好的检测器的比较:

FCOS: Fully Convolutional One-Stage Object Detection 算法解析_第7张图片

    3、 其他的就是一些用不同的层做实验,加不加FPN的实验等等

    OK,就写这些

 

你可能感兴趣的:(目标检测,行人检测,深度学习)