目标检测 | 经典算法 Cascade R-CNN: Delving into High Quality Object Detection
作者从detector的overfitting at training/quality mismatch at inference问题入手,提出了基于multi-stage的Cascade R-CNN,该网络结构清晰,效果显著,并且能简单移植到其它detector中,带来2-4%的性能提升
论文: Cascade R-CNN: Delving into High Quality Object Detection
Introduction
目前的目标检测算法大都使用$u=0.5$的IoU阈值来定义正负样本,这是相当宽松的阈值,导致detector产生许多干扰的bndbox。如图(a),许多人们认为大概率是负样本的框其实IoU都大于0.5。因此,论文希望研究出学习能尽量少包含接近负样本的bndbox的detector,如图(b)
论文对不同IoU阈值的regressor和detector进行了实验。从图c可以看出,不同IoU阈值的detector对不同水平的bndbox的优化程度不同,bndbox IoU与detecor的训练阈值越接近,box regress提升越高。而在图d中,detector(u=0.5)在低IoU水平下比detector(u=0.6)表现优异,而在高IoU水平下则反之,而当u=0.7时,由于训练正样本的不足以及推理时输入的样本IoU较低,detector(u=0.7)的整体表现都降低了
综上可以得出以下结论:
- 训练后的detector几乎总能提升Input bndbox的质量
- 单IoU detector对接近其训练IoU阈值的bndbox是最优的
- 单纯地增加训练时的IoU的阈值并不能直接提高detector的质量
因此,论文提出了Cascade R-CNN来解决上面的问题。Cascade R-CNN是一个顺序的多阶段extension,利用前一个阶段的输出进行下一阶段的训练,阶段越往后使用更高的IoU阈值,产生更高质量的bndbox。Cascade R-CNN简单而有效,能直接添加到其它R-CNN型detector中,带来巨大的性能提升(2-4%)
Object Detection
Faster R-CNN
目前经典的two-stage架构如图3(a)。第一阶段是一个提框的子网H0,用于生成初步的bndbox。第二阶段为特定区域处理的检测子网H1,给定bndbox最终的分类分数C和bndbox坐标B
Iterative BBox at inference
有的研究者认为单次的box regress是不足以产生准确的位置信息的,因此需要进行多次迭代来精调bndbox,这就是iterative bounding box regression:
实现如图3(b)所示,所有的head都是一样的,但是这个方法忽略了两个问题:
- 如图1所示,detector(u=0.5)对于所有的高质量的bndbox是次优解,甚至降低了IoU大于0.85的bndbox的准确度
- 图2为bndbox的$(x, y, w, h)$与GT间的差值分布,从图中可以看出,不同阶段的bndbox分布是显著不同的。若regressor对于初始化的分布是最优的,那对于在后面的阶段肯定是次优的
因此,iterative BBox需要大量的手工操作,如box voting,而其结果不是稳定提升的。通常来说,对bndbox进行多于两次相同的regressor是几乎没有收益的
Integral Loss
由于bndbox经常包含目标和一定的背景,因此很难去判定当前bndbox是否正样本
常用的方法是判断其与GT的IoU,当IoU大于阈值时,则赋予其对应GT的label。但是阈值的设定是十分苦难的,当阈值过高时,正样本包含很少的背景,但是会导致难以生成足够多的正样本进行训练,反之,则会导致detecor容易产生close false positives。因此,很难找到一个单独的classifier能一致地对所有IoU的bndbox是最优的
一种尝试的方法是使用一个分类器集合,如图3(c)所示,优化针对各种质量的bndbox的loss。$U={0.5, 0.55, ..., 0.75}$是根据COCO设定IoU阈值合集,按照定义,分类器在推理时再进行组装
这种解决方法存在两个问题:
- 不同的classifer的正样本数量是不一样的,如图4所示,正样本的数量随着u的提高显著下降,这意味着高质量的classifiers容易过拟合
- 在推理时,高质量的classifers需要处理相对低质量的bndbox,而他们对这些bndbox并没有优化
因此,Integral loss在很多IoU水平难以表现出高的准确率。相对于原始的two-stage架构,Integral loss的架构收益相对较小
Cascade R-CNN
Cascaded Bounding Box Regression
由于很难训练一个能应付所有IoU水平的regressor,可以把回归任务分解成一个级联的regression问题,架构如图3(d)所示
T是级联阶段数,每个regressor$f_t$对于当前的级联输入都是最优的,随着阶段的深入,bndbox在不断的提升。
cascade regression与iterative BBox有以下区别:
- iteravtive BBox是后处理的方法,而cascaded regression是能够改变bndbox分布的重采样过程
- cascaded regression在训练和推理时是一致的,不存在区别
- cascaded regression的多个regressor对于对应阶段的输入分布是最优的,而iterative BBox仅对初始分布是最优的
Bndbox在回归时,为了对scale和location有不变性,将对坐标的学习转移到对坐标差值的学习。由于坐标插值通常较小,因此将其进行归一化$\delta'=(\delta_x-\mu_x)/\sigma$,以权衡定位与分类的loss。Cascade R-CNN在每一个stage结束后,都会马上进行计算这些均值/方差
Cascaded Detection
产生Cascade R-CNN的启发点主要有两个:
- 如图4的1st stage图所示,初始的bndbox分布大多落在低质量的区域,这对于高质量classifiers来说是无效的学习。
- 在图1(c)实验中可以看到,所有的曲线都高于对角线,即regressor都倾向于能够提升bndbox的IoU。
因此,以集合$(x_i, b_i)$作为开始,通过级联regress来产生高IoU的集合$(x'_i, b'_i)$。如图4所示,这种方法能在提升样本整体IoU水平的同时,使得样本的总数大致维持在一个水平,这会带来两个好处:
- 不会存在某个阈值的regressor过拟合
- 高阶段的detector对于高IoU阈值是最优的
从图2可以看出,随着阶段的深入,一些离群点会被过滤,这保证了特定阈值的detector的训练
在每一个阶段t,都独立一个对阈值$u_t(u_t > u_{t-1})$最优的classifier $h_t$和regressor$f_t$,$bt=f_{t-1}(x{t-1}, b{t-1})$是上一阶段的输出,$\lambda=1$是权重因子,$[yt\ge1]$是指示函数,表示背景的$L_{loc}$不加入计算。与integral loss不同,公式8保证了顺序地训练detectors来逐步提高bndbox质量。在推理时,bndbox的质量是顺序提高的,高质量的detectors只需要面对高质量的bndbox。
Experiment
Implementation Details
部分实验设置如下:
- 所有regressor都带分类,每一个cascade stage为相同的架构
- 共4个stage,一个为RPN,其余为$U={0.5, 0.6, 0.7}$的检测器。第一阶段检测器为正常的RPN,其余阶段使用上一阶段的输出作为输入
- 使用垂直翻转的数据增强手段以及单一图片输入尺寸
Quality Mismatch
图5展示了3个独立训练的detector的AP曲线,detector的IoU阈值分别为$U={0.5, 0.6, 0.7}$,detector(u=0.5)在低IoU水平表现最好,detector(u=0.6)在高IoU水平表现最好,而detector(u=0.7)则整体表现较差。为了进一步解释图(a)的结果,论文添加GT到proposal集合得到了图(b)的结果,所有的detector的AP都提升,而detector(u=0.7)提升最大,且几乎全局最优。因此,可以得出以下两个结论:
- $u=0.5$不是一个好的选择,仅限于低质量bndbox
- 高质量的detector高质量的bndbox输入
此外,图5(a)对比了以Cascade R-CNN的stage输出作为输入时detector的表现。当提升了输入的bndbox质量后,detector得到了明显的提升
图6对比了各cascade detector在各stage上的表现。提高输入的质量后,各detector都得到了收益,如detector(u=0.7)从原来的AP=0.256提升为AP=0.383。此外,将图6和图5(a)对比可以得出,cascade联合训练的detector比单独训练的detector精度要高
Comparison with Iterative BBox and Integral Loss
论文对比Cascade R-CNN与iterative BBox和integral loss detector,Iterative BBox连续使用3次FPN+进行实现,而integral loss detector则使用$U={0.5, 0.6, 0.7}$的classification head
Localization: 如图7(a),单检测器的降低了高IoU输入的精度,当regressor对bndbox回归次数增加时,下降越明显。相反,cascade regressor则表现越来越好,几乎全面领先iterative BBox
Integral Loss: 图7(b)展示了integral loss各classifier以及集成后的准确率(使用同一个regressor),classifier(u=0.6)表现最好,而集成的classifier则没有任何收益
Table1展示了三种优化方法与Baseline的准确率具体数值,在低IoU水平时,Cascade R-CNN的收益较少,而在高水平时收益十分显著
Ablation Experiments
Stage-wise Comparison: Table2 总结了stage性能表现。由于multi-stage multi-task训练,1st stage性能已经有很好地提升,2rd stage和3rd stage则都维持在一个相对高的水平,集成的classifier性能最好
IoU Thresholds: Cascade R-CNN的所有head均使用u=0.5阈值进行初始化,在后面的训练中才使用对应的bndbox进行训练。从Table3的第一行看出,cascade能够提升baseline的性能,这表明使用不同的stage优化不同的输入分布的重要性。第二行表明,随着IoU阈值的提升,detector能产生更多高质量的bndbox,减少close false positive的产生
Regression Statistics: 渐进式地更新bndbox坐标差值的统计信息,从Table3可以看出,网络的训练对这些信息的统计不是十分敏感
Number of Stages: Table4总结了stage数量对性能的影响。two-stage能显著地提升baseline的效果,而加入4th stage(u=0.75)后虽然高IoU水平的性能提升了,但却令整体性能有所下降。因此,three-stage是最好的折中方案
Comparison with the state-of-the-art
Table5对比了Cascade R-CNN与主流的one-stage detector和two-stage detector的性能,从表格可以看出,Cascade R-CNN的性能提升是十分明显的,各方面都优秀
Generalization Capacity
Detection Performance: 在所有的baseline detector上,使用Cascade R-CNN均有2~4%的提升,这表明Cascade R-CNN能广泛适用于多种检测器架构中
Parameter and Timing: Cascade R-CNN的参数量增加跟stage数量有关,与baseline的detector head呈线性关系。此外,由于detector head的计算耗时相对于RPN是非常小的,Cascade R-CNN的额外计算开销比较小
Conclusion
论文提出一个高质量的多阶段目标检测架构Cascade R-CNN,这个架构解决了训练时的过拟合问题以及推理时的IoU mismatch问题。Cascade R-CNN适用于各种detector baseline,带来可观的性能提升
写作不易,未经允许不得转载~
更多内容请关注个人微信公众号【晓飞的算法工程笔记】
目标检测 | 经典算法 Cascade R-CNN: Delving into High Quality Object Detection的更多相关文章
- 三维目标检测论文阅读:Deep Continuous Fusion for Multi-Sensor 3D Object Detection
题目:Deep Continuous Fusion for Multi-Sensor 3D Object Detection 来自:Uber: Ming Liang Note: 没有代码,主要看思想吧 ...
- CVPR2020论文介绍: 3D 目标检测高效算法
CVPR2020论文介绍: 3D 目标检测高效算法 CVPR 2020: Structure Aware Single-Stage 3D Object Detection from Point Clo ...
- AI佳作解读系列(二)——目标检测AI算法集杂谈:R-CNN,faster R-CNN,yolo,SSD,yoloV2,yoloV3
1 引言 深度学习目前已经应用到了各个领域,应用场景大体分为三类:物体识别,目标检测,自然语言处理.本文着重与分析目标检测领域的深度学习方法,对其中的经典模型框架进行深入分析. 目标检测可以理解为是物 ...
- CNN目标检测系列算法发展脉络——学习笔记(一):AlexNet
在咨询了老师的建议后,最近开始着手深入的学习一下目标检测算法,结合这两天所查到的资料和个人的理解,准备大致将CNN目标检测的发展脉络理一理(暂时只讲CNN系列部分,YOLO和SSD,后面会抽空整理). ...
- 大话目标检测经典模型(RCNN、Fast RCNN、Faster RCNN)
目标检测是深度学习的一个重要应用,就是在图片中要将里面的物体识别出来,并标出物体的位置,一般需要经过两个步骤:1.分类,识别物体是什么 2.定位,找出物体在哪里 除了对单个物体进行检测,还要能支持 ...
- 标题 发布状态 评论数 阅读数 操作 操作 CNN目标检测系列算法发展脉络简析——学习笔记(三):Fast R-CNN
最近两周忙着上网课.投简历,博客没什么时间写,姑且把之前做的笔记放上来把... 下面是我之前看论文时记的笔记,之间copy上来了,内容是Fast R-CNN的,以后如果抽不出时间写博客,就放笔记上来( ...
- 目标检测-SSD算法从零实现
1. 几个工具函数 def box_corner_to_center(boxes): """从(左上,右下)转换到(中间,宽度,高度)""" ...
- 目标检测YOLO算法-学习笔记
算法发展及对比: 17年底,mask-R CNN YOLO YOLO最大的优势就是快 原论文中流程,可以检测出20类物体. 红色网格-张量,在这样一个1×30的张量中保存的数据 横纵坐标中心点缩放到0 ...
- 【目标检测】Cascade R-CNN 论文解析
目录 0. 论文链接 1. 概述 2. 网络结构的合理性 3. 网络结构 4. 参考链接 @ 0. 论文链接 Cascade R-CNN 1. 概述 这是CVPR 2018的一篇文章,这篇文章也为 ...
随机推荐
- linux公社大量免费的在线android资料
2011年linux数据库的android在线分享 linux公社:开源公社 本文撰写:杨凯专属频道 下载如需密码,详见博客案例:点击我去查看密码 2011年9月12日 21: ...
- Android空包签名
空包签名 搜狗.优亿等Android市场,上传应用需要提供一个与要上传的应用相同签名的空包.这个空包是相应官方市场提供的,下载好之后需要使用命令行进行签名.具命令如下: 1 jarsigner -ve ...
- runR
Linux下使用R 运行linux下的R脚本 编写R文件 新建后缀名为R的文件 写入R程序 在脚本首行加入 1 运行R文件 这里有两种方式 大专栏 runR进入R的环境">进入R的环 ...
- 脸书VS微软,为何“老年创业者”更担忧AI失控?
作为互联网行业最知名的大会之一,近日举行的微软Build 2017大会,却增加了与以往不同的"调味品".除了新技术.智能硬件.系统.平台之外,微软CEO纳德拉在大会上对科技带给人类 ...
- 《Effective Java》笔记45-56:通用程序设计
将局部变量的作用域最小化,可以增强代码的可读性和可维护性,并降低出错的可能性. 要使用局部变量的作用域最小化,最有力的方法就是在第一次使用它的地方才声明,不要过早的声明. 局部变量的作用域从它被声明的 ...
- 带你学习ES5中新增的方法
1. ES5中新增了一些方法,可以很方便的操作数组或者字符串,这些方法主要包括以下几个方面 数组方法 字符串方法 对象方法 2. 数组方法 迭代遍历方法:forEach().map().filter( ...
- 解决getImageData跨域问题
在项目开发过程中要用到html5增加的getImageData方法来实现刮刮卡的效果,后台上传图片,手机端用手刮.在本地开发没遇到问题,上线之后发现刮不了,提示"Uncaught Secur ...
- Harbor镜像漏洞扫描
Harbor镜像漏洞扫描 闲聊:我们知道 镜像安全也是容器化建设中一个很重要的环节,像一些商业软件如:Aqua就很专业但是收费也是很昂贵的,今天我们介绍下Harbor自带的镜像扫描器. 一.安装最新版 ...
- MySQL占用CPU超过百分之100解决过程
本文转载自: https://www.93bok.com 访问网页504 Gateway Time-out,登陆服务器查看,内存正常,CPU使用率达到了400%,因为是4核,所以到了400%,几乎全部 ...
- 7-40 jmu-python-统计成绩 (15 分)
输入一批学生成绩,计算平均成绩,并统计不及格学生人数. 输入格式: 每行输入一个数据,输入数据为负数结束输入 输出格式: 平均分=XX,不及格人数=XX,其中XX表示对应数据.如果没有学生数据,输出没 ...