https://msc.berkeley.edu/research/autonomous-vehicle/sparse_rcnn.pdf?

msc.berkeley.edu


detr最近的进展我都不是很熟,跟做ocr的小伙伴聊了下,他说paper的几个点在这条线上上看会比较顺,我完全不懂,期待有大佬给一些新的视角解读吧。

昨晚看完直接失眠了,躺在床上捋清楚了几个细节,比如学出来的anchor为啥不会很相似,为什么这样能去掉nms之类,越想越觉得太秒了

由于dense的anchor设计加上cnn feature map的平滑性质,导致我们在正负样本划分不得不使用一对多的形式以及使用nms这样的后处理,这两个东西很蛋疼,从而从去年开始导致了一系列做正负样本划分以及设计loss适应nms的工作。

我之前跟mentor讨论,他坚信cnn上也能像detr一样去掉nms,但是我就劝他说不用position encoding 这样的东西,cnn这个平滑性好像必须有这么个设计,之后的尝试也完全走偏了,这个认知在dense anchor的基础上也是对的,但是之后就往怎么增加feature map高频上做了,完全没意识到dense anchor有什么问题,当然也承认,认识到我也一点不敢想能做成sparse的形式。

其实能想到现在检测几个令人头疼的问题是出在dense的anchor已经很不容易了,之后detr可能启发了sparse 能做work,最近几年dynamics 的生成运算参数的工作(condinst之类)为sparse的work奠定了基础,感觉真的是一个刚刚好的时候。

真的太强了,相比一些想出来感觉不快点做就会被别人做的东西,这个就是那种根本想不到的东西。


将 two stage anchor detector 升级为了 two stage set prediction detector.

1、Learnable proposal box 可以看作 RPN,然后用ROIAlign提取ROI feature。

2、Learnable proposal feature 可以看作是Detr中的object query,相当于anchor。

3、ROI feature 和 Learnable proposal feature 用 optimal bipartite matching做匹配,而不是沿用IOU做匹配。

4、Detr中使用了 transformer让每个object query都和全局的特征图交互,而Sparse R-CNN 通过Learnable proposal box生成了sparse candidates和sparse feature,这样就避免了和全局特征的交互。

5、从工业部署角度看,对于端侧,sparse detector并不是很友好,dense detecor更直接而且网路也能够轻量。

最后,Set Prediction detector也开始分为两类了:

  • One-stage:Detr
  • Two-stage:Sparse R-CNN

看起来set prediction挺香的,只不过,set prediction的检测器,同等测试条件下还是anchor/anchor-free的检测器在精度上差一点,和Sparse R-CNN作者也讨论了下,set prediction还有优化的空间。

set prediction的检测器很简洁,部署也很方便,如果把精度和速度肝上去了,就可以造福工业界了。


本文解读:

深度眸:Sparse R-CNN:简化版fast rcnn?

zhuanlan.zhihu.com图标

特意把论文和代码都看了,结合对relation和relation++、detr的了解,说下粗略的感受吧。

Sparse R-CNN确实做的很好,等的就是这样的工作!极致简单,不需要复杂anchor先验设置、不需要nms、不需要RPN,将整个faster rcnn的pipeline变得非常简洁。

论文核心思想应该是借鉴了上述三篇论文做法,简单来说是核心组件是:

  1. 可学习proposal boxes
  2. 可学习proposal feature

上述两个组件中最重要的是可学习proposal feature,而可学习proposal boxes只是为了提出roi而已,不然RCNN咋弄?而可学习proposal feature和detr的object query作用非常类似,都是提供全局注意力或者说提供实例级别的统计信息,由于维度比较高,其可以嵌入的信息很多,例如物体姿态或者shape。强烈建议作者在预测时候进行可视化proposal feature,应该可以看出很多东西

对应到relation论文,那么proposal boxes就是常说的几何特征,而proposal feature就是外观特征。我觉得没啥本质区别,因为都是自发学的,学到最后其实可视化看看都一样应该。

