摘要
提出了一种用于快速多尺度目标检测的统一深度神经网络,即多尺度CNN (MS-CNN)。MS-CNN由建议子网络和检测子网络组成。在建议子网中,在多个输出层进行检测,使感受野匹配不同尺度的对象。这些互补的尺度特异性探测器被结合起来产生一个强大的多尺度目标探测器。通过优化多任务损失,实现了统一网络的端到端学习。此外,还探讨了反卷积特征上采样作为输入上采样的一种替代方法,以减少内存和计算成本。最先进的目标检测性能,高达15帧每秒,是报告的数据集,如KITTI和Caltech,包含大量的小目标。
1、简介
经典的目标检测器,基于滑动窗口范式,在多个尺度和宽高比下搜索对象。虽然实时检测器可用于特定类别的目标,例如人脸或行人,但事实证明,在此范式下构建多个目标类的检测器非常困难。最近,人们对深卷积神经网络(CNNs)的检测器产生了兴趣。虽然这些技术显示出解决多类问题的能力大得多,但是在多尺度上探测物体方面的进展却很少。R-CNN使用一个初步的注意阶段,在多个尺度上采样目标建议,然后将这些区域建议缩放到CNN支持的大小(例如224×224)。然而,从计算的角度来看,这是非常低效的。发展一种有效的、计算效率高的区域建议机制仍然是一个有待解决的问题。Faster R-CNN使用区域建议网络(RPN)解决了这个问题,它支持端到端训练。然而,RPN通过在一组固定的卷积特征图上滑动一组固定的滤波器,生成多个尺度的建议。这就造成了目标大小(可变)和筛选接受域(固定)之间的不一致。如图1所示,固定的感受野不能覆盖自然场景中物体出现的多个尺度。这降低了检测性能,这对于小目标来说尤其糟糕,如图1中心所示。事实上,通过在训练和测试时向上采样输入图像来处理这些对象。这增加了检测器的内存和计算成本。
本文提出了一种统一的多尺度深度CNN,即多尺度CNN (MS-CNN),用于快速检测目标。与Faster R-CNN相似,该网络由目标建议网络和精确检测网络两个子网络组成。它们都是端到端学习并共享计算的。然而,缓解大小的目标和接受之间的不一致字段,执行目标检测与多个输出层,每个关注目标在一定尺度范围内(见图3)。较低的网络层的直觉是,如“conv-3,”小感受野,更好的匹配来检测小物体。相反,更高的层,如“conv5”,最适合探测大型目标。将不同输出层的互补检测器组合成一个强多尺度检测器。这表明,在检测基准上,如KITTI等尺度变化较大的检测基准上,能够产生准确的目标建议,仅100个建议的召回率就超过95%。这项工作的第二个贡献是使用特性上采样作为输入上采样的替代。这是通过引入一个反卷积层来实现的,它可以提高特征图的分辨率(见图4),使小目标产生更大的强响应区域。这可以减少内存和计算成本。虽然反褶积已经被探索用于分割和边缘检测,但据我们所知,它是第一次被用来加速和改进检测。当结合高效的上下文编码和严格的反编码,它的结果是一个探测器,先进的最先进的检测KITTI和Caltech基准。在没有图像上采样的情况下,MS-CNN在KITTI(1250×375)和Caltech(640×480)图像上的速度分别达到了10 fps和15 fps。
3、多尺度目标建议网络
在本节中,我们将介绍用于生成对象建议的网络。
3.1、多尺度检测
多目标尺度的覆盖是目标检测的关键问题。由于检测器基本上是一个学习模板与图像区域之间的点积,因此模板必须与识别目标的空间支持匹配。实现这一目标主要有两种策略。首先,学习单个分类器,对图像进行多次缩放,使分类器能够匹配所有可能的对象大小。如图2 (a)所示,该策略需要在多个图像尺度下进行特征计算。虽然它通常产生最准确的检测,但往往是非常昂贵的。另一种方法是对单个输入图像应用多个分类器。如图2 (b)所示,该策略避免了特征图的重复计算,且具有较高的效率。但是,对于每个目标尺度,它都需要一个单独的分类器,并且通常不能生成好的检测器。为了在准确性和复杂性之间取得良好的平衡,提出了几种方法。例如,图2 (c)的策略是将输入重新缩放几次,并学习少量的模型模板。另一种可能性是Fast feature pyramids的特征近似。如图2 (d)所示,这包括对输入进行少量的重新标度,并插入主题特征映射。但是为了实现相当的加速效果,需要牺牲相当的精度。
由于CNN特征的复杂性,在基于CNN的检测器上实现多尺度策略与上述方法略有不同。如图2 (e)所示,R-CNN只是将目标建议patch扭曲到CNN需要的尺度。这有点类似于图2 (a),但是特征是针对提取的区域建议计算的,而不是针对整个图像。RPN的多尺度机制如图2 (f)所示,与图2 (b)相似,但是所有的feature map都应用了多组大小相同的模板。这可能导致模板匹配的严重规模不一致。如图1所示,由CNN接收域(228×228)决定的特征图的单比例尺,可能与小的(如32×32)或大的(如640×640)目标严重不匹配。这降低了目标检测性能。
灵感来自于先前关于图2 (c)的方法优于图2 (b)证据,我们提出一种新的多尺度策略,图2所示(g),这可以被视为深CNN图2 (c)的扩展,但只使用单个输入的规模。它与图2 (e)和(f)的不同之处在于,它利用几个分辨率的特征图来检测不同尺度的目标。这是通过在中间网络层应用一组模板来实现的。这导致了一组可变的接受域大小,它可以覆盖很大范围的目标大小。
3.2 结构
MS-CNN提案网络的详细架构如图3所示。该网络通过几个检测分支检测目标。所有检测分支的结果都被简单地声明为最终的区域检测。网络有一个标准的CNN主干,如图中心所示,以及一组输出分支,这些分支来自主干的不同层。这些分支由一个检测层组成。注意,在“conv4-3”层之后发出的分支上引入了缓冲区卷积层。由于这个分支靠近主干网络的低层,因此它比其他检测分支更能影响它们的梯度。这可能会导致学习过程中的一些不稳定。缓冲区卷积防止检测分支的梯度直接反向传播到主干层。
在训练期间,多尺度建议网络的参数W是从一系列的训练样本S中学到的,S=left(X_{i}, Y_{i}right) ,X_i 是训练的图像块,Y_{i}=left(y_{i}, b_{i}right) 是类标签y_{i} in{1,2,3, ldots, K} 和包围框坐标b_{i}=left{b_{i}^{x}, b_{i}^{y}, b_{i}^{w}, b_{i}^{h}right} ,这通过一个多任务损失得到,L(W)=sum_{m=1}^{M} sum_{i in S^{m}} alpha_{m} l^{m}left(X_{i}, Y_{i} mid mright)
M是检测的分支数,alpha_{m} 是损失l_m 的权重,S=left{S^{1}, S^{2}, ldots, S^{M}right} ,其中S^m 包含样例的尺度m。注意S^m 仅仅是训练样本的子集,按尺度选择,会导致检测层丢失。受分类联合学习和边界盒回归成功的启发,每一检测层的损失都结合了这两个目标:
l(X, Y mid W)=L_{c l s}(P(X), y) lambda[y geq 1] L_{l o c}(b, hat{b})
其中P(X)=left(p_{0}(X), ldots, P_{K}(X)right) 是类上的概率分布,lambda 是平衡系数,L_{c l s}(p(X), y)=-log p_{y}(X) 是交叉熵损失,hat{b}=left(hat{b}_{x}, hat{b}_{y}, hat{b}_{w}, hat{b}_{h}right) 是bounding box回归
L_{l o c}(b, hat{b})=frac{1}{4} sum_{j in{x, y, w, h}} text { smooth }_{L_{1}}left(b_{j}, hat{b}_{j}right)
和Fast R-CNN的平滑bounding box损失的一样,边界盒损失仅用于正样本和最优参数W^{*}=operatorname{argmin}_{W} L(W) ,通过随机梯度下降来学习。
3.3、采样
本节描述每个检测层m的训练样本S^{m}=left{S_{ }^{m}, S_{-}^{m}right} 的装配。为了概念上的简单,下面省略上标m。锚以m层滑动窗口为中心,与滤波器大小对应的宽度和高度相关联。更多细节见表1。如果o^{*} geq 0.5 ,则锚定边界框b的样本X标记为正,其中
o^{*}=max _{i in g_{g t}} operatorname{IoU}left(b, b_{i}right)
(X,Y)加到正样本集S_ 上。所有在S_{ }=left{left(X_{i}, Y_{i}right) mid y_{i} geq 1right} 中的正样本对损失贡献。将o^{*} leq 0.2 的样本分配到初始负样本集中,剩余的样本丢弃。对于自然图像,物体和非物体的分布极不对称。用抽样来补偿这种不平衡。为了收集最后一组负样本,S_{-}=left{left(X_{i}, Y_{i}right) mid y_{i}=0right} ,也就是left|S_{-}right|=gammaleft|S_{ }right| 。我们考虑三种采样:random、bootstrapping和mixture。
随机抽样是根据均匀分布随机选取负样本。由于难负和易负的分布也极不对称,大多数收集的样本都是易负样本。众所周知,难负的挖掘有助于提高性能,因为难负对检测精度的影响最大。Bootstrapping可以解释这一点,它根据目标性得分对负样本进行排序,然后收集最常见的left|S_{-}right| 阴性。混合抽样结合了这两种方法,对left|S_{-}right| 的一半进行随机抽样,对S的另一半进行bootstrapping。在我们的实验中,混合采样的性能与bootstraping非常相似。
为了保证每个检测层只检测一定尺度范围内的目标,该层的训练集由覆盖相应尺度范围的S子集组成。例如,用最小尺度的样本训练图3中的“dt -8”检测器。可能没有正训练样本可用于检测层,导致left|S_{-}right| /left|S_{ }right| gg gamma 。这会使学习变得不稳定。为了解决这个问题,正、负的交叉熵项加权如下:
L_{c l s}=frac{1}{1 gamma} frac{1}{left|S_{ }right|} sum_{i in S_{ }}-operatorname{logp}_{y_{i}} frac{gamma}{1 gamma} frac{1}{left|S_{-}right|} sum_{i in S_{-}}-log p_{0}left(X_{i}right)
3.4、实现细节
数据增强:在Fast R-CNN和SPPnet中,由于深度神经网络善于学习尺度不变性,因此认为不需要多尺度训练。然而,对于Caltech和KITTI这样的数据集,情况就不一样了,因为目标尺度可以跨越多个八尺度0。在KITTI中,许多目标都非常小。如果不重新标度,集合S_{ }=left{S_{ }^{1}, S_{ }^{2}, ldots, S_{ }^{M}right}的基数变化很大。一般来说,最大目标大小的训练示例集非常小。为了缓解这种不平衡,原始图像被随机调整到多个尺度。
微调:训练Fast R-CNN和RPN网络,由于输入量大(即1000×600),需要大量内存和小批量。这导致了非常繁重的训练程序。事实上,许多对训练无用的背景区域占用了大量的内存。因此,我们从整个图像中随机裁剪一个小的patch(例如448×448)在物体周围。这大大降低了内存需求,使四幅图像能够装入典型的GPU内存12G。学习是用流行的VGG-Net初始化的。由于自举和多任务丢失会使训练在早期迭代中变得不稳定,因此采用了两阶段过程。第一阶段采用随机抽样和一个小权衡系数λ(例如0.05)。运行10,000次迭代,学习率为0.00005。由此产生的模型用于初始化第二阶段,在随机抽样转向引导和λ= 1。我们为“det-8”分配alpha_{i}=0.9 ,其它层分配alpha_{i}=0 。另外25,000次迭代以0.00005的初始学习率运行,每10,000次迭代后学习率衰减10次。这个两阶段的学习过程使稳定的多任务训练成为可能。
4、目标检测网络
虽然提议网络本身可以作为一个检测器,但它并不强大,因为它的滑动窗口不能很好地覆盖目标。为了提高检测精度,增加了检测网络。在Fast R-CNN之后,首先使用ROI池层提取固定维度的特征(如7×7×512)。然后将特征输入到完全连接的层和输出层,如图4所示。增加反卷积层,将特征图的分辨率提高一倍,如4.1节所述。将(1)的多任务丢失扩展到:
Lleft(W, W_{d}right)=sum_{m=1}^{M} sum_{i in S^{m}} alpha_{m} l^{m}left(X_{i}, Y_{i} mid Wright) sum_{i in S^{M 1}} alpha_{M 1} l^{M 1}left(X_{i}, Y_{i} mid W, W_{d}right)
其中l^{M 1} 和S^{M 1} 为检测子网络的损失和训练样本。收集S^{M 1} ,l^{M 1} 结合了分类的交叉熵损失和边界盒回归的平滑L1损失。检测子网络共享了部分建议子网络参数W,并增加了一些参数W_d 。这些参数是联合优化的,即 left(W^{*}, W_{d}^{*}right)=operatorname{argmin} Lleft(W, W_{d}right) 。在我们的实验中,我们将ROI池化应用于“conv4-3”层的顶层,而不是Fast R-CNN的“conv5-3”层,因为“conv4-3”feature map在我们的实验中表现得更好。一种可能的解释是“conv4-3”对应更高的分辨率,更适合于位置感知边界框回归。
4.1、CNN特征图逼近
输入大小对基于CNN的目标检测精度起着至关重要的作用。简单的转发目标补丁,在原始尺度下,通过CNN破坏性能(尤其是小尺度),因为预先训练好的CNN模型具有自然尺度(如224×224)。虽然R-CNN通过缩放自然地解决了这个问题,但是Fast-RCNN或Fast-RCNN并没有明确地解决这个问题。为了缩小比例差距,这些方法只需对输入图像进行上采样(约2倍)。对于包含大量小目标的数据集,如KITTI,这种方法的有效性有限。输入上采样也有三个副作用:大内存需求、慢训练和慢测试。需要注意的是,输入上采样并不能丰富图像的细节。相反,它是必要的,因为较高的卷积层对小目标的响应非常微弱。例如,将32×32目标映射到“conv4-3”层的4×4 patch和“conv5-3”层的2×2块。这为7×7 ROI池提供了有限的信息。
为了解决这一问题,我们考虑了一种提高特征图分辨率的有效方法。这包括使用反褶积层上采样特征图(而不是输入),如图4所示。这种策略类似于R-CNN,如图2 (d)所示,其中输入重新标度被特征重新标度所替代。在R-CNN中,通过最小二乘学习特征逼近器。在CNN世界中,更好的解决方案是使用一个反褶积层,类似于FCN。与输入上采样不同,特征上采样不需要额外的内存和计算开销。实验表明,反褶积层的加入显著提高了检测性能,特别是对于小目标。据我们所知,这是反褶积首次应用于联合提高目标探测器的速度和精度。
4.2、纹理嵌入
纹理对于目标检测和分割非常有用。纹理由中的一个递归神经网络建模,从目标位置周围的多个区域获取。在这项工作中,我们关注来自多个区域的温流。如图4所示,在ROI池之后,将feature froman object(绿色立方体)和context(蓝色立方体)区域叠加在一起。上下文区域比目标区域大1.5倍。增加一个没有填充的卷积层来减少模型参数的数量。它有助于压缩冗余的上下文和目标信息,而不会丢失准确性,并确保模型参数的数量大致相同。
4.3、实现细节
使用建议网络第一学习阶段生成的模型初始化学习,如第3.4节所述。将学习率设置为0.0005,并在每10,000次迭代之后降低10倍。在25000次迭代之后,学习就停止了。(6)的联合优化问题通过在统一网络中反向传播求解。使用引导和λ= 1。学习过程中,,将“conv1-1”到“conv2-2”层的参数固定,以便更快的训练。
5、实验评估
在KITTI和Caltech行人基准上对MS-CNN检测器的性能进行了评估。之所以选择它们,是因为它们与VOC和ImageNet不同,它们包含许多小目标。典型的图像大小是在KITTI的1250×375和在Caltech上的640×480。KITTI包含三个对象类:车、行人和自行车,以及三个级别的评估:easy、moderate和hard。“中等”水平是最常用的。总共有7,481张图像可供培训/验证,7,518张用于测试。由于测试集没有基本事实可用,将训练集分为训练集和验证集。在所有消融实验中,训练集用于学习,验证集用于评价。我们训练了一个用于汽车检测的模型和一个用于行人/自行车检测的模型。其中一个行人模型是在Caltech上学习的。原始输入大小的模型配置如表1所示。检测器是在Caffe toolbox中使用c 实现的,源代码可以在https://github.com/zhaoweicai/mscnn中找到。所有时间都报告了在具有64GB RAM的Intel Xeon E5-2630服务器的单CPU核心(2.40GHz)上的实现。NVIDIA Titan GPU被用于CNN计算。
5.1、建议评估
我们从评估建议网络开始。oracle recall被用作性能指标。为了与KITTI的设置保持一致,如果ground truth的最佳匹配提案中汽车欠条高于70%,行人和自行车欠条高于50%,则ground truth将被召回。
各个检测层的作用:表2显示了各个检测层的检测精度作为目标高度(以像素为单位)的函数。正如预期的那样,每一层对于匹配其规模的对象都具有最高的精度。虽然跨尺度的个体召回率较低,但是所有检测器的组合可以实现对所有目标尺度的高召回率。
输入大小的影响:从图5可以看出,对于汽车和行人的输入图像大小,该建议网络具有较强的鲁棒性。对于骑自行车的人来说,在384到576的高度之间,他们的表现会有所提高,但除此之外没有任何提高。结果表明,在不需要大量上采样输入的情况下,该网络可以获得较好的方案生成性能。
检测子网络改进了建议子网络:Fast R-CNN表明多任务学习既有利于边界盒回归又有利于分类。另一方面,Faster R-CNN表明,即使在两个任务之间共享特性时,目标检测也不能太好地改进目标建议。从图5可以看出,对于MS-CNN来说,检测可以极大地有利于建议的生成,尤其是行人。
与最先进的目标检测方法进行比较:图6将提案生成网络与BING、Selective Search、EdgeBoxes、MCG、3DOP、RPN进行比较。图的第一行显示,MS-CNN仅用100个建议就实现了约98%的召回。这应该与3DOP所需的∼2000个建议和EdgeBoxbes所需的∼10,000个建议进行比较。虽然提出的网络性能优于无监督的建议方法并不令人惊讶,但其相对于甚至可以使用3D信息的监督方法的巨大收益是显著的。最接近的性能是RPN(输入上采样两次),对于行人和骑自行车的人来说,RPN的性能要差得多。当输入没有上采样时,RPN会丢失更多的目标,如图5所示。值得一提的是,MS-CNN生成了高质量的建议(与ground truth高度重叠),没有任何边缘检测或分割。这证明了边界盒回归网络的有效性。
5.2、目标检测的评估
在本节中,我们将评估目标检测性能。由于骑车人检测器在验证集上的性能差异较大,由于骑车人发生的次数较少,所以在消融实验中只考虑了汽车和行人的检测。
输入上采样的效果:表3显示,输入上采样是检测的关键因素。通过将输入向上采样1.5 ~ 2倍,可以获得显著的改进,但是我们看到的增益只有2倍以上。这比[5]要求的3.5小。较大的因素导致(指数级)较慢的检测器和较大的内存需求。
抽样策略:表3比较了抽样策略:随机(“h576-random”)、引导(“h576”)和混合(“h576-合剂”)。对于车来说,这三种策略是非常接近的。对于行人来说,bootstrapping和mix比较接近,但是random更差。注意,随机抽样比其他两种抽样有更多的假阳性。
CNN特征逼近:我们尝试了三种方法来学习特征映射逼近的反卷积层:1)bilinearly插值权值;2)采用双线性插值初始化权值,通过反向传播学习;3)权值初始化为高斯噪声,通过反向传播学习。我们发现第一种方法效果最好。如表3所示,反褶积层在大多数情况下都有帮助。较小的输入图像的增益更大,这往往有较小的目标。注意,feature map近似增加了简单的计算,没有参数。
上下文嵌入:表3显示了在编码上下文方面的收益。然而,模型参数的数量几乎翻了一番。降维卷积层在不影响精度和速度的前提下,显著降低了这个问题。
建议网络的目标检测:建议网络可以像检测器一样工作,将类无关的分类转换为类特定的分类。从表3可以看出,虽然没有统一网络那么强大,但是取得了比较好的效果,比KITTI leaderboard1上的一些检测器要好。
与最先进方法的比较:“h768-ctx-c”模型的结果已提交给KITTI排行榜。表4和图7给出了与以前方法的比较。MS-CNN为探测行人和骑自行车的人创造了新的记录。“行人模式”和“自行车模式”两栏显示了相对于3DOP的显著提高(分别为6和7个点),以及比Fast R_CNN、Regionlets等更好的性能。就速度而言,网络是相当快的。对于最大的输入大小,MS-CNN检测器的速度大约是3DOP的8倍。对原始图像(1250×375)检测速度达到10 fps。
Caltech行人检测:MS-CNN检测器也在Caltech行人基准上进行了评估。将h720-ctx模型与DeepParts、CompACT-Deep、CheckerBoard、LDCF、ACF、spatial alpooling等方法进行比较,完成合理遮挡、中等遮挡和部分遮挡三种任务。如图8所示,MS-CNN具有最先进的性能。图8 (b)和(c)显示,对于小的和闭塞的对象,它的性能非常好,优于显式处理闭塞的DeepParts[39]。此外,由于建议网络的准确性,它遗漏了非常少的行人。速度大约是8 fps (15 fps)对上采样960×720(原始640×480)Caltech的图像。
6、结论
提出了一种用于快速多尺度目标检测的统一深卷积神经网络,即MS-CNN。检测在不同的中间网络层预先形成,其感受野匹配不同的目标尺度。这使得通过网络前馈一个单一的输入图像来检测所有的目标尺度,从而得到一个非常快的检测器。此外,还探讨了CNN特征近似作为输入上采样的替代方法。它被证明在内存和计算上有显著的节省。总的来说,MS-CNN检测器在高达15帧每秒的速度下实现了很高的检出率。