目标检测发展概述

news2024/10/6 14:24:30

前言

本篇文章只是简单介绍一下目标检测这一计算机视觉方向的发展历史,因此重点在于介绍而不是完整阐述各个时期的代表算法,只要能够简单了解到目标检测的发展历史那么本文的目的就达到了。

目标检测的任务

在这里插入图片描述

从上图不难看出,目标检测是计算机视觉任务下的一个小分支方向,其主要任务是:找出图像中感兴趣的目标(物体),确定它们的位置和大小。

在目标检测基础上,还有显著性检测:通过智能算法模拟人的视觉特点,提取图像中的显著区域(即人类感兴趣的区域)。

目标检测的应用

在这里插入图片描述

目标检测发展与分类

在这里插入图片描述

从 2012 年开始,基于深度学习的检测算法开始逐步占据检测方法的上风,其由检测方式的不同走向了两个分支:单阶检测和双阶检测。

从上图也不难发现,从2012年开始基于深度学习的检测开始划分为两派,上面的一条分支基于一体化卷积网络的检测就是单阶方向的(以YOLO为主),位于下面的基于 Object Proposal(目标候选框)的检测就是基于双阶的。

对这些算法以及概念不了解并不要紧,因为后面还将详细介绍。

传统目标检测算法介绍

在这里插入图片描述

传统目标检测方法主要基于人手工设计的特征提取器和机器学习算法。这些方法使用人工定义的特征,如Haar特征和HOG特征等,结合分类器(如支持向量机、AdaBoost等)来检测和分类目标。

其中,Haar特征是一种基于像素的特征描述符,最初由Viola和Jones在2001年提出,用于人脸检测。它能够有效地描述图像中的局部区域,因此也可以用于检测其他类型的目标。而HOG特征则是一种描述图像局部梯度信息的方法,通过计算图像局部区域的梯度方向直方图来表示图像特征。

特点

传统目标检测方法的特点如下:

  1. 基于手工设计的特征

比如 Haar 特征。这是一种基于像素强度的特征描述符,用于描述图像中相邻区域之间的强度差异。例如,在人脸检测中,Haar 特征可以捕捉眼睛区域比脸颊区域更暗的特性。

  1. 结合机器学习分类器

比如 AdaBoost 分类器与 Haar 特征的结合。AdaBoost 是一种集成学习算法,它通过多次迭代来优化一个弱分类器(如基于单个 Haar 特征的分类器)的性能,最终得到一个强分类器。

传统目标检测方法优缺点如下:

传统目标检测流程

在这里插入图片描述

上图中红色框框起来的部分就是传统目标检测的三个流程,结合PPT很好理解,简单介绍一下后面的 NMS :

NMS,全称Non-Maximum Suppression,即非极大值抑制,是目标检测中常用的一种算法。在目标检测任务中,算法通常会生成多个候选框来表示可能包含目标的区域。由于图像中的目标可能以不同的尺度和位置出现,这些候选框往往会有一定的重叠。NMS的目标是从这些重叠的候选框中选择出最佳的框,以提高目标检测算法的准确性和效率。

有点类似于 CNN 中的池化层所做的事情。

经典传统目标检测算法

传统的目标检测算法多种多样,不过其中有三个里程碑式的方法,这里我们主要介绍这三个方法:

在这里插入图片描述

Viola-Jones(人脸检测)算法

简称 V-J 算法:

在这里插入图片描述

V-J算法的核心思想是使用一种称为“Haar特征”的简单矩形特征来表示人脸。这些特征反映了图像中不同区域之间的灰度差异,对于人脸这样的具有特定灰度分布模式的物体非常有效。通过训练一个分类器(如AdaBoost算法),算法能够学习如何从这些Haar特征中区分出人脸和非人脸。

下面是 V-J 算法的主要处理流程,其实和现在的做法也差不太多:

1、Haar特征提取:

Haar特征是一种基于图像灰度差异的特征,它反映了图像中不同区域之间的亮度变化。对于人脸图像,这种亮度变化通常与特定的面部特征(如眼睛、鼻子、嘴巴等)相对应。
Haar特征可以是简单的矩形特征(如两个相邻矩形的灰度差),也可以是更复杂的组合特征。

2、AdaBoost分类器分类:

AdaBoost(Adaptive Boosting)是一种自适应增强算法,它可以通过迭代地选择最有代表性的特征来训练一个强分类器。
在V-J算法中,AdaBoost被用来从大量的Haar特征中选择出最具区分度的特征,并基于这些特征构建一个能够区分人脸和非人脸的强分类器。

3、级联分类器分类:

