目标检测学习小结1(R-CNN、Fast-R-CNN、Faster-R-CNN)

目标检测学习小结之一

深度学习小白首次接触目标检测,在阅读了几篇关于目标检测的论文后做一个阶段性小结,以便日后复习。

 经过对目标检测的初步了解后,一个目标检测算法大体可分为以下几个部分:

(1)锁定目标区域

(2)图像特征提取

(3)根据特征对目标进行分类

4)对目标定位并用包围框进行标注

        本文重点叙述锁定候选区域的算法及其余三部分的典型算法介绍,最后对R-CNN、Fast-R-CNN、Faster-R-CNN的结构进行介绍。

Part-1 锁定目标区域的相关算法:

 

  • 传统的滑动窗检测法:

       如下图1所示,类似模板匹配的方法,将预先设定好的滑动窗口模板在图片上滑动,进行匹配,若匹配度大于定阈值时即认为检测到目标,该区域即为候选区域。

目标检测学习小结1(R-CNN、Fast-R-CNN、Faster-R-CNN)_第1张图片

图1

 

  • 选择性搜索法:     

目标检测学习小结1(R-CNN、Fast-R-CNN、Faster-R-CNN)_第2张图片

图2

 

       如上图2所示,该方法被用于R-CNN与Fast-R-CNN中,对一张图像使用该算法可以得到一些候选区域用于后续的识别及定位。

 

       具体算法步骤如下所示:

 

(1)对图像进行初始分割,基于图表示的分割算法如下图3所示,将图片的每一个像素点以一个节点表示,所有相邻节点间互相连接,计算每个像素点与其4-邻域或8-邻域之间的相似性(度量方法有许多这里就不列举了),若相连接的两个像素点之间的相似度大于某一阈值,则合并两像素点,以此得到图的初始划分。

目标检测学习小结1(R-CNN、Fast-R-CNN、Faster-R-CNN)_第3张图片

图3

(2)计算区域集R中每个相邻区域的相似度S={S1,S2,...}(相似度度量方法一样很多)

(3)找出相似度最高的两个区域,合并为新集加入R

(4)从S中移除所有已合并的子集

(5)计算新集与所有子集的相似度

(6)跳至第(3)步直至S为空

 

  • 窗口打分法:

       该方法首先使用滑动窗口的方法产生不同位置、大小以及宽高比的候选区域,然后对这些区域进行打分并排序,并保留得分大于一定阈值的候选区域。由于候选区域内的轮廓数量在一定程度上表示了该区域包含物体的可能性,故该方法利用边缘信息来为每个候选区域评分,使用位于候选区域内的边缘轮廓数量减去与候选区域边界重叠的边缘轮廓数量作为评分标准。最终得到若干分数由高至低排列的区域,选择前K个作为候选区域即可。

 

  • RPN候选区域推荐网络:

       RPN网络结构如下图4所示,在卷积神经网络的最后一层后引入该层,用3×3的滑动窗口在特征图上滑动,并以滑动窗口的中心点作为中心,由该中心点得到K个尺寸不同的预测区域(锚箱),若特征图大小为W×H,则输出为W×H×K个锚箱。

       训练该网络时为每个锚箱分配一个类标(锚箱内有无目标),类标分配的规则如下:若一个锚箱和某个物体的标定包围框的交并覆盖率(IoU)最高则被分配正例类标;若一个锚箱和任何物体的标定包围框的交并覆盖率大于一个较高的阈值(一般取 0.7)则被分配正例类标;若一个锚箱和标定包围框的交并覆盖率小于一个较低的阈值(一般取 0.3)则被分配反例类标。

       (更好的理解RPN网络的原理:假定3×3的滑动窗口是从原始图片上的某区域通过池化金字塔算法得到的,而原始图片上的该区域的大小尺寸就是锚箱的大小尺寸,即当前滑动窗口所在特征图的区域是由原始图上以当前中心点为中心的K种尺寸的区域金字塔池化得到的。)

         (训练时将K个锚箱的宽与高输入,根据当前滑动窗中心点坐标定位原图片上的对应区域并与已知的正确区域对比训练)

               目标检测学习小结1(R-CNN、Fast-R-CNN、Faster-R-CNN)_第4张图片

