当前位置:   article > 正文

YOLO世界:实时开放词汇对象检测_region-text contrastive loss

region-text contrastive loss

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


摘要

本周主要阅读了CVPR文章,YOLO-World: Real-Time Open-Vocabulary Object Detection。是一种先进的实时开放词汇对象检测系统,它基于流行的 YOLO(You Only Look Once)对象检测框架。YOLO-World 的设计目标是提高检测效率和对开放词汇的识别能力,即能够检测在训练阶段未见过的对象类别,通过引入了 Re-parameterizable Vision-Language Path Aggregation Network(RepVL-PAN)结构将图像与文本进行融合,从而让图像与文本形成“交流”。除此之外,还学习学习了yolo中的FPN结构。

Abstract

This week, I mainly read the CVPR paper “YOLO-World: Real-Time Open-Vocabulary Object Detection.” It is an advanced real-time open-vocabulary object detection system that is based on the popular YOLO (You Only Look Once) object detection framework. The design goal of YOLO-World is to enhance detection efficiency and recognition capabilities for open-vocabulary objects, that is, to be able to detect object categories not seen during the training phase. By introducing the Re-parameterizable Vision-Language Path Aggregation Network (RepVL-PAN) structure, it fuses images with text, enabling a “dialogue” between the visual and textual information. In addition to this, I also studied the FPN (Feature Pyramid Network) structure within YOLO.


文献阅读:YOLO世界:实时开放词汇对象检测

Title: YOLO-World: Real-Time Open-Vocabulary Object Detection
Author:Tianheng Cheng ,Lin Song1,Yixiao Ge,Wenyu Liu3, Xinggang Wang3,Ying Shan
From:2024 IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)

1、研究背景

在计算机视觉领域,传统的对象检测方法,如 YOLO 系列,尽管在固定词汇检测上取得了显著成果,但它们的能力受限于预定义的对象类别。这种局限性在开放词汇检测(OVD)任务中尤为明显,该任务要求模型能够识别训练阶段未出现过的新对象类别。开放词汇检测面临的挑战包括训练数据的稀缺性、计算资源的高需求、以及在边缘设备上的复杂部署问题。此外,实时性能的需求使得检测器的效率和速度变得同样重要。为了克服这些限制,YOLO-World 通过视觉-语言建模和大规模数据集上的预训练,提出了一种创新的方法,以增强 YOLO 检测器的开放词汇检测能力。该方法利用跨模态学习,将视觉信息与语言描述相结合,以提高模型对新对象类别的识别能力,同时保持高效率和易于部署的特性,满足实时应用的需求。

2、提出方法

为了解决这个问题,作者提出了 YOLO-World,这是一个创新的方法,通过结合先进的视觉-语言技术和高效的 YOLO 架构,了一个能够处理开放词汇检测任务的实时系统。它通过视觉-语言路径聚合网络(RepVL-PAN)和区域-文本对比损失的方法,用跨模态学习,将视觉信息与语言描述相结合,增强了视觉和语言信息之间的交互,以提高模型对新对象类别的识别能力,同时保持高效率和易于部署的特性,满足实时应用的需求。
在这里插入图片描述

3、相关技术

3.1、Re-parameterizable Vision-Language Path Aggregation Network (RepVL-PAN)

RepVL-PAN,即 Re-parameterizable Vision-Language Path Aggregation Network,是 YOLO-World 系统中的一个关键组件,来实现图像和文字的连接。RepVL-PAN 的核心思想是利用视觉和语言信息之间的交互来增强模型对开放词汇的检测能力,旨在增强模型在处理视觉和语言信息时的性能。RepVL-PAN 利用跨模态融合技术将文本嵌入与图像特征结合起来。具体来说,如下图所示,它包括以下几个关键组件:

  • Text-guided CSPLayer (T-CSPLayer):这是一个扩展的 CSPLayer,它通过在多尺度图像特征中加入文本引导,来增强图像特征。
  • Image-Pooling Attention (I-Pooling Attention):这个组件通过在多尺度特征上执行最大池化操作来聚合图像特征,并更新文本嵌入,使其包含图像感知信息。
    在这里插入图片描述

3.2、 Region-Text Contrastive Loss

区域-文本对比损失(Region-Text Contrastive Loss)是 YOLO-World 系统中用于训练的一个关键损失函数,它旨在学习图像区域和对应文本描述之间的相似性。这种损失函数有助于模型更好地理解图像内容和相关文本之间的关系,从而提高开放词汇对象检测的性能。以下是几个关键步骤:

  • 生成区域-文本对:在训练阶段,模型首先需要生成区域-文本对。这通常涉及到使用图像中的对象检测器(如 YOLO)来识别图像中的区域(即潜在的对象位置),并将这些区域与相应的文本描述(如对象的类别名称或描述性短语)配对。
  • 计算相似性得分:对于每个区域-文本对,模型计算区域特征(通常是图像特征的嵌入表示)和文本特征(文本嵌入)之间的相似性得分。这可以通过计算两者之间的点积、余弦相似度或其他相似性度量来实现。
  • 构建对比损失:对比损失函数旨在优化正样本对(正确的区域-文本配对)的相似性,同时推远负样本对(随机或错误配对的区域-文本配对)的相似性。这通常通过一个对比损失函数来实现,如三元组损失(Triplet Loss)或对比损失(Contrastive Loss),它们惩罚模型如果对正样本对的相似性得分低于某个阈值或低于负样本对的相似性得分。

4、工作总结

4.1、实现细节

