视觉语言模型(VLMs)知多少?

2024-09-05 15:04

本文主要是介绍视觉语言模型(VLMs)知多少?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近这几年,自然语言处理和计算机视觉这两大领域真是突飞猛进,让机器不仅能看懂文字,还能理解图片。这两个领域的结合,催生了视觉语言模型,也就是Vision language models (VLMs) ,它们能同时处理视觉信息和文字数据。

图片

VLMs就像是AI界的新宠,能搞定那些既需要看图又需要读文的活儿,比如给图片配文字、回答有关图片的问题,或者根据文字描述生成图片。以前这些活儿都得靠不同的系统来干,但现在VLMs提供了一个统一的解决方案。咱们得好好研究研究这些视觉语言模型。

那视觉语言模型到底是啥?

简单来说,视觉语言模型就是把计算机视觉自然语言处理这两大技术合二为一。

计算机视觉就是让机器能看懂图像和视频里的东西,比如认出里面有什么物体、图案之类的。

自然语言处理呢,就是让机器能理解和生成人类的语言,这样机器就能读得懂、分析得了,还能自己写东西。

VLMs就是通过构建一种能同时处理视觉和文本输入的模型,把这两个领域给连接起来了。这背后靠的是深度学习的一些高级架构,尤其是那些变换器(Transformer)模型,它们在像GPT-4o、Llama、Gemini和Gemma这样的大型语言模型中发挥了关键作用。

这些基于变换器的架构被调整来处理多种类型的输入,让VLMs能捕捉到视觉信息和语言数据之间那些复杂的联系。

VLMs到底是怎么个工作法?

你记得那个为了处理自然语言而搞出来的变换器模型吗?就是那个能处理长距离的依赖关系,还能抓住数据里上下文联系的厉害玩意儿。这个模型现在已经成了很多高级AI系统的中坚力量。

