目标检测的原理(目标检测的原理是什么)

2023-07-08
145 阅读

YOLO 目标检测实战项目『原理篇』

在目标检测中,IoU 为预测框 (Prediction) 和真实框 (Ground truth) 的交并比。

如下图所示,在关于小猫的目标检测中,紫线边框为预测框 (Prediction),红线边框为真实框 (Ground truth)。

在目标检测任务中,通常取 IoU≥0.5,认为召回。

如果 IoU 阈值设置更高,召回率将会降低,但定位框则更加精确。

理想的情况,当然是预测框与真实框重叠越多越好,如果两者完全重叠,则交集与并集面积相同,此时 IoU 等于 1。

之前的目标检测方法需要先产生候选区再检测的方法虽然有相对较高的检测准确率,但运行速度较慢。

YOLO 将识别与定位合二为一,结构简便,检测速度快,更快的 Fast YOLO 可以达到 155FPS。

YOLO 网络借鉴了 GoogLeNet 分类网络结构,不同的是 YOLO 使用 1x1 卷积层和 3x3 卷积层替代 inception module。

如下图所示,整个检测网络包括 24 个卷积层和 2 个全连接层。

其中,卷积层用来提取图像特征,全连接层用来预测图像位置和类别概率值。

如上图所示,损失函数分为坐标预测(蓝色框)、含有物体的边界框的 confidence 预测(红色框)、不含有物体的边界框的 confidence 预测(黄色框)、分类预测(紫色框)四个部分。

由于不同大小的边界框对预测偏差的敏感度不同,小的边界框对预测偏差的敏感度更大。

为了均衡不同尺寸边界框对预测偏差的敏感度的差异。

作者巧妙的对边界框的 w,h 取均值再求 L2 loss. YOLO 中更重视坐标预测,赋予坐标损失更大的权重,记为 coord,在 pascal voc 训练中 coodd=5 ,classification error 部分的权重取 1。

某边界框的置信度定义为:某边界框的 confidence = 该边界框存在某类对象的概率 pr (object)* 该边界框与该对象的 ground truth 的 IOU 值 ,若该边界框存在某个对象 pr (object)=1 ,否则 pr (object)=0 。

由于一幅图中大部分网格中是没有物体的,这些网格中的边界框的 confidence 置为 0,相比于有物体的网格,这些不包含物体的网格更多,对梯度更新的贡献更大,会导致网络不稳定。

为了平衡上述问题,YOLO 损失函数中对没有物体的边界框的 confidence error 赋予较小的权重,记为 noobj,对有物体的边界框的 confidence error 赋予较大的权重。

在 pascal VOC 训练中 noobj=0.5 ,有物体的边界框的 confidence error 的权重设为 1. YOLOv1 虽然检测速度快,但在定位方面不够准确,并且召回率较低。

为了提升定位准确度,改善召回率,YOLOv2 在 YOLOv1 的基础上提出了几种改进策略 YOLOv2 中在每个卷积层后加 Batch Normalization (BN) 层,去掉 dropout. BN 层可以起到一定的正则化效果,能提升模型收敛速度,防止模型过拟合。

YOLOv2 通过使用 BN 层使得 mAP 提高了 2%。

目前的大部分检测模型都会使用主流分类网络(如 vgg、resnet)在 ImageNet 上的预训练模型作为特征提取器,而这些分类网络大部分都是以小于 256x256 的图片作为输入进行训练的,低分辨率会影响模型检测能力。

YOLOv2 将输入图片的分辨率提升至 448x448,为了使网络适应新的分辨率,YOLOv2 先在 ImageNet 上以 448x448 的分辨率对网络进行 10 个 epoch 的微调,让网络适应高分辨率的输入。

通过使用高分辨率的输入,YOLOv2 的 mAP 提升了约 4%。

YOLOv1 利用全连接层直接对边界框进行预测,导致丢失较多空间信息,定位不准。

YOLOv2 去掉了 YOLOv1 中的全连接层,使用 Anchor Boxes 预测边界框,同时为了得到更高分辨率的特征图,YOLOv2 还去掉了一个池化层。

由于图片中的物体都倾向于出现在图片的中心位置,若特征图恰好有一个中心位置,利用这个中心位置预测中心点落入该位置的物体,对这些物体的检测会更容易。

所以总希望得到的特征图的宽高都为奇数。

YOLOv2 通过缩减网络,使用 416x416 的输入,模型下采样的总步长为 32,最后得到 13x13 的特征图, 然后对 13x13 的特征图的每个 cell 预测 5 个 anchor boxes ,对每个 anchor box 预测边界框的位置信息、置信度和一套分类概率值。

使用 anchor boxes 之后,YOLOv2 可以预测 13x13x5=845 个边界框,模型的召回率由原来的 81% 提升到 88%,mAP 由原来的 69.5% 降低到 69.2%. 召回率提升了 7%,准确率下降了 0.3%。

YOLOv2 采用 Darknet-19,其网络结构如下图所示,包括 19 个卷积层和 5 个 max pooling 层,主要采用 3x3 卷积和 1x1 卷积, 这里 1x1 卷积可以压缩特征图通道数以降低模型计算量和参数 ,每个卷积层后使用 BN 层 以加快模型收敛同时防止过拟合。

最终采用 global avg pool 做预测。

采用 YOLOv2,模型的 mAP 值没有显著提升,但计算量减少了。

在 Faster R-CNN 和 SSD 中,先验框都是手动设定的,带有一定的主观性。

YOLOv2 采用 k-means 聚类算法对训练集中的边界框做了聚类分析,选用 boxes 之间的 IOU 值作为聚类指标。

