《Sparse R-CNN:End-to-End Object Detection with Learnable Proposals》论文笔记

Posted m_buddy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《Sparse R-CNN:End-to-End Object Detection with Learnable Proposals》论文笔记相关的知识,希望对你有一定的参考价值。

参考代码:SparseR-CNN

1. 概述

介绍:这篇文章在目标检测领域中提出了一种新颖的检测问题思路,摒弃掉RetinaNet或是Faster-RCNN中那种预先定义密集目标检测解空间的方式,直接在输入端定义 N N N个可学习的proposal box和proposal feature(后期用于对于每个box的动态预测)用以实现目标检测任务。有点类似DETR中直接输出固定数量的检测结果,去除掉了引入anchor或是pixel-wise预测的稠密解空间假设,使得整体目标检测网络结构简化。只不过文章的算法是假设有 N N N个先验目标(proposal box),并通过学习的方式去学习这些参数,而且这些proposal box在预测的时候是不能预先进行排除的,需要将这些proposal box都送入到后面的dynamic head中的到最后的box regression和classification。因而这个 N N N的先验在实际场景下设置显得很关键,而且这 N N N个先验都需要去跑一遍dynamic head,没有办法在前期进行筛选。

这里按照proposal的生成进行划分,文章将检测算法的大致分类划分为如下3种:

图(a)代表是的RetinaNet为代表的逐像素预测,图(b)代表的是先通过RPN筛选proposal之后再进行预测。图(c)直接假设需要预测框的数量并直接通过学习的当时得到proposal。文章对proposal box和dynamic head所需的proposal feature都是通过学习的方式得到的,那么其训练的难易程度(收敛性)见下图的比较:

2. 方法设计

2.1 网络结构

文章的整体的网络结构与Faster RCNN系列算法近似,前期特征提取使用的是FPN,只是在RPN部分使用了参数化学习的proposal box,并且在检测部分使用了proposal feature,对应的预测部分其结构见下图所示:

对于文章的代码实现可以参考:

# ./projects/SparseRCNN/sparsercnn/detector.py#L35
class SparseRCNN(nn.Module):
    ...

2.2 proposal box与proposal feature

在这篇文章的定义中proposal box ∈ R N ∗ 4 \\in R^N*4 RN4与proposal feature ∈ R N ∗ 256 \\in R^N*256 RN256是一一对应的,其作用分别为:

  • 1)proposal box:作用是类似于RPN网络得到proposal box(只不过这里是通过学习的形式);
  • 2)proposal feature:维度增加能够编码的信息也增加,其作用是给每个proposal box产生的特征(也就是使用proposal box在backbone feature上进行RoIAlign)添加更多box回归特性,用于生成特异性特征的,类似与SOLO中的动态卷积;

这里对于动态卷积参数的使用与动态特征的生成参考下面的伪代码:

对于上面提到的proposal box可学习参数的初始化,文章提出了4中初始化的方式,其的性能结果不同见下表所示:

2.3 优化策略

这里使用到的优化策略是使用迭代和non-local attention特征优化的形式:

  • 1)对于迭代:类似于Cascade RCNN的思想通过级联优化的形式得到fine的检测结果;
  • 2)对于non-local:这里就是使用attention的操作去优化特征表达,从而优化检测结果;

迭代次数上的消融实验结果:

对于迭代优化和上一节(2.2节)的dynamic head作用见下表:

2.4 损失函数

L = λ c l s ⋅ L c l s + λ L 1 ⋅ L L 1 + λ g i o u ⋅ L g i o u L=\\lambda_cls\\cdot L_cls+\\lambda_L_1\\cdot L_L_1+\\lambda_giou\\cdot L_giou L=λclsLcls+λL1LL1+λgiouLgiou
其中, λ c l s = 2 , λ L 1 = 5 , λ g i o u = 2 \\lambda_cls=2,\\lambda_L1=5,\\lambda_giou=2 λcls=2,λL1=5,λgiou=2 L 1 L_1 L1代表的是对于中心点坐标和宽高四个维度上使用 L 1 L_1 L1 loss。

3. 实验结果

COCO-2017 val:

COCO-2017 test:

以上是关于《Sparse R-CNN:End-to-End Object Detection with Learnable Proposals》论文笔记的主要内容,如果未能解决你的问题,请参考以下文章

Sparse R-CNN 随机初始化的坐标是如何反向传播训练的

Sparse R-CNN: 稀疏的目标检测,武装Fast RCNN 新文分析

目标检测算法之Fast R-CNN算法详解

目标检测之YOLO V1

A Small End-to-End Project

论文阅读:End-To-End Memory Networks