目标检测器技术演进简史

引言

目标检测算法的发展已经取得了长足的进步,从早期的计算机视觉方法开始,通过深度学习达到了很高的准确度。在这篇博文中,我们将一起回顾一下这些算法的发展阶段以及现代目标检测系统中使用的主要方法。

我们首先回顾早期传统的目标检测方法:Viola-Jones 检测器、HOG 检测器和基于部件(Part-based)的方法。它们在目标检测领域发展之初得到了广泛应用。

然后,我们逐渐转向基于两阶段和一阶段目标检测神经网络的更现代的深度学习目标检测方法:RCNN、YOLO、SSD 和 CenterNet。这些方法提供了一种端到端( end-to-end)的架构,允许算法适应任何输入数据。

博文的最后,我们以Zero-Shot目标检测方法结束,它允许我们在无需任何神经网络训练的情况下搜索图像中的任何对象,典型的Zero-Shot目标检测方法包括:OWL-ViT、CLIP、GLIP、Segment Anything、GVT。

在这里插入图片描述

目标检测概述

在本文中,我们将探讨目标检测的主题、含义、优势以及许多有趣的地方,我们还将尝试分析目标检测的总体趋势和演变。

让我们从基础开始:目标检测任务可以非常简单地表述:什么目标位于何处?

目标检测是计算机视觉中的一项关键任务,其目标是识别和定位图像中的各种对象,例如汽车、骑自行车的人和交通灯。这是通过使用坐标( x m i n x_{min} xmin, y m i n y_{min} ymin, x m a x x_{max} xmax, y m a x y_{max} ymax)定义矩形区域并将它们与分类和概率向量( p 1 p_1 p1, p 2 p_2 p2, ⋯ \cdots , p n p_n pn)关联来实现的。目标检测在实际意义上超越了图像分类,因为它能够检测对象以进行后续分析、修改或分类。Stable Diffusion 和 Face Swap 等技术利用目标检测来操纵和替换图像中的目标或人脸。当同一类的多个目标(例如行人)重叠时,就会出现挑战。尽管各种替代方法正在兴起,但非极大值抑制(Non-Maximum Suppression,NMS)仍然是目前的通用解决方案,。

目标检测是一项极其重要的任务,在过去约 30 年中得到了发展和改进。目标检测算法的研发一直是一个活跃的研究领域,我们将持续观察该领域的新趋势和进展。目标检测技术应用广泛应用于各个行业,从视频监控和自动驾驶汽车到医药和零售,具体来说:

  • 视频监控:检测视频片段中的人物及其位置,监控他们之间的距离。
  • 汽车行业:利用计算机视觉来了解环境和道路安全。
  • 医学诊断:检测图像中的肿瘤和其他异常情况以进行分析。
  • 零售:自动化货物核算流程和检测盗窃行为。
  • 农业:监测植物健康、疾病检测、田间分析和其他农业任务。

在这里插入图片描述

目标检测路线图

让我们从 Roadmap 开始。本小节包含一些论文中的图片,描述了目标检测方法的发展。让我们概述一下这些路线图,重点关注一些要点。

路线图(一般)

在这里插入图片描述
目标检测自 20 世纪 80 年代以来一直在发展。1998 年,LeCun 等人引入了 LeNet-5,这是一种用于数字识别的重要 CNN 架构。这个数据集被称为 MNIST,起源于 90 年代,此后成为评估机器学习和深度学习算法的流行基准。后来有人提出了目标检测的要求,但当时还没有足够有效的方法来做到这一点。

第一个重要的方法是 Viola-Jones 或 Haar 级联,它在当时的 PC 上能够进行快速运算且易于使用,提供每秒数帧 (FPS) 的可接受检测速度。

几年后,HOG 检测器方法作为 Viola-Jones 的替代方法被引入,主要侧重于捕获物体形状和轮廓。

后来,使用可变形部件模型(Deformable Parts Models,DPM)的方法开始发挥作用,在目标检测精度方面长期占据领先地位。

2012 年,第一个大型深度神经网络出现,包括 AlexNet。尽管速度慢且计算量大,但 AlexNet 和后续模型(例如 MobileNet)的架构一直在持续得到优化。

这些模型提供了高质量的代表性图像特征,可以很好的描述上下文并检出各种目标。

这些方法最重要的方面之一是它们的“端到端”性质:输入图像经历一系列差异化的操作,从而能够在单个架构内进行整体处理。

路线图(更传统的方法)

在这里插入图片描述
目标检测的发展主要经历了两个历史时期:“传统目标检测时期(2014年之前)”和“基于深度学习的目标检测时期(2014年后)”。

在 2014 年之前,大多数目标检测算法都是基于手动创建的特征构建的。例如,2001年,P. Viola和M. Jones使用VJ检测器实现了不受任何限制的实时人脸检测。该探测器使用“滑动窗口”技术,遍历图像中所有可能的位置和比例,以查看是否有任何窗口包含人脸。