综合考虑模型复杂度和召回率,最终选择 5 个聚类中心,得到 5 个先验框,发现其中中扁长的框较少,而瘦高的框更多,更符合行人特征。

通过对比实验,发现用聚类分析得到的先验框比手动选择的先验框有更高的平均 IOU 值,这使得模型更容易训练学习。

Faster R-CNN 使用 anchor boxes 预测边界框相对先验框的偏移量,由于没有对偏移量进行约束,每个位置预测的边界框可以落在图片任何位置,会导致模型不稳定,加长训练时间。

YOLOv2 沿用 YOLOv1 的方法,根据所在网格单元的位置来预测坐标,则 Ground Truth 的值介于 0 到 1 之间。

网络中将得到的网络预测结果再输入 sigmoid 函数中,让输出结果介于 0 到 1 之间。

设一个网格相对于图片左上角的偏移量是 cx,cy。

先验框的宽度和高度分别是 pw 和 ph,则预测的边界框相对于特征图的中心坐标 (bx,by) 和宽高 bw、bh 的计算公式如下图所示。

YOLOv2 结合 Dimention Clusters, 通过对边界框的位置预测进行约束,使模型更容易稳定训练,这种方式使得模型的 mAP 值提升了约 5%。

YOLOv2 借鉴 SSD 使用多尺度的特征图做检测,提出 pass through 层将高分辨率的特征图与低分辨率的特征图联系在一起,从而实现多尺度检测。

YOLOv2 提取 Darknet-19 最后一个 max pool 层的输入,得到 26x26x512 的特征图。

经过 1x1x64 的卷积以降低特征图的维度,得到 26x26x64 的特征图,然后经过 pass through 层的处理变成 13x13x256 的特征图(抽取原特征图每个 2x2 的局部区域组成新的 channel,即原特征图大小降低 4 倍,channel 增加 4 倍),再与 13x13x1024 大小的特征图连接,变成 13x13x1280 的特征图,最后在这些特征图上做预测。

使用 Fine-Grained Features,YOLOv2 的性能提升了 1%. YOLOv2 中使用的 Darknet-19 网络结构中只有卷积层和池化层,所以其对输入图片的大小没有限制。

YOLOv2 采用多尺度输入的方式训练,在训练过程中每隔 10 个 batches , 重新随机选择输入图片的尺寸,由于 Darknet-19 下采样总步长为 32,输入图片的尺寸一般选择 32 的倍数 {320,352,…,608}。

采用 Multi-Scale Training, 可以适应不同大小的图片输入,** 当采用低分辨率的图片输入时,mAP 值略有下降,但速度更快,当采用高分辨率的图片输入时,能得到较高 mAP 值,但速度有所下降。

** YOLOv2 借鉴了很多其它目标检测方法的一些技巧,如 Faster R-CNN 的 anchor boxes, SSD 中的多尺度检测。

除此之外,YOLOv2 在网络设计上做了很多 tricks, 使它能在保证速度的同时提高检测准确率,Multi-Scale Training 更使得同一个模型适应不同大小的输入,从而可以在速度和精度上进行自由权衡。

YOLO v2 对 YOLO v1 的缺陷进行优化,大幅度高了检测的性能,但仍存在一定的问题, 如无法解决重叠问题的分类等 。

将 256x256 的图片分别输入以 Darknet-19,ResNet-101,ResNet-152 和 Darknet-53 为基础网络的分类模型中,实验得到的结果如下图所示。

可以看到 Darknet-53 比 ResNet-101 的性能更好,而且速度是其 1.5 倍,Darknet-53 与 ResNet-152 性能相似但速度几乎是其 2 倍。

注意到,Darknet-53 相比于其它网络结构实现了每秒最高的浮点计算量,说明其网络结构能更好的利用 GPU。

YOLOv3 借鉴了 FPN 的思想,从不同尺度提取特征。

相比 YOLOv2,YOLOv3 提取最后 3 层特征图,不仅在每个特征图上分别独立做预测,同时通过将小特征图上采样到与大的特征图相同大小,然后与大的特征图拼接做进一步预测。

用维度聚类的思想聚类出 9 种尺度的 anchor box,将 9 种尺度的 anchor box 均匀的分配给 3 种尺度的特征图 . 在实际应用场合中,一个物体有可能输入多个类别,单纯的单标签分类在实际场景中存在一定的限制。

举例来说,一辆车它既可以属于 car(小汽车)类别,也可以属于 vehicle(交通工具),用单标签分类只能得到一个类别。

因此在 YOLO v3 在网络结构中把原先的 softmax 层换成了逻辑回归层,从而实现把单标签分类改成多标签分类。

用多个 logistic 分类器代替 softmax 并不会降低准确率,可以维持 YOLO 的检测精度不下降。

对于对象检测,不仅要考虑精度,还要考虑实时运行的性能,虽然现在算力大幅度上升,但是普通的设备跑起来还是有点吃力。

提高精度和加快速率仍是目标检测的重大课题,道阻且长! 参考: YOLOv1 参考 YOLOv2 参考 YOLOv3 参考 https:/
/
mp.weixin.qq.com/
s/
yccBloK5pOVxDIFkmoY7xg :非极大抑制。

目标检测YOLO v1-v5演进

目标检测是与计算机视觉和图像处理相关的计算机技术,用于在一张图片中识别出些物体的种类,同时要求标出物体的位置。

目标检测已被广泛应用于人脸检测、自动驾驶和视频监控等图像领域。

目标检测中的常见方法,分为one-stage和two-stage两类。

One-stage方法首先输入图片,输出Bounding box (bbox)和分类标签,由一个网络完成,该方法以YOLO、SSD为主要代表。

