深度学习基础(六)卷积神经网络——目标检测

参考文章
【特征检测】HOG特征算法
第二十九节,目标检测算法之R-CNN算法详解
目标检测:SPP-net
一文读懂Faster RCNN
目标检测|YOLO原理与实现

在这里插入图片描述

目标检测介绍

目标检测:利用神经网络进行目标识别,同样的目标变为坐标值

回归是将目标的位置作为变量,特点是算的比较快,但是没有那么准确。
分类是将目标进行分块。对分块后的图片进行识别,问题主要在于分类框的选择,选的好的话识别率会很高。

小结:

  • 目标探测任务
  • 目标检测任务分为回归和分类问题
  • 分类的主要思想是找出目标所在的大概位置,在大概位置中进行识别

HOG特征检测算法

HOG(Histogram of Oriented Gridients的简写)特征检测算法,主要思想是:在边缘具体位置未知的情况下,边缘方向的分布也可以很好的表示行人目标的外形轮廓。

HOG特征检测算法的几个步骤:

  1. 颜色空间归一化
  2. 梯度计算
  3. 梯度方向直方图
  4. 重叠块直方图归一化
  5. HOG特征

1、颜色空间归一化
  避免因为颜色和光照影响图像识别的效果;一般通过两个步骤进行修改
图像灰度化:
在这里插入图片描述
Gamma校正:将图像中的整体亮度提高或者减低。

2、梯度计算
  计算图像横坐标和纵坐标方向的梯度,并据此计算每个像素位置的梯度方向值;求导操作不仅能够捕获轮廓,人影和一些纹理信息,还能进一步弱化光照的影响。其思想可以理解为计算每个像素点的变化方向,找到最大比变化的方向,这些方向也就是边缘点

最常用的方法是: 首先用[-1,0,1]梯度算子对原图像做卷积运算,得到x方向(水平方向,以向右为正方向)的梯度分量gradscalx,然后用[1,0,-1]T梯度算子对原图像做卷积运算,得到y方向(竖直方向,以向上为正方向)的梯度分量gradscaly。然后再用以上公式计算该像素点的梯度大小和方向。

3、梯度方向直方图
将图像划分成若干个cells(单元),8x8=64个像素为一个cell,相邻的cell之间不重叠。在每个cell内统计梯度方向直方图,将所有梯度方向划分为9个bin(即9维特征向量),作为直方图的横轴,角度范围所对应的梯度值累加值作为直方图纵轴,每个bin的角度范围如下。

4、重叠块直方图归一化
将cell组合为block进行图像的分割,这样是为了增加在环境和背景情况下的图像识别率。

假设有一幅图像大小为220x310,将其划分成若干个8x8的cells,显然220÷8=27.5、310÷8=38.75不是整数,也就是说划分之后依然还有多余像素不能构成cell。处理办法是将图像缩放成能被8整除的长宽(如216x304),再划分。216÷8=27,304÷8=38,因此,216x304的图像可以得到27x38个cells,没有重叠。

以上述缩放后的图像为例,共得到27x38个cell,也就是将图像划分成了27x38个单元;将上下左右相邻的2x2个cells当做一个block整体,如下所示(为方便观察,每个颜色框故意错开了一点),黑色的8x8像素为一个cell,红、蓝、黄、粉红、绿框都是一个block,即每个框内2x2的cell组成一个block。故27x38个cell可划分成26x37个block,每个block为16x16像素。相邻block之间是有重叠的,这样有效的利用了相邻像素信息,对检测结果有很大的帮助。

在这里插入图片描述
接下分别对每个block进行标准化,一个block内有4个cell,每个cell含9维特征向量,故每个block就由4x9=36维特征向量来表征。

在这里插入图片描述
经过上述对有重叠部分block的直方图归一化之后,将所有block的特征向量都组合起来,则形成26x37x36=34632维特征向量,这就是HOG特征,这个特征向量就可以用来表征整个图像了。

实际上,在运用的时候,我们通常是选取一幅图像中的一个窗口来进行特征提取,依然以上述220X310大小图像为例,经过缩放处理后为216x304,但并不直接提取整个图像的HOG特征,而是用一个固定大小的窗口在图像上滑动,滑动的间隔为8个像素,opencv中默认的窗口大小为128x64(高128,宽64),即有(128÷8)x(64÷8)=16x8个cell,也即有15x7个block,这样一来一幅图像就可以取到(27-15)x(38-7)=12x31=372个窗口。现在提取每个窗口的HOG特征,则可得到105x36=3780维HOG特征向量。