YOLO-World 是基于 MMYOLO 工具箱和 MMDetection 工具箱开发的,总共提供了三种不同延迟要求的 YOLO-World 变体,即小型(S)、中型(M)和大型(L)。模型采用了开源的 CLIP 文本编码器及其预训练权重来编码输入文本。模型在 NVIDIA V100 GPU 上的测试中达到了每秒 52.0 帧(FPS)的处理速度,并在 LVIS 数据集上取得了 35.4 的平均精度(AP)。这一结果在速度和准确性方面都优于许多现有的最先进方法。
在这里插入图片描述

4.2、相关实验

  • 零样本性能:在零样本设置下,YOLO-World 在 LVIS minival 数据集上的测试结果显示,它能够有效地检测在训练阶段未见过的对象类别,这表明了其强大的泛化能力。除此之外,YOLO-World 在微调后不仅在对象检测任务上表现出色,还在开放词汇实例分割等更复杂的下游任务上展现了良好的性能

  • 预训练数据的影响:通过在不同规模的预训练数据上评估 YOLO-World,论文发现增加预训练数据的量可以显著提高模型在大规模词汇检测任务中的性能,下图为预训练所使用的数据集。
    在这里插入图片描述

  • 消融实验:通过一系列消融实验,论文分析了 YOLO-World 的关键组件,如 RepVL-PAN 和文本编码器,对模型性能的影响,证明了这些组件在提高模型性能中的重要性。
    在这里插入图片描述

二、YOLO模型FPN(特征金字塔)代码学习

1、FPN(特征金字塔)

1.1、什么是FPN

特征金字塔的核心思想是利用深度神经网络的不同层级来捕捉图像的不同尺度的特征。底层捕捉到的是高分辨率但语义信息较浅的特征,而高层捕捉到的是低分辨率但语义信息较深的特征。通过结合这些不同层级的特征,可以构建出一个包含多尺度信息的特征金字塔。

1.2、实现的方法

以下代码中,FPN 类接收输入特征 x,这些特征可以是多个尺度的特征图的元组。输入为C3, C4, C5的尺寸,通过P3、P4、P5的的采样卷积处理,最后通过特征融合,获取到三个不同层次的特征总和。

class YOLOFPN(nn.Module):  
    def __init__(self, C3_size, C4_size, C5_size, feature_size=256):  
        super(YOLOFPN, self).__init__()  
  
        # P5层由C5经过1x1卷积得到  
        self.P5_1 = nn.Conv2d(C5_size, feature_size, kernel_size=1, stride=1, padding=0)  
        # P5上采样,使用最近邻插值将特征图尺寸放大两倍  
        self.P5_upsampled = nn.Upsample(scale_factor=2, mode='nearest')  
        # P5层再经过3x3卷积增强特征表示  
        self.P5_2 = nn.Conv2d(feature_size, feature_size, kernel_size=3, stride=1, padding=1)  
  
        # P4层由P5上采样后的特征和C4的特征融合得到  
        self.P4_1 = nn.Conv2d(C4_size, feature_size, kernel_size=1, stride=1, padding=0)  
        # P4上采样,同样使用最近邻插值将特征图尺寸放大两倍  
        self.P4_upsampled = nn.Upsample(scale_factor=2, mode='nearest')  
        # P4层再经过3x3卷积增强特征表示  
        self.P4_2 = nn.Conv2d(feature_size, feature_size, kernel_size=3, stride=1, padding=1)  
  
        # P3层由P4上采样后的特征和C3的特征融合得到  
        self.P3_1 = nn.Conv2d(C3_size, feature_size, kernel_size=1, stride=1, padding=0)  
        # P3层经过3x3卷积增强特征表示  
        self.P3_2 = nn.Conv2d(feature_size, feature_size, kernel_size=3, stride=1, padding=1)  
  
    def forward(self, inputs):  
        # 前向传播函数,输入为C3, C4, C5的特征图  
        C3, C4, C5 = inputs  
  
        # 获取P5的特征图  
        P5_x = self.P5_1(C5)  
        P5_upsampled_x = self.P5_upsampled(P5_x)  
        P5_x = self.P5_2(P5_x)  
  
        # 获取P4的特征图,首先将P5上采样,然后与C4的特征融合  
        P5_x = F.relu(P5_upsampled_x)  # 对上采样后的P5特征图进行激活  
        P4_x = self.P4_1(C4)  
        P4_fused = P5_x + P4_x  # 特征融合,通过元素相加  
        P4_upsampled_x = self.P4_upsampled(P4_fused)  
        P4_x = self.P4_2(P4_fused)  # 对融合后的P4特征图进行卷积操作  
  
        # 获取P3的特征图,首先将P4上采样,然后与C3的特征融合  
        P4_x = F.relu(P4_upsampled_x)  # 对上采样后的P4特征图进行激活  
        P3_x = self.P3_1(C3)  
        P3_fused = P4_x + P3_x  # 特征融合,通过元素相加  
        P3_x = self.P3_2(P3_fused)  # 对融合后的P3特征图进行卷积操作  
  
        # 返回P3, P4, P5的特征图列表  
        return [P3_x, P4_x, P5_x]  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47

总结

本周主要阅读了CVPR文章,YOLO-World: Real-Time Open-Vocabulary Object Detection。是一种先进的实时开放词汇对象检测系统,它基于流行的 YOLO(You Only Look Once)对象检测框架。YOLO-World 的设计目标是提高检测效率和对开放词汇的识别能力,即能够检测在训练阶段未见过的对象类别,通过引入了 Re-parameterizable Vision-Language Path Aggregation Network(RepVL-PAN)结构将图像与文本进行融合,从而让图像与文本形成“交流”。除此之外,还学习学习了yolo中的FPN结构。下周继续学习!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/682715
推荐阅读
相关标签
  

闽ICP备14008679号