论文阅读——FCOS: Fully Convolutional One-Stage Object Detection

概述

目前anchor-free大热,从DenseBoxes到CornerNet、ExtremeNet,以及最近的FSAF、FoveaBox,避免了复杂的超参数设计,而且具有很好的检测效果。本文作者提出了一种全卷积的单阶段目标检测算法,类似于语义分割的做法使用像素级预测。该检测框架简单有效,而且可以方便地用于其他任务。

简介

再啰嗦一下基于anchor的检测算法的缺陷:

1、检测效果受尺度、宽高比以及anchor box的数目影响。比如RetinaNet,改变这些超参数对COCO数据集上的AP影响高达4%;

2、泛化能力差,目标形变较大时难以检测,尤其是小目标。新任务需要重新设计anchor的超参数;

3、大量冗余anchor box导致正负样本失衡;

4、IoU计算造成运算资源和内存浪费。

FCOS回归位置的相对偏移。对于图1右侧一个重叠区域的位置应该回归哪个bbox的问题,可以通过FPN解决。远离目标中心的位置产生很多低质量的预测框,作者采用center-ness分支来预测像素与对应bbox中心的偏差,将该得分用于降低低质量bbox的权重。

方法

像素级预测;利用多层次预测来提高训练中的召回率,解决训练中重叠边框造成的歧义;使用center-ness分支抑制检测到的低质量包围盒,提高性能。

一、FCOS

回归的target就是4D向量(该位置到bbox四边的距离)。如果一个位置对应多个bbox(称作模糊样本),简单地将面积最小的bbox作为它的回归目标。充分利用了前景样本进行训练。

没有训练多类分类器,而是C个二分类器。

损失函数如下:

其中,Lcls是focal loss,Lreg是IoU loss,论文中λ取1.

预测过程中pxy>0.05即认为是正样本。

二、基于FPN的多层预测

问题:

1、CNN中最后的feature map的大stride会使得召回率偏低(在基于anchor的方法中可用适当降低IoU阈值来提升召回率)——可以利用多层FPN解决,召回率甚至优于RetinaNet

2、重叠区域的位置应该回归哪个bbox的问题——FPN(重叠往往发生在不同大小的目标之间)

使用5层feature map{p3,p4,p5,p6,p7},其中p3、p4、p5是由CNN的feature map c3、c4、c5通过1*1卷积层以及横向连接生成的,p6和p7是p5、p6分别通过步长为2的卷积层生成的。

每层直接限制边界框回归的范围:如果一个位置满足max(l*, t*, r*, b*)>mi或者max(l*, t*, r*, b*)<mi-1就设为负样本。其中mi是第i个特征层需要回归的最大距离。文中设置m2、m3、m4、m5、m6、m7分别为0,64,128,256,512和无穷大。

三、Center-ness

使用了FPN以后,像素级预测效果还是不行,为什么呢?远离目标中心的位置产生了大量低质量的预测框。简单地增加了一个单层分支,用于预测一个位置的center-ness(神马东西?从名字看完全不知道这是要干嘛的啊有木有。。。),也就是该位置到它负责的目标中心的距离。

范围0-1,训练采用交叉熵损失。测试时,将centerness与类别得分相乘。再通过NMS后处理。

实验

训练细节:

backbone:ResNet-50,超参数与RetinaNet相同,使用ImageNet预训练,输入图像大小:1333*800左右

FPN的使用:

center-ness的使用:

COCO数据集上的AP对比:

将FCOS用于RPN:

总结

FCOS利用语义分割的思想,逐像素做目标检测,但是远离目标中心的位置会产生大量的低置信度bbox,为了过滤掉这些框,在类别预测的分支中添加了一个支路用于预测像素点到目标中心的距离(只是一个权值度量,不是真的距离,就是说如果该位置距离中心很远,那么它的centerness就很小,而框的最终置信分是框的score*centerness所以也会很小,这样就过滤掉了)。同时注意到语义分割做目标检测的算法都用到了多层次的思想(结合FPN),将不同大小的目标划分到不同层处理。

