深度学习之目标检测

  • 深度学习为什么要训练,训练的模型又是什么?

机器学习大概有如下步骤:确定模型-训练模型-使用模型。其中模型可以简单的定义为函数,确定模型是说自己认为这些数据特征符合哪个函数,训练模型就是用自己的数据,通过一些方法(最优化或其他方法)确定函数的参数,参数确定后的函数就是训练的结果,使用模型就是把新的数据代入函数求值。

  • 什么是目标检测

目标检测是指输入待检测图像,获得图像中感兴趣的目标,确定他们的位置和大小。

  • 目标检测要解决的核心问题是:

1.目标可能出现先图像的任何位置;

2.目标有各种大小;

3.目标可能有各种不同的形状

如果用矩形框来定义目标,则矩形有不同的宽高比。由于目标的宽高比不同,因此采用经典的滑动窗口+图像缩放的方案解决通用目标检测问题的成本太高。

  • 基于深度卷积神经网络的目标检测与识别算法发展趋势

不看任何做法, 给出一张图,如何检测出物体的类别和位置?

现产生一些可能含有物体的目标框(region prosoal/bounding box),对于给定的目标框做分类,这样就把检测的问题转成了分类的问题了。那么如何产生目标框了?传统的方法有selective search,深度学习方法有Faster rcnn中的RPN。

selective search的策略是:既然是不知道尺度是怎样的,那我们就尽可能遍历所有的尺度好了,首先通过基于图的图像分割方法初始化原始区域,就是将图像分割成很多很多的小块。然后我们使用贪心策略,计算每两个相邻的区域的相似度,然后每次合并最相似的两块,直到最终只剩下一块完整的图片。然后这其中每次产生的图像块包括合并的图像块我们都保存下来,这样就得到图像的分层表示了呢。RPN的介绍会在后面涉及到。

RCNN

RCNN的具体步骤是:

  1. 通过选择性搜索算法从待检测图像中提取2000个左右的区域候选框,这些候选框可能包含要检测的目标
  2. 把所有候选框缩放成固定大小(原文中是277*277)
  3. 通过CNN提取每一个候选区域的特征,得到固定长度的特征向量
  4. 训练SVM分类器
  5. 训练边界框回归器

缺点:R-CNN流程较多,包括region proposal的选取,训练卷积神经网络(softmax classifier,log loss),训练SVM(hinge loss)和训练 regressor(squared loss),这使得训练时间非常长(84小时),占用磁盘空间也大。在训练卷积神经网络的过程中对每个region proposal都要计算卷积,这其中重复的太多不必要的计算,试想一张图像可以得到2000多个region proposal,大部分都有重叠,因此基于region proposal卷积的计算量太大,而这也正是之后Fast R-CNN主要解决的问题

Fast R-CNN

  • ROI pooling

ROI Pooling的作用是对不同大小的region proposal从最后卷积层输出的feature map提取大小固定的feature map。简单讲可以看做是SPPNet的简化版本,因为全连接层的输入需要尺寸大小一样,所以不能直接将不同大小的region proposal映射到feature map作为输出,需要做尺寸变换。在文章中,VGG16网络使用H=W=7的参数,即将一个h*w的region proposal分割成H*W大小的网格,然后将这个region proposal映射到最后一个卷积层输出的feature map,最后计算每个网格里的最大值作为该网格的输出,所以不管ROI pooling之前的feature map大小是多少,ROI pooling后得到的feature map大小都是H*W。

  • 训练和测试过程

算法主网络是VGG16,fast-RCNN的一般模型为:

训练过程:输入的是224*224,经过5个卷积层和2个降采样层(这两个降采样层是分别接在卷积层后面)后,进入ROIPooling层,该层输入的是conv5层的输出和region proposal,region proposal的个数差不多2000。然后再经过两个都是output是4096的全连接层。最后分别经过output个数是21和84的两个全连接层(这两个全连接层是并列的,不是前后关系),前者是分类的输出,代表每个region proposal属于每个类别(21类)的得分,后者是回归的输出,代表每个region proposal的四个坐标。最后是两个损失层,分类的是softmaxWithLoss,输入是label和分类层输出的得分;回归的是SmoothL1Loss,输入是回归层的输出和target坐标及weight。

测试过程:与训练基本相同,最后两个loss层要改成一个softma层,输入是分类的score,输出概率。最后对每个类别采用NMS(non-maximun suppression)。

  • Fast RCNN主要有3个改进:

1、卷积不再是对每个region proposal进行,而是直接对整张图像,这样减少了很多重复计算。原来RCNN是对每个region proposal分别做卷积,因为一张图像中有2000左右的region proposal,肯定相互之间的重叠率很高,因此产生重复计算。

2、用ROI pooling进行特征的尺寸变换,因为全连接层的输入要求尺寸大小一样,因此不能直接把region proposal作为输入。

3、将regressor放进网络一起训练,每个类别对应一个regressor,同时用softmax代替原来的SVM分类器。

  • Fast R-CNN存在的问题

存在瓶颈:选择性搜索,找出所有的候选框,这个也非常耗时。

Faster R-CNN

  • RPN

 RPN是faster-RCNN中的Region Proposal Network,就是以一张任意大小的图片作为输入,输出一批矩形区域的提名,每一个区域都会对应目标的分数和位置信息。实际就是在最终的卷积特征层上,在每个点利用滑窗生成k个不同的矩形框来提取区域,k一般取为9。K个不同的矩形框被称为anchor,具有不同尺度和比例。用分类器来判断anchor覆盖的图像是前景还是背景。对于每一个anchor,还需要使用一个回归模型来回归框的精细位置。
在这里插入图片描述

与selective search方法相比,RPN网络将候选区域的选择从图像中移到了feature map中,因为feature map的大小远远小于原始的图像,此时的滑动窗口的计算量呈数量级的降低。并且RPNs和RoI Pooling还共用了基础的网络,更是大大地减少了参数量和预测时间。由于是在特征空间进行候选框生成,可以学到更加高层语义的抽象特征,生成的候选区域的可靠程度也得到了大大提高。

  • Faster R-CNN的主要步骤如下:

1.特征提取:与Fast R-CNN相同,Faster R-CNN把整张图片输入神经网络中,利用CNN处理图片得到feature map;

2.区域提名:在上一步骤得到的feature map上学习proposal的提取;

3.分类与回归:对每个Anchor Box对应的区域进行二分类,判断这个区域内是否有物体,然后对候选框位置和大小进行微调,分类。

参考内容:https://blog.csdn.net/qq_27825451/article/details/88843333

https://blog.csdn.net/jiaoyangwm/article/details/89002392#52_RCNN_FastRCNN_FasterRCNN_212

 

猜你喜欢

转载自blog.csdn.net/qq_35699505/article/details/89085213