Two-stage方法则以Faster-RCNN为代表,输入图片后,首先生成建议区域(Region Proposal),再输入分类器进行分类,两个任务由不同网络完成。

其中,YOLO目标检测是一种突出且优秀的算法,其为“you only look once”的缩写,意为只需浏览一次即可识别出图中物体的类别与位置,且完美地平衡了检测速度和精度之间的关系。

YOLO也由最初的YOLO v1发展到现在最新的YOLO v5。

2015年提出了第一版YOLO v1,YOLO借鉴GoogleNet而提出了Darknet网络。

Darknet是用C语言和CUDA编写的开源神经网络框架,用1x1卷积层+3x3卷积层替代GoogleNet的Inception模块。

网络由24 层卷积层接2层全连接组成,如图1: YOLO v1的框架如图2所示:首先调整图像大小为448×448,随后将图像输入CNN,最后通过非极大值抑制(NMS)保留最终标定框。

YOLO v1 的核心思想在于将目标检测视为回归问题,其将图片划分成 SxS 个网格,如果目标中心落入某网格单元,则该网格就负责检测该目标。

每个网格单元预测 B个边界框(bbox)和类别信息。

此外,每个bbox需要预测(x, y, w, h)和置信度共5个值。

因此,最终每个网格应预测B个bbox和C个类别,最终输出S x S x (5*B+C)的tensor。

优点: YOLO v2在YOLO v1基础上进行了一系列的改进,在保持分类精度的同时,提高了目标定位的精度以及召回率。

首先,YOLO v2能够适应不同的输入尺寸,并可根据需要自行权衡检测准确率和检测速度;
其次,根据层级分类提出了WordTree来混合检测数据集与分类数据集;
最后,提出了可同时在检测和分类数据集上进行的联合训练方式,使用检测数据集训练模型识别部分,使用分类数据集训练模型分类部分,扩充检测种类。

对于YOLO v1更为具体的改进包括以下几点: 不过YOLO v2仍然无法解决同一个网格内物体重叠的问题。

YOLO v3则继续在YOLO v2上做了些许改进: 2020年4月,YOLO v4重磅发布。

其在MS COCO数据集上的精度达到了43.5% AP,速度达到65FPS,与 YOLO v3相比分别提高了 10% 和 12%。

YOLO v4首先对相关工作进行总结,并对目标检测框架拆分: Object Detection = Backbone + Neck + Head 此外,将所有所有的调优手段分为两类:“Bag of freebies”和“Bag of specials”。

YOLO v4总结了以上各种调优技巧,从中寻找最优组合。

并在训练过程中,验证了Bag-of-Freebies和Bag-of-Specials对于YOLO v4的影响。

自YOLO v4发布的40余天后, Ultralytics公司开源了非官方的YOLO v5,其完全基于PyTorch实现。

值得注意的是,每个图像的推理时间达到140 FPS,并且YOLOv5的权重文件大小仅为YOLOv4的1/
9。

YOLO v5更快,也更小巧! 由以上YOLO的发展历程可看出, YOLO系列的发展后期更重视应用落地,没有提出非常新颖的创新点。

目标检测算法的分步介绍(第 1 部分)

英文原文: https:/
/
analyticsvidhya.com/
blog/
2018/
10/
a-step-by-step-introduction-to-the-basic-object-detection-algorithms-part-1/
对原文的表达有部分改动 在本文中,我们将更深入地研究可用于目标检测的各种算法。

我们将从 RCNN 家族的算法开始,即 RCNN、Fast RCNN 和 Faster RCNN。

在本系列即将发布的文章中,我们将介绍更高级的算法,如 YOLO、SSD 等。

下图是说明目标检测算法如何工作的一个流行示例。

图像中的每个物体,从一个人到一只风筝,都以一定的精度被定位和识别。

让我们从最简单的深度学习方法开始,也是一种广泛使用的方法,用于检测图像中的目标——卷积神经网络( CNN)。

CNN 的内部工作原理如下: 我们将图像传递给网络,然后通过各种卷积和池化层处理,发送给全连接层。

最后,我们以目标类别的形式获得输出。

这相当简单,不是吗?对于每个输入图像,我们得到一个相应的类作为输出。

我们可以使用这种技术来检测图像中的各种目标吗?让我们看看如何使用 CNN 解决一般的目标检测问题。

使用这种方法的问题在于图像中的目标可能具有不同的纵横比和空间位置。

例如,在某些情况下,目标可能覆盖图像的大部分,而在某些情况下,目标可能仅覆盖图像的一小部分。

目标的形状也可能不同(在现实生活中经常发生)。

由于这些因素,我们将需要大量的区域,从而导致大量的计算时间。

因此,为了解决这个问题并减少区域数量,我们可以使用基于区域的 CNN,它使用提案法选择区域。

让我们了解这个基于区域的 CNN 可以为我们做什么。

与在大量区域上工作不同的是,RCNN 算法是在图像中选取一堆框并检查这些框中是否有任何一个包含任何目标。

RCNN 使用 selective search 从图像中提取这些框(这些框称为 regions)。

让我们首先了解什么是 selective search 以及它如何识别不同的 regions。

基本上四个模式可以构成一个物体:不同的尺度、颜色、纹理和外壳。

selective search 识别图像中的这些模式,并在此基础上提出各种regions。

以下是selective search 工作原理的简要概述: 举个例子: 到目前为止,我们已经看到了 RCNN 如何实现目标检测。

但是这种技术有其自身的局限性。

由于以下步骤,训练 RCNN 模型既昂贵又缓慢: 所有这些过程结合起来使 RCNN 非常慢。

