Vision-Language Models for Vision Tasks: A Survey

论文地址:https://arxiv.org/pdf/2304.00685.pdf

项目地址:https://github.com/jingyi0000/VLM_survey

一、综述动机

  1. 视觉语言模型,如CLIP,以其独特的训练方式显著简化了视觉识别任务的流程。它减少了对大量精细标注数据的依赖,使得研究者能够更高效地开展研究工作。

  2. 近年来,大量研究论文证明了研究者对视觉语言模型的浓厚兴趣。然而,目前尚缺乏一篇全面、系统的综述来梳理这一领域的研究进展、挑战和未来方向。因此,本文旨在填补这一空白,为研究者提供一个清晰、全面的视角。

二、为什么要用VLMs?

        视觉识别范式的发展可以广泛地分为五个阶段,包括:

  • Traditional Machine Learning and Prediction:使用手工设计的特征和传统机器学习算法进行训练和预测,需要大量的人工参与和专业知识.
  • Deep Learning from Scratch and Prediction: 使用深度神经网络(DNN)进行端到端的训练和预测,和第一阶段相比,该范式使用DNN代替了人工设计的特征,实现了计算机视觉任务的巨大跨越。不过这方法需要大量标注数据,并且容易出现过拟合问题。
  • Supervised Pre-training, Fine-tuning and Prediction:使用大规模标注数据进行监督式预训练,然后在特定任务上微调并进行预测。和第二阶段相比,该范式在用于特定任务时,可以通过微调的方式来更好地利用有限的标注数据。
  • Unsupervised Pre-training, Fine-tuning and Prediction:使用无标注数据进行无监督式预训练,然后在特定任务上微调并进行预测。相比于第三阶段的监督式方法,更好地利用未标注数据。
  • VLM Pre-training and Zero-shot Prediction:使用视觉-语言相关性进行大规模无监督式预训练,并且可以在各种视觉识别任务中进行零样本预测。和第四阶段相比,这种方法不需要针对特定任务进行微调即可取得出色的效果。

        各个范式的演进过程就是一步步减少中间环节依赖(如人工设计特征、大量人工打标数据、用于特定任务时进行训练/微调)的过程,也是模型的泛化性逐渐提升的过程。VLM Pre-training and Zero-shot Prediction 的范式使得模型训练时不需要人工设计特征,也不需要海量打标数据,并且在用于下游任务时不需要针对特定任务进行微调,直接zero-shot就能取得不错的效果。能实现这一效果的关键就在于强大的预训练VLMs。

三、VLMs视觉语言模型预训练方法的总结与对比

        目前主流的以CLIP为典型代表的Vision-Language Model(VLM)预训练方法可以大致分为3个关键模块:

  • 文本特征提取模块,通常采用Transformer结构及其一系列变体作为基础结构。
  • 图像特征提取模块,通常采用CNN(以ResNet结构为典型代表)或者Transformer(如ViT、MAE等结构)来提取图像特征。
  • 特征融合模块

        在VLM预训练模型中,最关键的问题是将文本和图像这两种模态的信息建立联系,所以下面对其中的特征融合模块做详细介绍。

        特征对齐模块中,以目标函数进行分类的话,大致可以分为三类:

  1. 基于对比学习的方法(Pre-Training with Contrastive Objectives):也称对比式,这类方法通过对比学习来训练模型,使其在特征空间中能够将配对的图像和文本拉近,同时将不相关的样本推远。根据对比学习的输入类型,我们又可以进一步细分为基于图像对比学习、基于图像-文本对比学习和基于图像-文本-标签对比学习的方法。

  2. 基于生成任务的方法(Pre-training with Generative Objectives):也称生成式,这类方法通过训练模型进行图像生成、文本生成或跨模态生成来学习语义特征。它们可以进一步细分为基于掩码图像建模、基于掩码语言建模、基于掩码跨模态建模和基于图像到文本生成的方法。

  3. 基于对齐目的的方法(VLM Pre-training with Alignment Objectives):也称对齐式,这类方法旨在将图像和文本的特征进行匹配,包括全局的图像-文本匹配和局部的图像区域-单词匹配。

        一些常见的VLM预训练方法如下图所示,从下图可以看出,典型的目标函数选择按照对应的方法数量多少可以分为以下几种:

  •         纯对比式目标函数(18篇文章),以CLIP、ALIGN、SLI等为代表。
  •         对比式和生成式相结合(6篇文章),以DeCLIP、FLAVA等为代表。
  •         对比式和对齐式相结合(3篇文章),以FILIP、nCLIP、RegionClip。
  •         纯对齐式(2篇文章),以GLIP、DetCLIP为代表。
  •         纯生成式(1篇文章),以PaLI为代表。

        对比式、生成式、对齐式大杂烩(1篇),以FIBER为代表。

