Simple Open-Vocabulary Object Detection with Vision Transformers
vision
pytorch/vision: 一个基于 PyTorch 的计算机视觉库,提供了各种计算机视觉算法和工具,适合用于实现计算机视觉应用程序。
项目地址:https://gitcode.com/gh_mirrors/vi/vision
免费下载资源
·
Paper name
Simple Open-Vocabulary Object Detection with Vision Transformers
Paper Reading Note
URL: https://arxiv.org/abs/2205.06230
DEMO: https://huggingface.co/spaces/adirik/OWL-ViT
TL;DR
- 2022 谷歌发表的 ECCV 文章,支持 Open-Vocabulary Object Detection 和 one-shot detection,在相关数据集上取得 SOTA 效果。采用大规模图像文本预训练,然后迁移到 open-vocabulary detection 任务中,并基于大量实验分析了模型架构、预训练等因素与最终 open-vocabulary detection 精度的关系
Introduction
背景
- 检测模型通常仅限于一组小的固定语义类别,因为使用大的或开放的标签空间获取本地化的训练数据既昂贵又耗时。随着强大的语言编码器和对比图像文本训练的发展,这一点发生了变化。通过利用大量的图像文本数据,对比训练在 zero-shot 分类性能和其他基于语言的任务方面取得了重大改进
- 最近的许多工作旨在将这些模型的语言能力转移到目标检测中。例如,这些方法对图像作物的嵌入使用蒸馏,图像级标签的弱监督,或 self-training。
- 本文提供了一种简单的结构和端到端的训练方法,即使在训练训练中没有看到的类别上,也可以在没有上述方法的情况下实现强大的开放词汇检测
本文方案
- 整体流程如上图所示
- 使用 ViT,在大的图像文本对数据集上进行对比学习 pre-train。删除了最后的 token pooling layer,而将轻量级分类和 bbox 预测投附加到每个 transformer 的输出 token 上
- 通过用从文本模型获得的类名 embedding 替换固定的分类层权重来实现开放词汇分类
- 使用二分匹配损失在标准检测数据集上微调预训练模型
- 基于该模型结构也能做 one-shot detection,基于 imagederived embeddings 做 querying。image-conditioned one-shot 功能是文本条件检测的一个强大扩展,因为它允许检测难以通过文本描述的对象(但很容易在图像中捕捉),例如专门的技术部件
- 尽管使用了一种非专门针对该问题的通用体系结构,但本文将对隐形COCO类别(在训练期间进行)的 one-shot 检测的技术水平从 26.0提高到 41.8 AP50,提高了72%
- 对于开放词汇文本条件检测,本文模型在 LVIS 数据集上实现了 34.6% 的总体 AP 和 31.2% 的未发现类 AP
Dataset/Algorithm/Model/Experiment Detail
实现方式
模型设计
- 基于之前图片描述的模型结构,基本类似 DETR (通过移除解码器来简化)
- 预测对象的最大数量等于图像编码器的 token 数量(序列长度),这在实践中不是一个瓶颈,因为模型的序列长度至少为 576(ViT-B/32,输入大小为768×768),这大于当今数据集中的最大实例数(例如,LVIS的294个实例)
- 通过小 MLP 传递 token 表示来获得框坐标
- Open-vocabulary object detection
- 对于检测到的对象的开放词汇分类,我们遵循先前的工作,在分类头的输出层中使用文本嵌入,而不是 Zero-Shot Object Detection 中的学习类嵌入设计
- text embeddings (这里称为查询) 通过文本编码器传递类别名称或其他文本对象描述获得
- 每个查询都由一个单独的 token 序列组成,该序列表示单独的对象描述,并由文本编码器单独处理
- 架构不包括图像和文本编码器之间的融合。尽管早期融合在直觉上似乎是有益的,但它大大降低了推理效率,因为对查询进行编码需要对整个图像模型进行前向传递,并且需要对每个图像/查询组合进行重复
- 本文的设置中,可以独立于图像来计算查询嵌入,从而允许对每个图像使用数千个查询,这比早期融合所能实现的更多
- One- or Few-Shot Transfer
- 由于 image 和 text encoder 没有 fusion 步骤,可以将文本的查询改为图片目标的 embedding
Training
- Image-Level Contrastive Pre-Training
- 使用 LiT 的数据集和 loss
- 优点是模型的大部分参数能收到预训练的好处,检测专用头最多包含1.1%(取决于模型大小)的模型参数
- Training the Detector
- 模型的检测训练过程几乎与封闭词汇检测器的相同,只是本文为每个图像提供了一组对象类别名称作为查询。因此,分类头在由查询定义的每个图像标签空间上输出逻辑,而不是在固定的全局标签空间上
- 基于 DETR 中的二分匹配 loss 进行训练,但将其调整为长尾/开放词汇检测
- 由于对检测数据集进行详尽标注所需的工作量大,这里将具有大量类的数据集以联合方式进行整合,比如 LVIS/Open Images
- 这样的数据集具有非连续的标签空间,这意味着每个对象可以有多个标签。因此,使用 focal sigmoid cross-entropy 替换 softmax cross-entropy 作为分类损失
- 此外,由于并非所有对象类别都在每个图像中进行注释,联合数据集为每个图像提供了正(存在)和负(已知不存在)注释。在训练过程中,对于给定的图像,使用其所有的正负注释作为查询
- 此外,我们根据数据中的类别频率随机抽样,并将它们作为“伪负样本”添加,以使每张图像至少有50张负片
- 仍然需要经过仔细调整的正则化和数据扩充才能表现良好
实验结果
Open-Vocabulary Detection Performance
- LVIS 精度,使用 LVIS v1.0 val 作为评测集。对于评估过程,使用所有类别名称作为每个图像的查询。取得 SOTA 效果
Few-Shot Image-Conditioned Detection Performance
- Unseen 类别涨点幅度很大
- 可视化效果
Scaling of Image-Level Pre-Training
- 以下左图:讨论图像级预训练通常如何转移到检测,下图展示了图像级性能(zero-shot ImageNet精度)和对象级性能(zero-shot LVIS 精度)之间的关系。虽然最好的对象级模型通常也具有良好的图像级性能,但相反的情况并非如此:许多在图像级任务中表现良好的模型很难转移到检测中。换言之,高图像级性能对于强转移到检测是必要的,但还不够。
- 以下右图:讨论什么因素能促进更好的迁移。之前的分类工作发现,预训练数据集和模型大小必须一起缩放,以实现最佳迁移,也就是在大数据上过度训练小模型甚至会导致性能降低。在检测任务这种效应更佳显著,随着预训练量的增加,检测性能首先提高,然后达到峰值,而图像级性能继续提高
- 不同模型架构的性能对比:对于小型模型,混合架构比纯 transformer 更有效。随着模型大小的增加(就检测推断FLOP而言),纯 ViTs 在总体和 zero-shot 性能方面都比混合型更好
消融实验
- 数据增广等很重要,数据预处理也很重要,大量数据集很重要
Thoughts
- 需要一定的检测数据集进行 finetune 实现物体定位
- 文本和图片的 encoder 没有交互,主要是为了省计算资源,作者也认同有交互的话精度更高
GitHub 加速计划 / vi / vision
15.85 K
6.89 K
下载
pytorch/vision: 一个基于 PyTorch 的计算机视觉库,提供了各种计算机视觉算法和工具,适合用于实现计算机视觉应用程序。
最近提交(Master分支:2 个月前 )
518ee93d
2 天前
7d077f13
4 天前
更多推荐
已为社区贡献7条内容
所有评论(0)