总览
- 实时对象检测正席卷计算机视觉行业
- 这是最新的实时对象检测框架SlimYOLOv3的分步介绍
- 我们着眼于SlimYOLOv3架构的各个方面,包括其在检测对象下方的工作方式
介绍
人类可以在几毫秒内挑选出我们视线中的物体。实际上–现在就四处看看。您已经进入了周围环境,迅速检测出存在的物体,现在正在看这篇文章。那花了多长时间?
那就是实时物体检测。如果我们能让机器做到这一点,那会是多么酷?现在可以了!主要是由于最近在深度学习和计算机视觉方面取得的突破性进展,我们可以依靠对象检测算法来不仅检测图像中的对象,而且可以以人类的速度和准确性来做到这一点。
您是否想学习实时对象检测,但不确定从哪里开始?您是否要建立一个计算机视觉模型来检测上述视频之类的物体?那么本文适合您!
我们将首先研究对象检测的各种细微差别(包括您可能面临的潜在挑战)。然后,我将介绍SlimYOLOv3框架,并深入研究其在实时检测对象下面的工作方式。
目录
- 什么是物体检测?
- 目标检测的应用
- 为什么要进行实时物体检测?
- 实时物体检测中的挑战
- SlimYOLOv3简介
- 了解SlimYOLOv3的体系结构
什么是物体检测?
在深入研究如何实时检测对象之前,让我们先介绍一下基础知识。如果您对计算机视觉世界还比较陌生,那么这尤其重要。
物体检测是一种用于识别图像中物体位置的技术。如果图像中只有一个对象,而我们要检测该对象,则称为图像定位。如果图像中有多个对象怎么办?好吧,这就是对象检测!
让我用一个例子解释一下:
左侧的图像只有一个对象(狗),因此检测该对象将是图像定位问题。右边的图像有两个对象(猫和狗)。检测这两个对象将属于对象检测。
目标检测的应用
目前,对象检测已在行业中广泛使用。任何怀有在计算机视觉领域工作的野心的人都应该牢记这些应用程序。
对象检测的用例范围从人身安全到自动车辆系统。让我们讨论其中一些当前和无处不在的应用程序。
无人驾驶汽车
这是对象检测中最有趣和最新的应用之一。老实说,这是我真正着迷的。
自动驾驶汽车(也称为自动驾驶汽车)是能够在很少或没有人工指导的情况下自行移动的车辆。现在,为了使汽车能够决定下一步,即向前行驶,应用中断或转弯,它必须知道周围所有物体的位置。使用对象检测技术,汽车可以检测到其他汽车,行人,交通信号灯等物体。
人脸检测和人脸识别
人脸检测和识别可能是计算机视觉最广泛使用的应用程序。每次将图片上传到Facebook,Instagram或Google相册时,它都会自动检测图像中的人物。这就是工作中计算机视觉的力量。
动作识别
你会喜欢的。目的是识别一个或多个系列图像的活动或动作。对象检测是其背后的核心概念,该概念检测活动然后识别动作。这是一个很酷的例子:
对象计数
我们可以使用“对象检测”算法来计数图像甚至实时视频中的对象数量。计算对象的数量有助于多种方式,包括分析商店的性能或估算人群中的人数。
这些只是一些流行的对象检测应用程序。行业中涌现出许多主机,因此,如果您知道任何值得一提的内容,请在下面的评论部分中大声疾呼!
现在,事情来了–大多数应用程序都需要实时分析。我们行业的动态性质在很大程度上取决于即时结果,而实时目标检测正是其中的关键。
为什么要进行实时物体检测?
让我们以自动驾驶汽车为例。考虑到我们已经训练了一个物体检测模型,该模型需要花费几秒钟(例如,每个图像2秒钟)来检测图像中的物体,我们最终将该模型部署在自动驾驶汽车中。
您认为这种模式会很好吗?汽车能否检测到前方的物体并采取相应措施?
当然不是!这里的推理时间太多了。赛车将花费大量时间做出可能导致严重事故(例如事故)的决策。因此,在这种情况下,我们需要一个能够提供实时结果的模型。该模型应该能够在微秒内检测到物体并进行推断。
用于对象检测的一些常用算法包括RCNN,Fast RCNN,Faster RCNN和YOLO。
执行实时对象检测的挑战
实时物体检测模型应该能够感知环境,解析场景并最终做出相应反应。该模型应该能够识别场景中存在所有类型的对象。一旦确定了对象的类型,模型应通过在每个对象周围定义一个边界框来定位这些对象的位置。
因此,这里有两个功能。首先,对图像中的对象进行分类(图像分类),然后使用边界框定位对象(对象检测)。
在处理实时问题时,我们可能会面临多个挑战:
- 我们应对变化?这些变化可能在对象的形状,亮度级别等方面有所不同。
- 部署对象检测模型。这通常需要大量的内存和计算能力,尤其是在我们每天使用的计算机上
- 最后,我们还必须在检测性能和实时要求之间保持平衡。通常,如果满足实时要求,我们会发现性能下降,反之亦然。因此,平衡这两个方面也是一个挑战
那么我们如何克服这些挑战呢?好吧-这就是本文的重点-SlimYOLOv3框架!SlimYOLOv3旨在解决这些限制并以惊人的精度执行实时目标检测。
首先让我们了解SlimYOLOv3是什么,然后我们将查看架构细节以更好地了解框架
SlimYOLOv3简介
您能猜出深度学习管道如何工作吗?以下是典型过程的快速摘要:
- 首先,我们设计模型结构
- 微调该模型的超参数
- 训练模型
- 最后评估一下
模型中有多个组件或连接。这些连接中的一些经过几次迭代后变得多余,因此我们可以从模型中删除这些连接。删除这些连接称为修剪。
修剪不会显着影响模型的性能,并且计算能力将大大降低。因此,在SlimYOLOv3中,对卷积层执行修剪。我们将在本文的下一部分中了解有关如何进行修剪的更多信息。
修剪后,我们对模型进行微调以补偿模型性能的下降。
与原始YOLOv3相比,修剪后的模型导致较少的可训练参数和较低的计算要求,因此对于实时对象检测更加方便。
现在,让我们讨论SlimYOLOv3的体系结构,以更好,更清楚地了解此框架的工作原理。
了解SlimYOLOv3的体系结构
下图说明了SlimYOLOv3的工作方式:
SlimYOLOv3是YOLOv3的修改版本。修剪YOLOv3的卷积层以实现更薄,更快的版本。但是等等-我们为什么首先要使用YOLOv3?为什么不使用其他对象检测算法,例如RCNN,Faster RCNN?
为什么选择YOLOv3?
深度对象检测模型基本上有两种(或两类):
- 两级检测
- 器属于RCNN家族的检测器属于两级检测器。该过程包含两个阶段。首先,我们提取区域提议,然后对每个提议进行分类并预测边界框。这些检测器通常会导致良好的检测精度,但是这些检测器与区域建议的推理时间需要大量的计算和运行时内存
- 单级检测
- 器属于YOLO系列的检测器属于单级检测器。这是一个单阶段过程。这些模型利用预定义的锚来覆盖整个图像的空间位置,比例和长宽比。因此,我们不需要额外的分支来提取区域建议。由于所有计算都在单个网络中,因此它们比两阶段检测器运行速度更快。YOLOv3还是单级检测器,目前是物体检测的最新技术
稀疏训练
下一步是此YOLOv3模型的稀疏性训练:
在这里,我们使用以下步骤修剪YOLOv3模型:
- 首先,我们评估YOLOv3模型每个组成部分的重要性。我将很快讨论如何确定这些组件的重要性的细节
- 评估重要性之后,我们将删除次要的组件
删除的组件可以是单个神经连接或网络结构。为了定义每个组件的重要性,我们基于它们的贡献对网络的每个神经元进行排名。有多种方法可以做到这一点:
- 我们可以采用神经元权重的L1 / L2正则化方法
- 每个神经元的平均激活
- 神经元输出不为零的次数
在SlimYOLOv3中,重要性是根据神经元权重的L1正则化平均值计算的,该均值被视为比例因子。这些比例因子的绝对值是通道的重要性。为了加速收敛并改善YOLOv3模型的泛化,在每个卷积层之后使用批处理归一化层。
SlimYOLOv3
然后,我们定义一个全局阈值(假设为?),并丢弃比例因子小于此阈值的任何通道。这样,我们可以修剪YOLOv3架构并获得SlimYOLOv3架构:
在评估比例因子时,未考虑YOLOv3体系结构的maxpool层和upsample层,因为它们与层号的通道号无关。
微调
现在我们有了SlimYOLOv3模型,那么下一步是什么?
我们对其进行微调,以补偿性能的下降,最后评估微调的模型,以确定修剪后的模型是否适合部署。
稀疏训练实际上在减小缩放因子并因此使卷积层的特征通道稀疏方面非常有效。以较大的惩罚因子α= 0.01进行训练,会导致缩放因子的急剧衰减,并且模型开始过度拟合。
总结
本文涵盖了很多基础。我们看到了不同的对象检测算法,例如RCNN,Fast RCNN,Faster RCNN,以及当前用于对象检测的最新技术YOLO。然后,我们研究了SlimYOLOv3体系结构,它是YOLO的修剪版本,可用于实时对象检测。
论文地址:
https://arxiv.org/pdf/1907.11093v1.pdf
本文暂时没有评论,来添加一个吧(●'◡'●)