三种目标函数简介

        1.对比式

        对比式目标函数的目的是希望在特征空间使得正样本对之间的距离尽可能接近,而正负样本对之间的距离尽可能远。

        VLM预训练中主要有以下三种模式的对比式目标函数:

        Image Contrastive Learning

        通常用InfoNCE及其变体作为图像对比学习的目标函数

Image-Text Contrastive Learning

通常由两部分构成,一部分为图像特征到文本特征的InfoNCE,一部分为文本特征与其对应的图像的特征的InfoNCE,将这两者结合作为最终的损失函数。

Image-Text-Label Contrastive Learning

在Image-Text Contrastive的基础上还需要加上label的信息,这里

        2.生成式

        主要通过生成误差来建立损失函数,包括几种形式:

  • Masked Image Modelling
    • Masked Language Modelling
    • Masked Cross-Modal Modelling
    • Image-to-Text Generation

        3.对齐式

通过在嵌入空间中进行全局Image-Text匹配或局部Region-Word匹配来对齐图像文本对。

  • Image-Text Matching

  • Region-Word Matching

效果对比

这里主要目标是比较各个VLM预训练模型的能力,在所有任务(包括图像分类、分割、目标检测)上都是比较的zero-shot的结果。

预训练的VLM能够在下游任务中取得较好的zero-shot结果,具备优秀的泛化性能。这得益于三大因素:

    • 大数据——采用图文对这种监督方式,更方便收集大量数据进行训练(如LiT中的4B数据和COCA中的4.8B数据),使得VLM具有强大的泛化能力;
    • 大模型——与传统的视觉识别模型相比,VLM通常采用更大的模型(例如COCA中的ViT-G,有2B个参数),这些模型提供了足够的容量来有效地从大数据中学习;
    • 任务无关学习——VLM预训练中的监督通常是通用和任务无关的。与传统视觉识别中的任务特定标签相比,图像文本对中的文本提供了任务无关、多样化和信息丰富的语言监督,有助于训练出适用于各种下游任务的可泛化模型。

四、视觉语言模型迁移方法的总结与对比

        虽然预训练的Vision-Language Model有着较好的泛化性,可以直接zero-shot用于下游任务,不过距离完美的效果还有一定gap,主要表现在两个方面:

  • 不同下游任务的图像及文本分布可能存在差异
  • 训练目标的差异,预训练模型通常是训练通用的任务无关的特征,而特定的任务需要结合一些任务相关的目标。

        总的来说,VLM预训练得到的模型算是知识面很广的全才,能在特定下游任务上取得比较好的结果,但是还没有成为这一任务的专家。如果能在VLM的基础上,通过迁移学习的方式针对不同的下游任务进行一些微调,便能够在各个子任务中取得更好的效果。以下是几种比较常见的迁移学习的方式。

        因此,除了直接应用预训练的视觉语言模型进行零样本预测外,迁移学习也是提高模型性能的重要手段。本文总结了视觉语言模型的迁移学习方法,主要包括提示调整方法、特征适配器方法和其他方法。

  1. 提示调整方法(Prompt Tuning):受自然语言处理中“提示学习”的启发,这种方法通过调整模型的提示来适应下游任务,而无需对整个模型进行微调。提示调整方法包括文本提示调整、视觉提示调整和文本-视觉提示调整。

  2. 特征适配器方法(Feature Adapter):这类方法通过在视觉语言模型上添加轻量级的特征适配器来进行微调,以适应下游任务的特定需求。

  3. 其他方法:除了上述两种方法外,还有一些研究通过直接微调视觉语言模型、更改模型架构或其他创新手段来进行迁移学习。

        Text Prompt Tuning

        顾名思义,这类方法主要在文本侧做文章,相比手动设计prompt或者进行prompt ensemble的方法,这类方法将text prompt部分设置为可学习的,然后结合特定任务的目标函数对prompt部分进行微。大致如下图所示:

        Visual Prompt Tuning

        和Text Prompt Tuning类似,不过这类方法是在图像侧施展拳脚,比如VP这篇论文加入了一个可学习的图像块,与原始图片像素级相加后作为Image Encoder的输入,并通过特定任务的目标函数进行学习。这种像素级别的调整对于dense类任务比较有效,比如目标检测、分割等。

        Text-Visual Prompt Tuning

        既可以在文本侧做文章进行Prompt Tuning,又可以在图像侧进行Prompt Tuning,那么同时在图像和文本侧兜进行Prompt Tuning也是一件顺理成章的事情。

        基于Feature Adaption进行迁移

        prompt tuning主要是对输入的prompt(包括文本和图像)进行一些调整,而Feature Adaption方法主要是通过加入一个即插即用的“插件”的形式对特征进行调整。下图所示的方法就是一个典型的例子,图中的Feature Adapter结构可以设计成简单的多层感知机之类的网络去适配下游任务,同时加入残差连接的形式确保最差能退化到zero-shot的情况。这类方法的典型代表有Clip-Adapter、Tip-Adapter、SVL-Adapter。