V-J算法使用了一个由多个强分类器组成的级联结构,这种结构使得算法能够在保持较高精度的同时,大大降低计算成本。
级联分类器的工作原理是:首先使用一个简单且快速的分类器来快速排除大量不包含人脸的区域,然后使用一个更复杂的分类器来进一步验证剩下的区域是否包含人脸。这种逐层筛选的策略使得算法能够在保证检测率的同时,减少不必要的计算。

4、滑动窗口检测:

在输入图像上,V-J算法使用滑动窗口的方式来检测人脸。滑动窗口可以看作是一个可以在图像上移动的矩形框,其大小和位置可以在不同尺度和位置上变化。
在每个滑动窗口的位置上,算法都会提取Haar特征并应用级联分类器来判断该窗口是否包含人脸。如果分类器判断该窗口包含人脸,则算法会输出该窗口的位置和大小作为检测结果。

5、积分图加速计算:

为了提高Haar特征的计算速度,V-J算法引入了积分图(Integral Image)的概念。积分图是一种快速计算图像中任意矩形区域像素和的数据结构。
通过使用积分图,算法可以在常数时间内计算出任意矩形区域的像素和,从而大大加速Haar特征的计算过程。

总结就是:V-J算法的核心思想在于利用Haar特征、AdaBoost分类器、级联分类器和滑动窗口检测等技术来快速、准确地检测图像中的人脸区域。同时,通过引入积分图来加速Haar特征的计算,使得算法能够在保证检测精度的同时,实现实时性的目标。

HOG+SVM算法

在这里插入图片描述

HOG(Histogram of Oriented Gradients,方向梯度直方图)和SVM(Support Vector Machine,支持向量机)是计算机视觉中常用于目标检测和分类的两种算法。当它们结合使用时,可以形成一个强大的系统,用于识别图像中的特定对象。

HOG算法

HOG算法主要用于图像处理和计算机视觉中的对象检测。它通过计算和统计图像局部区域的梯度方向直方图来构成特征。这些特征可以很好地描述物体的形状信息,并且对光照变化和少量的几何形变具有不变性。

HOG算法的主要步骤包括:

图像预处理:将输入的彩色图像转换为灰度图像,并进行归一化处理以减少光照和阴影的影响。
计算梯度:计算图像中每个像素的梯度值(包括大小和方向),这有助于捕获物体的轮廓信息。
划分区域:将图像划分为小的单元格(cells)和更大的块(blocks),并在每个块中计算HOG特征。
统计直方图:在每个单元格中,统计梯度方向的直方图,并将这些直方图组合起来形成每个块的特征向量。
归一化:对块内的特征向量进行归一化,以减少光照和阴影的影响。

SVM算法

SVM是一种监督学习算法,用于数据分类问题。它通过构建一个超平面来对训练数据进行分类,这个超平面的位置和方向是根据训练数据中的支持向量来确定的。在HOG+SVM的框架中,SVM用于将HOG算法提取出的特征向量进行分类,从而识别图像中的特定对象。

HOG+SVM实现目标检测

当HOG和SVM结合使用时,通常的流程如下:

提取HOG特征:使用HOG算法从训练图像中提取出特征向量。
训练SVM分类器:使用提取出的特征向量和对应的标签(即图像中是否包含目标对象)来训练SVM分类器。
检测目标:对于待检测的图像,首先提取出HOG特征,然后使用训练好的SVM分类器对这些特征进行分类,从而判断图像中是否包含目标对象以及目标对象的位置。

这种方法在许多计算机视觉任务中都取得了很好的效果,例如行人检测、车辆检测等。

DPM算法

在这里插入图片描述

DPM(全称Deformable Parts Model,即可变形部件模型)是一种目标检测算法。以下是DPM算法的基本原理和步骤:

1、特征提取:DPM方法使用特征提取算法从图像中提取特征。常用的特征包括HOG(Histogram of Oriented Gradients,方向梯度直方图)和SIFT(Scale-Invariant Feature Transform,尺度不变特征变换)等。
2、部件建模:DPM方法将目标看作由多个部件组成的结构,每个部件具有自己的形状和外观特征。通过对目标部件的建模,可以更好地捕捉目标的复杂性和变化性。
3、部件排列:DPM方法使用部件排列的方式来表示目标的空间位置关系。通过定义部件之间的相对位置和约束关系,可以更准确地描述目标的外观和形状。
4、候选框提议:使用滑动窗口的方式在图像上生成一组候选框,每个候选框都是一个矩形区域,可能包含目标物体。
部件匹配:通过在每个候选框内进行部件匹配来确定目标物体的位置和形状。这一过程利用学习得到的部件模型来匹配并定位目标的各个部件。
5、分类器训练和得分评估:使用SVM(Support Vector Machine,支持向量机)等分类器来对匹配得到的候选框进行分类和评分,以确定是否包含目标物体。

