目标检测系列:RCNN、SPP、Fast RCNN

RCNN

动机

目标检测是计算机视觉中最重要的课题之一,传统的目标检测算法包括Haar特征+Adaboost算法、HOG特征+SVM算法以及DPM算法等等,但是传统算法比较依赖一系列复杂的系统,并且在目标检测的准确率上达到了瓶颈。
而卷积神经网络(CNN)在20世纪90年代之后,在2012年的ImageNet比赛上,Alexnet的卷积神经网络大放异彩,大大提高了分类的能力,一举取得了2012年ImageNet竞赛的冠军。于是作者想到能不能将CNN结合到目标检测中,用卷积网络来代替传统的特征提取的算法。

主要创新点

用神经卷积网络来提取特征

神经卷积网络具有良好的提取特征的性能,并且在ImageNet竞赛中取得良好的效果,具有很好的分类性能。

微调已有的模型

对于当时目标检测的数据集还相对而言不够充足,于是想到用迁移学习的方法,首先在ImageNet上进行CNN的预训练,然后再进行网络的微调,微调阶段把预训练的1000个输出改成了21个(VOC20个类加上背景),将与真实标定候选框ground truth box重叠度IOU大于0.5的认为正样本,其他认为背景类,训练过程中随机选择32个正样本,96个负样本进行训练。
对于微调模型还进行分层调试,结果发现卷积层5已经学习到了足够的特征,而加入全连接层7反而会使分类的效果更差。

算法

RCNN算法主要分为三个模块,第一个模块为生成一系列的候选区域,第二个模块为通过深度的卷积神经网络来代替传统方法提取固定长度的特征向量。第三个模块是通过SVM来进行分类。
在这里插入图片描述

区域提取

传统的区域提取的方法包括:objectness、selective search(选择性搜索)、category-independent object proposals、constrained parametric min-cut(约束参数最小割CPMC)muti-scale combinatorial grouping(多尺度组合分组)等等,由于RCNN对于需要提取的区域大小并不知道,所以文中选择的是选择性搜索。
选择性搜索
输入彩色图片,输出物体位置可能的结果L

  1. 使用 Efficient Graph-Based Image Segmentation(基于图的图像分割)的方法获取原始分割区域R={r1,r2,…,rn}
  2. 初始化相似度集合S=∅
  3. 计算两两相邻区域之间的相似度(颜色、纹理、大小和吻合),将其添加到相似度集合S中
  4. 从相似度集合S中找出,相似度最大的两个区域 ri 和rj,将其合并成为一个区域 rt,从相似度集合中除去原先与ri和rj相邻区域之间计算的相似度,计算rt与其相邻区域(原先与ri或rj相邻的区域)的相似度,将其结果添加的到相似度集合S中。同时将新区域 rt 添加到 区域集合R中。
  5. 获取每个区域的Bounding Boxes,这个结果就是物体位置的可能结果L。

CNN

文中选择的是在ImageNet上获得冠军的AlexNet,为了得到相同维度的输出,在将图像输入至卷积网络之前,会将输入图像重新设置尺寸,将输入图像裁剪、平移等方式设置到统一大小的尺寸。
在这里插入图片描述
如图所示, AlexNet 采用的是两台 GPU 服务器,分为上下两组,该模型一共分为八层,五个卷积层以及三个全连接层,在每一个卷积层中包含了激励函数 ReLU 以及局部响应归一化(LRN)处理,然后在经过降采样(pool 处理)。

SVM分类

由于目标检测的数据集不够充足,对于CNN训练是需要大量的样本,因此对于包含物体一部分的也会划分为正样本,因此在实现分类的时候CNN的精度会比SVM更低,因此在CNN提取出4096维特征向量之后,选择SVM来对每个类进行二分类。
SVM就是一个二分类器,简单来说就是寻找到一个超平面能够使样本分成两类,同时他们之间的间隙最大,对于复杂情况利用核函数,将样本映射到更高维的空间,再寻找到一个超平面从而能够区分两类样本。

边框回归

当使用SVM分类器对选择性搜索提供的候选区域目标打分之后,模型会使用一个边框回归器对这个区域给出一个预测的区域坐标,并在CNN提取的特征图上进行回归。
对于一个输入类别i,分别有预测区域P(P_x,P_y,P_w,P_h)分别表示的(x,y,w,h),x,y为坐标,而w,h为宽高,同样有标注的区域G(G_x,G_y,G_w,G_h),于是我们需要学习一种变换将预测的P映射到实际的G上。

在这里插入图片描述
在这里插入图片描述
其中(tx,ty,tw,th)表示预测区域与真实区域的变化量,之后通过CNN得到的目标区域向量∅(P),设置一个学习模型参数矩阵w,这样就得到需要的目标函数d_* §=∅§w,因此可以构造损失函数Loss=∑_iN〖(t_*i-d_i)〗2 ,其中i表示类别,接着对损失函数进行优化。

