论文阅读——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. 1.spring.net Look-up Method 查找方法的注入(方法是抽象的需要spring.net注入)

    .为什么需要查找方法的注入 当Object依赖另一个生命周期不同的Object,尤其是当singleton依赖一个non-singleton时,常会遇到不少问题,Lookup Method Injec ...

  2. MemoryUsage:监测java虚拟机内存使用

    通过MemoryUsage可以查看Java 虚拟机的内存池的内存使用情况.MemoryUsage类有四个值(均以字节为单位): ===Init=== java虚拟机在启动的时候向操作系统请求的初始内存 ...

  3. (I/O流)在100ms内桌面上生成一个200M大小的文件

    最终速度取决于硬盘的读写速度 package com.laurdawn; import java.io.File; import java.io.FileInputStream; import jav ...

  4. servlet及xml文件处理流程

    启动项目----会找到web.xml文件---跳转到默认jsp----页面重定向----转到xml.文件下 通过<servlet-mapping>映射找到<servlet>标签 ...

  5. nginx+tomcat实现动静态分离

    ===============Tomcat 概述: Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache ...

  6. VC中CRect类的简单介绍

    CRect CRect类与Windows RECT结构相似,并且还包括操作CRect对象和Windows RECT结构的成员函数.在传递LPRECT,LPCRECT或RECT结构作为参数的任何地方,都 ...

  7. [Erlang13]怎么把一个普通的进程挂入Supervisor监控树?

    简单来说:应该是在调用的start_link返回一个{ok,Pid}就可以把这个进程放入监控树Supervisor里面: -module(worker). -author("zhongwen ...

  8. thinkphp里数据嵌套循环

    做thinkphp时要用到循环里面嵌套循环的,并第二个循环是和外面的有关联的. thinkphp官网给出的文档为: <volist name="list" id=" ...

  9. CentOS下Docker与.netcore(四)之 三剑客之一Docker-machine+jenkins简单自动化部署

    CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.netcore(二) 之 Dockerfile CentOS下Docker与.netcore(三)之 三剑客 ...

  10. 201621123012《Java程序设计》第12次学习总结

    作业12-流与文件 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 面向系统综合设计-图书馆管理系统或购物车 使用流与文件改造你的图书馆管理系统或购物车 ...