DPM算法的主要优势在于其能够处理物体的变形、遮挡和尺度变化等问题。通过将目标分解为多个部件,并允许这些部件在一定范围内变形和移动,DPM算法可以更准确地检测目标,即使目标在图像中呈现不同的姿态或受到遮挡。

此外,DPM算法在处理多类检测问题时也具有优势,其检测速度可以做到与类别数目无关,从而在处理包含大量类别的目标检测任务时具有更高的效率。

对传统目标检测方法的客观评价

下图是老师 PPT 上的评价:

在这里插入图片描述

下面这是文心一言给出的评价:

优点:

  1. 实时性较好

特别是在一些简单场景下,传统目标检测方法在计算速度和准确性方面表现良好,适用于对实时性要求较高的应用。

在人脸检测中,使用Haar特征和AdaBoost分类器的Viola-Jones算法能够在短时间内完成大量图像的快速检测,适用于需要实时响应的应用场景,如视频监控。

  1. 较高的解释性

传统目标检测方法具有较高的解释性,可以分析和理解模型的工作原理。

由于Haar特征和AdaBoost分类器都是基于人类可理解的规则和概念设计的,因此它们的检测结果相对容易解释。例如,当Viola-Jones算法检测到一个人脸时,我们可以查看哪些Haar特征对检测结果产生了重要贡献,从而理解算法是如何做出这个决策的。

缺点:

  1. 对复杂场景适应性差

传统的方法只能在特定场景下有比较好的效果,当光照等环境发生变化时则难以实现比较好的效果,容易出现漏检和误检。

当图像中存在光照变化、遮挡或目标姿态变化时,传统目标检测方法可能会失效。例如,在光线较暗的环境中,Haar特征可能无法准确地描述目标的边缘信息;当目标被其他物体遮挡时,算法可能无法检测到完整的目标;当目标姿态发生变化时,Haar特征可能无法保持其稳定性。

  1. 分类准确率不高

传统目标检测方法的分类准确率并不高,难以满足一些高精度应用的需求。

与深度学习方法相比,传统目标检测方法的分类准确率通常较低。例如,在使用Haar特征和AdaBoost分类器进行人脸检测时,可能会出现误检(将非人脸区域检测为人脸)或漏检(未能检测到人脸)的情况。这在一定程度上限制了传统目标检测方法在一些高精度应用中的使用。

  1. 手工设计特征的工作量大

为了设计一个有效的特征提取器(如Haar特征或HOG特征),需要投入大量的时间和精力进行研究和实验。此外,不同的任务可能需要不同的特征提取器,这进一步增加了手工设计特征的工作量。相比之下,深度学习方法可以通过自动学习特征来减少这种工作量。

除此之外,传统目标检测算法还有如下问题:

检测速度慢:其检测速度较慢,无法达到实时的效果,这在一些需要快速响应的场合下可能会成为问题。

处理过程复杂:传统目标检测方法的处理过程通常是一套复杂的结构,而不是直接端到端的,这增加了实现的难度和复杂度。

等等等等,不然目标检测也不会是最近几年才火起来了。

简单总结一下就是:传统目标检测方法是基于人工的是费劲的,并且投入资源是巨大的是不划算的,典型费力不讨好,因为花了老大力气研究的特征提取器啊设计的算法啊,很有可能效果不佳且适用性差,因此在几年以前一直不温不火,直到最近十年基于深度学习的算法出现才开始真正实用起来。

基于深度学习的目标检测

在这里插入图片描述

基于深度学习的目标检测可以分为之前说的两类:

1、单阶检测算法:基于一体化卷积网络的卷积算法
2、双阶检测算法:基于 Object Proposals (目标候选框)的卷积算法

简单介绍一下双阶检测算法,重点介绍单阶检测算法,因为俺的工作是这一块捏。

双阶检测算法

在这里插入图片描述

双阶段(Two-Stage)检测算法是目标检测领域中的一类重要方法,其主要特点是分为两个阶段进行目标检测。这种算法通常先生成一系列可能是目标的候选框(Region Proposals),然后再对这些候选框进行精细的分类和位置调整。

以下是双阶段检测算法的基本流程和特点:

1、候选框生成:这是双阶段检测算法的第一个阶段。该阶段通过滑动窗口、锚点(Anchor)或区域生成网络(Region Proposal Network, RPN)等方法,在输入图像上生成一系列候选框。这些候选框可能包含目标物体,但也可能不包含。
2、特征提取:对于每个候选框,双阶段检测算法会提取其对应的图像区域的特征。这些特征通常是通过卷积神经网络(CNN)等深度学习模型得到的,用于后续的分类和位置调整。
3、分类与回归:在第二个阶段,双阶段检测算法会利用提取的特征对候选框进行分类,判断其是否包含目标物体,并调整候选框的位置和大小,使其更准确地包围目标物体。这一阶段通常使用支持向量机(SVM)、神经网络等分类器进行。

