Sparse R-CNN
关于稀疏 R-CNN 的理论整理。
1 介绍
目标检测领域中主流的两大类方法:
- Dense Detector:常见的算法有 DPM、YOLO、RetinaNet 等,在 Dense Detector 中, 大量的 object candidates 如 sliding-windows、anchor-boxes、 reference-points 等被提前预设在图像网格或者特征图网格上,然后直接预测这些 candidates 到 GT 的 scaling/offest 和物体类别。
- Dense-to-Sparse Detector:常见的如 R-CNN 算法家族,这类方法的特点是对一组 sparse candidates 预测回归和分类,而这组 sparse candidates 来自于 Dense Detector。
Sparse R-CNN 避免了人工设置候选框的大量超参数以及多对一的正负样本分配。更重要的是,最终的预测结果可以直接输出而不需要 NMS(非极大抑制)。
2 Sparse R-CNN
Sparse R-CNN 的 object candidaes(proposal)是一组可学习的参数,大小为 , 代表 object candidates 的个数,一般为 100~300,4 代表物体框的四个边界。这组参数和整个网络中的其他参数一起被训练优化。这个过程没有 Dense Detector 中大量的枚举(如 anchor),这组 object candidates 作为 proposal boxes 用于提取 RoI,预测回归和分类。
这组学习到的 proposal boxes 可以理解为图像中可能出现物体的位置的统计值,但这些表征提取出的的 RoI feature 显然不足以精确定位和分类物体。于是,Sparse R-CNN 引入了一种特征层面的 candidates,proposal features,大小为 , 是 object candidates 的个数,与 proposal 一一对应, 代表 feature 等维度,一般为 256,proposal features 也是可学习的参数。proposal features 与 proposal boxes 提取出来的 RoI feature 做一对一的交互,从而使得 RoI feature 的特征更有利于定位和分类物体。Sparse R-CNN 将此设计称为 Dynamic Instance Interactive Head。
Sparse R-CNN 的检测头如上图所示,与 R-CNN 十分类似,对比下图的 Faster R-CNN 结构,可以得到一些不同:
- Sparse R-CNN 没有 RPN 结构,proposal boxes 不是由 RPN 产生, 而是一组预设的可学习参数。用一个 4 维向量能表示一个 object candidates, 等向量就是预设零 个可学习 anchor。
- Sparse R-CNN 第一步将输入 image 和 proposal boxes 融合,相当于用 个方框从原始 image 抠图后对齐,对应于 Faster R-CNN 的 RoI Pooling 操作。
- 将 RoI 区域抠出后,Sparse 并没有简单地连接两个全连接层,而是与 proposal features 再做一次卷积,然后接两层全连接层做分类和回归。
网络公式:
3 可学习的 proposal boxes 和 proposal feature
proposal box 和 proposal feature 是网络中要学习的重要参数。两者的数目相同(都为 )且一一对应,每一个 proposal box 得到的 RoI 只和它对应的 proposal feature 做进一步的融合。
- proposal box 是一个 4 维的向量,代表一个方框(目标位置),其学习的内容可以理解为物体位置的统计量。
- proposal feature 是一个高维的向量(比如 256),它蕴含着与其匹配 proposal box 对象的更为深层次的更抽象的信息。因为 proposal box 只记录了对象的位置信息,对于其他更为抽象的细节信息完全丢失了。proposal feature 是为了丰富 proposal box 对象的特征信息。
4 Dynamic Instance Interactive Head
从上面的介绍,proposal box、RoI、 proposal feature 这三者是绑定在一起的,因此对每个 RoI 都“单独”设置一个检测头,这样 个 proposal boxes 就有 个检测头(如上图-4)。
检测头输出 个 proposal boxes,使用 Hungarian 算法与目标 targets 建立二分匹配图。如下图,生成了 3 个 proposal boxes,GT 中只有两个 targets。没有目标的 proposal boxes 与一种特殊的类别 no object 相匹配。(图中绿色 box)
对每一对 box-target,相匹配的损失函数为:
参考
- https://zhuanlan.zhihu.com/p/310058362
- https://zhuanlan.zhihu.com/p/335822817
- https://blog.csdn.net/mary_0830/article/details/110633279