Deep Neural Networks for Object Detection论文翻译

这是2013年使用深度学习做目标检测的一篇论文,相对于经典的rcnn是要出现的更早一些,这篇博客将对这篇论文进行一些翻译和解读,若理解有偏差和错误还望指出,大家互相交流和学习。
论文题目:Deep Neural Networks for Object Detection
作者:Christian Szegedy Alexander Toshev Dumitru Erhan Google, Inc.

摘要:深度神经网络最近已经在图像分类任务上有着十分杰出的表现。在这篇文章中,我们通过使用深度神经网络进一步解决了目标检测的问题,即不仅仅是分类,还要准确的定位出不同类别物体的位置。我们展现了一个简单但是有效的想法,那就是把目标检测问题归结为对目标包围矩形的掩模的一个回归问题。我们定义了一个多尺度的推理过程(inference procedure),它能够通过应用一些网络以一个较低的代价产生高分辨率(high-resolution)的目标检测。在PASCAL VOC数据集上取得了顶尖的表现。
一、前言
当我们想要对图像有更加复杂的理解,拥有更加准确和详细的目标识别能力变得至关重要。在这种情况下,我们不仅仅关心图像分类,还关心精确的估计图像中包含物体(目标)的类别和位置。
在目标检测中重要的进步来自于对目标的表达和机器学习模型的进步。其中一个表现十分突出的例子是之前的一个顶尖的目标检测模型——DPM模型。它建立在仔细设计的物体表达以及受运动启发(kinematically inspired)的物体的部分分解思想,这种部分分解思想被表达为一个图模型。使用对图模型进行判别式学习使得我们可以对不同种类的物体构建一个高精度的基于部件的模型。
手工设计的物体表达以及浅层的生成式训练模型同样地一直以来在目标分类等相关问题上有着最好的表现。然而在近几年,深度神经网络已经成为了一个强有力的机器学习模型。(作者的意思大概是在深度学习出现之前,手工特征加浅层学习模型在图像分类等问题上有着最好的表现,但是现在已经是深度学习的天下了)
深度神经网络在分类问题上展现出和传统方法较多的不同。首先,深度神经网络是深度结构,它有比浅层结构学习更为复杂模型的能力。这个富有表达性和鲁棒的训练算法使得我们可以学习到有效的物体表达,而不用去手工设计特征。在工程上通过1000类的图像分类比赛(IMAGENET)已经证明了这种算法的可行性。
在这篇文章中,我们探索了使用深度神经网络解决目标检测的能力,在目标检测中,我们不仅仅要区分物体,还要精确的定位物体。我们所说的目标检测是一个具有挑战性的问题,因为我们想要在有限的计算资源下,在一张图片中检测出可能存在的许多的各种尺寸大小的目标。
我们提出了一种想法,在给定一张图片的情况下它能够预测多个物体的包围矩形。更为准确地说,我们构想了一种基于深度神经网络的回归方法,它能够输出目标包围矩形以及部分目标包围矩形的二元掩模,正如图1所示的那样。
Deep Neural Networks for Object Detection论文翻译
另外,使用了一个简单的包围矩形推理来从许多掩模中提取检测结果。为了提高定位精度,我们在全图以及少数的大面积剪裁的图像上用多尺度的方式使用了深度神经网络掩模生成方法,后面还伴随着一个精修的步骤。如图2所示。
Deep Neural Networks for Object Detection论文翻译
以这种方式,我们仅需要少数几次的DNN回归,便可以达到顶尖的目标检测结果。
在这篇文章中,我们阐明了基于DNN的回归方法能够学习到对于分类和抓取几何信息同样有利的特征。我们使用ALexNet这个通用的结构,并且把最后一层替换为回归层。有点令人惊讶但很有说服力的见解是,网络在一定程度上编码平移不变性,也可以捕获对象位置。
第二,我们介绍了一种多尺度的包围矩形推理方法,在其之后还伴随着一个精修的步骤来产生精确的检测结果。通过使用这种方法,我们可以以一个低成本把DNN应用到像素级别的检测精度上的检测方法中来。这个DNN由于输出层的尺寸限制,产生的是低分辨率的掩模。这个DNN对于每一张输入图片只被应用几次。(这里翻译不是太好)
另外,提出的方法相当简单,没有必要显示地手工设计一个捕捉物体部件以及部件之间的关系的模型。这样的简单性有着易于在各种物体上应用的有点,同时在各种物体的检测中还有着更好的表现,包括刚性的和非刚性的物体。该模型在PASCAL VOC数据集上有着顶尖的表现,我们将在第七章介绍。
二、相关的工作
在目标检测领域,最被广为研究模型之一是是DPM模型,其中论文9(见原文,是Ross B Girshick的一项工作)是其中最为突出的例子。这种模型包括了一系列可区分的位于star模型中的部件,它可以被认为是一个两层模型,部件是第一层,star模型是第二层。与DNN不同的是,DNN的层是通用的层,论文9的工作开发了区域的知识和信息——部件是基于手工设计的HOG特征的,部件的结构是受运动学启发的(kinematically motivated)
用于目标检测和分割的深度结构是受基于部件的模型启发的,在传统上被称为组合模型,在这种模型中,目标被表达为原始图像的层次组合。一个显著的例子是论文20中提到的与或图,在这个图中一个物体被建模成一棵树,其中与节点表示不同的部件而或节点表示同一部件不同的模式。和DNN相似的是,与或图包括多个层,低层表示小的通用的原始图像,而高层表示物体的部件,这样的组合模型比DNN更容易解释。在另一方面,这种模型需要推理而这篇文章中的DNN模型纯粹是前向计算,没有潜在的变量需要被推理。
进一步,用于目标检测的组合模型的例子是基于分割的,并且专注于形状,使用Gabor滤波器或者更大的HOG滤波器。这些方法一直因为训练困难变得很有难度,并且使用了特殊设计的训练过程。而且,在推理阶段他们包括自下而上和自上而下的过程。
神经网络也可以被认为是组合模型,其中的节点更为通用和一般,并且比以上的模型更加难以解释。把神经网络应用到视觉问题上是几十年前的事情了,卷积神经网络是最为突出的一个例子。直到最近这些模型才作为非常成功的模型出现,因为它们在大规模图像分类任务上取得了顶尖的效果。但是这些模型在目标检测上的应用是非常有限的。场景分割作为一个更为详尽的目标检测的形式,已经被尝试使用多层卷积神经网络来解决这个问题。医学影像的分割已经通过DNN得到了解决。然而这两种方法都使用神经网络作为本地或者半本地的分类器,这个分类器作用在超像素和每个像素位置上。然而我们的方法使用整个图像作为输入,通过回归实现定位。因此,我们这种方法是神经网络更为有效的一种应用。
也许和我们的方法最为接近的方法是论文18的方法,它和我们的方法有相似的高层次的目标,但是它使用了更小的网络,并且特征损失函数都不同,并且没有方法去区分同一类的多个物体。
三、基于DNN的目标检测
我们方法的核心是对于目标掩模的一个基于DNN的回归过程,如图1所示。基于回归模型,我们可以对完整的物体和部分物体产生掩模。一个单一的DNN回归可以给我们一张图片中多个物体的掩模,为了进一步提高定位的精度,我们把DNN定位器使用在少数几个大的亚窗口上。完整的流程在图2中呈现,并且在下面会解释。
四、DNN回归的目标检测
我们的网络是基于论文14提出的Alexnet,它包括7个层,前五层是卷积层,后面是两个全连接层。每一层使用rectified linear unit来作为一个非线性转换。五个卷积层的三个卷积层有额外的最大池化层。要想更加了解可以参考论文14。
我们采用上述的通用的模型来完成定位的功能,与这个通用的alexnet模型不一样的是,alexnet模型的最后一层是softmax层,因为它实现的是分类的功能,而我们这里使用的是回归层,它可以产生产生一个目标的二元掩模DNN(x;θ)∈R(N),其中θ是是神经网络的参数,N是像素的总数。由于神经网络的输出有一个固定的维度,所以我们预测一个由固定尺寸的掩模,N=d*d。在被缩放到图像的尺寸后,神经网络输出的掩模呈现了一个或者多个目标,如果这个像素在目标的包围矩形框中那么对应的掩模的值就是1,否则为0。
网络通过最小化L2误差来进行训练,损失函数如下图所示:
Deep Neural Networks for Object Detection论文翻译
其中x是输入的图片,m是该图片的真值掩模向量,Diag(m)表示以m为对角线元素的对角矩阵。(λ我认为是自己设定的一个常量。)
由于我们的基本的网络是高度非凸的并且最优化不能得到保证,因为只有凸函数使用梯度下降法才可以得到最优解的,所以有时候需要对损失函数加上正则化,方法是根据真值掩模对每个输出使用不同的权重。一件直观的事情是大多数物体相对于图片尺寸而言都是很小的,所以神经网络很容易陷入一个平凡解,这个平凡解即是把所有的输出都设置为0。为了避免这个不想要的行为,通过控制参数λ来增加真值掩模为非0的权重。如果λ很小,那么在真值掩模为0上产生的错误输出(即输出为1)会被惩罚,在真值掩模为1上产生的错误输出(即输出为0)也会被惩罚,但是前者的惩罚会比后者少,从而鼓励神经网络输出1。
在我们的实现中,我们使用感受野为225*255的神经网络,并输出24*24的掩模。
五、通过DNN产生的掩模来实现精确的定位
尽管我们描述的方法可以生成高分辨率的掩模,但还有其他的挑战。首先,单一的掩模可能不足以消除当多个物体挨在一起的时候产生的歧义,比如这个时候到底是一个物体还是多个物体。第二,由于输出的大小限制,我们产生的掩模尺寸远远小于原始图像。比如说对于一个原始图像尺寸为400*400以及输出24*24的掩模,每一个输出都对应着16*16的小区域,这不足以精确的对物体进行定位,特别是对于小的物体。最后,因为我们以整个图片作为输入,小的物体对输入的神经元影响很小,因此很难识别小的物体。下面我们将解释如何解决这些问题。
5.1为了鲁棒的定位使用多个掩模
为了解决多个挨着的物体,我们产生了多个掩模,每个掩模代表了一个完整的或者部分的物体。由于我们的最终目的是产生一个包围矩形,所以我们使用一个神经网络去预测目标矩形的掩模,4个额外的神经网络来预测4个一半的目标掩模——分别是下半部分的掩模,上半部分的掩模,左半部分的掩模以及右半部分的掩模,标注为mh,h属于{全部、上、下、左、右}。这五个预测是过完备的但是可以帮助减少不确定性并且可以处理一些错误。进一步,如果同个类型的两个物体挨着放在一块那么产生的五个预测中至少有两个预测不会合并。这将使得我们可以检测多个物体。
在训练时间,我们需要把包围矩形转化为这五个掩模,由于掩模可能远小于原始图像的尺寸,所以我们需要把真值掩模下采样到网络输出的尺寸。神经网络输出预测的图像中矩形,T(i,j)表示神经网络的(i,j)位置处的输出。矩形左上角的位置是(d1(i-1)/d,d2(j-1)/d),尺寸是(d1/d * d2/d)(原文中d2写的是d1,我认为是写错了,应该是d2),d就是神经网络输出的尺寸,在本文中是24,d1和d2是图像的长和宽。在训练阶段,我们预测m(i,j)作为T(i,j)一部分,如式1所示:
Deep Neural Networks for Object Detection论文翻译
其中bb(full)表示物体包围矩形的真值,对于剩下的h属于(上、下、左、右),bb(h)对应于原始真值的四个一半部分(上、下、左、右)。我们使用了完整的矩形,左,右,上,下五种矩形来定义五种不同的覆盖类型。对于不同的类型h,得到的x相对于真值的结果mh(bb)在训练阶段会被使用到。
此时,我们注意到我们可以在一次训练中得到所有五个掩模的输出。这将使得可扩展性成为可能。使用这种方式,五个不同的定位器将会共享大多数的层,因此会共享大多数的特征。这看起来是非常合情理的因为他们处理的是同一个物体。一种更为激进的方法是对于不同的类别使用同一个定位器似乎也是可行的。
5.2 从DNN的输出来实现目标定位
为了完备整个检测流程,对于每个图片我们预测一系列的包围矩形。尽管神经网络输出的分辨率比输入图片的分辨率要小很多,我们将输出的二元掩模缩放到输入图像的分辨率大小。我们的目标是估计包围矩形的坐标(i,j,k,l),其中(i,j)是在输出的掩模坐标系下矩形框左上角的坐标(k,l)是矩形框右下角的坐标。
为了达到这样的目标,我们使用一个分数S来表达包围矩形和掩模的一致性,并根据最高的分数来推论包围矩形的位置。一个很自然的衡量一致性的方法是矩形的哪一部分被掩模所覆盖。如式2所示:
Deep Neural Networks for Object Detection论文翻译
(i,j)表示神经网络输出的索引(这里将神经网络的输出看做一个二维矩形),m表示神经网络的输出,m(i,j)表示神经网络输出中索引为(i,j)的值。如果把式2扩展为5个输出的掩模的话,最后的分数就写为式3:
Deep Neural Networks for Object Detection论文翻译
其中halves包括{full; bottom; top; left;right}。对于halves中的一个h,h横(公式3中h上面加一横)表示和h对立的一半。For h = full,we denote by h a rectangular region around bb whose score will penalize if the full masks extend outside bb.在以上求和中,一个矩形框如果和5个掩模一致,那么分数就会很大。
我们使用式3中得到的分数来在所有可能的矩形中穷尽搜索。我们在图像平均维度为[0.1,0.9]区间以及10个不同的宽高比来考虑包围矩形,这10个不同的宽高比是对训练数据中所有目标矩形进行k均值聚类来估计得到的。这样的话对于每一个位置我们可以考虑9*10个矩形,我们在图像中使用滑窗法,考虑以上提到的90个矩形,步长设定为5个像素。公式3中的分数可以通过对计算出来的掩模做积分图之后再进行4个运算来进行有效的计算。运算的确切的数量是5(2*像素的数量 + 20*矩形的数量),前者衡量的是积分图计算量而后者衡量的是分数的计算量。
为了产生最后的检测结果,我们使用了两种不同类型的滤波方法。第一个是保留在公式2中分数大于0.5的矩形。然后进一步通过一个分类器来减少矩形的数量,最后通过非极大值抑制来减少矩形的数量。
5.3 多尺度的定位精修
神经网络输出的分辨率不足的问题可以通过以下两种方式解决:第一是在不同尺度下以及一些大的亚窗口下使用DNN定位器,第二是在得分高的预测矩形中进行精修。
使用不同尺度下的大的窗口,我们产生了多个掩模,每一个掩模负责一个尺度,我们把它们融合来得到高分辨率的掩模。合适的尺度的范围依赖于图像的分辨率和定位器的感受野的尺寸。我们想要输入的图片被神经网络的输出所覆盖,同时我们还想要每个目标至少落在一个矩形框中,并且这些窗口的总数要比较小才行。
为了实现以上的目标,我们使用了三个尺度:整个图片的完整的尺度大小和其他两个尺度,这两个尺度根据完整的尺度大小依次减半。我们用这些尺度的窗口来覆盖图像,这样的话这些窗口有一个20%的覆盖率。这些窗口的数量相对较小,并且在多个尺度下覆盖了原图像。最为重要的是,最小的尺度下可以在更高的分辨率下完成定位。
在推导阶段,我们在所有的窗口下使用DNN。这和滑窗法不同,因为我们需要对图像获得的窗口进行评价来得到少量的窗口,一般数量少于40。在每个尺度下产生的掩模通过一个最大化的操作进行了融合。这给我们3个图像尺度大小的掩模,每个掩模在不同的尺寸大小看待目标。对于每一个尺度,我们使用5.2中的包围矩形的推理方法来获得一些列的检测结果。在我们的实现中,我们取每个尺度下排名前五的检测结果,总共有15个检测结果。
为了进一步的改善检测结果,我们使用了第二个步骤叫做精修。DNN定位器应用在被第一步检测步骤定义的检测窗口上——每个这15个检测结果都被放大了1.2倍并且被应用到网络上。在更高的分辨率上使用定位明显增加了检测精度。
完整的算法如下图所示:
Deep Neural Networks for Object Detection论文翻译
6、训练DNN
我们的神经网络的一个引人注目的特点是简洁性:将分类器的分类层用掩模产生层替换,而没有任何的先验知识和卷积结构。但是它需要大量的训练数据来训练,因为不同尺寸的目标需要出现在图像中的每一个角落。
对于训练掩模生成器,我们对每个图片生成数千个样本,60%是负样本,40%是正样本。如果一个样本和真值包围矩形没有任何交集那这个样本就被判定为负样本,如果样本和真值包围矩形有超过80%的重合,就被判定为正样本。图像按照最小尺度和原始完整图像尺度的宽度之间的均匀分布来进行图像剪裁。
我们使用相似的准备步骤来训练一个分类器,这个分类器用来优化我们的检测结果。再一次,我们对每一个图片采样数千个样本:60%的负样本和40%的正样本。负样本是那些图像的包围矩形和真值的包围矩形之间的Jaccard-similarity小于0.2的图像,正样本是Jaccard-similarity大于0.6。加入额外的负样本类型起到了一个正则化的作用并且提升了滤波器的质量。在这两种情况中,样本的总数会达到每一类的样本达到1000万个。
由于训练定位器比训练分类器要难,所以在低层的滤波器系数必须是高质量的。为了实现这个,我们首先训练网络用于分类,然后在重新使用除了分类层以外的所有层的系数。在训练定位的时候再进行调优。
神经网络通过随机梯度下降法来训练,使用了论文6的方法来自动估计学习率。
后面就是一些实验结果了,这里就不再翻译了。