将这330个3780维的HOG特征当做测试样本,用支持向量机(SVM)分类器来判别出,这些窗口的HOG特征是否有行人,有行人的用矩形框标记起来。HOG行人特征及所对应的SVM分类器的参数,在opencv中已经训练好了,我们只需要得到HOG特征,然后调用SVM即可得到判别结果。

传统方法——DPM

基本思想:提取图像特征,制作激励模板,在原始图像滑动计算,得到激励效果图,根据激励分布确定目标位置。

人为设计一个卷积核,使用卷积核对原图像进行卷积运算计算得到一个特征图,通过特征图来判断是否为所需要的识别的物体,但是由于存在方向或者姿态等影响到我们图像识别的因素,我们在进行识别时可以采用局部识别的方式,例如不去识别一个人的整体而是通过识别一个模板,例如,头,胳膊,腿等方式进行识别。

DPM算法的步骤:

1、产生多个模板,整体模板以及不同的局部模板;

2、拿这些不同的模板同输入图像“卷积”产生特征图;

3、将这些特征图组合形成融合特征;

4、对融合特征进行传统分类,回归得到目标位置。

DPM算法优点:

1、方法直观简单;

2、运算速度块;

2、适应动物变形;

神经网络分类——RCNN

通过分割多个位置,不同尺寸的图片,用卷积神经网络判断图片是否为某物。

RCNN的基本还是按照提取框,对每个框提取特征、图像分类、非极大值抑制等步骤进行识别的。只是在一些小部分上进行了改进。

  • 经典的目标检测算法使用滑动窗法依次判断所有可能的区域。而这里预先提取一系列较可能是物体的候选区域,之后仅在这些候选区域上提取特征,进行判断,大大减少了计算量。
  • 将传统的特征(如SIFT,HOG特征等)换成了深度卷积网络提取特征。

在训练时使用两个数据库:

  • 一个较大的识别库(ImageNet ILSVC 2012):标定每张图片中物体的类别。一千万图像,1000类。
  • 一个较小的检测库(PASCAL VOC 2007):标定每张图片中,物体的类别和位置。一万图像,20类。

使用识别库(ImageNet)进行预训练,而后用检测库(VOC fine-tuning)调优参数。最后在检测库上评测。

RCNN算法简述

  • 数据集采用pascal VOC,这个数据集的object一共有20个类别。

  • 首先用selective search方法在每张图像上选取约2000个region proposal,region proposal就是object有可能出现的位置。

  • 然后根据这些region proposal构造训练和测试样本,注意这些region proposal的大小不一,另外样本的类别是21个(包括了背景)。

  • 然后是预训练,即在ImageNet数据集下,用AlexNet进行训练。然后再在我们的数据集上fine-tuning,网络结构不变(除了最后一层输出由1000改为21),输入是前面的region proposal进行尺寸变换到一个统一尺寸227×227,保留f7的输出特征2000×4096维。

  • 针对每个类别(一共20类)训练一个SVM分类器,以f7层的输出作为输入,训练SVM的权重4096×20维,所以测试时候会得到2000×20的得分输出,且测试的时候会对这个得分输出做NMS(non-maximun suppression),简单讲就是去掉重复框的过程。同时针对每个类别(一共20类)训练一个回归器,输入是pool5的特征和每个样本对的坐标即长宽。

RCNN的改进——SPP-net

在R-CNN中,候选区域需要进过变形缩放,以此适应CNN输入,那么能不能修改网络结构,使得任意大小的图片都能输入到CNN中呢?作者提出了spatial pyramid pooling结构来适应任何大小的图片输入。

由于FC层的存在,普通的CNN通过固定输入图片的大小来使得全连接层输入固定。作者不这样思考,既然卷积层可以适应任何尺寸,那么只需要在卷积层的最后加入某种结构,使得后面全连接层得到的输入为固定长度就可以了。

在最后的卷积层和全连接层之间加入SPP层。具体做法是ÿ

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值