Sparse R-CNN: End-to-End Object Detection with Learnable Proposals

860 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

参考

mp.weixin.qq.com/s/NooqX7aTa…

论文下载:openaccess.thecvf.com/content/CVP…

代码下载:PeizeSun/SparseR-CNN:具有可学习提案的端到端对象检测,CVPR2021 (github.com)

和RetinaNet、Faster R-CNN的创新对比

image.png (a)RetinaNet中直接迭代每一个像素K个anchor boxes。

(b)Faster R-CNN是从W * H * K个anchor boxes中选择N个anchor boxes。

(c)本篇文章所提方法:直接提供N个anchor boxes。

Abstract

本文提出一个用于目标检测的稀疏算法--Sparse R-CNN。

目前所有目标检测的工作都依赖于dense object candidates。

However,本文提出了一组手动设计的object proposal, 共N个。Sparse R-CNN完全避免了所有与候选目标的设计和多对一的标签分配相关的工作。更重要的是,最终的预测是直接输出的,而没有非极大抑制的后处理。SparseR-CNN证明了准确性、运行时和训练收敛性能,与具有挑战性的COCO数据集上建立的检测器基线相当,例如,在标准3×训练计划中实现45.0AP,并使用ResNet-50FPN模型以22fps的速度运行。

Introduce and Related Work

inference time推理时间 heuristic assign rules 启发式分配规则

Sparse R-CNN

image.png An overview of Sparse R-CNN pipeline. The input includes an image, a set of proposal boxes and proposal features, where the latter two are learnable parameters. The backbone extracts feature map, each proposal box and proposal feature are fed into its exclusive dynamic head to generate object feature, and finally outputs classification and location Sparse R-CNN设计图概述。输入包括一个图像、一组提议框和提议特征,其中后两个是可学习的参数。主干提取特征图,将每个提议框和提议特征输入其专用动态头部,生成目标特征,最后输出分类和定位。

Saprse R-CNN由backbone network、a dynamic instance interactive head and two task-specific prediction layers共三部分组成。

  • 数据输入包括an image, a set of proposal boxes and proposal features
  • 使用FPN作为Backbone,处理图像
  • 下图中的Proposal Boxes: N*4是一组参数,跟backbone没啥关系
  • 下图中的proposals features和backbone也没啥关系

Backbone(Feature Pyramid Network (FPN))

backbone:基于Resnet的FPN提供多尺度特征图。

Learnable porposal box

  • These proposal boxes are represented by 4-d parameters ranging from 0 to 1.由一个4D数组 表示, 并且归一化到[0,1]的范围。
  • 基本不受初始化的影响
  • 可以看成是物体潜在位置的统计概率
  • 训练的时候可以更新参数

Learnable proposal feature

  • 之前的proposal box是一个比较简洁的方法来描述物体,但缺少了很多信息,比如物体的形状与姿态
  • proposal feature就是用来表示更多的物体信息。

Dynamic instance interactive head

给定N个提议框,Sparse R-CNN首先利用RoIAlign操作为每个框提取特征。然后,使用我们的预测头,使用每个框特征生成最终预测。受动态算法的启发,我们提出了动态实例交互头。每一个RoI特征都被输入到自己的专属头部,用于对象定位和分类,每个头部都以特定提议特征为条件。

  • 通过proposal boxes以及ROI方法获取每个物体的特征,然后与proposal feature结合得到最终预测结果
  • Head的数量与learnable box的数量相同,即head/learnable proposal box/learnable proposal feature一一对应
def dynamic_instance_interaction(pro_feats, roi_feats):
    # pro feats: (N, C)
    # roi feats: (N, S∗S, C)
    # parameters of two 1x1 convs: (N, 2 ∗ C ∗ C/4)
    
    dynamic_params = linear1(pro_features)
    
    # parameters of first conv: (N, C, C/4)
    param1 = dynamic_params[:, :C*C/4].view(N, C, C/4)
    
    # parameters of second conv: (N, C/4, C)
    param2 = dynamic_params[:, C*C/4:].view(N, C/4, C)
    
    # instance interaction for roi features: (N, S∗S, C)
    roi_feats = relu(norm(bmm(roi_feats, param1)))
    roi_feats = relu(norm(bmm(roi_feats, param2)))
    
    # roi feats are flattened: (N, S∗S∗C)
    roi_feats = roi_feats.flatten(1)
    
    # obj feats: (N, C)
    obj_feats = linear2(roi_feats)
    
    return obj_feats

image.png

该图来自:mp.weixin.qq.com/s/NooqX7aTa…

Sparse R-CNN的两个显著特点就是sparse object candidates和sparse feature interaction,既没有dense的成千上万的candidates,也没有dense的global feature interaction。Sparse R-CNN可以看作是目标检测框架从dense到dense-to-sparse到sparse的一个方向拓展。

--------待补充