秃姐学AI系列之:目标检测的常用算法

目录

区域卷积神经网络 region-based CNN

R-CNN

兴趣区域(Region of interest)池化层

Fast RCNN

Faster R-CNN

Mask R-CNN

总结

 单发多框检测 Single Shot Multibox Derector

总结

YOLO-You Only Look Once


区域卷积神经网络 region-based CNN

除了这篇博文中描述的单发多框检测之外, 区域卷积神经网络(region-based CNN或regions with CNN features,R-CNN)也是将深度模型应用于目标检测的开创性工作之一。

R-CNN

具体来说,R-CNN包括以下四个步骤:

  1. 使用启发式搜索算法来选择锚框(不是这块工作提出来的,是之前就有的)

  2. 选择一个预训练的卷积神经网络,并将其在输出层之前截断。对每个锚框提取特征。

  3. 将每个提议区域的特征连同其标注的类别作为一个样本。训练多个支持向量机(SVM)对目标分类,其中每个支持向量机用来判断样本是否属于某一个类别;

  4. 将每个提议区域的特征连同其标注的边界框作为一个样本,训练线性回归模型来预测边缘框的偏移

兴趣区域(Region of interest)池化层

问题来了,我们每个锚框选定的都不一样,我们如何把它们变成一个batch呢?所以这里运用了一个RoI Pooling操作

  • 给定一个锚框,均匀分割成n*m块,输出每块里最大的值
  • 不管锚框多大,总是输出n*m个值

即不管锚框输入进来多大,输出都是同样大小,就可以作为一个batch卷入 

块1:2*2——0,1,4,5

块2:1*2——2,6

块3:2*1——8,9

块4:1*1——10 

尽管R-CNN模型通过预训练的卷积神经网络有效地抽取了图像特征,但它的速度很慢。 想象一下,我们可能从一张图像中选出上千个提议区域,这需要上千次的卷积神经网络的前向传播来执行目标检测。 这种庞大的计算量使得R-CNN在现实世界中难以被广泛应用。

Fast RCNN

RCNN系列最早的模型

R-CNN 的主要性能瓶颈在于,对每个提议区域,卷积神经网络的前向传播是独立的,而没有共享计算。 由于这些区域通常有重叠,独立的特征抽取会导致重复的计算。Fast R-CNN 对 R-CNN 的主要改进之一,是仅在整张图象上执行卷积神经网络的前向传播。

它的主要计算如下:

  1. 与 R-CNN 相比,Fast R-CNN 用来提取特征的卷积神经网络的输入是整个图像,而不是各个预测锚框。此外,这个网络通常会参与训练。设输入为一张图像,将卷积神经网络的输出的形状记为 1×C×H1×W1;

  2. 使用RoI Pooling对每个锚框生成固定长度的,特征形状为 N×C×H2×W2;

  3. 通过全连接层将输出形状变换为 N×D,其中超参数 D 取决于模型设计;

  4. 预测 n 个预测锚框中每个区域的类别和边界框。更具体地说,在预测类别和边界框时,将全连接层的输出分别转换为形状为 N×Q(Q是类别的数量)的输出和形状为 N×4 的输出。其中预测类别时使用 Softmax 回归。

先用 CNN 卷出一张 feature map,然后用之前预测好的锚框等比例缩小/放大的找到在 feature map 上的对应。所以RoI池化的输出形状应该是 锚框数*比例 

Faster R-CNN

  • 使用一个区域提议网络来代替启发式搜索来获得更好的锚框 

与 Fast R-CNN 相比,Faster R-CNN 只将生成预测锚框的方法从 选择性搜索 改为了 区域提议网络,模型的其余部分保持不变。具体来说,区域提议网络的计算步骤如下:

  1. 使用填充为 1 的 3×3 的卷积层变换卷积神经网络的输出,并将输出通道数记为C。这样卷积神经网络为图像抽取的特征图中的每个单元均得到一个长度为C的新特征。

  2. 以特征图的每个像素为中心,生成多个不同大小和宽高比的锚框并标注它们。

  3. 使用锚框中心单元长度为 C 的特征,分别预测该锚框的二元类别(含目标还是背景)和边界框。

  4. 使用非极大值抑制,从预测类别为目标的预测边界框中移除相似的结果。最终输出的预测边界框即是兴趣区域汇聚层所需的提议区域。

区域提议网络其实就是一个糙一点的目标检测 