双阶段检测算法的优点在于其能够生成高质量的候选框,并通过精细的分类和位置调整来提高目标检测的准确性。然而,由于需要进行两个阶段的计算,双阶段检测算法的速度通常比单阶段检测算法慢。

常见的双阶段检测算法包括R-CNN(Region-based Convolutional Neural Network)、Fast R-CNN、Faster R-CNN等。这些算法在目标检测领域取得了显著的性能提升,并广泛应用于各种计算机视觉任务中。

R-CNN

在这里插入图片描述

R-CNN(Region-based Convolutional Neural Network)是一种基于区域的卷积神经网络方法,用于目标检测和分类图像中的对象。它由Ross Girshick等人于2014年提出,旨在解决传统滑动窗口方法的一些缺点,如计算复杂度高和难以处理尺度变化等问题。

R-CNN的基本思想是在输入图像中生成潜在的目标区域(即候选区域),然后使用卷积神经网络对这些区域进行特征提取和分类。这种方法大大减少了计算成本,并且能够在具有挑战性的数据集上实现高精度目标检测。

具体而言,R-CNN的工作流程如下:

1、使用选择性搜索算法或其他方法在输入图像中选取候选区域(Region of Interest, RoI)。
2、对每个RoI分别进行CNN的特征提取。这样可以大大减少计算量,提高检测速度。
3、将提取的特征向量送入一个多类别SVM分类器中,预测出候选区域中所含物体的属于每个类的概率值。每个类别训练一个SVM分类器,从特征向量中推断其属于该类别的概率大小。
4、为了提升定位准确性,R-CNN最后又训练了一个边界框回归模型,通过边框回归模型对框的准确位置进行修正。

R-CNN作为两阶段的检测算法,相比一阶段而言,优点在于精确度高,但缺点是速度较慢。随后,研究者们提出了Fast R-CNN和Faster R-CNN等改进版本,旨在提高检测速度和精度。

R-CNN在目标检测领域具有重要的地位,为后续的深度学习目标检测方法提供了重要的思路和基础。

SPP-net

SPP-Net(Spatial Pyramid Pooling Networks)是一种深度卷积神经网络结构,主要用于目标检测和图像分类任务。该网络结构在2015年由Kaiming He等人提出,是对R-CNN(Region-based Convolutional Neural Network)的一种改进。

SPP-Net的主要特点是可以处理任意大小的输入图像,并输出固定长度的特征向量。这是通过在卷积层之后引入一个空间金字塔池化(Spatial Pyramid Pooling, SPP)层来实现的。SPP层可以将任意大小的特征图转换为固定大小的输出,从而解决了卷积神经网络中全连接层对输入大小有限制的问题。

在SPP-Net中,首先通过卷积层提取输入图像的特征图,然后将特征图划分为不同尺度的网格(如1x1、2x2、4x4等),在每个网格内进行最大池化操作,最后将所有网格的输出拼接成一个固定长度的特征向量。这个特征向量可以送入全连接层进行分类或回归。

由于SPP-Net可以处理任意大小的输入图像,因此在训练和测试时都可以使用不同尺度的图像,这有助于提升模型的泛化能力和鲁棒性。此外,SPP-Net还通过只对整个图像进行一次卷积操作来提取特征,避免了R-CNN中对每个候选区域单独进行卷积的冗余计算,从而大大提高了检测速度。

在ImageNet 2014的比赛中,SPP-Net在目标检测任务中取得了第二名的成绩,并在多个数据集上验证了其有效性和性能。随后,SPP-Net的思想也被广泛应用于其他目标检测和图像分类任务中,成为深度学习领域的重要研究方向之一。

在这里插入图片描述

FAST R-CNN

在这里插入图片描述

Fast R-CNN是一种深度学习模型,主要用于目标检测任务,尤其适用于图像中物体的识别与定位。它在基于区域的卷积神经网络(R-CNN)系列中具有重要地位,旨在提升检测速度和效率。

Fast R-CNN模型结构主要包含四个核心部分:

1、对输入图像进行预处理,通过一个预先训练好的卷积神经网络(如VGG或ResNet)提取特征图。
2、使用RoI(Region of Interest)池化层对候选区域进行固定尺寸的特征提取。
3、将这些区域特征送入全连接层进行分类和边界框回归预测。
4、通过多任务损失函数同时优化分类和定位精度。