对每张新图像进行预测大约需要 40-50 秒,这实质上使得模型在面对庞大的数据集时变得笨重且几乎无法构建。

好消息是——我们有另一种目标检测技术,它修复了我们在 RCNN 中看到的大部分问题。

我们还能做些什么来减少 RCNN 算法通常需要的计算时间?我们是否可以每张图像只运行一次并获取所有感兴趣的区域(包含某个目标的区域)。

RCNN 的作者 Ross Girshick 提出了这个想法,即每张图像只运行一次 CNN,然后找到一种方法在 2,000 个区域之间共享该计算。

在 Fast RCNN 中,我们将输入图像提供给 CNN,后者反过来生成卷积特征图。

使用这些地图,提取提议的区域。

然后我们使用 RoI 池化层将所有提议的区域重塑为固定大小,以便可以将其馈入全连接网络。

让我们将其分解为简化概念的步骤: 因此,Fast RCNN 不是使用三个不同的模型(如 RCNN),而是使用单个模型从区域中提取特征,将它们分成不同的类,并同时返回识别类的边界框。

为了进一步分解,我将对每个步骤进行可视化。

这就是 Fast RCNN 如何解决 RCNN 的两个主要问题,1. 将每个图像的一个而不是 2,000 个区域传递给 ConvNet。

2. 使用一个而不是三个不同的模型来提取特征、分类和生成边界框。

但即使是 Fast RCNN 也存在某些问题。

它还使用 selective search 作为寻找感兴趣区域的建议方法,这是一个缓慢且耗时的过程。

每张图像检测目标大约需要 2 秒,这与 RCNN 相比要好得多。

但是当我们考虑大型现实生活数据集时,即使是 Fast RCNN 看起来也不那么快了。

Faster RCNN 是 Fast RCNN 的修改版本。

它们之间的主要区别在于 Fast RCNN 使用 selective search 来生成感兴趣的区域,而 Faster RCNN 使用 Region Proposal Network ,又名 RPN。

RPN 将图像特征图作为输入并生成一组目标提议,每个提议的目标以分数作为输出。

Faster RCNN 方法通常遵循以下步骤: 让我简要解释一下这个区域提议网络(RPN)实际上是如何工作的。

首先,Faster RCNN 从 CNN 获取特征图并将它们传递给区域提议网络。

RPN 在这些特征图上使用一个滑动窗口,在每个窗口,它生成 k 个不同形状和大小的 Anchor 框: Anchor 框是固定大小的边界框,它们放置在整个图像中,具有不同的形状和大小。

对于每个 Anchor,RPN 预测两件事: 我们现在有不同形状和大小的边界框,它们被传递到 RoI 池化层。

在 RPN 步骤之后,有可能存在没有分配给它们的类别提议。

我们可以获取每个建议并对其进行裁剪,以便每个建议都包含一个目标。

这就是 RoI 池化层所做的。

它为每个锚点提取固定大小的特征图: 然后将这些特征图传递到具有 softmax 和线性回归层的全连接层。

它最终对目标进行分类并预测已识别目标的边界框。

到目前为止,我们讨论的所有目标检测算法都使用区域来识别目标。

网络不会一次性查看完整图像,而是依次关注图像的各个部分。

这会造成两个并发症:。

目标检测算法经典论文回顾(一)

论文名称:Rich feature hierarchies for accurate object detection and semantic segmentation 提出时间:2014年 论文地址:https:/
/
openaccess.thecvf.com/
content_cvpr_2014/
papers/
Girshick_Rich_Feature_Hierarchies_2014_CVPR_paper.pdf 针对问题: 从Alexnet提出后,作者等人思考如何利用卷积网络来完成检测任务,即输入一张图,实现图上目标的定位(目标在哪)和分类(目标是什么)两个目标,并最终完成了RCNN网络模型。

创新点: RCNN提出时,检测网络的执行思路还是脱胎于分类网络。

也就是深度学习部分仅完成输入图像块的分类工作。

那么对检测任务来说如何完成目标的定位呢,作者采用的是Selective Search候选区域提取算法,来获得当前输入图上可能包含目标的不同图像块,再将图像块裁剪到固定的尺寸输入CNN网络来进行当前图像块类别的判断。

参考博客: https:/
/
blog.csdn.net/
briblue/
article/
details/
82012575。

论文题目:OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks 提出时间:2014年 论文地址:https:/
/
arxiv.org/
pdf/
1312.6229.pdf 针对问题: 该论文讨论了,CNN提取到的特征能够同时用于定位和分类两个任务。

也就是在CNN提取到特征以后,在网络后端组织两组卷积或全连接层,一组用于实现定位,输出当前图像上目标的最小外接矩形框坐标,一组用于分类,输出当前图像上目标的类别信息。

也是以此为起点,检测网络出现基础主干网络(backbone)+分类头或回归头(定位头)的网络设计模式雏形。

创新点: 在这篇论文中还有两个比较有意思的点,一是作者认为全连接层其实质实现的操作和1x1的卷积是类似的,而且用1x1的卷积核还可以避免FC对输入特征尺寸的限制,那用1x1卷积来替换FC层,是否可行呢?作者在测试时通过将全连接层替换为1x1卷积核证明是可行的;
二是提出了offset max-pooling,也就是对池化层输入特征不能整除的情况,通过进行滑动池化并将不同的池化层传递给后续网络层来提高效果。

另外作者在论文里提到他的用法是先基于主干网络+分类头训练,然后切换分类头为回归头,再训练回归头的参数,最终完成整个网络的训练。

图像的输入作者采用的是直接在输入图上利用卷积核划窗。

