深度学习之目标检测学习笔记(一)——目标检测R-CNN

目标检测概念

目标检测在应用中关注的是图片中特定目标物体的位置和目标的对象类别。一个检测任务包括两个子任务:

  • 输出对象目标的类别信息——属于分类任务
  • 输出目标的具体位置信息——属于定位任务

对于目标检测,分类的结果是一个类别标签。对于单个分类任务而言,它是一个整数,表示某一个类别,对于多分类任务,他是一个向量。换一句话说,分类检测的结果是一个结果表示最终输出,区别在于结果是单一数还是向量。在检测任务中输出的是一个列表,表示其中的每一项都会给出检测目标的类别和位置。类别指分类的标签,往往是一个字符串形式。对象的位置一般用矩形框表示,表征矩形框的数据包含矩形框左上角或中间位置的x,y坐标和宽度高度,其中坐标和宽高数据有时以归一化数据保存。

#数据格式
s[2,n] = label + xywh

目标检测步骤

在我们的传统思路中,解决一个复杂问题往往需要多个步骤。在深度学习中,很多任务都是采用端到端的方案,end to end,就是输入一张图片,输出最终想要的结果,算法细节和学习过程全部交给神经网络实现。尤其是目标检测问题。
确定一个目标往往需要明确3个步骤:

  • 选择检测窗口
  • 提取图像特征
  • 设计分类器

检测窗口选择

目标检测的最终任务是检测一个图像窗口里有没有需要的物体,有的话物体进一步明确物体在哪里。我们用一点简单的思维来理解一下:图像金字塔方法+各种尺度和大小的框+暴力搜索。
在这里插入图片描述
就像图片里展示的,我们可以使用很多的框,用一种金字塔的方式(中心小框,越往外框越大,逐渐递增)遍历整个图片区域来寻找。这种利用窗口滑动来确定候选框的方法,只要计算足够充分肯定可以实现检测的效果。但是现实中往往不允许这样大量的无效窗口,浪费很多的资源,最终还是无法得到精确的位置。后面产生的一系类算法有很重要的一步就是优化刚才所说的步骤。

特征提取

经过检测窗口的选择之后,我们需要提取图像的特征并判断窗口特征。传统的有监督方法就是耳熟能详的CNN为代表,也有无监督学习可以使用。这里简单描述几个传统并且常用的特征检测方法。

  • Haar特征是经典的V-J框架(一个人脸检测算法,在OpenCV中的实现为cv::HaarDetectObjects)使用的基本特征。它表征的是局部的明暗关系。由于Haar特征提取速度很快,能够表达物体多个方向的边缘信息,可以利用积分图进行快速计算。
  • LBP方法也是传统人脸检测中广泛使用的纹理特征,它采用中心像素和边缘像素的灰度对比,可以表达物体丰富的纹理信息,同时因为使用的是相对灰度值,对均匀变化的光照有很好的适应性。
  • HOG是在物体检测领域应用很广的特征检测方法,通过对物体边缘进行直方图统计来实现编码。HOG的特征表达能力更强,更加通用,被大范围使用在物体检测、跟踪和识别等领域。

分类器

分类器是目标检测的最后一步,常见的分类器比如SVM支持向量机。当然还有Adaboost,DecisionTree等分类器。

SVM

SVM是传统分类问题里优秀的分类器,通过最大化分类间隔得到分类平面的支持向量,在线性可分的小数据集上有着不错的分类精度。SVM可以通过引入核函数将低维映射到高维,从而将很多线性不可分的问题转化为线性可分。以SVM为分类器HOG为特征的检测算法在行人检测中有很多应用的同时也在很多具体场景里有较好的表现。

Adaboost分类器、决策树与随机森林

待更新。。。。。。

目标检测方法

传统方法由于滑窗效率低下、特征不够鲁棒等原因限制了目标检测的发展。当深度学习和目标检测结合之后,检测效果有了很好的改进。根据检测结果的不同,可以将深度学习方法分为one-stage检测和two-stage检测两种。

two-stage

先生成可能包含物体的候选区域Region Proposal,然后对候选区域做进一步的分类和校准,得到最终的检测结果,代表方法有R-CNN。

R-CNN

R-CNN框架中使用Selective search将候选区域控制在2000个左右,然后将对应的框进行缩放操作,送入CNN中进行训练,通过SVM和回归器确定物体的类别并对其进行定位。
简单来说,R-CNN的方法是先生成候选区域,候选区域用Selective search方法提取。然后再对区域进行卷积,其中候选区域会有一定程度的重叠。提取出特征后将特征存储下来,使用传统的SVM分类器进行分类。这个操作中往往需要很大的储存空间。R-CNN方法需要将区域缩放到同一尺寸输入到网络进行训练。但实际上Selective search选取的目标框有各种尺寸的,这就会导致输入的图像被缩放之后才进入网络训练,直接进行裁剪或缩放会使图片信息发生丢失,会使目标变形影响最终的结果。
提取出候选区并提取特征后,RCNN会把相似的小区域合并成一个大的区域,最后生成一个物体大的矩形框,通过这种方法可以大幅度提高候选区域的筛选速度。
前面说到要把图像候选区域缩放到固定的尺度,是因为全连接层的输入需要固定的大小,所以如果要使用不同大小的图就必须要在输入全连接层之前进行统一的尺寸变换。
总结一下,R-CNN的步骤就是:

  1. 输入一张图片,利用特定方法选出2000个类别的候选区域
  2. 将候选区域进行缩放操作后送入CNN中训练,通过CNN提取一个特征向量
  3. 利用SVM和回归器对每一个区域进行目标分类
  4. 最终结果输出
    在这里插入图片描述

SPP层

为了解决R-CNN中的图像尺寸问题,保证图像归一化到同样的输入,不发生信息丢失,可以通过一个特殊的池化层Spatial Pyramind Pooling层来解决。它实现了任意尺度的特征图组合成特定维度的输出,从而去掉了将输入的任意尺度特征图组合成特定维度的输出,从而去掉了原始图像上的裁剪/缩放操作的约束。
在这里插入图片描述
Spatial Pyramind Pooling是在卷积特征上的空间金字塔池化层,不管输入图像为多大。利用max pooling操作将其分为11,22,44(或1d,2d,4d,d表示维度)的3张子图,从而由原来的任意N*N大小的FeatureMap都被表示为21维的固定维度向量,然后输入全连接层。
在实际进行检测任务的时候,可以根据任务本身来设计SPP操作,解决输入图像大小的问题,避免了缩放变形操作的问题。

版权声明:本文为CSDN博主「絮沫」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_47407066/article/details/122094724

絮沫

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

MCCNN

Automatic Detection and Classification System of Domestic Waste via Multi- model Cascaded Convolutional Neural Network 基于多

Fast RCNN论文总结

原文链接 [1504.08083] Fast R-CNN (arxiv.org) Abstract Fast RCNN在实现了几个创新点后在提升训练、测试速度的同时增加了检测的准确度 Introduction 检测需要准确的物体位置信