值得一提的是,区域提议网络作为 Faster R-CNN 模型的一部分,是和整个模型一起训练得到的。 换句话说,Faster R-CNN 的目标函数不仅包括目标检测中的类别和边界框预测,还包括区域提议网络中锚框的二元类别和边界框预测。 作为端到端训练的结果,区域提议网络能够学习到如何生成高质量的提议区域,从而在减少了从数据中学习的提议区域的数量的情况下,仍保持目标检测的精度。

Mask R-CNN

如果在训练集中还标注了每个目标在图像上的像素级位置,那么 Mask R-CNN 能够有效地利用这些详尽的标注信息进一步提升目标检测的精度。

  • 通过FCN(Fully Convolutional Network)来处理利用这些信息(下图的掩码预测 + 全卷积网络)

Mask R-CNN是基于 Faster R-CNN 修改而来的。 具体来说:

  • Mask R-CNN将RoI Pooling替换为了兴趣区域对齐层(RoI Align),使用双线性插值(bilinear interpolation)来保留特征图上的空间信息,从而更适于像素级预测。

因为之前的RoI Pooling的例子我们看到,3*3的锚框采用2*2的RoI Pooling时候会导致四个区域形状大小不一样,在目标检测里面没太大关系,因为一个框挪动一点点没关系;

但是在像素级预测里面误差问题就比较大,所以需要换成RoI Align

  • 兴趣区域对齐层的输出包含了所有与锚框的形状相同的特征图。 它们不仅被用于预测每个兴趣区域的类别和边界框,还通过额外的全卷积网络预测目标的像素级位置。

总结

  • R-CNN是最早、也是最有名的一类基于锚框和CNN的目标检测算法——对图像选取若干预测锚框,使用卷积神经网络对每个预测锚框执行前向传播以抽取其特征,然后再用这些特征来预测提议区域的类别和边界框。

  • Fast R-CNN 对 R-CNN 的一个主要改进:只对整个图像做卷积神经网络的前向传播。它还引入了兴趣区域汇聚层(RoI Pooling),从而为具有不同形状的兴趣区域抽取相同形状的特征。

  • Faster R-CNN 将 Fast R-CNN 中使用的选择性搜索替换为参与训练的区域提议网络,这样后者可以在减少提议区域数量的情况下仍保证目标检测的精度。

  • Mask R-CNN在Faster R-CNN的基础上引入了一个全卷积网络,从而借助目标的像素级位置进一步提升目标检测的精度。

  • Faster R-CNN 和 Mask R-CNN 是在追求高精度场景下的常用算法(比如无人车)

 单发多框检测 Single Shot Multibox Derector

此模型主要由基础网络组成,其后是几个多尺度特征块。 基本网络用于从输入图像中提取特征,因此它可以使用深度卷积神经网络。

单发多框检测论文中选用了在分类层之前截断的VGG,现在也常用 ResNet 替代。我们可以设计基础网络,使它输出的高和宽较大。这样一来,基于该特征图生成的锚框数量较多,可以用来检测尺寸较小的目标。 接下来的每个多尺度特征块将上一层提供的特征图的高和宽缩小(如减半),并使特征图中每个单元在输入图像上的感受野变得更广阔。

由于接近顶部的多尺度特征图较小,但具有较大的感受野,它们适合检测较少但较大的物体。 简而言之,通过多尺度特征块,单发多框检测生成不同大小的锚框,并通过预测边界框的类别和偏移量来检测大小不同的目标,因此这是一个多尺度目标检测模型。

简而言之就是:

  1. 一个基础网络来抽取特征,然后多个卷积层块来减半高宽
  2. 在每段都生成锚框
    1. 底部段来拟合小物体,顶部段来拟合大物体
  3. 对每个锚框预测类别和边缘框

总结

  • SSD通过单神经网络来检测模块

  • 以每个像素为中心产生多个锚框

  • 在多个段的输出上进行多尺度的检测

  • 在训练单发多框检测模型时,损失函数是根据锚框的类别和偏移量的预测及标注值计算得出的。

YOLO-You Only Look Once

  •  SSD中锚框大量重叠,因此浪费了很多计算
  • YOLO将图片均匀分成S x S个锚框,不会重叠,也不会浪费计算量
  • 每个锚框预测 B 个边缘框:因为均匀分布所以会导致有可能一个锚框框中多个物体。
  • YOLO后续还有一系列改进(V2,V3,V4....)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值