然后在指定的每个网络层上回归目标的尺度和空间位置。

参考博客: https:/
/
blog.csdn.net/
qq_35732097/
article/
details/
79027095 论文题目:Scalable Object Detection using Deep Neural Networks 提出时间:2014年 论文地址:https:/
/
openaccess.thecvf.com/
content_cvpr_2014/
papers/
Erhan_Scalable_Object_Detection_2014_CVPR_paper.pdf 针对问题: 既然CNN网络提取的特征可以直接用于检测任务(定位+分类),作者就尝试将目标框(可能包含目标的最小外包矩形框)提取任务放到CNN中进行。

也就是直接通过网络完成输入图像上目标的定位工作。

创新点: 本文作者通过将物体检测问题定义为输出多个bounding box的回归问题. 同时每个bounding box会输出关于是否包含目标物体的置信度, 使得模型更加紧凑和高效。

先通过聚类获得图像中可能有目标的位置聚类中心,(800个anchor box)然后学习预测不考虑目标类别的二分类网络,背景or前景。

用到了多尺度下的检测。

参考博客: https:/
/
blog.csdn.net/
m0_45962052/
article/
details/
104845125 论文题目:DeepBox: Learning Objectness with Convolutional Networks 提出时间:2015年ICCV 论文地址:https:/
/
openaccess.thecvf.com/
content_iccv_2015/
papers/
Kuo_DeepBox_Learning_Objectness_ICCV_2015_paper.pdf 主要针对的问题: 本文完成的工作与第三篇类似,都是对目标框提取算法的优化方案,区别是本文首先采用自底而上的方案来提取图像上的疑似目标框,然后再利用CNN网络提取特征对目标框进行是否为前景区域的排序;
而第三篇为直接利用CNN网络来回归图像上可能的目标位置。

创新点: 本文作者想通过CNN学习输入图像的特征,从而实现对输入网络目标框是否为真实目标的情况进行计算,量化每个输入框的包含目标的可能性值。

参考博客: https:/
/
cnblogs.com/
zjutzz/
p/
8232740.html 论文题目:AttentionNet: AggregatingWeak Directions for Accurate Object Detection 提出时间:2015年ICCV 论文地址:https:/
/
cv-foundation.org/
openaccess/
content_iccv_2015/
papers/
Yoo_AttentionNet_Aggregating_Weak_ICCV_2015_paper.pdf 主要针对的问题: 对检测网络的实现方案进行思考,之前的执行策略是,先确定输入图像中可能包含目标位置的矩形框,再对每个矩形框进行分类和回归从而确定目标的准确位置,参考RCNN。

那么能否直接利用回归的思路从图像的四个角点,逐渐得到目标的最小外接矩形框和类别呢? 创新点: 通过从图像的四个角点,逐步迭代的方式,每次计算一个缩小的方向,并缩小指定的距离来使得逐渐逼近目标。

作者还提出了针对多目标情况的处理方式。

参考博客: https:/
/
blog.csdn.net/
m0_45962052/
article/
details/
104945913 论文题目:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition 提出时间:2014年 论文地址:https:/
/
link.springer.com/
content/
pdf/
10.1007/
978-3-319-10578-9_23.pdf 针对问题: 如RCNN会将输入的目标图像块处理到同一尺寸再输入进CNN网络,在处理过程中就造成了图像块信息的损失。

在实际的场景中,输入网络的目标尺寸很难统一,而网络最后的全连接层又要求输入的特征信息为统一维度的向量。

作者就尝试进行不同尺寸CNN网络提取到的特征维度进行统一。

创新点: 作者提出的SPPnet中,通过使用特征金字塔池化来使得最后的卷积层输出结果可以统一到全连接层需要的尺寸,在训练的时候,池化的操作还是通过滑动窗口完成的,池化的核宽高及步长通过当前层的特征图的宽高计算得到。

原论文中的特征金字塔池化操作图示如下。

参考博客 :https:/
/
blog.csdn.net/
weixin_43624538/
article/
details/
87966601 论文题目:Object detection via a multi-region & semantic segmentation-aware CNN model 提出时间:2015年 论文地址:https:/
/
openaccess.thecvf.com/
content_iccv_2015/
papers/
Gidaris_Object_Detection_via_ICCV_2015_paper.pdf 针对问题: 既然第三篇论文multibox算法提出了可以用CNN来实现输入图像中待检测目标的定位,本文作者就尝试增加一些训练时的方法技巧来提高CNN网络最终的定位精度。

创新点: 作者通过对输入网络的region进行一定的处理(通过数据增强,使得网络利用目标周围的上下文信息得到更精准的目标框)来增加网络对目标回归框的精度。

具体的处理方式包括:扩大输入目标的标签包围框、取输入目标的标签中包围框的一部分等并对不同区域分别回归位置,使得网络对目标的边界更加敏感。

这种操作丰富了输入目标的多样性,从而提高了回归框的精度。

参考博客 :https:/
/
blog.csdn.net/
alfred_torres/
article/
details/
83022967 论文题目:Fast-RCNN 提出时间:2015年 论文地址:https:/
/
openaccess.thecvf.com/
content_iccv_2015/
papers/
Girshick_Fast_R-CNN_ICCV_2015_paper.pdf 针对问题: RCNN中的CNN每输入一个图像块就要执行一次前向计算,这显然是非常耗时的,那么如何优化这部分呢? 创新点: 作者参考了SPPNet(第六篇论文),在网络中实现了ROIpooling来使得输入的图像块不用裁剪到统一尺寸,从而避免了输入的信息丢失。