这个变换器架构,最早是在2017年的一篇论文《Attention is All You Need》( https://arxiv.org/abs/1706.03762 )里提出来的。

图片

Transformer网络架构

在VLMs的世界里,变换器被调整成了能同时处理图像和文本,让这两种不同类型的信息能够无缝地整合在一起。想要更详细了解 Transformer 的话,可以参见之前的文章:《Transformer架构的详解》及《用PyTorch构建Transformer模型实战》

一般来说,一个典型的VLM架构包括两个主要的部分:图像编码器文本解码器

  • 图像编码器:这家伙的职责是处理视觉数据,比如图片,然后提取出里面的关键特征,比如物体、颜色、纹理等等,把它们转换成模型能懂的格式。

  • 文本解码器:这个部件负责处理文本数据,根据图像编码器提供的视觉特征来生成输出。

图片

Encoder-Decoder 功能

这两个部件在VLM里头就像是多模态融合的大管家。

通过把这两部分结合起来,VLMs能干的事儿可多了,比如能给图片写出详细的描述,回答有关图片的问题,甚至根据文字描述生成全新的图片呢!VLMs工作的过程大概是这样的:

  1. 图像分析:图像编码器先检查图片,然后生成一个代码,这个代码代表了图片的关键视觉特征。

  2. 信息结合:文本解码器拿到这个代码后,会把它和任何文本输入(比如一个问题)结合起来,一起处理。

  3. 生成输出:文本解码器用这种结合后的理解来生成一个回应,比如给图片配上字幕,或者回答问题。

大多数VLMs用的是视觉变换器(Vision Transformer, ViT)作为图像编码器,这个编码器已经在大量的图像数据集上预训练过,确保它能有效地捕捉到多模态任务需要的视觉特征。

文本解码器则是基于语言模型,经过微调后能处理视觉数据上下文中的语言生成的复杂性。这种视觉和语言处理能力的高度结合,让VLMs成为了一种非常通用而且强大的模型。

开发VLMs的一个重大挑战就是要有大型而且多样化的数据集,里面得包含视觉和文本信息。这些数据集对于训练模型理解和生成多模态内容非常关键。

训练VLMs的过程,就是把图像和它们相应的文本描述成对地输入到模型里,让模型学会视觉元素和语言表达之间的复杂关系。

为了处理这些数据,VLMs通常会用到嵌入层,把视觉和文本输入都转换成高维空间里的表示,这样它们就可以在那里被比较和结合起来。

这种嵌入过程让模型能够理解两种模态之间的联系,并且生成既连贯又符合上下文的输出。想要了解更多关于嵌入的细节,可以参见 《大话LLM之向量嵌入》 及 《LLM向量嵌入知多少》两篇文章。

那现在有哪些比较主流的开源的视觉语言模型?

这个领域可真是海了去了,Hugging Face Hub上就有不少现成的开源模型。这些模型大小不一,功能各异,许可证也各不相同,给不同需求的用户提供了丰富的选择。下面咱们就来看看一些特别出色的开源VLMs,以及它们的关键特点:

图片

最新的VLMs及其关键特点

要找到最适合自己特定需求的VLMs,面对这么多选项确实有点难。不过,有几个工具和资源能帮上忙:

  1. Vision Arena:这是一个动态排行榜,基于模型输出的匿名投票。用户上传一张图片和一个提示,然后系统会从两个不同的模型中随机抽取输出,让用户选择他们更喜欢哪个。这个排行榜完全是基于人的喜好来构建的,给模型提供了一个公平的排名。

  2. Open VLM Leaderboard:这个排行榜会根据不同的指标和平均分数给各种VLMs打分,还提供了筛选器,可以按照模型的大小、许可证和不同指标的性能来排序。

  3. VLMEvalKit:这是一个工具包,专门设计用来在VLMs上运行基准测试,也是Open VLM Leaderboard的技术支持。还有一个评估套件叫LMMS-Eval,它提供了一个命令行界面,让用户可以使用Hugging Face Hub上托管的数据集来评估模型。

虽然Vision Arena和Open VLM Leaderboard提供了很多有价值的信息,但它们只能包括那些已经被提交的模型,而且需要定期更新,才能加入新模型。

我们怎么评估这些视觉语言模型?

通常得用到几种专门的基准测试,下面简要介绍几种,详情可参见:《大型语言模型基准测试:理解语言模型性能》:

  1. MMMU:这个大规模多学科多模态理解和推理的基准测试,覆盖了超过11,500个多模态的挑战,需要用到像艺术和工程这样的不同学科的大学水平知识。

  2. MMBench:这个基准测试包含了20种不同技能的3000个单选题,比如光学字符识别(OCR)和目标定位。它用CircularEval策略,就是把答案选项随机打乱,模型得一直能选出正确答案。

  3. 特定领域的基准测试:还有一些更专业的基准测试,比如MathVista(视觉数学推理)、AI2D(图表理解)、ScienceQA(科学问题回答)和OCRBench(文档理解),这些都能提供更专门的评估。

这些测试帮研究人员和开发者评估和比较不同VLMs的性能,让他们能更好地理解模型在特定任务和场景下的效果。通过这些测试,我们能更精确地知道模型处理多模态数据、理解复杂概念和生成准确响应的能力。

技术细节:预训练VLMs

预训练VLMs就是要把图像和文本的信息统一起来,然后输入到文本解码器里生成文本。这通常包括一个图像编码器、一个用来对齐图像和文本信息的嵌入投影器,还有一个文本解码器。不过,不同的模型可能会用不同的预训练策略。

很多时候,如果你能针对特定用途微调现有的模型,可能连预训练VLMs都不需要。像Transformers和SFTTrainer这样的工具,让微调模型变得简单,即使是资源有限的人也能轻松上手。

实现开源VLMs

下面是一个用HuggingFace的Transformers库,我们可以在自己的电脑上免费使用开源VLM LlavaNext模型:

from transformers import LlavaNextProcessor, LlavaNextForConditionalGeneration
import torch
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
processor = LlavaNextProcessor.from_pretrained("llava-hf/llava-v1.6-mistral-7b-hf"
)
model = LlavaNextForConditionalGeneration.from_pretrained("llava-hf/llava-v1.6-mistral-7b-hf",torch_dtype=torch.float16,low_cpu_mem_usage=True
)
model.to(device)

这样,我们就能在自己的项目中用上这些强大的开源VLMs了。

VLMs 有哪些应用场景? 

VLMs 本事可不止是给图片加个字幕那么简单。这些模型就像是视觉和文本信息之间的超级翻译官,开启了一大堆应用的大门。咱们一块儿看看VLMs在各行各业里头都有哪些影响力大的应用。

  1. 视觉问题回答(Visual Question Answering, VQA)

    想象一下,你给机器看张图,然后问它问题,比如“这图里最高的楼是什么颜色的?”或者“这图里有几个人?”VQA就是干这个的。这要求模型得能读懂图里的视觉信息,还得理解你问话的上下文。在医疗行业,VQA能帮忙分析医学影像,给诊断和治疗计划提供参考。在零售业,它能让顾客更直观地和商品图片互动,提升购物体验。

  2. 文本到图像生成

    VLMs还有一个超酷的能力,就是能根据文字描述生成图片。比如你描述一个“山间宁静的日落,山谷中流淌着一条河流”,VLMs就能给你“画”出来。这对设计师和广告人来说是个宝,他们可以根据文字提示快速搞出视觉创意,让创造视觉内容的过程更高效。

  3. 图像检索

    图像检索就是根据文字描述来找图片。VLMs能搞懂图片里有啥,也能搞懂你想找啥,帮你找到最匹配的图片。这能让搜索引擎更精准,让用户更容易找到他们想要的图片。无论是在网上购物还是医学图像分析,这个技能都很有用。

  4. 视频理解

    VLMs不只能处理图片,还能处理视频,帮我们理解视频内容,甚至给视频加字幕。视频理解能分析视频里的视觉信息,然后生成描述性的文本,捕捉视频要表达的精髓。这个技能在视频搜索、视频摘要和内容审核等方面都能派上用场。比如,它能帮助用户根据文字找到特定的视频片段,或者快速生成视频摘要,让用户迅速了解视频内容。在内容审核方面,VLMs能帮忙识别视频中的不当内容,让网络平台更安全友好。

总之,视觉语言模型能同时处理视觉和文本数据,这本事让各种应用都有可能得到加强。随着这个领域的不断发展,我们可以预见,未来会有更多更复杂的VLMs出现,它们能完成更艰巨的任务,还能给出有价值的见解。

这篇关于视觉语言模型(VLMs)知多少?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1139294

相关文章

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

Spring AI Alibaba接入大模型时的依赖问题小结

《SpringAIAlibaba接入大模型时的依赖问题小结》文章介绍了如何在pom.xml文件中配置SpringAIAlibaba依赖,并提供了一个示例pom.xml文件,同时,建议将Maven仓... 目录(一)pom.XML文件:(二)application.yml配置文件(一)pom.xml文件:首

Go语言中三种容器类型的数据结构详解

《Go语言中三种容器类型的数据结构详解》在Go语言中,有三种主要的容器类型用于存储和操作集合数据:本文主要介绍三者的使用与区别,感兴趣的小伙伴可以跟随小编一起学习一下... 目录基本概念1. 数组(Array)2. 切片(Slice)3. 映射(Map)对比总结注意事项基本概念在 Go 语言中,有三种主要

C语言中自动与强制转换全解析

《C语言中自动与强制转换全解析》在编写C程序时,类型转换是确保数据正确性和一致性的关键环节,无论是隐式转换还是显式转换,都各有特点和应用场景,本文将详细探讨C语言中的类型转换机制,帮助您更好地理解并在... 目录类型转换的重要性自动类型转换(隐式转换)强制类型转换(显式转换)常见错误与注意事项总结与建议类型

如何在本地部署 DeepSeek Janus Pro 文生图大模型

《如何在本地部署DeepSeekJanusPro文生图大模型》DeepSeekJanusPro模型在本地成功部署,支持图片理解和文生图功能,通过Gradio界面进行交互,展示了其强大的多模态处... 目录什么是 Janus Pro1. 安装 conda2. 创建 python 虚拟环境3. 克隆 janus

本地私有化部署DeepSeek模型的详细教程

《本地私有化部署DeepSeek模型的详细教程》DeepSeek模型是一种强大的语言模型,本地私有化部署可以让用户在自己的环境中安全、高效地使用该模型,避免数据传输到外部带来的安全风险,同时也能根据自... 目录一、引言二、环境准备(一)硬件要求(二)软件要求(三)创建虚拟环境三、安装依赖库四、获取 Dee

Go语言利用泛型封装常见的Map操作

《Go语言利用泛型封装常见的Map操作》Go语言在1.18版本中引入了泛型,这是Go语言发展的一个重要里程碑,它极大地增强了语言的表达能力和灵活性,本文将通过泛型实现封装常见的Map操作,感... 目录什么是泛型泛型解决了什么问题Go泛型基于泛型的常见Map操作代码合集总结什么是泛型泛型是一种编程范式,允

DeepSeek模型本地部署的详细教程

《DeepSeek模型本地部署的详细教程》DeepSeek作为一款开源且性能强大的大语言模型,提供了灵活的本地部署方案,让用户能够在本地环境中高效运行模型,同时保护数据隐私,在本地成功部署DeepSe... 目录一、环境准备(一)硬件需求(二)软件依赖二、安装Ollama三、下载并部署DeepSeek模型选