Cascade Rcnn 的简单理解

接触到Cascade Rcnn 是因为学习别人的一个比赛时看到的,处于好奇,就很想知道这个Cascade Rcnn是一个啥。

论文地址:https://arxiv.org/abs/1712.00726

原理可以用论文中的这个图片来说明:

 Figure 3. The architectures of different frameworks. “I” is input image, “conv” backbone convolutions, “pool” region-wise feature extraction, “H” network head, “B” bounding box, and “C” classification. “B0” is proposals in all architecutes.

图中:I 是输入的图像,conv是卷积(就是backbone),pool 可以理解为ROI Pooling,H 是检测头,就是进行预测(进行预测类别和位置),B 预测的坐标,C 是预测的类别,B0 就是RPN网络推荐的rois。

        一般网络把检测头的结果作为最终结果,但是Cascade Rcnn 他有点区别,他有三个检测头,这三个检测头是串联在一起的,也就是说,后一个检测头的输入是前一个检测头的输出,是依赖关系。这种检测头依赖就称为:级联。每个检测头的区别是里面的IOU阈值设定,第一个检测头的阈值最低,最后一个最高。第一个检测头回归的位置其实不是很准,但是通过第二个检测头的修正,即regression,就比第一个要准,再经过第三个,就更准了。(为啥三个,作者是通过实验发现三个最好)


        而且每个检测头所使用的正负样本量都一样,理论上说(论文中说的),IOU越大,正样本越少,第三个检测头的正样本量是少于第一个的。但是通过级联,这种问题不会产生,比如第一个检测头正样本量是100,那么,经过第一个检测头也regression到100个正样本量,而且regression的位置要比没有regression的位置要好,就是更接近Ground Truth,从而与Ground Truth的IOU阈值也大,这样把这regression后的100正样本量送入到第二个检测头,后面就是同理操作。

以下是操作流程:

1.输入图片经过backbone得到 feature map,这里记为 org f
2.把得到的 feature map 送入到两个分支,一个是输入到RPN网络,经过RPN网络的预测得到图中的B0,这个B0其实就是rois,就是在 feature map 上的一些特征的坐标。还有一个输入到图中的 Pool 网络
3.对得到的 B0 在 feature map 中进行提取相应位置的特征,然后送入到 Pool 中,进行ROI Pooling,这样就得到固定宽高的 局部 feature map (这个feature map是backbone输出的feature map上的局部部分),注意这里是指宽高,不是指channel。
4.把局部 feature map输入到 H1 中,进行分类和回归就得到C1和B1,注意,训练的时候是需要用到IOU的,H1的IOU假设为0.5。
5.接着根据B1的坐标,在 org f 上进行提取局部特征,然后把提取的局部特征输入到H2,同理,H2中的IOU是比H1中的IOU要大的,假设为0.6。这样通过H2得到C2和B2。
6.根据B2的坐标,在 org f上进行提取局部特征,提取到的特征输入到H3,H3中的IOU是最大的,假设为0.7,这样通过H3得到 C3和B3。
7.把C3和B3作为最终的结果。

理论上说,cascade rcnn 的原理还是很简单的,但是我很好奇它是怎么实现的,这个过程花费了我好久的时间,网上的一些开源代码都是基于torch1.0开发的,后来终于找到一个写的蛮好的开源代码:

https://github.com/misads/easy_detection.git

这个中cascade是基于Faster rcnn来实现的,这里面又用到了 FPN,当时看到这里很懵,FPN 与 Faster rcnn 怎么关联,与 Cascade rcnn 又怎么关联,后来终于自己理解了,可以通过下面一幅图来进行说明,如下图:

 FPN的每一层结果都会给RPN,这里会涉及到一个方法 MultiScaleRoIAlign,就是把FPN的这些多尺度的feature map进行ROIAlign,这个方法讲解可以参考MultiScaleRoIAlign_shenjianhua005的专栏-CSDN博客,然后RPN会把结果给Cacade。

Cascade Rcnn参考:

1.这个视频把按照ascade的论文进行了讲解,讲解的还蛮好的,主要讲解的是框架

目标检测算法:Cascade RCNN | 视频讲解_哔哩哔哩_bilibili

2.这个是对应上面视频博主自己写的笔记:

目标检测算法:Cascade RCNN | 视频讲解 - 知乎

3.这个是视频博主认为写的比较好的一个cascade rcnn 讲解:

Cascade R-CNN 详细解读 - 知乎

4.保姆级 faster rcnn 源码逐行解读 (五)roi_head part1 - 知乎

5.捋一捋pytorch官方FasterRCNN代码 - 知乎

  • 13
    点赞
  • 79
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值