CVPR 2018 论文 论文链接 https://arxiv.org/abs/1712.00726 代码链接 https://github.com/zhaoweicai/cascade-rcnn
作者对two-stage的检测器进行改进,提出了一个multi-stage目标检测网络----Cascade R-CNN。使用多个级联的检测器,用逐步递增的IoU阈值分别训练每个检测器, 每个检测器回归的bbox偏移作为下一个检测器的输入,从而提高每个检测器的精度。
Two-stage检测器由两部分任务组成: (1)使用RPN或其他算法生成region proposals; (2)对每个proposal分类并回归bbox。 在训练时,需要根据IoU阈值,确定(1)中的正负样本。通常将阈值u设置为0.5,但是较低的阈值可能导致(1)输出的proposals 质量过低,进而影响(2)的训练。如Figure 1 (a)所示,u=0.5时输出了许多误检。作者希望可以学习到一个在高阈值u下的高质量检测器,如Figure 1 (b)所示。
作者通过设置不同的阈值u,探究阈值对定位和分类的影响,结果如Figure 1 (c), (d)所示。
在(c)中,横轴表示输入到(2)中的proposals与ground truth的 IoU,纵轴表示(2)中预测出的bbox与gt的IoU。
可以看出,很难用一个固定的阈值u来训练网络。使用u=0.5训练的网络,在输入低IoU时,回归的效果最好,但是输入的IoU较大时, 效果会很差。如果仅增加阈值u,通过(d)可以看出,网络的精度反而会下降。
通过(c),可以发现,输入到(2)中proposals的IoU与网络训练时使用的阈值u比较接近时,回归器的表现更好。因此作者提出了一个很巧妙的想法:训练多个阈值递增的检测器,每个检测器使用上一级输出的bbox回归结果,如Figure 3 (d)所示。这样每一级检测器都有足够多的高质量(高IoU)样本进行训练,并且回归的bbox也会越来越准确。
作者列举了一些相似的工作,如Figure 3所示。
其中H0为检测的第一阶段,图中所有的B0均是第一阶段输出的proposals;H1,H2等为检测器,负责对输入的proposals进行分类和bbox回归。
作者的工作基于(a) Faster R-CNN,对其检测部分进行改进,第一阶段使用RPN预测proposals。
回顾一下bbox回归的过程。边框坐标 b=(bx,by,bw,bh ),表示图像 x 的中心坐标和宽高,另候选区域坐标为 b,真实坐标为 g,那么 bbox 回归可以用公式表示为 gi=f(x,bi),损失函数表示为 Lloc (f(x,bi ),gi)。为了保证回归尺度和位置的不变性,通常对偏移量 Δ=(δx,δy,δw,δh ) 进行回归,具体定义
对bbox回归改进的一种做法如 Figure 3 (b) 所示,在预测阶段,迭代的使用 f 对bbox进行多次回归来改善回归结果
这种做法称为iterative bounding box回归。注意到,多次迭代是在预测阶段进行的,因此(b)中的检测器H1都是一样的,由一个固定的阈值u训练得出。
这样做存在两个问题: (1)从Figure 1 (c)中可以看出,使用u=0.5训练的检测器H1,对于下次输入的高质量IoU,再次回归结果通常并不是最优的,当输入的proposals的IoU>0.85时,回归结果反而会下降; (2)作者实验发现,每次迭代后输出的bbox分布都会有很大的变化,如Figure 2所示,检测器对第一阶段后的数据分布预测效果不是最好的。
在分类阶段,分类器是关于输入图像区域 x 的函数,记为 h(x);输出是 M+1个类别,0 表示背景,给定义训练数据 (xi,yi),分类的损失函数定义为
Lcls (h(xi),yi),其中 yi 为区域 xi 的真实标签。由于bbox通常包含物体和背景两部分,因此使用IoU阈值u来确定x的真实标签
其中 gy 为目标 g 的真实类别标签。由于阈值u较小时,正样本有很多噪声,影响检测器精度;u较大时,正样本IoU很大,样本数量却变少,导致检测器训练时容易过拟合。
因此一个简单的想法是集成多个使用不同阈值u训练的分类器,如Figure 3 (c)所示,则优化的损失函数为
其中U={0.5,0.55,…,0.75},这种损失函数称为integral loss。
作者通过实验发现,这种做法效果也不好,如Figure 4所示,在一阶段,不同IoU阈值u对应的正样本数量差别很大,导致使用高阈值u训练的分类器容易过拟合。
基于上述实验,作者提出了如Figure 3 (d)所示的Cascade R-CNN,其bbox回归过程可以表示为
其中T是级联的检测器数量,检测器 ft 训练时的阈值u逐步提高。
作者的灵感来自于Figure 1 (c),比如一阶段输入proposal的IoU为0.55,那么通过u=0.5的回归器得到IoU为0.75的输出,再迭代的输入到后面的回归器,得到IoU为0.85,0.9的输出,回归的bbox质量逐步提高。同时,随着阈值u的提高,会过滤掉Figure 2中部分离群点;并且通过Figure 4可以看出,每个阶段输入对应阈值的proposals数量不会大量减少。 网络在第 t 个阶段的损失函数为
其中,h 为分类器,f 为回归器,对应的阈值为 u^t 并且 u^t>u^(t−1),b^t=ft−1 (x^(t−1),b^(t−1))。
阈值对检测器的影响
图(a)中实线表示不同阈值的单检测器精度。图(b)为输入proposals中加入真实bbox的结果。图(a)中虚线为分别用二,三阶段级联检测器预测的bbox代替原始的proposals的结果。
测试Cascade R-CNN中每个阶段每个检测器的精度。
与Iterative BBox和Integral Loss比较
通过下图(a)可以看出,iterative bbox三次迭代后回归质量很差。通过(b)可以看出即使使用集成,integral loss也没有太多精度上的提升。
各方法检测精度对比,Cascade R-CNN 在高阈值的评估规则下效果很好。
对比实验
测试各阶段检测器精度
测试使用不同IoU,是否对Δ进行归一化对结果的影响
级联检测器个数和预测时使用的检测器个数对结果的影响
与其他检测方法比较
与其他单阶段,多阶段检测器比较
泛化能力
在不同后端,不同检测算法上使用级联检测器
使用PASCAL VOC数据集测试
进一步说明作者提出方法的鲁棒性