赞
踩
计算机视觉中的三大类任务:
目标检测可以理解为是物体识别和物体定位的综合,不仅仅要识别物体属于哪个分类,更重要的是得到物体在图片中的具体位置。
为了完成这两个任务,目标检测模型分为两类。一类是two-stage算法;一类是one-stage算法。对于two-stage检测方法来说,它先生成了可能包含物体的候选区域Region Proposal,然后对这个候选区域做进一步的分类和校准,得到最终的检测结果,代表方法有R-CNN系列方法。而对于one-stage检测算法直接给出最终的检测结果,没有经过生成候选区域的步骤,典型代表为YOLO和SSD。
目标检测算法的3个模块:第一个是检测窗口的选择
;第二个是图像特征的提取
;第三个是分类器的设计
。
1.滑动窗口法
首先对输入图像进行不同窗口大小的滑窗进行从左往右、从上到下的滑动。每次滑动时候对当前窗口执行分类器(分类器是事先训练好的)。如果当前窗口得到较高的分类概率,则认为检测到了物体。对每个不同窗口大小的滑窗都进行检测后,会得到不同窗口检测到的物体标记,这些窗口大小会存在重复较高的部分,最后采用非极大值抑制(Non-Maximum Suppression, NMS)的方法进行筛选。最终,经过NMS筛选后获得检测到的物体。
2.选择性搜索(Selective Search)
为了在滑动窗口检测器的基础上提高搜索速度,可以采用候选区域方法(region proposal method)创建目标检测的感兴趣区域(ROI)。
图像中物体可能存在的区域应该是有某些相似性或者连续性区域的。因此,选择搜索基于上面这一想法采用子区域合并的方法进行提取bounding boxes候选边界框。首先,对输入图像进行分割算法产生许多小的子区域。其次,根据这些子区域之间相似性(相似性标准主要有颜色、纹理、大小等等)进行区域合并,不断的进行区域迭代合并。每次迭代过程中对这些合并的子区域做bounding boxes(外切矩形),这些子区域外切矩形就是通常所说的候选框。
3.区域候选网络(Region Proposal Network RPN)
anchor是固定尺寸的bbox。具体作法是:把feature map每个点映射回原图的感受野的中心点当成一个基准点,然后围绕这个基准点选取k个不同的尺寸和比例的anchor。对于W×H大小的卷积feature map(通常为2400),总共有W×H×k个锚点。默认使用3个尺度和3个纵横比,在每个滑动位置上产生k=9个anchor。在feature map上的每个特征点预测多个region proposals。例如对于像素点个数为 51×39 的一幅feature map上就会产生 51×39×9 个候选框。虽然anchors是基于卷积特征图定义的,但最终的 anchors是相对于原始图片的。
Region CNN由Ross Girshick提出,是利用深度学习进行目标检测的里程碑之作,奠定了这个子领域的基础。
步骤:
缺点:
SPP:Spatial Pyrmid Pooling(空间金字塔池化)。
CNN一般都含有卷积部分和全连接部分。其中,卷积层不需要固定尺寸的图像,而全连接层是需要固定大小的输入。
所以当全连接层面对各种尺寸的输入数据时,就需要对输入数据进行crop(crop就是从一个大图中扣出网络输入大小的patch,比如227×227),或warp(把一个边界框bounding box的内容resize成227×227)等一系列操作以统一图片的尺寸大小。
SPP Net的作者何凯明考虑到,既然由于全连接FC层的存在,普通的CNN需要通过固定输入图片的大小来使得全连接层的输入固定。那借鉴卷积层可以适应任何尺寸,为何不能在卷积层的最后加入某种结构,使得后面全连接层得到的输入变成固定的呢?
这个“化腐朽为神奇”的结构就是spatial pyramid pooling layer。下图便是R-CNN和SPP Net检测流程的比较:
Spatial Pyramid Pooling层,对卷积特征图像进行空间金字塔采样获得固定长度的输出,可对特征层任意长宽比和尺度区域进行特征提取。具体做法是对特征图像区域进行固定数量的网格划分,对不同宽高的图像,每个网格的高度和宽度是不规定的,但对划分的每个网格进行池化,这样就可以得到固定长度的输出。SPP操作示意图:
步骤:
Fast R-CNN主要优化了两个问题:
1.提出ROI Pooling池化层结果,解决了候选框子图必须将图像裁剪缩放到相同尺寸大小的问题。由于CNN网络的输入图像尺寸必须是固定的某一个固定大小(否则全连接没法计算),故R-CNN中对大小形状不同的候选框,进行了裁剪和缩放,使得他们达到相同的尺寸。这个操作既浪费时间,又容易导致图像信息丢失和形变。fast R-CNN在全连接层之前插入了ROI pooling层,从而不需要对图像进行裁剪,很好的解决了这个问题。
ROI Pooling的具体操作如下:
这样我们就可以从不同大小的方框得到固定大小的相应 的feature maps。值得一提的是,输出的feature maps的大小不取决于ROI和卷积feature maps大小。ROI pooling 最大的好处就在于极大地提高了处理速度。
2.提出多任务损失函数思想,将分类损失和边框定位回归损失结合在一起统一训练,最终输出对应分类和边框坐标。
步骤:
R-CNN和fast R-CNN均存在一个问题,那就是由选择性搜索来生成候选框,这个算法很慢。Faster R-CNN针对这个问题,提出了RPN网络来进行候选框的获取,从而摆脱了选择性搜索算法,也只需要一次卷积层操作,从而大大提高了识别速度。
主要步骤:
R-FCN是Faster-RCNN的改进型,其速度提升了2.5倍以上,并略微提高了准确度。其主要贡献是提出Position-sentive score maps来解决目标检测的位置敏感性
问题。
位置敏感性
分类网络的位置不敏感性
对于分类任务而言,我希望我的网络有一个很好的分类性能,随着目标在图片中不断的移动,但我的忘了仍然可以准确的将你区分为对应的类别。如上图左边所示,不管你这个鸟在图片中如何移动,我的分类网络都能准确的将你分类为鸟。即我的网络有很好的区分能力。
检测网络的位置敏感性
对于检测任务而言,我希望我的网络有一个很好的检测性能,可以准确的输出目标所在的位置值。随着某个目标的移动,我的网络希望能够和它一起移动,仍然能够准确的检测到它,即我对目标位置的移动很敏感。我需要计算对应的偏差值,我需要计算我的预测和GT的重合率等。但是,深的全卷积网络不具备这样的一个特征。
总之分类网络的位置不敏感性和检测网络的位置敏感性的一个矛盾问题,而我们的目标检测中不仅要分类也要定位
,那么如何解决这个问题呢,R-FCN提出了Position-sensitive score maps来解决这个问题。
步骤:
骨干架构(backbone architecture)
R-FCN使用的是残差网络的ResNet-101结构,ResNet-101采用的是100层卷积+Global Averaging Pooling(GAP)+ FC分类器的结构,ResNet101卷积的最后一层的Feature Map的个数是2048。在R-FCN中,去掉了ResNet的GAP层和fc层,并在最后一个卷积层之后使用1024个1×1×2048卷积降维到1024-d,然后再使用k2*(C+1)个1×1×1024-d的卷积生成k2*(C+1)-d的位置敏感卷积层。其中ResNet部分使用在ImageNet上训练好的模型作为初始化参数。
位置敏感网络
该层的大小和ResNet-101最后一层的大小相同,维度是k^2×(C+1)。C+1C+1为类别数,表示CC类物体加上1类背景。k是一个超参数,表示把ROI划分grid的单位,一般情况下,k=3。在R-FCN中,一个ROI区域会被等比例划分成一个k×k的grid,每个位置为一个bin,分别表示该grid对应的物体的敏感位置(左上,正上,右上,正左,正中,正右,左下,正下,右下)编码。
步骤:
架构:
YOLOv1由24层卷积层,4个最大池化层和2个全连接层组成。我们关注最后的输出是7x7x30,这里是7x7代表输入图像的7x7栅格,一一对应,30的前十个代表2个bounding boxes的坐标以及对象的置信度,后20个代表VOC数据集的20个类别。
标签定义:
YOLOv1是一个监督式的网络,有监督那就有标签,来看看标签是怎样定义,首先看狗,它被一个框框起来了,这个框就是真实的标签,框对应的中心在哪个栅格,就代表当前栅格是狗所在的栅格,这个栅格里就会记录狗的标签信息,自行车和小车和狗类似。
SSD的全称是Single Shot MultiBox Detector,Single Shot表示SSD是像YOLO一样的单次检测算法,MultiBox指SSD每次可以检测多个物体,Detector表示SSD是用来进行物体检测的。
SSD做出的改进如下:
SSD的网络结构
SSD论文采用了VGG16的基础网络,其实这也是几乎所有目标检测神经网络的惯用方法。先用一个CNN网络来提取特征,然后再进行后续的目标定位和目标分类识别。
这一层由5个卷积层和一个平均池化层组成。去掉了最后的全连接层。SSD认为目标检测中的物体,只与周围信息相关,它的感受野不是全局的,故没必要也不应该做全连接。SSD的特点如下
和faster R-CNN相似,SSD也提出了anchor的概念。卷积输出的feature map,每个点对应为原图的一个区域的中心点。以这个点为中心,构造出6个宽高比例不同,大小不同的anchor(SSD中称为default box)。每个anchor对应4个位置参数(x,y,w,h)和21个类别概率(voc训练集为20分类问题,在加上anchor是否为背景,共21分类)。如下图所示
和yolo的筛选层基本一致,同样先过滤掉类别概率低于阈值的default box,再采用NMS非极大值抑制,筛掉重叠度较高的。只不过SSD综合了各个不同feature map上的目标检测输出的default box。
SSD基本已经可以满足我们手机端上实时物体检测需求了,TensorFlow在Android上的目标检测官方模型ssd_mobilenet_v1_android_export.pb,就是通过SSD算法实现的。它的基础卷积网络采用的是mobileNet,适合在终端上部署和运行。
在保持实时性的基础上,对YOLOv2进行了几点改进,主要有三点:采用逻辑回归预测置信度和进行分类,从三个尺度上预测b-box的坐标以及特征提取器发生变化。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。