SIFT(尺度不变特征变换)是一种用于从图像中提取和描述独特特征的方法。使用传统的计算机视觉方法,可以计算描述图像的各种函数和特征。例如,您可以通过相邻像素的像素值之间的差异来计算图像梯度。这是特征提取的重要一步。此外,拉普拉斯算子可用于检测图像中的边缘。SIFT 将图像划分为关键点邻域或兴趣区域,从中可以提取描述这些区域的特征。通过将这些特征与表示目标的描述符进行比较,可以识别与目标最相似的区域。通过这种方式,您可以表示该目标位于该处的概率很高。

从最简单的层面来说,这意味着找到图像中最相似的部分。还有哪些传统方法?说实话,我并没有真正研究过,因为它们几乎都不再被使用了。如果你需要快速人脸检测,唯一可能仍然使用的是 Haar 级联。

路线图(深度学习方法)

在这里插入图片描述
2014年以后,随着深度学习的出现,目标检测开始以前所未有的速度发展。例如,2014 年,R. Girshick 等人。提出了具有CNN特征的区域(RCNN)方法,显着提高了目标检测的准确性。

2015 年,S. Ren 等人提出了 Faster RCNN 检测器,这是第一个基于深度学习的 near-real-world 检测器。Faster-RCNN 的主要贡献是引入了Region Proposal Network (RPN),它允许人们以很小的代价获得区域 Proposal。从R-CNN到Faster RCNN,目标检测系统的大部分单独模块,例如特征提取、边界框回归等,已逐渐集成到单个最终学习框架中。

2017 年,T.-Y. Lin等人提出了特征金字塔网络(Feature Pyramid Networks,FPN)。FPN 在检测各种尺度的目标方面取得了显著进展。通过在主 Faster R-CNN 系统中使用 FPN,无需额外调整即可在 COCO 数据集上检测单个模型,从而获得最佳结果。

对于 single-stage 检测器,YOLO(You Only Look Once)是由 R. Joseph 等人在2015年提出。YOLO 速度极快:YOLO 的快速版本运行速度为每秒 155 帧。YOLO 将单个神经网络应用于一幅完整图像,该网络将图像划分为多个区域,并同时预测每个区域的边界框和概率。

目标检测指标的改进

评估目标检测算法时的一个重要方面是平均精度 (mAP) 指标。该指标衡量阈值更改时算法的精度和召回率之间的关系。在 YOLOv5 等算法中使用置信阈值可以让你丢弃低概率的预测。在精确率和召回率之间找到平衡非常重要,这反映在 mAP 指标中。

