最新Open-vocabulary方法个人学习小结

Open-vocabulary方法总结

Yolo-world

CVPR2024
预训练公式:区域-文本对
传统的目标检测方法,包括yolo系列都是用实例注释进行训练的,它由边界框和类别标签组成。
在本文中,我们将实例注释重新表述为区域-文本对。具体来说,文本可以是类别名称、名词短语或对象描述。

模型架构
YOLO-World的整体架构由一个YOLO检测器、一个文本编码器和一个可重新参数化的视觉语言路径聚合网络(repv1 - pan)组成。
在这里插入图片描述
骨干网络
YOLO探测器:YOLO-World主要是基于YOLOv8开发的,它包含了一个Darknet骨架作为图像编码器,一个用于多尺度特征金字塔的路径聚合网络(PAN),以及一个用于边界盒回归和对象嵌入的头部。

文本编码器
文本编码器:YOLO-World采用CLIP预训练的Transformer文本编码器提取相应的文本,与纯文本语言编码器相比,CLIP文本编码器提供了更好的视觉语义功能,可以将可视对象与文本连接起来。
在线词汇训练:在训练过程中,为每个包含4张图像的mosaic样本构建一个在线词汇T。具体来说,我们对mosaic图像中涉及的所有积极名词进行采样,并从相应的数据集中随机抽取一些消极名词。每个mosaic样本的词汇表最多包含n个名词,n被默认设置为80。

Mosaic数据增强方法是YOLOV4论文中提出来的,主要思想是将四张图片进行随机裁剪,再拼接到一张图上作为训练数据。这样做的好处是丰富了图片的背景,并且四张图片拼接在一起变相地提高了batch_size,在进行batch
normalization的时候也会计算四张图片,所以对本身batch_size不是很依赖,单块GPU就可以训练YOLOV4。

离线词汇推理:在推理阶段,使用在线词汇的提示–检测策略,用户可以定义一系列自定义提示,其中可能包括标题或类别。
然后,利用文本编码器对这些提示进行编码,并获得离线词汇嵌入。离线词汇表允许避免对每个输入进行计算,并提供根据需要调整词汇表的灵活性。

可重新参数化的视觉语言PAN

RepVL-PAN结构:遵循自上而下和自下而上的路径,用多尺度图像特征{C3,C4,C5}建立特征金字塔{P3,P4,P5}。
此外,提出了文本引导CSPLayer (T-CSPLayer)和图像集中注意力(I-Pooling Attention)),进一步增强图像特征和文本特征之间的交互作用,从而提高开放词汇的视觉语义表示能力。

在推理过程中,离线词汇嵌入可以被重新参数化为卷积层或线性层的权重,以供部署。
在这里插入图片描述

ODISE

CVPR2023
CLIP+Diffusion
CVPR2023: ODISE Open-Vocabulary Panoptic Segmentation
在这里插入图片描述
ODISE的算法思路参考以上两图. 很打眼的一个创新点是, image encoder不是cnn也不是Transformer, 而是盯上了diffusion model. 绝绝子!

模块一: 输入image和Implicit Text Embedding到text-to-image-diffusion model, 抽取model的internal特征. text-to-image-diffusion model实现文本指导生成图像, ta在做的就是一个开放类别域的事情, ta的internal特征对于下游任务很有价值. Implicit Text Embedding来自Implicit Captioner, 用的是冻住的image Encoder(CLIP)和MLP训练得到.

模块二: 训一个mask generator, 需要mask annotation做有监督训练(我又要cu segment anything了[3], 这部分可尝试开源用起来啊!~). 这部分出mask prediction, 然后和annotation算binary mask loss. 另外出mask embedding在模块三中使用(we can pool the ROI-Aligned features of each predicted mask’s region to compute its mask embedding features).

模块三: mask开放域分类. 用category labels or image caption输入冻住的text Encoder(CLIP), 结合模块二中学到的mask embedding, 输出分类结果. category labels 对应cross entropy loss做类别一一对应损失计算. image caption对应grounding loss(This similarity function encourages each noun to be grounded by one or a few masked regions of the image and avoids penalizing the regions that are not grounded by any word at all).

GroundingDINO & Grounding DINO1.5

ECCV2024
https://github.com/IDEA-Research/GroundingDINO

十分钟解读Grounding DINO-根据文字提示检测任意目标

既CLIP打破文字和图像之间的壁垒、DINO提高了目标检测精度的上限之后,又一力作横空出世,它就是–Grounding DINO。

在不需要任何COCO训练集的情况下,Grounding DINO就在COCO minival测试集中达到了52.5AP,经过微调之后达到了63.0AP。这样的结果可以说是非常的Amazing了,下面我将详细介绍Grounding DINO的原理。
在这里插入图片描述