视觉语言模型知识蒸馏方法的总结与对比

        视觉语言模型以其强大的视觉和文本概念理解能力,为复杂任务如目标检测和语义分割提供了新的解决思路。知识蒸馏作为一种有效的模型压缩和性能提升手段,在视觉语言模型的应用中发挥着关键作用。与视觉语言模型迁移方法不同,对视觉语言模型进行知识蒸馏的方法通常不受视觉语言模型架构的限制,并且大部分研究会利用当前最先进的检测或者分割架构的优势来达到更好的性能。在视觉语言模型的知识蒸馏方法中,本文根据应用场景的不同,将其分为两大类:开放词汇目标检测(Open-Vocabulary Object Detection)的知识蒸馏和开放词汇语义分割(Open-Vocabulary Semantic Segmentation)的知识蒸馏。

未来研究方向

        在视觉语言模型的研究中,尽管已经取得了显著的进展,但仍有许多挑战和潜在的研究方向值得进一步探索。

对于视觉语言模型的预训练:

  1. 细粒度视觉语言关系建模:目前大多数视觉语言模型主要关注全局的图像-文本对应关系,但细粒度的视觉语言关系(如物体间的空间关系、属性关系等)对于理解图像内容同样至关重要。未来的研究可以探索如何更有效地建模这些细粒度关系,以进一步提升模型的性能。

  2. 统一视觉和语言特征的学习:Transformer的出现使得图像和文字可以通过相同的方式进行学习,这使得可以采用统一的Transformer架构处理图像和文字。与现有采用两个独立网络的视觉语言模型相比,统一视觉和语言学习可以实现跨模态的有效交流,并有效提升预训练的效率。

  3. 多语言和多文化的视觉语言模型:现有的视觉语言模型主要关注单一语言和文化背景下的图像理解。然而,随着全球化的发展,多语言和多文化的视觉语言理解变得越来越重要。未来的研究可以探索如何构建能够处理多种语言和文化背景的视觉语言模型,以满足更广泛的需求。

对于视觉语言模型的知识蒸馏,可以从两个方面进行探索。首先,可以同时对多个视觉语言模型进行知识蒸馏,通过协调多个视觉语言模型的知识蒸馏来获得更好的效果。其次,除了目标检测和语义分割等任务外,视觉语言模型的知识蒸馏还可以应用于其他视觉任务,如实例分割、姿态估计、视频理解等。未来的研究可以探索如何将这些方法扩展到更多的视觉任务中,以进一步提升视觉识别技术的性能和应用范围。

综上所述,视觉语言模型的研究仍具有广阔的前景和众多的挑战。未来的研究可以从预训练、迁移学习和知识蒸馏等多个方面进行深入探索,以推动视觉语言技术的发展和应用。

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

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

相关文章

C#.net6.0手术麻醉信息管理系统源码,智慧手术室管理平台源码

手术麻醉信息管理系统源码,自主版权的手麻系统源码 手术麻醉信息管理系统包含了患者从预约申请手术到术前、术中、术后的流程控制。手术麻醉信息管理系统主要是由监护设备数据采集子系统和麻醉临床系统两个子部分组成。包括从手术申请到手术分配,再到术前…

开启 Keep-Alive 可能会导致http 请求偶发失败

大家好,我是蓝胖子,说起提高http的传输效率,很多人会开启http的Keep-Alive选项,这会http请求能够复用tcp连接,节省了握手的开销。但开启Keep-Alive真的没有问题吗?我们来细细分析下。 最大空闲时间造成请求…

Docker 哲学 - docker swarm

Docker Swarm 模式下的集群管理和服务恢复机制 Docker Swarm 是 Docker 的集群管理和编排功能。在 Swarm 模式下,你可以将多个 Docker 主机组合成一个虚拟主机,称为 Swarm 集群。Swarm 集群由一个或多个管理节点(manager nodes)和…

1.Docker简介和安装

1 Docker 简介 1.1 Docker 是什么? docker是一个开源的应用容器引擎。 1.2 容器是什么? 容器是一种轻量级的虚拟化技术 ,它是一个由应用运行环境、容器基础镜像组成的集合。 以 Web 服务 Nginx 为例,如下图所示:Ngin…

【Linux】Ubuntu 磁盘管理

准备一个U盘或者SD卡(含读卡器),并将其格式化成 FAT32 格式,不要使用NTFS格式(这是微软的专利,大部分Linux系统不支持)和exFAT格式(有的Linux系统也不支持)。 如果Ubun…

一站式知识库服务平台真的有那么好用吗?看完你就懂了