图4

 

Part-2 后续部分相关算法:

  • 空间金字塔池化:

       如下图5所示为空间金字塔池化的算法示意图,空间金字塔池化层是为了解决不同的候选区域大小不一无法统一输入网络的问题,该算法如图5所示,对每个区域进行三种尺寸不同的池化,得到的三类结果合并为一列向量作为特征输入网络,使得所有不同大小的候选区域经过该层后得到的特征向量大小相同,可统一输入网络中进行后续操作。

目标检测学习小结1(R-CNN、Fast-R-CNN、Faster-R-CNN)_第5张图片

图5

 

  • 非极大值抑制:

 

       该方法是为了解决一个目标被多个候选框选中的问题(最终仅保留一个输出),首先对所有包围框进行评分,选取评分最高的候选框作为最终的包围框,将与该最高评分包围框相交大于一定阈值的包围框去除,接下来从未被处理过的其余候选框中选择评分最高的作为包围框,循环此操作,直到所有候选框都被处理过。

  • 感兴趣区域池化ROI-Pooling:

       感兴趣区域池化避免了对重叠区域重复提取特征,在Fast-R-CNN中首先将整个图片输入卷积层得到特征图,再找到原始图片上的候选区域在特征图上的映射区域,将特征图上所有的候选区域划分为H×W个网格,再对每个网格进行最大值池化,就得到了同样尺寸的输出特征,如图6所示: 

目标检测学习小结1(R-CNN、Fast-R-CNN、Faster-R-CNN)_第6张图片

图6

  • 边框回归:

         边框回归即为对包围框位置的修正,以(x,y,w,h)表示一个包围框(x、y为包围框中心点的坐标,w、h为包围框的宽和高),将修正包围框看做回归问题,训练时输入数据对(当前得到的包围框,完美的包围框),如下式所示,中心点坐标与完美包围框的中心点坐标间假设为线性关系,宽与高与完美包围框的宽与高之间假设为指数关系。之后就按照与线性回归相同的最小平方误差准则,进行训练,修正边框。

目标检测学习小结1(R-CNN、Fast-R-CNN、Faster-R-CNN)_第7张图片

 

Part-3 R-CNN、Fast-R-CNN、Faster-R-CNN结构图:

  • R-CNN:

       如下图7所示为R-CNN的算法结构,大体流程即为由选择性搜索选出两千个左右候选区域,将这些区域输入卷积神经网络中提取特征,用svm分类器通过特征对目标进行分类,并运用所提取的特征对目标进行边框回归。

目标检测学习小结1(R-CNN、Fast-R-CNN、Faster-R-CNN)_第8张图片

图7

  • Fast-R-CNN:

       如下图8所示为Fast-R-CNN的算法结构,其结合了R-CNN与空间金字塔池化的思想,使用感兴趣区域池化得到固定大小的输入图像,用softmax代替svm分类器,并定义了多任务损失函数,即同时训练分类器和边框回归器。

目标检测学习小结1(R-CNN、Fast-R-CNN、Faster-R-CNN)_第9张图片

图8

  • Faster-R-CNN:

       如下图9所示为Faster-R-CNN的算法结构,其在Fast-R-CNN上引入了区域候选网络RPN,直接在卷积网络最后一层连接RPN网络用以选择候选区域,实现了端到端的训练。

目标检测学习小结1(R-CNN、Fast-R-CNN、Faster-R-CNN)_第10张图片

图9

 

 

 

 

 

       ( 本文就是对各大佬们的论文及博客进行总结及一点点个人看法,参考的太多就不列参考文献了,在这里统一谢过!!!)

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(目标检测)