相比于传统的R-CNN,Fast R-CNN的主要改进在于它仅对整张图像进行一次卷积操作,大大减少了计算量,提高了运行速度。这一技术涉及图像处理、机器学习和深度学习等多个领域,旨在让机器“看”并理解看到的内容,进而做出决策或执行特定任务。

Fast R-CNN的优点在于其高效性和准确性,可以实现对图像中多个物体的快速检测与分类。它在多个数据集和物体任务上都取得了很好的效果,并且具有广泛的算法优化空间。同时,各大深度学习框架也都有较好的Fast R-CNN源码实现,使得该模型的使用非常方便。

单阶检测算法

单阶段(One-Stage)检测算法是目标检测领域中的一类重要方法,其主要特点是直接通过单次前向传播就完成目标检测和分类。与传统的双阶段检测算法(如R-CNN、Fast R-CNN、Faster R-CNN等)相比,单阶段检测算法具有简单、直接、易于实现等优点,并且通常具有更高的检测速度。

单阶段检测算法将目标检测问题转化为一个回归问题或分类问题,通过一个神经网络将输入图像映射到目标的类别、位置和分数。代表性的单阶段检测算法包括YOLO(You Only Look Once)系列(如YOLOv1、YOLOv2、YOLOv3、YOLOv4等)、SSD(Single Shot MultiBox Detector)等。

以YOLO为例,其核心思想是将目标检测任务视为一个回归问题。YOLO算法将输入图像划分为S×S的网格,每个网格负责预测B个边界框(Bounding Box)以及这些边界框的置信度(Confidence Score)。置信度反映了边界框中是否包含目标物体以及预测的准确性。同时,YOLO还预测了每个网格中目标物体的类别概率。通过联合边界框的置信度和类别概率,可以得到每个边界框中目标物体的最终得分。

单阶段检测算法的优点在于其简单高效,能够实时快速地检测目标,适用于对实时性要求较高的场景,如无人驾驶、视频监控等。此外,由于只需一次前向传播即可完成检测任务,单阶段方法具有较低的计算复杂度和内存占用。然而,单阶段方法也存在一些缺点。由于直接从原始图像中提取目标信息,容易受到目标尺寸、形变等因素的干扰,导致检测准确率相对双阶段方法较低。此外,在目标小尺寸、遮挡等情况下,单阶段方法的性能表现也较为有限。

在这里插入图片描述

上图下面部分的图就是部分 one-stage 目标检测网络的基本流程,可以清晰的看出,其对比双阶检测方式看上去要更加简洁。

YOLO算法

YOLO(You Only Look Once)算法是一种流行的单阶段目标检测算法,由Redmon等人在2015年首次提出。YOLO算法的核心思想是将目标检测任务当作一个回归问题来处理,它将输入图像划分为一个S×S的网格(grid),每个网格负责预测固定数量的边界框(bounding boxes)以及这些边界框的置信度和类别概率。

以下是YOLO算法的主要特点:

单次前向传播:YOLO算法只需一次前向传播就能完成目标检测和分类,这使得它非常快速。

全图检测:YOLO算法在训练和测试时都能看到整张图像的信息,而不仅仅是图像的某个区域。这使得YOLO能够更好地理解图像中的上下文信息,并减少背景错误的产生。

网格系统:YOLO将输入图像划分为S×S的网格,每个网格负责预测固定数量的边界框。如果某个目标的中心落在某个网格中,则该网格就负责预测该目标。

直接预测边界框的坐标:YOLO直接预测边界框的坐标(相对于网格的偏移量),而不是像Faster R-CNN那样预测边界框的候选区域。这使得YOLO算法更加简洁。

预测置信度和类别概率:每个边界框都会有一个置信度分数,表示该边界框包含目标的概率以及预测的边界框与真实边界框的交并比(Intersection over Union, IoU)。同时,每个网格还会预测C个类别概率(C是数据集中类别的数量),这些类别概率与边界框的置信度相乘,得到每个边界框的类别得分。

非极大值抑制(NMS):在得到所有边界框的类别得分后,使用非极大值抑制(NMS)来消除重叠的边界框,只保留得分最高的边界框作为检测结果。

YOLO算法有多个版本,包括YOLOv1、YOLOv2(YOLO9000)、YOLOv3、YOLOv4和YOLOv5等。每个版本都在前一个版本的基础上进行了一些改进和优化,以提高检测速度和准确率。例如,YOLOv2引入了批量归一化(Batch Normalization)和锚点框(anchor boxes)等技术来提高性能;YOLOv3则使用了更深的网络结构(Darknet-53)和多尺度预测等策略来提高小目标的检测能力。

在这里插入图片描述

YOLO算法检测流程

在这里插入图片描述