其次是将整张图输入网络得到特征图,再将原图上用Selective Search算法得到的目标框映射到特征图上,避免了特征的重复提取。

参考博客 :https:/
/
blog.csdn.net/
u014380165/
article/
details/
72851319 论文题目:DeepProposal: Hunting Objects by Cascading Deep Convolutional Layers 提出时间:2015年 论文地址:https:/
/
openaccess.thecvf.com/
content_iccv_2015/
papers/
Ghodrati_DeepProposal_Hunting_Objects_ICCV_2015_paper.pdf 主要针对的问题: 本文的作者观察到CNN可以提取到很棒的对输入图像进行表征的论文,作者尝试通过实验来对CNN网络不同层所产生的特征的作用和情况进行讨论和解析。

创新点: 作者在不同的激活层上以滑动窗口的方式生成了假设,并表明最终的卷积层可以以较高的查全率找到感兴趣的对象,但是由于特征图的粗糙性,定位性很差。

相反,网络的第一层可以更好地定位感兴趣的对象,但召回率降低。

论文题目:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks 提出时间:2015年NIPS 论文地址:https:/
/
proceedings.neurips.cc/
paper/
2015/
file/
14bfa6bb14875e45bba028a21ed38046-Paper.pdf 主要针对的问题: 由multibox(第三篇)和DeepBox(第四篇)等论文,我们知道,用CNN可以生成目标待检测框,并判定当前框为目标的概率,那能否将该模型整合到目标检测的模型中,从而实现真正输入端为图像,输出为最终检测结果的,全部依赖CNN完成的检测系统呢? 创新点: 将当前输入图目标框提取整合到了检测网络中,依赖一个小的目标框提取网络RPN来替代Selective Search算法,从而实现真正的端到端检测算法。

参考博客 :https:/
/
zhuanlan.zhihu.com/
p/
31426458。

目标跟踪检测算法(一)——传统方法

姓名:刘帆;
学号:20021210609;
学院:电子工程学院 https:/
/
blog.csdn.net/
qq_34919792/
article/
details/
89893214 【嵌牛导读】目标跟踪算法研究难点与挑战在于实际复杂的应用环境 、背景相似干扰、光照条件的变化、遮挡等外界因素以及目标姿态变化,外观变形,尺度变化、平面外旋转、平面内旋转、出视野、快速运动和运动模糊等。

而且当目标跟踪算法投入实际应用时,不可避免的一个问题——实时性问题也是非常的重要。

正是有了这些问题,才使得算法研究充满着难点和挑战。

【嵌牛鼻子】目标跟踪算法,传统算法 【嵌牛提问】利用目标跟踪检测算法要达到何目的?第一阶段的单目标追踪算法包括什么?具体步骤有哪些?它们有何特点? 【嵌牛正文】 第一阶段 目标跟踪分为两个部分,一个是对指定目标寻找可以跟踪的特征,常用的有颜色,轮廓,特征点,轨迹等,另一个是对目标特征进行跟踪。

1、静态背景 1)背景差: 对背景的光照变化、噪声干扰以及周期性运动等进行建模。

通过当前帧减去背景图来捕获运动物体的过程。

2)帧差: 由于场景中的目标在运动,目标的影像在不同图像帧中的位置不同。

该类算法对时间上连续的两帧或三帧图像进行差分运算,不同帧对应的像素点相减,判断灰度差的绝对值,当绝对值超过一定阈值时,即可判断为运动目标,从而实现目标的检测功能。

与二帧差分法不同的是,三帧差分法(交并运算)去除了重影现象,可以检测出较为完整的物体。

帧间差分法的原理简单,计算量小,能够快速检测出场景中的运动目标。

但帧间差分法检测的目标不完整,内部含有“空洞”,这是因为运动目标在相邻帧之间的位置变化缓慢,目标内部在不同帧图像中相重叠的部分很难检测出来。

帧间差分法通常不单独用在目标检测中,往往与其它的检测算法结合使用。

3)Codebook 算法为图像中每一个像素点建立一个码本,每个码本可以包括多个码元(对应阈值范围),在学习阶段,对当前像素点进行匹配,如果该像素值在某个码元的学习阈值内,也就是说与之前出现过的某种历史情况偏离不大,则认为该像素点符合背景特征,需要更新对应点的学习阈值和检测阈值。

如果新来的像素值与每个码元都不匹配,则可能是由于动态背景导致,这种情况下,我们需要为其建立一个新的码元。

每个像素点通过对应多个码元,来适应复杂的动态背景。

在应用时,每隔一段时间选择K帧通过更新算法建立CodeBook背景模型,并且删除超过一段时间未使用的码元。

4)GMM 混合高斯模型(Gaussian of Micture Models,GMM)是较常用的背景去除方法之一(其他的还有均值法、中值法、滑动平均滤波等)。

首先我们需要了解单核高斯滤波的算法步骤: 混合高斯建模GMM(Gaussian Mixture Model)作为单核高斯背景建模的扩展,是目前使用最广泛的一种方法,GMM将背景模型描述为多个分布,每个像素的R、G、B三个通道像素值的变化分别由一个混合高斯模型分布来刻画,符合其中一个分布模型的像素即为背景像素。

作为最常用的一种背景建模方法,GMM有很多改进版本,比如利用纹理复杂度来更新差分阈值,通过像素变化的剧烈程度来动态调整学习率等。

5)ViBe(2011) ViBe算法主要特点是随机背景更新策略,这和GMM有很大不同。

其步骤和GMM类似。

具体的思想就是为每个像素点存储了一个样本集,样本集中采样值就是该像素点过去的像素值和其邻居点的像素值,然后将每一个新的像素值和样本集进行比较来判断是否属于背景点。

