目标检测怎么学(目标检测怎么入门)
我刚刚开始接触目标检测,想问下是不是学YOLO系列比较好?有没有大佬解答一下问题
YOLO系列也只是目标检测的算法之一,不同的算法都各有优缺点,还是需要先了解了以后再做决定。
要入门目标检测还是要先把基本的知识框架搭建起来,包括其概念、模型、特征还有发展趋势等。
目标检测的经典模型包括“2-stage”和“1-stage”。
两阶段(2-stage)模型因其对图片的两阶段处理得名,以R-CNN系列为代表,包括R-CNN、Fast R-CNN、Faster R-CNN;
单阶段(1-stage)检测模型则没有中间的区域检出过程,是直接从图片获得预测结果,除了比较知名的YOLO系列,还包括SSD。
【嵌牛导读】目标检测在现实中的应用很广泛,我们需要检测数字图像中的物体位置以及类别,它需要我们构建一个模型,模型的输入一张图片,模型的输出需要圈出图片中所有物体的位置以及物体所属的类别。
在深度学习浪潮到来之前,目标检测精度的进...。
目标检测算法的分步介绍(第 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。