YOLO(You Only Look Once)算法的检测流程主要包括以下几个步骤:

1、网格划分:首先,将输入图像划分为固定大小的网格(grid)。每个网格都负责检测该区域内的目标物体。

2、边界框预测:对于每个网格,预测出多个边界框(bounding boxes)。每个边界框由一组坐标(x、y、宽度、高度)表示,这些坐标是相对于网格的。同时,为每个边界框分配一个置信度得分,表示该边界框内存在目标物体的概率以及预测的边界框与真实边界框的交并比(Intersection over Union, IoU)。

3、类别预测:对于每个边界框,预测出物体的类别概率。YOLO使用多标签分类来处理多类别物体的检测,即一个边界框可以同时属于多个类别。

4、解码与调整:将网络输出的特征图进行解码,得到每个边界框的精确位置和目标类别。解码过程中,使用预测的边界框坐标调整来修正边界框的位置,并使用激活函数对坐标进行变换。

5、置信度筛选:使用预测的边界框置信度得分进行筛选,过滤掉置信度得分较低的边界框。这是因为低置信度的边界框可能只是噪声或者误检。

6、非极大抑制(NMS):通过非极大抑制算法来进一步过滤边界框,以减少重叠的边界框数量。非极大抑制的基本思想是,如果两个边界框之间的IoU大于设定的阈值,则认为它们是重叠的,并选择置信度最高的边界框保留,而删除其他重叠的边界框。

通过以上步骤,YOLO算法能够实现对图像中目标物体的快速、准确检测。其优点是速度快,适用于实时应用场景,如视频监控、自动驾驶等。然而,由于网格划分的粗糙性,YOLO在检测小尺寸物体或具有严重重叠的物体时可能存在一定的精度损失。随着YOLO的不断发展,后续版本如YOLOv2、YOLOv3、YOLOv4等不断改进了检测精度和速度,并引入了更多的技术和特性,使得YOLO系列成为目标检测领域的重要算法之一。

YOLO算法评价

在这里插入图片描述

SSD算法

在这里插入图片描述

SSD(Single Shot MultiBox Detector)算法是一种用于目标检测的深度学习算法,它的主要特点是速度快、精度高。以下是关于SSD算法的详细介绍:

算法原理:

SSD算法是一种单阶段(one-stage)目标检测算法,它不需要像双阶段(two-stage)算法(如Faster R-CNN)那样先生成候选区域(region proposals),然后再进行分类和回归。SSD算法可以直接产生物体的类别概率和位置坐标值,经过单次检测即可直接得到最终的检测结果。

SSD算法采用了多尺度特征检测网络,利用不同尺度的特征图来检测不同大小的物体。大尺度特征图可以用来检测小物体,而小尺度特征图则用来检测大物体。这种多尺度检测策略使得SSD算法对于不同大小的物体都有较好的检测效果。

SSD算法还借鉴了Faster R-CNN中的anchor机制,在特征图上生成先验框(prior boxes)来进行预测。这些先验框具有不同的尺度和长宽比,可以更好地适应不同形状的物体。
算法结构:

SSD算法的主干网络通常使用VGG16等卷积神经网络,用于对图像特征的初步提取。然后,通过添加一系列额外的卷积层来构建多尺度特征检测网络。这些额外的卷积层可以产生不同尺度的特征图,用于后续的物体检测。

SSD算法的检测框架由两个部分组成:前面的卷积神经网络用于对图像特征的初步提取,后面的多尺度特征检测网络用于对前端网络产生的特征层进行不同尺度条件下的特征提取和物体检测。

算法特点:

1、速度快:由于SSD算法采用了单阶段检测策略,并且利用多尺度特征图进行检测,因此具有较快的检测速度。
2、精度高:SSD算法采用了多尺度检测策略和anchor机制,可以更好地适应不同大小和形状的物体,提高了检测的准确性。
3、实时性好:由于SSD算法的检测速度较快,因此适用于实时应用场景,如视频监控、自动驾驶等。

RetinaNet算法

在这里插入图片描述

RetinaNet采用了one-stage(单阶段)检测框架,但它通过引入Focal Loss(焦点损失)来解决正负样本不均衡的问题,从而实现了与two-stage(双阶段)检测器相媲美的检测精度。Focal Loss的设计使得模型在训练过程中更加关注难以分类的样本,从而提高整体的检测性能。

RetinaNet的核心思想是将输入图像划分为多个网格单元,并为每个单元预测一个类别概率和边界框坐标。具体来说,它使用一个卷积神经网络(CNN)作为backbone(主干网络)来提取图像特征,然后通过特征金字塔网络(FPN)结构在不同尺度的特征图上进行预测。在FPN中,特征图从高分辨率到低分辨率逐渐构建,从而能够捕获不同尺度的目标。