优缺点

准确率

利用CNN良好的分类性能,将检测准确率从原来传统算法的瓶颈35.1%mAP一下提高到53.7%mAP。

运行速度

CNN对于所有的类别都共享参数,并且最后生成4096维特征向量相较于传统算法(4k VS 360k)大大减少了运行的参数,从DPMs检测一张图片需要5分钟提升到了在GPU上只需要13秒,而在CPU上也仅仅需要53秒。

缺点

  • 各个模块间仍然是分开的,所以中间的大量的参数、数据都需要占用内存进行保存;
  • 对于每一个候选区域都重复的进行卷积操作,耗费了很多时间,而且有很多重叠区域进行了不必要的重复运算;
  • 将不同尺寸的区域都重新设置到了统一尺寸,在对图像进行处理时,可能会因为裁剪、拉伸等操作改变了原来的图像,造成了一定的图像信息的损失。

SPPNet

动机

目前的CNN网络对于输入的图像需要一定固定的尺寸,因此对于提取出来的候选框图像就需要进行人工的剪裁来达到输入网络的要求,但是这一过程可能会改变图像的信息,从而会一定程度上降低检测的准确率。因此文中提出了金字塔池化的概念,对于任意大小的图像都可以生成相同维度的特征。
RCNN中先进行区域提取,之后对于每一个候选框图像都送入CNN进行卷积运算,非常耗时,而且有大量的重叠部分会造成很多不必要的重复运算,因此文中提出特征映射的概念,只对全图进行一次卷积运算,通过映射关系在特征图上寻找原图上对应的位置,以此减少了大量的运算。

主要创新点

金字塔池化

因为CNN网络的每一层卷积核大小是固定的,因此输入的图像大小如果不一致的话,卷积层输出的特征图大小也是不一致的,这样也就无法得到相同维度的特征向量。所以在RCNN中,对于不同尺寸的候选区域都是通过裁剪的方式将所有的选出的待检测图像变化成固定大小的图像,以此来得到相同维度的特征向量。
而金字塔池化是在卷积层与全连接层之间添加一层金字塔池化层,如图所示,例如要得到21个维度神经元,则将最后一层卷积层的结果分别切割成1x1,2x2以及4x4,,对于每一个小块进行最大池化操作,由于最后一层卷积层卷积核的数量是256,因此对于任意大小的输入图像经过金字塔池化层之后都得到了相同的维度256x21。

特征映射

在RCNN中,对于生成的2000多个候选框图像,每一个图像都要送入CNN进行运算,造成了很多重复的运算。而通过映射关系,只需要在特征图上找到ROI区域左上角点的对应的坐标以及对应的长宽,就可以确认ROI的区域。例如输入图像大小为(600,800),而特征图大小是(38,50),对于图中的ROI(30,40,200,400),在特征图中我们可以求得对应的位置为(2,3,13,25)。从而只需要对原始图像进行一次卷积运算,大大减少了计算量,加快了检测的速度。

算法

SPPnet算法步骤整体与RCNN并无太大区别,都是通过选择性搜索算法提取2000个候选区域,如图所示,只不过RCNN是对于每一个候选区域进行剪裁之后进行卷积,而SPPnet是将全图做一次卷积运算,通过映射关系在特征图上寻找对应于原图的ROI区域,对于卷积得到的特征图进行金字塔池化从而得到相同维度再连上全连接层,最后得到一个固定维度的特征向量。特征向量通过训练好的SVM进行分类,通过边框回归来精修预测的位置。
其中CNN用的是在Alexnet基础上进行了微调的ZF-5模型。
其中金字塔池化将使用了4个尺度特征图分别划分为1x1,2x2,3x3,6x6,因此金字塔池化层的输出是256x50=12800维度的特征对应于每一个提取的候选窗口。
通过多尺度的特征提取训练的优化方法,将图像大小重新设置为(480,576,688,864,1200)五个尺度,分别进行卷积得到特征图,由于金字塔池化层的存在,所有不同维度的输入图像得到的都是相同维度结果,也就是说,对于所有尺度的图像,在网络中的每一层都是共享参数的。
在这里插入图片描述

优缺点

准确率

由于金字塔池化的作用,以及多尺度训练方法的效果,SPPnet准确率相较于RCNN有提升,在VOC数据集上,五尺度结果达到59.2%,相较于RCNN提升了0.7%。

运行速度

由于特征映射的概念,仅需要对原始图像进行一次卷积运算,大大减少了计算量,因此对于单尺度训练的模型相较于RCNN运行速度仅仅是1/160,五尺度的模型也可以达到RCNN的1/24。