论文阅读 | FCOS: Fully Convolutional One-Stage Object Detection的更多相关文章

  1. 【CV论文阅读】YOLO:Unified, Real-Time Object Detection

    YOLO的一大特点就是快,在处理上可以达到完全的实时.原因在于它整个检测方法非常的简洁,使用回归的方法,直接在原图上进行目标检测与定位. 多任务检测: 网络把目标检测与定位统一到一个深度网络中,而且可 ...

  2. 【CV论文阅读】Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

    由RCNN到FAST RCNN一个很重要的进步是实现了多任务的训练,但是仍然使用Selective Search算法来获得ROI,而FASTER RCNN就是把获得ROI的步骤使用一个深度网络RPN来 ...

  3. FCOS: Fully Convolutional One-Stage Object Detection

    论文:FCOS: Fully Convolutional One-Stage Object Detection   目录 0.简介 1.网络结构 2.框回归--直接.自由 3.Center-ness ...

  4. 目标检测论文阅读:Deformable Convolutional Networks

    https://blog.csdn.net/qq_21949357/article/details/80538255 这篇论文其实读起来还是比较难懂的,主要是细节部分很需要推敲,尤其是deformab ...

  5. 论文学习:Fully Convolutional Networks for Semantic Segmentation

    发表于2015年这篇<Fully Convolutional Networks for Semantic Segmentation>在图像语义分割领域举足轻重. 1 CNN 与 FCN 通 ...

  6. [C4W3] Convolutional Neural Networks - Object detection

    第三周 目标检测(Object detection) 目标定位(Object localization) 大家好,欢迎回来,这一周我们学习的主要内容是对象检测,它是计算机视觉领域中一个新兴的应用方向, ...

  7. 论文笔记:AdaScale: Towards real-time video object detection using adaptive scalingAdaScale

    AdaScale: Towards real-time video object detection using adaptive scaling 2019-02-18 16:14:17 Paper: ...

  8. 论文阅读笔记五十七:FCOS: Fully Convolutional One-Stage Object Detection(CVPR2019)

    论文原址:https://arxiv.org/abs/1904.01355 github: tinyurl.com/FCOSv1 摘要 本文提出了一个基于全卷积的单阶段检测网络,类似于语义分割,针对每 ...

  9. [论文阅读] MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications (MobileNet)

    论文地址:MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications 本文提出的模型叫Mobi ...

随机推荐

  1. Anaconda 安装和配置

    Anaconda 安装和配置 1. Anaconda 安装 Anaconda说明及安装过程:Anaconda详细安装使用教程 2. Anaconda和Pip源修改 Anaconda源修改:打开Anac ...

  2. Linux 设置默认编辑器(以nano为例)

    查看nano地址 which nano output: /usr/bin/nano 设置默认编辑器 nano ~/.bashrc export EDITOR=nano alias vi=/usr/bi ...

  3. cmake3.2.2 在Ubuntu14.04下的安装

    参考:http://askubuntu.com/questions/610291/how-to-install-cmake-3-2-on-ubuntu-14-04 1.判断相关软件是否安装 sudo  ...

  4. 浏览器透明设置例子,qt5.6才支持

    用simpleBrowser例子的基础上,在BrowserWindow构造函数修改如下 BrowserWindow::BrowserWindow(QWidget *parent, Qt::Window ...

  5. Html创建表单

    echo Html::beginForm(['/site/logout'], 'post'); echo Html::submitButton(Yii::t('app', 'logout'), ['c ...

  6. 【转载】SQL注入攻防入门详解

    滴答…滴答…的雨,欢迎大家光临我的博客. 学习是快乐的,教育是枯燥的. 博客园  首页  博问  闪存    联系  订阅 管理 随笔-58 评论-2028 文章-5  trackbacks-0 站长 ...

  7. Web图片编辑控件发布-Xproer.ImageEditor

    版权所有 2009-2014 荆门泽优软件有限公司 保留所有权利 官方网站:http://www.ncmem.com 产品首页:http://www.ncmem.com/webplug/image-e ...

  8. 编写高质量代码改善C#程序的157个建议——建议101:使用扩展方法,向现有类型“添加”方法

    建议101:使用扩展方法,向现有类型“添加”方法 考虑如何让一个sealed类型具备新的行为.以往我们会创建一个包装器类,然后为其添加方法,而这看上去一点儿也不优雅.我们也许会考虑修改设计,直接修改s ...

  9. 第二章第一个项目——关于mime

    一句话就能解释清楚. MIME标注HTTP响应类型. 而后缀名标注文件类型. ---------分割线-------- http响应实质上只有数据,没有文件名. 举个例子吧. HTTP/1.1 200 ...

  10. Delphi 按Esc快捷键退出程序的简单方法

     第一种方法: 在窗体上放一个按钮: 1>.设置按钮的Cancel属性为True: 2>.在按钮的点击事件中写: procedure TForm1.btn1Click(Sender: TO ...