轻松掌握 MMDetection 中常用算法(五):Cascade R-CNN - 知乎文@ 0000070 摘要本篇主要介绍目前主流常用的高性能目标检测算法中最广为人知的算法之一 Cascade R-CNN。Cascade R-CNN 来自论文 Cascade R-CNN: High Quality Object Detection and Instance Segmentation,主要 …https://zhuanlan.zhihu.com/p/360952172Cascade RCNN算法笔记_AI之路-CSDN博客_cascade rcnn论文:Cascade R-CNN Delving into High Quality Object Detection 论文链接:https://arxiv.org/abs/1712.00726 代码链接:https://github.com/zhaoweicai/cascade-rcnnCascade R-CNN算法是CVPR2018的文章,通过级联几个检测网络达到不断优化预测结果的目的...https://blog.csdn.net/u014380165/article/details/80602027
详解阿里99大促活动页内容识别技术实现_闲鱼技术的博客-CSDN博客引言99大促有淘宝、天猫、聚划算等全员参与,上千个页面形式的展现。其中,测试是保障活动页面的正常发布的一个必不可少的关键环节。传统的测试方法,需要测试人员去分析这个页面是...https://blog.csdn.net/weixin_38912070/article/details/100789739?spm=1001.2014.3001.5501UI2CODE系列文章|如何提高“小目标”检测准确率_闲鱼技术的博客-CSDN博客背景 在计算机视觉领域,存在一个“小目标”检测任务,比如自动驾驶中的交通灯,或者医学图像中的早期肿块。“小目标”的正确检出能极大地提高用户体验,促进自动化行业的发展。UI2CODE是闲...https://blog.csdn.net/weixin_38912070/article/details/103502222 cascade rcnn在多个创意图检测上都是首选方案(前端图直接生成代码,imagecook以及阿里巴巴闲鱼的app页面检测等)。cascade rcnn是在正负样本采样下功夫的,事实上,这是目标检测的核心问题之一。faster rcnn中rcnn部分iou阈值的选取对最终检测bbox质量有重大影响,因此cascade rcnn提出一种级联rcnn结构,不同级采用不同的iou阈值来重新计算正负样本和采样策略逐步提高bbox质量。这里非常推荐大家看mmdet的cascade rcnn解释,写的非常好。
1. Introduction
检测器必须找到true positive的同时抑制非常接近的false positives,在二阶段中false positive是个要解决的问题,因为RPN已经做了部分负样本的筛选和采样,如果在一阶段中negitives样本的处理可能更麻烦一些。
上图中(a)中u=0.5是常用的正负样本界定的阈值,但是当阈值取0.5时会有较多的误检,因为0.5的阈值会使得正样本中有较多的背景,这是较多误检的原因;(b)用0.7的IOU阈值可以减少误检,但检测效果不一定最好,主要原因在于IOU阈值越高,正样本的数量就越少,因此过拟合的风险就越大。直观上训练时IOU越大,检测的box越少,但是普遍质量较高,不过容易过拟合,IOU较小,在训练时可能会引入噪声,不利于训练。上图(c)是衡量模型的定位性能的,横坐标是input Iou表示RPN输出的proposal与gt的Iou,纵坐标Output Iou是经过RCNN的box分支回归输出后与gt bbox的Iou,不同颜色的线表示不同的IOU阈值,每个bounding box regressor在接近检测器训练IOU阈值时表现的最好,以u=0.5为例,当对RPN输出的proposal使用0.5来切分正负样本时,在mmdet中示例如下。对于bbox质量较差的(input iou在0.5到0.55之间)经过rcnn回归后效果提升明显,output iou可以达到0.75(和正样本分布有关系,在该区间内正样本较多),可见上图中的蓝线,随着proposal质量的增加,rcnn回归的bbox质量也在增加,但是input iou越大的proposal,回归后提升越来越不明显,虽然精度没有怎么下降,如右图中的u=0.5,ap为0.349,看u=0.7,对于低质量的proposal,其提升较少,这主要是低质量的proposal被过滤掉,没有得到训练,对于高质量的bbox,提升很大。可以发现,Input IoU 在 0.55~0.6 范围内 proposal 阈值设置为 0.5 时 detector 性能最好,在 0.6~0.75 阈值为 0.6 的 detector 性能最佳,而到了 0.75 之后就是阈值为 0.7 的 detector 性能最好了。(如图上的三条线,先是蓝线高,再是绿线高,最后红线高)。In general, a detector optimized at a single IoU level is not necessarily optimal at other levels. These observations suggest that higher quality detection requires a closer quality match between the detector and the hypotheses that it processes. In general, a detector can only have high quality if presented with high quality proposals.一个检测器在单个IOU阈值下优化好并不意味着在其他级别里效果也好,这些观察表明,更高质量的检测要求检测器与其处理的假设之间更紧密的匹配,一般来说,一个检测器只有在提供高质量的proposal下才能有好的效果。只有输入 proposal 自身的 IoU 分布和 detector 训练用的阈值 IoU 较为接近的时候,detector 性能才最好,或者说阈值 IoU 设置应该和 R-CNN 训练的输入样本 IoU 分布接近的时候,性能最好。
assigner=dict(
type='MaxIoUAssigner',
pos_iou_thr=0.5,
neg_iou_thr=0.5,
min_pos_iou=0.5,
match_low_quality=False,
ignore_iof_thr=-1),
sampler=dict(
type='RandomSampler',
num=512,
pos_fraction=0.25,
neg_pos_ub=-1,
add_gt_as_proposals=True),
上图(d)中,只增加了u=0.7效果是不佳的,通常强制使用较大的IOU阈值会导致整训练样本指数级下降,这使得高阈值的训练策略很容易过拟合。另外就是推理时的阈值和训练时的阈值不一致,会导致mismatch,如果在不一致的阈值下检测,那结果可能是次优的。
在本文中作者提出了级联rcnn,cascade rcnn阶段依次训练,上一个阶段的输出训练下一个阶段,因此从图上图(c)中可以看到output iou都是要优于input iou的,都在灰线的上面,灰线是输入等于输出的。这也表明使用某个IOU阈值的output iou是不错的分布,可以训练下一个更高IOU阈值的检测器。by adjusting bounding boxes, each stage aims to find a good set of close false positives for training the next stage.通过对bounding box的调整,其目的是在下一个训练找到一组良好的接近的false positives,因为这是二阶段的算法,false positive是影响检测器效果的重要因素,如图a,b所示,就是一些离前景很近的背景(具备一定IOU的背景)产生了误检。
2.object detection
H0表示RPN的输出,H1是rcnn的检测,C是分类分数,B是bounding box。
2.1 Bounding box regression
g是target bounding box,b是candidate bounding box,是来自于图像patch x的。L是对delta计算距离向量的。
对b进行的小调整,对上式的影响非常小,R的公式要比分类的变化小很多,因此提高多任务的有效性,对delta通过均值方差做归一化。其实这一块得注意一些的,均值和方差是人工指定的,在mmdet中,target_means为0,target_stds的值在三个阶段是越来越小的,这个标准差分别是在对box 编码时候放在x,y,w,h的分母上的,值越小,意味着对应的编码偏差项的放大效应越强,rpn编码阶段标准差为1,没有放大偏差;不同stage的rcnn的编码阶段,这个偏差值是越来越小的,意味着对应项的偏差放大效应越来越强。可以理解为rcnn的靠后的stage对于box预测的是比前面stage的准确,这时候后面stage和前面stage发生同样的预测偏差时,需要加大对后续stage预测时发生偏差的惩罚。这块是算是一个和faster rcnn不太一样的点了。
2.2 classification
L是cross-entropy loss.
2.3 detection quality
当u值较高时,positives样本包含背景较少,但很难收集到足够的positive训练样本,当u较低时,可以使用更丰富和多样化的positive样本来训练。但是分类器对很接近的false positive很难判定。
3.cascade rcnn
3.1 cascaded bounding box regression
这其中(d)是作者提的cascade rcnn,H1,H2,H3是不同IOU阈值的rcnn,每一部分使用的输入都是上一阶段产生的proposal。1.级联回归是一种resampling的过程,可改变不同阶段处理的假设分布,2.它同时用于推理和训练,因此推理和训练之间是不存在IOU阈值差异的,保证了不会存在mismatch问题,3.多个回归对不同阶段的resampled分布做了优化。
3.2 cascaded detection
第一行横纵轴分别是回归目标中 bbox 的 x 方向和 y 方向偏移量;第二行横纵轴分别是回归目标中 bbox 的宽、高偏差量。可以看到,从 1st stage 到 2nd stage,proposal 的分布其实已经发生很大变化了,因为很多噪声样本经过 bbox 回归后实际上也提高了 IoU,2nd 和 3rd 中的那些红色点已经属于 outliers,如果不提高阈值来去掉它们,就会引入大量噪声干扰,对结果很不利。从这里也可以看出,阈值重新选取本质上是一个 resample 过程,它保证了样本质量。
但是不断提高Iou阈值,会不会导致后续正样本越来越少,而造成过拟合?
可以看出,样本不仅没有减少,而且稍稍有增加。说明本文方法不会减少正样本数量,是有效的。并且可以发现各个阶段那个 IoU 的 bbox 分布最多。
通过上面的分析,作者指出级联多个 R-CNN 模块,并且不断提高 IoU 阈值,在每个阶段不断进行正负样本重采样策略,不仅不会出现过拟合,而且可以实现极大的性能提升。在代码层面实现是在 Faster R-CNN 后面再级联 n 个 R-CNN,每个 R-CNN 的输入都是前一个 R-CNN 的检测输出。
在mmdet中,在coco上,R-50-FPN,pytorch版本的,box AP为40.3.
在papaerwithcode上的指标为,coco上minival(5k)上,cascade rcnn(resnet50-FPN):box AP为40.3,AP50:59.4,AP75:43.7,APS:22.9,APM:43.7,APL:54.1
在coco test-dev(20k)上,cascade rcnn(resnet101-FPN)box AP为38.8,AP50:61.1,AP75:41.9,APS:21.3,APM:41.8,APL:49.8.cascade rcnn(resnet50-FPN):box AP为36.4,AP50:57.5,AP75:39.5,APS:16.6,APM:39.9,APL:51.4