至于roi特征和proposal feature的交互过程非常重要,虽然论文说具体细节不重要,这个交叉注意力计算过程和transformer里面的做法类似,作者成为动态head,确实有动态的意味。

最后的loss,也是参考了detr里面的先双边匹配,然后再计算loss的做法,使得最后输出的预测结果不需要nms。

其他的迭代refine思想应该是为了提点而已,和cascade rcnn做法类似。

以上就是全部核心知识点了。可以发现极其简单,只要你熟悉了上述所提的3篇论文就能够理解了。

至于未来嘛,transformer思想还是很值得期待的,虽然本文好像没有引入(但是我觉得思想还是引入了)。如果哪天将CNN彻底抛弃,仅仅依靠transformer或者类似注意力思想统治了CV领域,那也不用奇怪!

代码还没有跑过,暂时不知道里面有没有啥坑!

如果对transformer和detr不熟悉的,可以看我的文章:

深度眸:3W字长文带你轻松入门视觉transformer?

zhuanlan.zhihu.com图标

由于 Sparse RCNN 有受到 DETR 启发, 所以先分析 DETR.

我觉得 DETR 的成功有两个关键点:

  1. Set prediction loss
  2. Self-attention 带来的 proposal 之间的强关联性, 使得整个输出结果更加整体

同时, DETR 有个大的缺点, 就是对 local feature 利用不足. 这会导致一个问题: bbox 边界回归不准. 表现为小物体的 mAP 非常低(如下表).

DETR 的 APs 比 Sparse RCNN 低了6个点!

但 mAP_small 低有可能有两个原因:

  1. 边界回归不准
  2. 漏掉了小物体

为了找到 mAP_small 低的具体原因, 我们对比了一下 DETR 和 MaskRCNN 的 bbox mAP_small 曲线:

纵坐标:mAP_small. 横坐标: IoU阈值[0.5:1:0.05]. 蓝色 DETR, 橙色 MaskRCNN

发现 DETR(蓝色) 在 IoU 阈值为 0.5 时候, mAP_small 比 MaskRCNN还高, 所以 DETR 感知到小物体的能力还挺强的, "边界回归不准"才是 mAP_small 低的主要原因.


再回到主角 Sparse RCNN, Sparse RCNN 完全继承了 DETR 的两个关键优点:

  1. Set prediction loss
  2. Proposal 之间的强关联性(iteration+dynamic 机制类比于 self-attention)

同时, 由于 Sparse RCNN 是全卷积的, 具有 CNN local feature 强的优点. 所以在边界回归的准确度上会优于 DETR.

综上, Sparse RCNN 集成了 DETR 的两个优点, 并摒弃了 transformer 带来的缺点, 并在结果上超过了 DETR. 但老实说, Sparse RCNN 只高了0.3 的 mmAP, 而 mAP50 和 AP_large 上都低了不少, 说明 Sparse RCNN 还有挺多进步空间的.


补充:

其实可以换一种方式来解决 DETR 对 local feature 利用不足的缺点, 就是直接学 RCNN, 做 two-stage 的回归.

具体的, 在第二个 stage 找出 small object 的 bbox, padding 一点点, 在高清一点的 CNN feature 上 crop 一个 RoI 出来. 给 RoI 加上 spatial positional encoding 和 object 的 query 一起丢给 transformer 的 decoder, 输出一个 refine 后的 bbox.


之前的方法是 大量初始proposal + 1-2 refine stage。用过饱和的proposal保证预测质量,最后用NMS滤除。

这篇是 少量的初始proposal + 多轮 refine stage。 proposal box 和 proposal feature可以与输入图像无关 就证明了 不靠谱的初始proposal是可以考多轮 refine修正回来的。还是挺神奇的。

我很想看看每轮refine前后 box的变化,到底 图片无关的proposal box是怎么和Object对应的,有什么规律。


推荐阅读:
相关文章