Grounded SAM & Grounded SAM2

https://github.com/IDEA-Research/GroundingDINO

OV-DINO

开放域检测新SOTA!中山大学美团出品,开源性能最强

比Grounding DINO高12.7% AP,比YOLO-World 高4.7% AP

本文提出了一种名为OV-DINO的开放域检测方法。整体框架包括一个文本编码器、一个图像编码器和一个检测头。模型接收图像和提示文本作为输入,通过特定模板创建统一的文本嵌入表示。图像和文本嵌入经过编码器处理后,图像嵌入通过Transformer编码器生成精细化的图像嵌入。语言感知查询选择模块选择与文本嵌入相关的对象嵌入,并在解码器中与可学习的内容查询融合,最终输出分类分数和回归边界框。

在这里插入图片描述

统一数据集成(UniDI)
在预训练阶段,OV-DINO将检测数据、定位数据和图像-文本数据转换为统一的检测数据格式,从而简化模型优化过程并提高性能。检测数据和定位数据的集成相对简单,而图像-文本数据的转换则通过将图像描述视为图像的唯一类别来实现。所有文本输入都通过简单模板进行统一处理,确保一致的文本嵌入表示。

语言感知选择性融合(LASF)
该模块包括语言感知查询选择和语言感知查询融合两个关键组件。查询选择组件通过评估图像嵌入和文本嵌入的相似性来选择对象嵌入。查询融合组件逐步融合语言感知对象嵌入,同时保留内容查询的原始语义。语言感知查询选择通过计算图像嵌入和文本嵌入的相似性矩阵,并选择最相关的嵌入。查询融合则在解码器层中动态更新内容查询,逐步引入语言感知上下文。

预训练OV-DINO
采用检测中心的数据格式,将不同类型的数据(检测数据、定位数据和图像-文本数据)转化为适合检测的格式,允许在统一的框架内进行预训练。模型的前向传播过程包括图像编码器提取图像嵌入、文本编码器提取文本嵌入、Transformer编码器生成精细化图像嵌入、语言感知查询选择模块选择对象嵌入,以及Transformer解码器通过选择性融合模块进行查询分类和边界框回归。模型通过统一的分类损失函数和目标框损失函数进行优化。通过上述设计,OV-DINO实现了开放域检测的高效预训练和性能提升。