其中pt(x)为新帧的像素值,R为设定值,p1、p2、p3….为样本集中的像素值,以pt(x)为圆心R为半径的圆被认为成一个集,当样本集与此集的交集大于设定的阈值#min时,可认为此为背景像素点(交集越大,表示新像素点与样本集越相关)。

我们可以通过改变#min的值与R的值来改变模型的灵敏度。

Step1:初始化单帧图像中每个像素点的背景模型。

假设每一个像素和其邻域像素的像素值在空域上有相似的分布。

基于这种假设,每一个像素模型都可以用其邻域中的像素来表示。

为了保证背景模型符合统计学规律,邻域的范围要足够大。

当输入第一帧图像时,即t=0时,像素的背景模型。

其中,NG(x,y)表示空域上相邻的像素值,f(xi,yi)表示当前点的像素值。

在N次的初始化的过程中,NG(x,y)中的像素点(xi,yi)被选中的可能次数为L=1,2,3,…,N。

Step2:对后续的图像序列进行前景目标分割操作。

当t=k时,像素点(x,y)的背景模型为BKm(x,y),像素值为fk(x,y)。

按照下面判断该像素值是否为前景。

这里上标r是随机选的;
T是预先设置好的阈值。

当fk(x,y)满足符合背景#N次时,我们认为像素点fk(x,y)为背景,否则为前景。

Step3:ViBe算法的更新在时间和空间上都具有随机性。

每一个背景点有1/
φ的概率去更新自己的模型样本值,同时也有1/
φ的概率去更新它的邻居点的模型样本值。

更新邻居的样本值利用了像素值的空间传播特性,背景模型逐渐向外扩散,这也有利于Ghost区域的更快的识别。

同时当前景点计数达到临界值时将其变为背景,并有1/
φ的概率去更新自己的模型样本值(为了减少缓慢移动物体的影响和摄像机的抖动)。

可以有如下总结,ViBe中的每一个像素点在更新的时候都有一个时间和空间上随机影响的范围,这个范围很小,大概3x3的样子,这个是考虑到摄像头抖动时会有坐标的轻微来回变化,这样虽然由于ViBe的判别方式仍认为是背景点,但是也会对后面的判别产生影响,为了保证空间的连续性,随机更新减少了这个影响。

而在样本值保留在样本集中的概率随着时间的增大而变小,这就保证了像素模型在时间上面的延续特性。

6)光流 光流是由物体或相机的运动引起的图像对象在两个连续帧之间的视在运动模式。

它是2D矢量场,其中每个矢量是一个位移矢量,显示点从第一帧到第二帧的移动。

光流实际上是一种特征点跟踪方法,其计算的为向量,基于三点假设: 1、场景中目标的像素在帧间运动时亮度(像素值或其衍生值)不发生变化;
2、帧间位移不能太大;
3、同一表面上的邻近点都在做相同的运动;
光流跟踪过程:1)对一个连续视频帧序列进行处理;
2)对每一帧进行前景目标检测;
3)对某一帧出现的前景目标,找出具有代表性的特征点(Harris角点);
4)对于前后帧做像素值比较,寻找上一帧在当前帧中的最佳位置,从而得到前景目标在当前帧中的位置信息;
5)重复上述步骤,即可实现目标跟踪 2、运动场(分为相机固定,但是视角变化和相机是运动的) 1)运动建模(如视觉里程计运动模型、速度运动模型等) 运动学是对进行刚性位移的相机进行构型,一般通过6个变量来描述,3个直角坐标,3个欧拉角(横滚、俯仰、偏航)。

Ⅰ、对相机的运动建模 由于这个不是我们本次所要讨论的重点,但是在《概率机器人》一书中提出了很多很好的方法,相机的运动需要对图像内的像素做位移矩阵和旋转矩阵的坐标换算。

除了对相机建立传统的速度运动模型外,也可以用视觉里程计等通关过置信度的更新来得到概率最大位置。

Ⅱ、对于跟踪目标的运动建模 该方法需要提前通过先验知识知道所跟踪的目标对象是什么,比如车辆、行人、人脸等。

通过对要跟踪的目标进行建模,然后再利用该模型来进行实际的跟踪。

该方法必须提前知道要跟踪的目标对象是什么,然后再去跟踪指定的目标,这是它的局限性,因而其推广性相对比较差。

(比如已知跟踪的物体是羽毛球,那很容易通过前几帧的取点,来建立整个羽毛球运动的抛物线模型) 2)核心搜索算法(常见的预测算法有Kalman(卡尔曼)滤波、扩展卡尔曼滤波、粒子滤波) Ⅰ、Kalman 滤波 Kalman滤波器是通过前一状态预测当前状态,并使用当前观测状态进行校正,从而保证输出状态平稳变化,可有效抵抗观测误差。

因此在运动目标跟踪中也被广泛使用。

在视频处理的运动目标跟踪里,每个目标的状态可表示为(x,y,w,h),x和y表示目标位置,w和h表示目标宽高。

一般地认为目标的宽高是不变的,而其运动速度是匀速,那么目标的状态向量就应该扩展为(x,y,w,h,dx,dy),其中dx和dy是目标当前时刻的速度。

通过kalman滤波器来估计每个时刻目标状态的大致过程为: 对视频进行运动目标检测,通过简单匹配方法来给出目标的第一个和第二个状态,从第三个状态开始,就先使用kalman滤波器预测出当前状态,再用当前帧图像的检测结果作为观测值输入给kalman滤波器,得到的校正结果就被认为是目标在当前帧的真实状态。