缺点

  • 整体框架相较于RCNN并无较大改变,仍然是各个独立部分组成的一个复杂的系统。
  • 各个部分中间的数据仍然需要占用较大空间进行存储。
  • 为实时检测提供了一定的雏形,但要达到实时处理的目标仍然需要不断优化。

Fast RCNN

动机

RCNN和SPPnet都存在着明显的缺点,其一就是这两种算法的卷积网络部分、SVM以及bounding box regressors都是分开的独立的部分,训练时都需要分开单独训练;其二就是每一个候选区域都需要先保存到硬盘再进行处理,占用较大的空间,并且非常耗费时间;其三就是检测速度还非常慢,如果运用VGG16网络在GPU上处理每一张图像仍然需要47秒之久。因此如何能够将各个模块部分结合到一起非常重要,能够大大降低算法的空间复杂度和时间复杂度,提升整体检测速度。

主要创新点

ROI池化

ROI池化层与SPPnet金字塔池化层类似,主要是为了解决对于不同尺度大小的候选框图像输入CNN时,能够得到相同维度的特征向量,从而能够避免需要人工剪裁破坏图像信息的风险。
如图所示ROI池化层就相当于是单层的金字塔池化,对于任意大小的输入图像,例如HxW,若要得到hxw个特征,那么仅需在输入的候选区域图像切割为hxw块,每一个小块的长宽分别为H/h,W/w,再对于每一块进行最大值池化,例如图中所示将每一个候选区域图像切割为3x3的小块,再进行最大值池化就得到了3x3维的特征。因此ROI池化层的存在也可以对于任意尺度的输入图像都能够得到相同维度的特征。
在这里插入图片描述

整体化

为了避免RCNN、SPPnet的缺点,在Fast RCNN中,将分类与边框的回归两条分支都连接到CNN的全连接层输出,分别来实现候选区域图像的分类以及边框位置的回归。凭借这个整体结构避免了需要大量空间存储提取的候选区域图像以及中间处理的数据,并且softmax分类代替SVM分类,对于所有类别共享参数,提升了检测速度,同时也提高了检测的准确率。在这里插入图片描述

算法

Fast RCNN网络结构如图3.2所示,在ROI池化层之前的步骤与SPPnet类似,首先是利用传统的算法在原始输入图像上提取一系列的候选区域,之后对整个原始图像送入全卷积网络运算得到特征图,通过原始图像和特征图的映射关系,在特征图上找出对应于原图上ROI区域,与SPPnet不同的是,在Fast RCNN中用ROI池化代替SPPnet中的金字塔池化层,能够将任意不同尺度的候选区域都能得到一个固定维度的特征。在ROI池化层之后通过一系列的全连接层得到候选区域的特征向量。最后得到的特征向量送入两个分支网络,其中一个分支是softmax代替SVM进行分类;另一个分支结合之前网络的bbox regressor来进行候选框位置的精修(同1.3.4)。

多任务损失函数

Fast RCNN将分类与边框回归两个模块结合到CNN网络中,因此损失函数也可以结合到一起,采用一个总的损失函数,通过优化结合的损失函数来更新整个网络的参数。
网络的分类这条分支最后的输出关于K+1个类别(包括背景)每一个类的概率分布p=(p_0,p_1,…p_k),而另一条边框回归的分支输出是对K个类别每个类别的边框的回归补偿(位置精修),tk=(t_xk, t_yk,t_wk,t_h^k)。
该网络总的损失函数为,在这里插入图片描述
其中Lcls(p,u)=-logp_u,表示对于u类的分类损失函数,
而第二个函数Lloc表示的是对于u类边框位置精修的真实的数组v=(v_x,v_y,v_w,v_h),和预测的数组,tu=(t_xu, t_yu,t_wu,t_h^u)之间的差异,表达式为
在这里插入图片描述
其中
而损失函数中的超参数λ用来平衡两条分支的损失,在实验中取值为1。
通过优化这个结合了两条分支的损失函数就可以通过训练同时更新整个网络来实现基于深度学习的目标检测。
在这里插入图片描述

优缺点

准确率

在VOC2012数据集上准确率达到65.7%(运用额外的更多的数据可达到68.4%),相较于RCNN以及SPPnet准确率大大提升了。

运行速度

对于VGG16网络而言,Fast RCNN相较于RCNN速度提升了146倍,相较于SPPnet提升了7倍,检测的速度也有显著的提高。

其他

将分类和边框回归两个模块都结合到卷积网络中,简化了目标检测整个系统,同时不需要额外的空间来保存中间的数据。

缺点

虽然检测速度较于之前的RCNN以及SPPNet都有较大的提升,并且对于分类和回归两个问题都已经加入神经网络中来实现。但是对于提取候选区域仍然是通过传统的算法非常耗时,例如在CPU上对于一张图像处理需要2秒,这对于实际应用而言显然还达不到要求。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值