<think>好的,我现在需要分析用户提供的这段代码的作用。代码是关于使用subword-nmt工具学习BPE分词的。首先,我要回忆一下BPE(Byte Pair Encoding)的基本概念,它是一种子词分割算法,常用于处理自然语言处理中的未登录词问题。用户可能对BPE的具体实现和参数不太清楚,所以需要详细解释每个部分的作用。 首先,用户给出的代码是: !subword-nmt learn-joint-bpe-and-vocab -i ./imdb_train.txt -o ./imdb_bpe_code --write-vocabulary ./imdb_bpe_vocab -s 8000 这里有几个关键参数需要解释。-i指定输入文件,-o是输出的BPE规则文件,--write-vocabulary输出词汇表,-s设置词表大小。用户提到这段代码是用来学习BPE分词的,并且很慢,学一次就好。这说明用户可能是在处理文本数据准备阶段,特别是为后续的模型训练准备分词器。 接下来,我需要逐步分解每个参数的作用。输入文件imdb_train.txt应该是之前处理好的训练集文本,每行一个评论。BPE算法会分析这个文本中的字符组合,统计频率,然后合并最常见的字节对,直到达到指定的词表大小(这里是8000)。生成的imdb_bpe_code文件保存了这些合并规则,而imdb_bpe_vocab则是生成的子词词汇表及其频率。 用户可能想知道为什么需要学习BPE,以及这些输出文件的具体用途。BPE的优势在于能够将未知词分解为已知的子词单元,提高模型处理新词的能力。例如,像"unhappiness"可能被分解为"un", "happiness"或者更小的单元,这样即使这个词没在训练数据中出现过,模型也能通过子词来理解。 同时,用户可能关心参数-s 8000的意义,这里设定的是期望的子词词表大小。较大的词表能捕捉更多细节,但可能增加计算量;较小的词表则更高效,但可能无法有效分解罕见词。需要解释这个权衡。 另外,用户提到“学一次就好”,说明BPE的学习过程是离线的,一旦训练完成,就可以在预处理和推理时重复使用相同的规则,确保一致性。这也是为什么需要保存imdb_bpe_code和imdb_bpe_vocab的原因。 可能存在的疑问点包括:BPE如何具体应用于分词?生成的规则文件如何使用?词汇表的结构是怎样的?是否需要同时使用这两个文件?此外,用户可能对学习过程的耗时感到担忧,需要解释为什么这个过程较慢,比如因为要处理大量文本并频繁统计合并操作。 还需要考虑潜在的问题,比如输入文本是否需要预处理(如小写化,用户之前的代码已经做了小写处理),词表大小是否合适,以及如何验证BPE的效果。例如,可以检查词汇表中是否包含常见的子词,或者应用这些规则到测试集看看分词结果是否合理。 总结来说,这段代码的作用是利用训练集文本学习BPE分词规则,生成用于分词的规则文件和词汇表,以便后续将文本数据转换为子词表示,供NLP模型使用。需要详细解释每个参数和输出文件的作用,以及BPE的优势和应用场景。</think>以下是对这段代码的逐层解析: --- ### **1. 代码核心作用** 这段代码使用 `subword-nmt` 工具包进行 **BPE(Byte Pair Encoding)子词分词训练**,主要实现: 1. 从训练文本中学习BPE合并规则 2. 生成子词词汇表 3. 为后续文本分词提供编码规则 --- ### **2. 参数逐项解析** #### **(1) 输入/输出配置** ```bash -i ./imdb_train.txt # 输入:预处理后的训练文本 -o ./imdb_bpe_code # 输出:BPE合并规则文件(核心操作记录) --write-vocabulary ./imdb_bpe_vocab # 输出:子词词汇表(含频率统计) ``` #### **(2) 关键控制参数** ```bash -s 8000 # 指定目标子词词表大小(此处设定为8000个token) ``` --- ### **3. BPE学习过程详解** #### **(1) 算法工作原理** 1. **初始化**:将所有单词拆分为字符(如"cat" → `c, a, t`) 2. **迭代合并**: - 统计相邻符号对的频率(如`c a`, `a t`) - 合并最高频的符号对(如将`e s`合并为`es`) 3. **终止条件**:达到预设词表大小(-s参数)或无法继续合并 #### **(2) 输出文件示例** - **imdb_bpe_code**(合并规则): ``` e s 1000 # 表示合并"e"和"s"为"es",该操作出现1000次 t h 800 # 合并"t"和"h"为"th" ``` - **imdb_bpe_vocab**(子词频率): ``` the 5000 ing 3000 ed 2500 ``` --- ### **4. 典型应用场景** #### **(1) 文本预处理** ```python # 使用学到的BPE规则对文本分词 from subword_nmt.apply_bpe import BPE bpe = BPE(open("./imdb_bpe_code", "r")) text = "unhappiness" print(bpe.process_line(text)) # 输出可能为 "un@@ happy@@ ness" ``` #### **(2) 模型训练支持** - 解决未登录词(OOV)问题(如将"unhappiness"分解为已知子词) - 提升模型对形态学变化的泛化能力(如"happy"→"happier"共享"happi"子词) --- ### **5. 参数选择注意事项** | 参数 | 过小(如1000) | 过大(如30000) | 推荐范围 | |------|----------------|------------------|----------| | `-s` | 分词粒度粗,语义丢失 | 内存消耗大,训练慢 | 8000-16000 | --- ### **6. 潜在问题与优化建议** #### **(1) 训练数据代表性** - **风险**:若训练集(`imdb_train.txt`)未覆盖测试集词汇,BPE规则可能失效 - **建议**:确保训练集包含足够多样的文本模式 #### **(2) 特殊符号处理** - **常见问题**:未处理数字、标点等会导致冗余子词 - **改进方案**:预处理时统一处理特殊符号(如将数字替换为`<NUM>`标记) --- ### **7. 与其他分词方法对比** | 方法 | 优势 | 劣势 | |------------|-------------------------------|-------------------------------| | **BPE** | 平衡词表大小与覆盖度 | 需要预训练合并规则 | | WordPiece | 更关注语言模型概率 | 训练复杂度高 | | Unigram LM | 支持概率化分词 | 计算资源消耗大 | --- ### **8. 扩展应用方向** 1. **多语言支持**:混合多种语言数据训练统一BPE词表 2. **领域适配**:针对医疗/法律等专业领域训练专用BPE 3. **压缩优化**:通过调整词表大小平衡模型性能与内存占用 --- ### **总结** 此代码为**NLP预处理流水线中的关键步骤**,通过从IMDB影评数据中学习子词划分规则,为后续文本向量化、模型训练提供基础支持。其输出文件(`imdb_bpe_code`和`imdb_bpe_vocab`)是构建健壮NLP系统的核心组件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SoaringPigeon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值