(其中,Zt为测量值,为预测值,ut为控制量,Kt为增益。

) Ⅱ、扩展卡尔曼滤波(EKF)和无迹卡尔曼滤波(UKF) 由于卡尔曼滤波的假设为线性问题,无法直接用在非线性问题上,EKF和UKF解决了这个问题(这个线性问题体现在用测量量来计算预测量的过程中)。

EKF是通过构建线性函数g(x),与非线性函数相切,并对每一时刻所求得的g(x)做KF,如下图所示。

UKF与EKF去求解雅可比矩阵拟合线性方程的方法不同,通过对那个先验分布中的采集点,来线性化随机变量的非线性函数。

与EKF所用的方法不同,UKF产生的高斯分布和实际高斯分布更加接近,其引起的近似误差也更小。

Ⅲ、粒子滤波 1、初始状态:基于粒子滤波的目标追踪方法是一种生成式跟踪方法,所以要有一个初始化的阶段。

对于第一帧图像,人工标定出待检测的目标,对该目标区域提出特征;
2、搜索阶段:现在已经知道了目标的特征,然后就在目标的周围撒点(particle), 如:a)均匀的撒点;
b)按高斯分布撒点,就是近的地方撒得多,远的地方撒的少。

论文里使用的是后一种方法。

每一个粒子都计算所在区域内的颜色直方图,如初始化提取特征一样,然后对所有的相似度进行归一化。

文中相似性使用的是巴氏距离;
3、重采样:根据粒子权重对粒子进行筛选,筛选过程中,既要大量保留权重大的粒子,又要有一小部分权重小的粒子;
4、状态转移:将重采样后的粒子带入状态转移方程得到新的预测粒子;
5、测量及更新:对目标点特征化,并计算各个粒子和目标间的巴氏距离,更新粒子的权重;
6、决策阶段:每个粒子都获得一个和目标的相似度,相似度越高,目标在该范围出现的可能性越高,将保留的所有粒子通过相似度加权后的结果作为目标可能的位置。

3)Meanshift算法 MeanShift算法属于核密度估计法,它不需要任何先验知识而完全依靠特征空间中样本点的计算其密度函数值。

对于一组采样数据,直方图法通常把数据的值域分成若干相等的区间,数据按区间分成若干组,每组数据的个数与总参数个数的比率就是每个单元的概率值;
核密度估计法的原理相似于直方图法,只是多了一个用于平滑数据的核函数。

采用核函数估计法,在采样充分的情况下,能够渐进地收敛于任意的密度函数,即可以对服从任何分布的数据进行密度估计。

Meanshift算法步骤 1、通过对初始点(或者上一帧的目标点)为圆心,绘制一个半径为R的圆心,寻找特征和该点相似的点所构成的向量;
2、所有向量相加,可以获得一个向量叠加,这个向量指向特征点多的方向;
3、取步骤二的向量终点为初始点重复步骤一、二,直到得到的向量小于一定的阈值,也就是说明当前位置是特征点密度最密集的地方,停止迭代,认为该点为当前帧的目标点;
4)Camshift算法 Camshift算法是MeanShift算法的改进,称为连续自适应的MeanShift算法。

Camshift 是由Meanshift 推导而来 Meanshift主要是用在单张影像上,但是独立一张影像分析对追踪而言并无意义,Camshift 就是利用MeanShift的方法,对影像串列进行分析。

1、首先在影像串列中选择目标区域。

2、计算此区域的颜色直方图(特征提取)。

3、用MeanShift演算法来收敛欲追踪的区域。

4、通过目标点的位置和向量信息计算新的窗口大小,并标示之。

5、以此为参数重复步骤三、四。

Camshift 关键就在于当目标的大小发生改变的时候,此算法可以自适应调整目标区域继续跟踪。

3、小结 第一阶段的单目标追踪算法基本上都是传统方法,计算量小,在嵌入式等设备中落地较多,opencv中也预留了大量的接口。

通过上面的两节的介绍,我们不难发现,目标检测算法的步骤分为两部分,一部分是对指定目标寻找可以跟踪的特征,常用的有颜色,轮廓,特征点,轨迹等,另一部分是对目标特征进行跟踪,如上文所提及的方法。

所以目标检测方法的发展,也可总结为两个方面,一个是如何去获得更加具有区分性的可跟踪的稳定特征,另一个是如何建立帧与帧之间的数据关联,保证跟踪目标是正确的。

随着以概率为基础的卡尔曼滤波、粒子滤波或是以Meanshift为代表向量叠加方法在目标检测的运用,使得目标检测不再需要假设自身的一个状态为静止的,而是可以是运动的,更加符合复杂场景中的目标跟踪。

目标检测算法是什么?

目标检测算法是先通过训练集学习一个分类器,然后在测试图像中以不同scale的窗口滑动扫描整个图像;
每次扫描做一下分类,判断一下当前的这个窗口是否为要检测的目标。

检测算法的核心是分类,分类的核心一个是用什么特征,一个是用哪种分类器。

扩展资料:目标检测算法可以分为:1、背景建模法,包含时间平均模型、混合高斯模型、动态纹理背景、PCA模型、时一空联合分布背景模型 2、点检测法,包含Moravec检测器、Harris检测器 、仿射不变点检测、S IFT3、图像分割法,包含Mean Shift方法 、Graph-cut方法、Active Contours方法4、聚类分析法,包含支持向量机、神经网络、Adaptive Boosting5、运动矢量场法,包含基于运动矢量场的方法。

分享至:
小草

小草

专注人工智能、前沿科技领域报道,致力于为读者带来最新、最深度的科技资讯。

评论 (0)

当前用户头像