在RetinaNet中,有两个subnet(子网络)分别用于分类和边界框回归。分类subnet为每个网格单元预测一个类别概率分布,而边界框回归subnet则预测边界框的坐标。这两个subnet的输出经过Focal Loss的计算后,用于训练整个网络。

CornerNet

在这里插入图片描述

CornerNet是一种anchor-free(无锚点)的目标检测算法,它在2018年被提出,打破了传统目标检测算法对anchor(锚点)的依赖。

CornerNet的核心理念是将每个物体视为两个关键点(顶部左角和底部右角)的组合,通过直接预测这两个角点来定位和识别物体。

CornerNet基于深度卷积神经网络(CNN),尤其是特征金字塔网络(FPN),以捕获不同尺度的物体信息。它采用嵌套的热图(heatmap)预测方法,即对每个像素预测其属于特定角点的可能性,然后通过非极大值抑制(NMS)算法消除冗余的角点检测结果。此外,CornerNet还包括一些独特的模块,如嵌入式池化层(Embedded Gaussian pooling layers)用于更好地定位角点,以及联合训练策略来优化角点和整个对象的关系。

在CornerNet中,一个卷积网络预测两组热图来代表不同目标类别的角点位置,一组是左上角,另一组是右下角。该网络还为每个检测到的角点预测一个嵌入向量,使得两个角点嵌入到同一对象的距离很小。为了产生更紧密的边界盒,该网络还预测偏移量,以轻微调整角点的位置。利用预测的热图、嵌入和偏移量,通过简单的后处理算法可以获得最终的边界框。

未来方向

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1638064.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

快速了解Django:核心概念解析与实践指南

title: 快速了解Django:核心概念解析与实践指南 date: 2024/5/1 20:31:41 updated: 2024/5/1 20:31:41 categories: 后端开发 tags: Django核心路由系统视图系统ORM管理中间件Web框架登录装饰器 第一章:Django简介 背景和发展历程: Djan…

pyinstaller打包pytorch和transformers程序

记录使用pyinstaller打包含有pytorch和transformers库的程序时遇到的问题和解决方法。 环境和版本信息 操作系统:Windows 11 Python:3.10.12 pyinstaller:5.13.0 torch:2.2.2 transformers:4.40.1 打包过程和问…

MATLAB 数据导入

MATLAB 数据导入(ImportData) 在MATLAB中导入数据意味着从外部文件加载数据。该importdata功能允许加载不同格式的各种数据文件。它具有以下五种形式 序号 功能说明 1 A importdata(filename) 从filename表示的文件中将数据加载到数组A中。 2 A i…

【Docker】搭建一个媒体服务器插件后端API服务 - MetaTube

【Docker】搭建一个媒体服务器插件后端API服务 - MetaTube 前言 本教程基于群晖的NAS设备DS423的docker功能进行搭建,DSM版为 7.2.1-69057 Update 5。 简介 MetaTube 是一个媒体服务器插件,主要用于 Emby 和 Jellyfin 媒体服务器。它的主要功能是从互…

unity制作app(1)--登录 注册 界面

把学到的知识投入到生产中反而是一件简单的事情! 1.调整canvas的形状,这里和camera没有任何关系! overlay! 2.既然自适应,空间按钮的位置比例就很重要了! game窗口中新增720*1280的分辨率! 3.再回到can…

11【PS Blender 作图】场景作图 景深

【问题背景】 看下图,是一个插画师的作图,是不是好像现实场景;合理利用景深,让画面好像是3D现实场景 那么如何才能完成这样让人身临其境的画面呢? 大体有两个方法: 【1】2D插画,合理利用景深;如用PS画图,在画图的时候注意 画面构图,让2D的画面,看起来像3D 缺点…

神经网络参数初始化

一、引入 在深度学习和机器学习的世界中,神经网络是构建智能系统的重要基石,参数初始化是神经网络训练过程中的一个重要步骤。在构建神经网络时,我们需要为权重和偏置等参数赋予初始值。对于偏置,通常可以将其初始化为0或者较小的…

6.python网络编程

文章目录 1.生产者消费者-生成器版2.生产者消费者--异步版本3.客户端/服务端-多线程版4.IO多路复用TCPServer模型4.1Select4.2Epoll 5.异步IO多路复用TCPServer模型 1.生产者消费者-生成器版 import time# 消费者 def consumer():cnt yieldwhile True:if cnt < 0:# 暂停、…

2024年五一数学建模竞赛C题论文首发

基于随机森林的煤矿深部开采冲击地压危险预测 摘要 煤炭作为中国重要的能源和工业原料&#xff0c;其开采活动对国家经济的稳定与发展起着至关重要的作用。本文将使用题目给出的数据探索更为高效的数据分析方法和更先进的监测设备&#xff0c;以提高预警系统的准确性和可靠性…