我们详细分析了 VOC07、VOC12 和 MS-COCO 数据集上目标检测 mAP 的发展和改进。
在这里插入图片描述

  • 在VOC07数据集上,目标检测的mAP从2008年(DPM方法)的21%增加到2018年(RefineDet)的83.8%。(+62.8%
  • 在VOC12数据集上,mAP从2014年(R-CNN方法)的53.7%增加到2018年(RefineDet)的83.5%。(+29.8%
  • 在 MS-COCO 数据集上,目标检测的 mAP 从 2015 年(Fast R-CNN 方法)的 19.7% 增加到 2021 年(Swin Transformer)的 57.7%。(+38%

这些数据证实了近年来物体检测领域取得的重大进展,特别是随着深度学习的出现及其在物体检测方法中的应用。

传统检测方法

自从首次积极研究人脸识别方法以来,目标检测算法领域已经发生了许多变化。在本文中,我们将回顾自 2001 年以来该领域的发展,当前已经有了许多 基于目标的人脸检测方法 的综述文章。

当时,主要有两种方法:基于图像和基于特征。基于图像的方法使用 SVM(支持向量机)和线性子空间方法等方法。他们还利用了 LeNet 等卷积神经网络 (CNN),该网络在早期图像识别任务中发挥了重要作用。还采用了统计方法,包括高斯混合模型和基于正态分布的概率模型等技术。

尽管从研究的角度来看,其中一些方法很有趣,并且对于了解技术发展脉络来说可能具有价值,但它们已不再用于现代目标检测系统。相反,现代方法基于大型神经网络,可以进行高效的图像比较和目标识别。这些方法提供了更具代表性的结果。
在这里插入图片描述

Viola-Jones Detectors (2001)

其中一种算法是 Haar 级联,也称为 Viola-Jones 算法。
在这里插入图片描述
Haar 级联算法基于一个简单的想法:如果我们要检测图像中的人脸,一般来说,所有的人脸都有相似的特征,比如两只眼睛、一个鼻子、一张嘴。例如,眼睛通常有一定的形状,脸的底部因为阴影而变暗,拍照时可以突出脸颊和鼻子。

因此,我们可以形成一组描述这些面部特征的模板。这些模板可以是小正方形或矩形的形式。卷积运算用于将这些模板与图像块进行卷积以生成特征图,随后对其进行分析以进行目标检测。

Haar 算法的级联方法因其优点而被使用。作者使用boosting方法并依次应用不同的模板,这允许检测具有很多变化的面部,例如倾斜和照明条件。在基于级联模板顺序应用不同的分类器之后,算法在每个阶段做出决定,以确定是继续将候选区域评估为人脸还是拒绝它。

因此,我们得到了一个可以快速工作的目标检测器,并且在考虑包括训练数据、特征选择和应用程序上下文在内的各种因素时可以显示出良好的结果。

HOG探测器 (2005)

方向梯度直方图(Histogram of Oriented Gradients,HOG)算法于 2005 年发明,与深度学习图像处理方法不同,它不使用神经网络。

  • 首先,图像被分成8x8像素的小子图。对于每个子图,我们计算梯度,从而产生一组梯度值。这些值分布到具有指定数量的bins的直方图中,以表示该子区域中的梯度分布。来自多个子区域的直方图被连接起来形成特征向量。

  • 接下来,使用直方图均衡等过程对直方图进行归一化,以增强对比度并均衡图像不同部分像素的强度幅度。这有助于改善整体视觉表现。

  • 对直方图进行归一化后,为滑动窗口覆盖的每个区域计算描述符,该滑动窗口以多个尺度和纵横比在图像上移动。通过检查这些检测窗口并比较从它们中提取的特征向量,可以检测到面部等目标。经过训练的分类器(通常是支持向量机 (SVM))用于确定感兴趣的对象是否存在。

虽然这种方法可以检测人脸,但它在检测细粒度细节或复杂结构(例如划痕或脑肿瘤)方面可能不那么有效,从而限制了其在此类任务中的使用。

乍一看,人们可能会建议结合考虑颜色和其他参数的更复杂的功能,事实上,进一步的研究已经探索了此类改进。例如,将 HOG 与其他特征描述符(例如颜色直方图或类似 Haar 的特征)相结合已显示出有潜力的结果。此外,还存在利用部分特征进行目标检测的有效方法,例如组合多个特征描述符来查找行人或人脸等目标。尽管这些方法可能更加复杂,但它们在某些情况下已经证明了可以有效提高准确性。

总的来说,HOG 方法是检测图像中目标的有效方法,特别是对于人脸检测等任务。通过利用数学方法和基于梯度的特征,它取得了良好的效果。尽管如此,对该方法的进一步研究和修改可以提高其效率和准确性。

基于部分的方法

  • 基于可变形部件的模型 (2010)
  • 隐式形状模型 (2004)

基于可变形部件的模型 (Deformable Part-based Model,DPBM),由 Felzenszwalb 等人在2010年提出,是一种基于可变形状部件概念的目标检测方法。隐式形状模型(Implicit Shape Model,ISM),由 Leibe 等人在2004年提出,是一种目标检测方法,它将目标的形状表示为一组局部特征,并使用统计方法来查找图像中对象最可能的区域。这两种方法都已广泛应用于目标检测任务,有助于提高图像处理算法的准确性和可靠性。
在这里插入图片描述

基于深度学习的检测方法

在任何基于深度学习的目标检测过程开始时,我们都有一个输入到模型的输入图像。该图像可以以其原始形式进行处理或调整为固定尺寸。然后,在每个尺度上,我们搜索目标,并对结果进行平均。针对这项任务人们提出了不同的方法。
在这里插入图片描述

处理一张图像或一组图像后,它们被传输到模型主干(backbone)。主干网络的任务是从图像中提取各种特征,创建描述图像的特征向量。有许多不同的主干模型,例如 AlexNet、VGG、ResNet、YOLO(使用 DarkNet 的修改版本作为主干)、EfficientNet、MobileNet 和 DenseNet。

获得的特征从主干层传递到负责特征细化的中间层,然后再传递到头部。在某些架构中,backbone和head之间可能没有中间模块,特征直接传递到head以生成最终的边界框和类预测。总体目标是确定目标的位置和类别。

两阶段和一阶段目标检测器

在这里插入图片描述
目标检测算法可以分为两类:两阶段和一阶段(two-stage and one-stage)。在两阶段算法中,骨干和颈部任务涉及创建region proposal。从图像中提取特征并将其传输到一个神经网络,该神经网络返回一组潜在的对象位置及其置信度。或者,可以使用选择性搜索算法来生成目标proposal。接收到的特征以及proposal被转移到算法的后续阶段/组件以进行进一步处理。

相比之下,一步算法使用一种更简单、更快的方法。直接处理图像,并提取特征来检测目标,而无需显式的proposal生成步骤。

两阶段检测器

RCNN (2014)

我们要讨论的第一个算法是R-CNN(基于区域的卷积神经网络)。它通过采用多阶段pipeline和各种组件引入了基于区域的检测概念。我们获取图像输入并生成region proposal。然后使用感兴趣区域池化(ROI Pooling)操作将这些proposal 转换为固定大小,该操作从建议区域中提取固定长度的特征向量。R-CNN 网络由用于特征提取的卷积神经网络 (CNN) 和全连接层组成。CNN 提取特征,后续层执行对象分类,确定对象的存在及其类别。此外,网络还结合了边界框回归来细化对象周围边界框的坐标。
在这里插入图片描述

Fast RCNN (2015)

基于区域卷积神经网络(RCNN),研究者们开发了一种称为 Fast R-CNN 的改进算法。它比其前身更快,因为它不使用整个图像来检测对象,而是利用神经网络已识别的特殊特征。与原始图像相比,这些特征的尺寸要小得多。借助这些功能,可以生成特征图,同时考虑到调整大小的特征图。接下来,应用空间金字塔池化(Spatial Pyramid Pooling,SPP)从不同级别的特征图中提取特征。这些特征被传递到全连接层,该层执行目标分类和细化,就像以前的架构一样。

在这里插入图片描述

Faster RCNN (2015)

另一个显著加速这一过程的改进是 Faster R-CNN。在此算法中,使用神经网络生成region proposal。这可以实现更细粒度的处理,简化训练,并促进应用各种优化技术来针对不同平台优化网络。
在这里插入图片描述

FPN (2017)

我们要讨论的下一个算法是特征金字塔网络(Feature Pyramid Networks,FPN),它是 Faster R-CNN 的改进版。尽管与 Faster R-CNN 相比,它提供了更准确的结果,但特征金字塔网络 (FPN) 保持了相似的处理速度。在 FPN 中,特征图不再像以前那样仅从网络的最后一层提取,而是从图像处理的不同阶段提取。然后,使用逐元素加法通过自上而下的路径和横向连接来聚合这些特征,并基于生成的特征金字塔,为执行目标分类和检测的另一个神经网络创建初始proposal。
在这里插入图片描述
以上是一些典型两阶段目标检测算法的概述。它们都有自己的优点,可以根据项目的需要来使用。

Backbones

目标检测算法的开发是一个活跃的研究领域,该领域非常关注各种架构(例如骨干网)对检测器的准确性和效率的影响。我们将研究主干网对两阶段探测器的影响,并讨论这个问题的重要方面。

在这里插入图片描述

为了根据特征生成准确的目标proposal,必须具有高质量的特征,以便你可以在图像中找到目标。选择合适的主干架构对检测器的准确性有重大影响。例如,MobileNet、Inception 和 ResNet 等流行架构表现出不同的效率和准确性特征。

提取器特征的准确性可以通过使用合适的损失函数在具有Groundtruth边界框的目标检测数据集上训练backbone来评估。架构的头部通常会被修改或增强额外的层以实现目标检测。

由于与其他组件的相互依赖,在 Faster R-CNN 架构中训练主干可能具有挑战性。在这种情况下,神经网络组件,包括主干网络、Region proposal网络和目标检测头,是联合训练的。

首先,神经网络组件,包括特征提取器,是联合训练的。特征提取器在特征提取后不会冻结,并且会与其他组件一起继续进行微调。

Faster R-CNN 的一个有趣的特点是它的两阶段学习过程,首先训练Region Proposal网络(RPN),然后训练目标检测头。

目前,训练一阶段目标检测算法,如 YOLO(You Only Look Once)或 SSD(Single Shot MultiBox Detector),已经大大简化,因为它们是一次性训练的,但它们仍然有自己的细微差别。

一阶段检测器

YOLO (2015)

YOLO(You Only Look Once)是一阶段检测器之一。虽然下面的简单示意图没有完全描述算法的内部工作原理,但它有助于理解一般概念。

图像被划分为单元格网格,其中网格的大小是可配置的。每个单元格都包含用于目标检测的特征。

主要思想是 YOLO 预测每个单元中多个目标的边界框和类概率,而无需假设每个单元中最多有 2 个目标。
在这里插入图片描述

SSD (2015)

另一种一阶段检测器是 SSD(Single Shot MultiBox Detector),它是一种单级检测器,其工作原理是将不同层的特征聚合到最终的分类器和回归器中。
在这里插入图片描述

RetinaNet (2017)

RetinaNet 是另一个重要的一阶段检测器,它聚合有关上下文和纹理特征的信息,以实现目标定位的高精度。它还利用焦点损失函数(focal loss function)和特征金字塔网络(FPN)。
在这里插入图片描述

CenterNet (2019)

2019 年发布的 CenterNet 架构是另一个值得一提的一阶段解决方案。
在这里插入图片描述

形成此类网格的最初想法面临着挑战,特别是在处理包含数千个目标的大型卫星图像时。CenterNet 没有定义边界框,而是为每个目标分配一个中心点。这允许使用中心点结合预测的偏移量进行目标检测和计数,以生成包围目标的边界框。CenterNet的一个显著特点是使用Hourglass Backbone,它能够实现多尺度信息融合并增强模型捕获上下文信息的能力。在Hourglass Backbone之后,CenterNet执行关键点评估和检测。

目标检测器按类划分

目标检测算法的统一、高效开发是计算机视觉领域的热门话题。如今,目标检测器算法有多种变体,其方法和结果各不相同。其中之一是基于anchor的两阶段检测器,它基于两个阶段的检测。该方法使用锚点来proposal区域,然后分析这些区域以识别目标。
在这里插入图片描述
另一种选择是无锚(anchor-free)检测器,它提供了一种无锚方法来进行目标检测。他们使用其他策略来识别有目标的区域。新的、有前途的领域之一是使用基于Transformer的目标检测器。这些基于 Visual Transformer 的算法于 2019 年出现,精度很高。然而,由于未针对某些平台进行优化,它们在性能和计算能力方面存在局限性。尽管如此,这些算法的积极研究和优化已经在进行中。

基于Transformer的检测器

现在我想提请你注意基于Transformer的目标检测器的功能。例如,他们不使用非极大值抑制,我们稍后会讨论这种方法。
在这里插入图片描述
基于 Transformer 的目标检测器是一种使用 Visual Transformer 架构的算法。Visual Transformer 使用基于注意力机制的Transformer。注意力机制首次在2017年由 Vaswani 等人发表的Transformer 模型论文《Attention is All You Need》中引入,彻底颠覆了序列转换任务。

Transformer 具有重复块,主要基于自注意力机制,使其能够捕获输入序列中不同位置之间的依赖关系。

这使得transformers成为文本处理中的强大工具,例如文本理解和文本生成。在文本处理领域取得成功之后,transformers也被用于计算机视觉领域,特别是目标检测器。

视觉数据的处理方法是将图像分成块,然后使用transformers处理这些块。与卷积网络相比,这种方法极大地简化了图像处理。图像块被展平并被视为向量序列,由transformers依次处理。其输出可用于各种任务,包括目标检测。为了有效地处理向量,位置嵌入用于通过添加表示元素相对位置的位置编码向量来将位置信息合并到向量中。

DETR (2020)

DETR 是一种端到端目标检测模型,无需使用非极大值抑制即可直接预测图像中对象的边界框和类标签。训练此类算法需要使用有标注的训练数据和适当的损失函数来优化模型的参数。
在这里插入图片描述

SWIN Transformer (2021)

2021年,引入SWIN(Shifted Windows)架构。SWIN Transformer背后的想法非常简单。它使用 Visual Transformer 技术,将输入图像分割成patches,但 SWIN Transformer 主干类似于特征金字塔网络。
在这里插入图片描述

SWIN 转换器不是单独处理每个patch,而是将输入图像划分为patch网格,每个patch都有固定的大小,并在将它们组合成一个大特征向量之前独立处理它们。这种方法增强了模型对空间关系的理解,改善了对象定位和分割结果。更新后的 SWIN Transformer v2 展示了在各种任务(例如目标检测和实例分割)中改进的性能。

非极大值抑制 (NMS)

在这里插入图片描述

目标检测的关键步骤之一是非极大值抑制(NMS)算法,该算法用于组合重叠的边界框并获得一个最终结果。

让我们想象一下我们使用 YOLO 算法进行物体检测的情况。处理图像后,YOLO 返回 4 个边界框。然而,事实证明所有这些边界框都是重叠的。当选择这些边界框中的哪一个应该被认为是正确的时,就会出现问题。每个边界框只能覆盖对象的某个部分,但我们对整个对象及其确切位置感兴趣。

目标检测算法的发展经历了几个阶段。Viola Jones 和 Haar 检测器使用了一种称为“贪婪选择”的方法,但它并不是非极大值抑制 (NMS) 算法的具体组成部分。这种方法的想法是选择所有重叠边界框中最大的作为正确结果。然而,这种方法在检测精度方面存在局限性。

另一种常见的技术是“边界框聚合”。在此阶段,所有边界框根据特定原则进行组合,例如对边界框中心的坐标进行平均或选择最大或最小覆盖值。特定方法的选择取决于手头的任务。

一般来说,目标是使用所有边界框,同时通过聚合它们来保留信息。然而,应该记住,这种方法也有其缺点,特别是在使用不准确的边界框时,可能会影响最终结果。

非极大值抑制 (NMS) 是在对象检测模型生成边界框预测后作为后处理步骤执行的。NMS 过滤掉多余的边界框,仅选择最有信心且不重叠的框作为最终输出。

还有一些不依赖于最大抑制的无 NMS 检测器,例如 DETR。这些检测器立即返回每个单独目标的边界框,从而减少检测后额外步骤的需要。例如,CenterNet 是一个返回关键点的简单架构,无需 NMS。每个对象都由一个关键点和定义边界矩形的距离宽度表示。

(Zero|One|Few)-Shot Object Detection

在目标检测算法的开发中,我们正在慢慢转向few、one、zero-shot的目标检测的主题。在本节中,我们将较少关注技术细节,而更多地关注更高层次,提供如何执行零样本目标检测的想法的简单描述。

多模态

在这里插入图片描述
这种情况下的关键概念是多模态,这意味着神经网络可以同时理解多种类型的数据。例如,可以是图像和文本、图像和声音、文本和声音的组合,甚至可以是图像、文本和声音同时存在。
请添加图片描述
在这种方法中,我们有多个输入信号,每个信号都由相应的模块处理。在我们的例子中,这包括一个用于文本处理的单独模块、一个用于图像处理的单独模块和一个用于音频处理的单独模块。这些模块形成一个从头到尾工作的单一神经网络,称为端到端架构。

接下来,使用融合模块。它们可能有不同的名称,但它们执行相同的功能——它们组合图像、文本和音频特征并对它们执行某些操作。例如,他们可能会寻找与文本特征向量最相似的图像特征向量。这和CLIP架构的原理类似,我们稍后会讲到。

CLIP (2021)

CLIP添加了图像-文本连接来理解图像的内容。
请添加图片描述
CLIP 是一项革命性的发展。CLIP 背后的主要思想是它在图像和文本之间建立联系,以更好地理解图像的上下文。CLIP 使用两种模型——TextEncoder 和 ImageEncoder。这些模型中的每一个都将数据转换为向量格式。

CLIP 在由文本-图像对组成的数据集上进行训练,每对都包含文本描述和相应的图像。在训练过程中,模型尝试找到 TextEncoder 和 ImageEncoder 参数,以便使得文本和图像获得的向量彼此相似。目标是让其他文本描述的向量与目标图像向量不同。

当使用 CLIP 进行零样本目标检测时,我们可以提供图像以及与我们想要在图像中查找的对象相关的单词或短语列表。例如,如果我们有一张狗的图像,我们可以使用 TextEncoder 创建一个带有文本“狗的照片”的向量。然后,我们将该向量与为单词或短语列表中的每个文本获得的向量进行比较。与图像向量距离最小的文本表示与图像对应的对象。

因此,我们可以使用 CLIP 对图像中的目标进行分类,即使无需在包含目标的特定数据集上单独训练模型。这种方法为在目标检测领域应用 CLIP 开辟了广泛的可能性,我们可以利用文本和图像之间的关系来查找图像中的对象。

OWL-ViT (2022)

OWL-ViT 添加图像级patches来了解目标的位置。
在这里插入图片描述
2022 年,研究者引入了一种新的多模态架构 OWL-ViT,用于目标检测。该网络可在 Hugging Face 平台上使用,引起了研究和实践社区的极大兴趣。其基本思想是创建图像和文本的嵌入,然后比较这些嵌入。图像通过 Vision Transformer 进行处理,生成一组嵌入。然后,Vision Transformer 将自注意力和前馈网络应用于这些嵌入。尽管某些步骤可能看起来令人困惑,但实际上它们有助于提高模型的质量。

最后,在训练阶段,使用对比损失函数来鼓励相应的图像-文本对具有相似的嵌入,而不对应的图像-文本对具有不同的嵌入。该模型预测边界框以及特定文本嵌入应用于特定对象的概率。

应该注意的是,目标检测的准确性可能是有限的。原始模型的作者使用了基于二分匹配损失在带有目标检测数据集的预训练模型进行微调的过程。此过程有助于提高检测到的边界框的质量。有关此过程的更多信息如下图所示。
请添加图片描述
现在让我们看看这个多模态模型的额外特征。除了文本之外,您还可以使用图像作为模板。例如,如果您有一张蝴蝶的照片,您可以将其用作搜索查询并查找类似的图像。该模型能够根据共同属性分析文本和图像。
请添加图片描述

GLIP (2022)

GLIP 添加了单词级别的理解,以根据提示的语义查找对象。
请添加图片描述
GLIP (2022) 更进一步,提供对图像的洞察以区分其语义。让我们用一个例子来说明这一点。假设我们有一个关于一个拿着吹风机、戴着眼镜的女人的句子。与此同时,我们看到一张图像,显示该女子戴着吹风机和眼镜。GLIP 将对象检测重新表述为短语基础。通过接受图像和文本提示作为输入,它可以识别诸如人、吹风机等实体。

请添加图片描述
该技术提供了一种根据图像与文本提示的语义对应关系来查找图像中的目标的新方法。现在,我们不仅要识别目标,还要将文本的各个部分与图像的组成部分关联起来。

即使您只提供目标的名称,例如“Stingray”,GLIP 也能够找到它,但精度可能较低。但是,如果您添加描述,例如“比目鱼”,它将提供额外的上下文并帮助你了解你正在寻找的内容。值得注意的是,在使用 ChatGPT 和现代零样本目标检测方法时,“提示工程”非常重要。

请添加图片描述

Segment Anything (2023)

Segment Anything (SAM) 添加masks来查看对象的像素级位置。

该算法于 2023 年推出,不仅可以检测图像中的对象,还可以通过在像素级别应用mask来分割它们。
请添加图片描述
Segment Anything 的主要功能之一是它使用图像和提示编码器来创建整体图像嵌入,可用于根据提示分割图像。这些提示可以是空间提示、文本提示或两者的组合。例如,您可以输入“人”作为文本提示,算法将努力分割图像中与人相关的所有对象。

这不仅可以让你分割图像中的不同区域,还可以了解场景的布局和内容。使用算法生成的分割掩码,在适当的后处理步骤的情况下,人们可以潜在地执行诸如计算对象实例数量之类的任务。
请添加图片描述

GVT (2023)

Good Visual Tokenizers (GVT) 是一种新的多模态大型语言模型 (MLLM),涉及visual tokenizer,并通过适当的预训练方法进行了优化。该tokenizer有助于理解视觉数据的语义和细粒度方面。

GVT 添加了大语言模型的使用来研究带有文本的图像。
请添加图片描述
GVT 在大型语言模型中引入了优化的visual tokenizer,可以对图像以及相关文本进行更全面的研究。虽然将这些算法应用于医学图像等特定领域可能需要额外的研究,但 GVT 已经在涉及视觉问答、image caption和细粒度视觉理解任务(例如目标计数和多类识别)的任务中展示了卓越的性能。
请添加图片描述

将文本和图像集成到一个模型中可以扩展数据理解和处理能力。通过使用上述算法,可以在解决以前需要复杂算法和大量数据的各种任务方面取得重大进展。

总结一下零样本目标检测:

  • CLIP添加了图像-文本连接来理解图像的内容。
  • OWL-ViT 添加图像级补丁来了解对象的位置。
  • GLIP 添加了单词级别的理解,以根据提示的语义查找对象。
  • SAM 添加掩模来查看对象的像素级位置。
  • GVT 添加了大语言模型的使用来研究带有文本的图像。

结论

总之,从计算机视觉的早期到当前最先进的深度学习技术,目标检测算法的演变是一段非凡的旅程。我们已经从 Viola-Jones 检测器和 HOG 检测器等传统方法过渡到 RCNN、YOLO、SSD 和 CenterNet 等更先进的方法,这些方法引入了端到端架构以提高适应性。然而,最具突破性的飞跃是零样本目标检测方法,如 OWL-ViT、GLIP、Segment Anything 和 GVT。这些创新技术使我们能够检测图像中的物体,而无需进行大量的神经网络训练,从而开启了物体检测领域的新时代。

本博文译自Andrii Polukhin 的系列博文。

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

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

相关文章

大数据技术3:数据仓库的ETL和分层模型

前言:我们先了解一下数据仓库架构的演变过程。 1 、数据仓库定义 数据仓库是一个面向主题的(Subject Oriented)、集成的(Integrate)、相对稳定的(Non-Volatile)、反映历史变化(Time…

电商系统架构演进

聊聊电商系统架构演进 具体以电子商务网站为例, 展示web应用的架构演变过程。 1.0时代 这个时候是一个web项目里包含了所有的模块,一个数据库里包含了所需要的所有表,这时候网站访问量增加时,首先遇到瓶颈的是应用服务器连接数&a…

深入体验:山海鲸可视化软件的独特魅力

山海鲸可视化软件是一款功能强大的数据可视化工具,作为该软件的资深用户,我深感其独特的魅力和优势。下面,我将从软件特点、操作体验、数据交互和实际应用场景等方面,为大家详细介绍山海鲸可视化软件。 首先,山海鲸可视…

解决Eslint和Prettier关于三元运算符的冲突问题

三元运算符Prettier的格式化 三元运算符Eslint的格式要求 解决办法 // eslint加入配置,屏蔽标红报错indent: [error, 2, { ignoredNodes: [ConditionalExpression] }]效果

Nginx按指定格式记录访问日志

今天突然想起来一个日志的一个东西,因为拉项目无意中看到了日志文件的一些东西,现在不经常做后端了,加上其他的一些原因吧.有时候有些问题也没想太多,马马虎虎就过了,后来想想还是要记录一下这方面的处理过程吧: 一般我们作为开发人员关注的日志只是在应用程序层面的,我们称它…

POJ 3735 Training little cats 动态规划(矩阵的幂)

一、题目大意 我们有N只猫&#xff0c;每次循环进行K次操作&#xff08;N<100&#xff0c;K<100&#xff09;&#xff0c;每次操作可有以下三种选择&#xff1a; 1、g i 给第i只猫1个食物 2、e i 让第i只猫吃完它所有的食物 3、s i j 交换第i和j只猫的食物。 求出M次…

销售技巧培训之如何提高手机销售技巧

销售技巧培训之如何提高手机销售技巧 随着科技的迅速发展&#xff0c;手机已成为我们日常生活中不可或缺的一部分。作为一名手机销售员&#xff0c;了解手机销售技巧是必不可少的。本文将通过案例分析与实践&#xff0c;为你揭示手机销售的奥秘。 一、了解客户需求 在销售过程…

AWS Remote Control ( Wi-Fi ) on i.MX RT1060 EVK - 3 “编译 NXP i.MX RT1060”( 完 )

此章节叙述如何修改、建构 i.MX RT1060 的 Sample Code“aws_remote_control_wifi_nxp” 1. 点击“Import SDK example(s)” 2. 选择“MIMXRT1062xxxxA”>“evkmimxrt1060”&#xff0c;并确认 SDK 版本后&#xff0c;点击“Next>” 3. 选择“aws_examples”>“aw…

在 Docker 容器中运行 macOS:接近本机性能,实现高效运行 | 开源日报 No.96

cxli233/FriendsDontLetFriends Stars: 2.6k License: MIT 这个项目是关于数据可视化中好的和不好的实践&#xff0c;作者通过一系列例子解释了哪些图表类型是不合适的&#xff0c;并提供了如何改进或替代它们。主要功能包括展示错误做法以及正确做法&#xff0c;并提供相应代…

【数值计算方法(黄明游)】解线性代数方程组的迭代法(一):向量、矩阵范数与谱半径【理论到程序】

文章目录 一、向量、矩阵范数与谱半径1、向量范数a. 定义及性质补充解释范数差 b. 常见的向量范数 l 1 l_1 l1​、 l 2 l_2 l2​、 l ∞ l_\infty l∞​ 范数性质关系 2、矩阵范数a. 矩阵的范数b. 常见的矩阵范数相容范数算子范数 3、谱半径4、知识点总结1. 向量范数2. 矩阵范数…

Mybatis XML 多表查询

这篇需结合 <<Mybatis XML 配置文件>>那一篇博客一起看 工作中尽量避免使用多表查询,尤其是对性能要求非常高的项目 我们之前建了个用户表(代码在Mybatis XML配置文件那篇博客里),这次再建一个文章表,代码如下 : -- 创建⽂章表 DROP TABLE IF EXISTS articleinf…

vue中组件传值方法

父组件给子组件传值 一、 1.在子组件标签中写入父组件传递数据 向下传递prop 2.在子组件内声明props选项接收父组件传递的数据 props:[,,] 父组件&#xff1a; <Header :msgmsg ></Header> 子组件&#xff1a; props:[msg], 二、 provide i…

AI 训练框架:Pytorch TensorFLow MXNet Caffe ONNX PaddlePaddle

https://medium.com/jit-team/bridge-tools-for-machine-learning-frameworks-3eb68d6c6558

基于jsonrpc4j实现JSON-RPC over HTTP(服务端集成Spring Boot)

1.JSON-RPC说明 JSON-RPC是一个无状态且轻量级的远程过程调用(RPC)协议。 它主要定义了一些数据结构及其相关的处理规则。 它运行时可以基于tcp(socket),http等不同的消息传输方式&#xff0c; 即它不关心底层传输方式的细节。 它使用JSON&#xff08;RFC 4627&#xff09;作为…

Tabbar切换效果(vant)

route 是否开启路由模式 <template><div class"layout-page"><!-- 二级路由出口 --><router-view></router-view><van-tabbar route><van-tabbar-item to"/home">首页<!-- 图标切换为active是高亮 -->&…

JAVA实现敏感词高亮或打码过滤:sensitive-word

练手项目中实现发表文章时检测文章是否带有敏感词&#xff0c;以及对所有敏感词的一键过滤功能 文章目录 效果预览实现步骤 效果预览 随便复制一篇内容到输入框 机器审核文章存在敏感词&#xff0c;弹消息提示并进入人工审核阶段&#xff08;若机器审核通过&#xff0c;则无需审…

eclipse的日志文件放在什么位置

eclipse的日志文件放在<workspace的目录>/.metadata目录下面&#xff0c;例如&#xff1a;

html中一个div中平均一行分配四个盒子,可展开与收起所有的盒子

html中一个div中平均一行分配四个盒子&#xff0c;可展开与收起所有的盒子 1.截图显示部分 2.代码展示部分 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"wid…

12.8_黑马数据结构与算法笔记Java

目录 044 递归 e04 冒泡排序2 044 递归 e05 插入排序1 044 递归 e05 插入排序2 045 多路递归 斐波那契 046 多路递归 斐波那契 时间复杂度 047 多路递归 斐波那契 兔子问题 048 多路递归 斐波那契 青蛙跳台阶 049 递归 优化 记忆法 050 递归 爆栈问题 051 递归 尾调用…

Linux驱动开发一

一、Linux驱动开发与裸机开发的区别 1、开发思维区别 裸机驱动&#xff1a; &#xff08;1&#xff09;底层&#xff0c;跟寄存器打交道&#xff0c;有些MCU提供了库 Linux驱动&#xff1a; &#xff08;1&#xff09;Linux下驱动开发直接操作寄存器不现实 &#xff08;2…