在快速发展的信息化社会,我们经常会听到“知识就是力量”的这句话,而一个一站式的知识库服务平台就是这样一把“开启力量之门”的钥匙。那么,这把钥匙真的有那么好用吗?让我们一起探讨一下。 首先,“一站式”可能已经解…

c++的学习之路:10、string(2)

本章主要说一下模拟实现string类的部分功能,文章末附上所有代码。 目录 一、构造函数与析构函数 二、拷贝构造 三、c_str 四、【】和迭代器的遍历与访问 五、size 六、判断 七、reserve 八、push_back 九、resize 十、append 十一、 十二、insert 十…

【随笔】Git -- 高级命令(中篇)(七)

💌 所属专栏:【Git】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! 💖 欢迎大…

51单片机学习笔记12 SPI接口 使用1302时钟

51单片机学习笔记12 SPI接口 使用1302时钟 一、DS1302简介1. 功能特性2. 涓流充电3. 接口介绍时钟数据和控制线:电源线:备用电池连接: 二、寄存器介绍1. 控制寄存器2. 时间寄存器3. 日历/时钟寄存器 三、BCD码介绍四、DS1302时序1. 读时序2. …

第十四届省赛大学B组(C/C++)子串简写

原题链接:子串简写 程序猿圈子里正在流行一种很新的简写方法: 对于一个字符串,只保留首尾字符,将首尾字符之间的所有字符用这部分的长度代替。 例如 internationalization 简写成 i18n,Kubernetes 简写成 K8s&#…

Jmeter的使用

Jmeter的使用 1.Jmeter简介 以下内容来自Jmeter中文网http://www.jmeter.com.cn/jieshao,很好的解释了Jmeter的作用: Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试&#xf…

31. 下一个排列 —— LeetCode (python) [PS: LeetCode 运行环境疑似出错]

# encoding utf-8 # 开发者:xxx # 开发时间: 20:26 # "Stay hungry,stay foolish."class Solution(object):def nextPermutation(self, nums):import itertoolsl len(nums)a tuple(nums)nums.sort()permutations_lst list(ite…

SQL Server维护计划

目录 1.概述 2.启动SQL Server 代理服务 3.制定维护计划 4.验证维护计划 5.删除维护计划 1.概述 此文还是存货哈! SQL Server 2008 R2维护计划。 2.启动SQL Server 代理服务 在设置维护计划之前,必须先确保SQL Server 代理服务已启动。启动方法如…

网络基础二——TCP可靠性实现机制补充

11.3.4确认应答机制 ​ 1.双方通信时要返回确认应答报文,保证对方发送的报文是有效的;尽管整个通信过程中无法保证数据全部可靠,但是可以保证单个方向发送的数据是可靠的; ​ 发送的报文要设置序号,如果是应答报文要…

蓝桥杯23年第十四届省赛-异或和之和|拆位、贡献法

题目链接: 蓝桥杯2023年第十四届省赛真题-异或和之和 - C语言网 (dotcpp.com) 1.异或和之和 - 蓝桥云课 (lanqiao.cn) 参考题解: 蓝桥杯真题讲解:异或和之和 (拆位、贡献法)-CSDN博客 洛谷P9236 [蓝桥杯 2023 省 A]…

配置 施耐德 modbusTCP 分布式IO子站 RPA0100

1. 总体步骤 2. 软件组态:在 Unity Pro 软件中创建编辑 PRA 模块工程 2.1 新建项目 模块箱硬件型号如下 点击 Unity Pro 软件左上方【新建】按钮,选择正确的 DIO 模块型号、背板型号 2.2 模块组态 2.2.1 拖拽添加模块 双击【配置】菜单下的【0&…

Python卷积网络车牌识别系统(V2.0)

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

Qt学习记录(C++)——Day 2

目录 一、作业 要求: 实现: 1.创建新的窗口类 2. 主窗口中实现 二、 窗口菜单设计 效果展示图 三、图片资源的导入 步骤: 举例: 四、 对话框 1.模拟对话框 2. 非模态对话框 3.错误对话框 4.信息对话框 5.提问对话…

python调用java中的jar

一、基于IDEA生成可执行jar包 1、编写class的代码,注意一定要有main()方法才可以生成jar包,main()方法可以没有内容。例如下Java 代码: package Project;public class Demo {public static void main(String[] args){Demo t2 new Demo();S…

网络编程(TCP、UDP)

文章目录 一、概念1.1 什么是网络编程1.2 网络编程中的基本知识 二、Socket套接字2.1 概念及分类2.2 TCP VS UDP2.3 通信模型2.4 接口方法UDP数据报套接字编程TCP流套接字编程 三、代码示例3.1 注意点3.2 回显服务器基于UDP基于TCP 一、概念 首先介绍了什么是网络编程&#xff…