键盘更新计划

作为 IT 搬砖人&#xff0c;一直都认为键盘没有什么太大关系。 每次都是公司发什么用什么。 但随着用几年后&#xff0c;发现现在的键盘经常出问题&#xff0c;比如说调节音量的时候通常莫名其妙的卡死&#xff0c;要不就是最大音量要不就是最小音量。 按键 M 不知道什么原因…

服务运营 | 精选:花钱买开心!体验型服务设计中的调度优化

编者按 在体验经济时代&#xff0c;企业逐渐从提供产品转变为提供体验&#xff0c;只有了解顾客的行为&#xff0c;才能对服务进行更好的设计&#xff0c;从而提高顾客的体验和忠诚度&#xff0c;实现企业与顾客的双赢。如何优化顾客体验便是体验型服务设计&#xff08;Experie…

通过自然语言处理执行特定任务的AI Agents;大模型控制NPC执行一系列的动作;个人化的电子邮件助手Panza

✨ 1: OpenAgents 通过自然语言处理执行特定任务的AI代理 OpenAgents是一个开放平台&#xff0c;旨在使语言代理&#xff08;即通过自然语言处理执行特定任务的AI代理&#xff09;的使用和托管变得更加便捷和实用。它特别适合于日常生活中对数据分析、工具插件获取和网络浏览…

鹏哥C语言复习——内存函数

目录 一.memcpy函数 二.memmove函数 三.memset函数 四.memcmp函数 一.memcpy函数 该函数是针对内存块进行拷贝操作&#xff0c;mem即为memory&#xff0c;是内存的意思&#xff1b;cpy就是copy&#xff0c;是拷贝的意思 int arr[] { 1,2,3,4,5,6,7,8,9,10 }; int arr2[2…

C++中的右值引用和移动语义

1 左值引用和右值引用 传统的C语法中就有引用的语法&#xff0c;而C11中新增了的右值引用语法特性&#xff0c;所以从现在开始我们之前学习的引用就叫做左值引用。无论左值引用还是右值引用&#xff0c;都是给对象取别名。 什么是左值&#xff1f;什么是左值引用&#xff1f; 左…

初探 Google 云原生的CICD - CloudBuild

大纲 Google Cloud Build 简介 Google Cloud Build&#xff08;谷歌云构建&#xff09;是谷歌云平台&#xff08;Google Cloud Platform&#xff0c;GCP&#xff09;提供的一项服务&#xff0c;可帮助开发人员以一致和自动化的方式构建、测试和部署应用程序或构件。它为构建和…

【Java探索之旅】包管理精粹 Java中包的概念与实践

文章目录 &#x1f4d1;前言一、封装1.1 封装的概念1.2 访问限定修饰符 二、封装扩展&#xff08;包&#xff09;2.1 包的概念2.2 带入包中的类2.3 自定义包2.4 常见的包 &#x1f324;️全篇总结 &#x1f4d1;前言 在Java编程中&#xff0c;封装是面向对象编程的核心概念之一…

PyCharm 2024新版图文安装教程(python环境搭建+PyCharm安装+运行测试+汉化+背景图设置)

名人说&#xff1a;一点浩然气&#xff0c;千里快哉风。—— 苏轼《水调歌头》 创作者&#xff1a;Code_流苏(CSDN) 目录 一、Python环境搭建二、PyCharm下载及安装三、解释器配置及项目测试四、PyCharm汉化五、背景图设置 很高兴你打开了这篇博客&#xff0c;如有疑问&#x…

Swift - 可选项(Optional)

文章目录 Swift - 可选项&#xff08;Optional&#xff09;1. 可选项&#xff08;Optional&#xff09;2. 强制解包&#xff08;Forced Unwrapping&#xff09;3. 判断可选项是否包含值4. 可选项绑定&#xff08;Optional Binding&#xff09;5. 等价写法6. while循环中使用可选…

【linuxC语言】stat函数

文章目录 前言一、stat函数二、示例代码总结 前言 在Linux系统编程中&#xff0c;stat() 函数是一个非常重要的工具&#xff0c;用于获取文件的元数据信息。无论是在系统管理、文件处理还是应用开发中&#xff0c;都可能会用到 stat() 函数。通过调用 stat() 函数&#xff0c;…

简约大气的全屏背景壁纸导航网源码(免费)

简约大气的全屏背景壁纸导航网模板 效果图部分代码领取源码下期更新预报 效果图 部分代码 <!DOCTYPE html> <html lang"zh-CN"> <!--版权归孤独 --> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible…