ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

走进 VLM(一):为什么 AI 开始“看懂”这个世界?从 CV 到视觉语言模型

走进 VLM(一):为什么 AI 开始“看懂”这个世界?从 CV 到视觉语言模型 专栏走进 VLM——从视觉语言模型到多模态 Agent 的技术实战本文是专栏第 1 篇共 20 篇。关键词VLM、Vision-Language Model、多模态大模型、CLIP、Transformer、视觉编码器、LLM一、写在前面AI 为什么突然开始“看懂”图片了如果把人工智能的发展简单划分可以看到一条非常明显的技术路线传统机器学习 ↓ 计算机视觉 CV ↓ 深度学习 ↓ Transformer ↓ 大语言模型 LLM ↓ 视觉语言模型 VLM ↓ 多模态 Agent早期的 AI 更擅长做一件事情针对一个明确的问题学习一个明确的映射。比如给计算机一张猫的图片图片 ↓ CNN ↓ 特征提取 ↓ 分类器 ↓ 猫模型能够告诉你“这是一只猫。”但是如果你继续问“这只猫正在做什么”传统分类模型可能就无能为力了。如果进一步问“为什么这只猫会出现在这个地方”问题就从单纯的视觉分类逐渐变成了视觉理解 语言理解 推理。而这正是 VLM 开始发挥作用的地方。二、VLM 到底是什么VLM全称Vision-Language Model中文一般称为视觉语言模型简单理解VLM 就是让模型同时理解视觉信息和语言信息。传统 LLMText ↓ LLM ↓ Text例如输入 解释一下 Transformer 的工作原理。 ↓ LLM ↓ 输出 Transformer 主要由 Attention...但是 VLM 不一样Image Text ↓ VLM ↓ Text例如图片 “图片里有什么” ↓ VLM ↓ “图片中有一辆汽车和两个人。”进一步还可以图片 “这个场景是否存在安全风险” ↓ VLM ↓ “存在潜在风险因为有人进入了车辆行驶区域。”这时候模型已经不只是看见而是在尝试理解 推理三、VLM 和传统计算机视觉有什么区别这是理解 VLM 最重要的问题之一。传统计算机视觉通常针对特定任务设计。例如图像分类Image ↓ CNN / ViT ↓ Classifier ↓ Dog目标检测Image ↓ YOLO ↓ Bounding Box ↓ Person / Car / Dog图像分割Image ↓ Segmentation Model ↓ Pixel Mask这些模型非常强。比如 YOLO 可以快速告诉你Person: 0.96 Car: 0.91 Dog: 0.88但它们通常不会主动回答“这个人为什么站在这里”也不会直接理解“这个场景和昨天的监控画面相比有什么异常”原因在于传统 CV 模型主要解决的是视觉任务而不是开放世界的视觉语言理解。四、一个非常重要的变化从“识别”到“理解”我们可以把 AI 对图像的理解能力分成几个阶段。第一阶段看见例如图片 → 猫模型知道这里有一只猫。第二阶段检测进一步图片 ↓ 猫 狗 人 汽车模型不仅知道有什么还知道它们在哪里。第三阶段描述模型开始生成自然语言图片中有一只橘色的猫它正坐在沙发上。这已经开始涉及视觉 → 语言第四阶段问答例如用户 猫在哪里 模型 猫坐在沙发上。第五阶段推理进一步用户 为什么猫可能坐在那里 模型 因为沙发通常是适合休息的位置而且猫正处于坐姿。这里已经开始出现视觉推理。第六阶段决策再往前一步摄像头 ↓ VLM ↓ 发现异常 ↓ Agent ↓ 调用工具 ↓ 发送报警这时候 AI 就不再只是“看图”。而是感知世界 → 理解世界 → 做出决策 → 执行动作。这也是我们后面要讲的Multimodal Agent多模态智能体五、VLM 并不是凭空出现的如果想真正理解 VLM就必须回头看看它是怎么一步一步发展出来的。整个技术演进可以简单画成CNN ↓ Vision Transformer ↓ CLIP ↓ Vision-Language Model ↓ Multimodal LLM ↓ Multimodal Agent下面逐个理解。六、第一步CNN 让机器开始理解图像CNN全称Convolutional Neural Network卷积神经网络曾经是计算机视觉领域最重要的技术之一。它的基本思路可以简单理解成图片 ↓ 卷积 ↓ 低级特征 ↓ 更高级特征 ↓ 分类比如第一层 边缘 线条 颜色 第二层 眼睛 耳朵 鼻子 第三层 脸 身体 最终 猫这其实是一种从局部特征逐渐组合成高级语义的过程。但是 CNN 有一个问题它天然更擅长处理局部空间结构。而我们真正想让机器理解的是图片中的不同对象之间到底是什么关系这就为后来的 Transformer 埋下了伏笔。七、第二步Vision TransformerTransformer 最早因为 NLP 而出名。后来研究人员发现Transformer 不一定只能处理文本。图片也可以被拆成一个个 Patch。例如一张图片┌────┬────┬────┬────┐ │ P1 │ P2 │ P3 │ P4 │ ├────┼────┼────┼────┤ │ P5 │ P6 │ P7 │ P8 │ ├────┼────┼────┼────┤ │ P9 │P10 │P11 │P12 │ ├────┼────┼────┼────┤ │P13 │P14 │P15 │P16 │ └────┴────┴────┴────┘每个 Patch 都可以转换成一个向量Patch ↓ Embedding ↓ Vector于是Image ↓ Patch 1 Patch 2 Patch 3 ... Patch N ↓ Transformer这就是 Vision Transformer也就是ViT它为后面的 VLM 提供了非常重要的视觉编码基础。八、第三步CLIP 是 VLM 发展中的关键节点如果说 CNN 和 ViT 解决的是“如何理解图片”那么 CLIP 解决的是另一个重要问题“如何让图片和文字建立联系”CLIP 的核心思想非常漂亮。准备大量图片和对应的文字Image 1 —— 一只猫 Image 2 —— 一辆汽车 Image 3 —— 一个人在跑步 ...然后训练两个 Encoder┌──────────────┐ Image ───────→│ Image Encoder│ └──────┬───────┘ │ Image Vector │ ↓ 相似度 ↑ │ Text Vector │ ┌──────┴───────┐ Text ────────→│ Text Encoder │ └──────────────┘目标就是图片和正确的文本向量距离更近。例如猫图片 ↓ [0.21, 0.72, ...]文本“一只猫” ↓ [0.20, 0.71, ...]二者非常接近。而“一辆汽车” ↓ [0.89, 0.13, ...]距离就比较远。于是机器第一次比较自然地建立了视觉世界 ↔ 语言世界之间的联系。这一步非常关键。因为 VLM 的核心本质上就是让视觉信息进入语言模型能够理解的语义空间。九、VLM 的核心结构到底是什么到了这里我们可以先给出一个最经典的 VLM 抽象结构Image │ ↓ ┌─────────────────┐ │ Vision Encoder │ │ ViT │ └────────┬────────┘ │ Visual Features │ ↓ ┌─────────────────┐ │ Projector │ └────────┬────────┘ │ Visual Tokens │ ↓ Text ───────────────→ LLM │ ↓ Output这里最重要的是三个组件1. Vision Encoder负责看图片。例如ViTCLIP Vision EncoderSigLIP2. Projector负责把视觉特征转换到语言模型能够理解的空间。可以把它理解成一个“翻译器”。视觉语言 ↓ Projector ↓ 语言模型语言3. LLM负责理解、生成和推理。例如QwenLlamaMistral所以可以把 VLM 粗略理解为VLM Vision Encoder Projector LLM当然真实世界中的 VLM 结构远比这个复杂。但是这个抽象模型非常重要。后面我们拆模型源码的时候还会不断回到这个结构。十、那么 VLM 是怎么“看懂”一张图片的我们举一个例子。假设输入一张街道照片然后用户问“图中是否存在交通安全隐患”整个过程可以抽象成图片 │ ↓ Vision Encoder │ ↓ Visual Features │ ↓ Projector │ ↓ Visual Tokens │ │ 用户问题 ───────────┤ ↓ LLM │ ↓ 推理 │ ↓ 最终回答注意这里真正发生了一个非常重要的变化。传统 CVImage ↓ Class而 VLMImage Text ↓ Multimodal Reasoning ↓ Text这就是为什么 VLM 的能力范围突然变得非常大。十一、第一份代码让模型真正“看”一张图片理论讲到这里我们直接运行一个最简单的 VLM。这里使用 Hugging Face Transformers 调用一个支持图像理解的多模态模型。注意不同 VLM 对显存要求差异非常大。实际运行时可以根据自己的 GPU 显存选择合适的模型。首先安装依赖pip install torch torchvision transformers accelerate pillow然后准备一张图片例如test.jpg接下来使用 Pythonimport torch from PIL import Image from transformers import AutoProcessor, AutoModelForImageTextToText model_name Qwen/Qwen2.5-VL-3B-Instruct # 加载处理器 processor AutoProcessor.from_pretrained(model_name) # 加载模型 model AutoModelForImageTextToText.from_pretrained( model_name, torch_dtypetorch.float16, device_mapauto ) # 加载图片 image Image.open(test.jpg).convert(RGB) # 用户问题 question 请详细描述这张图片中的内容。 # 构造多模态输入 messages [ { role: user, content: [ { type: image, image: image }, { type: text, text: question } ] } ] # 转换为模型输入 text processor.apply_chat_template( messages, tokenizeFalse, add_generation_promptTrue ) inputs processor( text[text], images[image], return_tensorspt ) # 移动到模型设备 inputs { k: v.to(model.device) if hasattr(v, to) else v for k, v in inputs.items() } # 模型推理 with torch.no_grad(): generated_ids model.generate( **inputs, max_new_tokens256 ) # 解码 output processor.batch_decode( generated_ids, skip_special_tokensTrue ) print(output[0])这段代码的逻辑其实非常简单加载模型 ↓ 读取图片 ↓ 构造 Image Text ↓ Processor 编码 ↓ VLM 推理 ↓ 生成文字十二、这里为什么需要 Processor很多第一次接触 VLM 的开发者会有一个疑问为什么不像普通 LLM 那样直接 Tokenizer因为现在输入不再只是文本。我们的输入实际上是Image Text所以模型需要同时处理文本 ↓ Tokenizer 图片 ↓ Image Processor最终组合成模型需要的输入。可以粗略理解成┌──→ Text Processor ──→ Text Tokens Input ─────────┤ └──→ Image Processor ─→ Image Features因此 VLM 中经常会看到processor(...)而不是简单tokenizer(...)这是一个非常值得记住的区别。十三、VLM 最核心的一个概念Visual Token理解 VLM必须理解Visual Token视觉 Token大家都知道 LLM 处理文本时Hello ↓ Token ↓ Embedding例如猫正在睡觉 ↓ [猫, 正在, 睡觉] ↓ Token IDs ↓ EmbeddingVLM 也需要把图片转换成模型能够处理的信息。因此Image ↓ Vision Encoder ↓ Visual Features ↓ Visual Tokens于是最终输入给 LLM 的东西可以抽象成Text Tokens Visual Tokens也就是说VLM 的一个核心任务就是把视觉信息转换成语言模型可以参与计算的表示。这也是后面理解Image TokenPatch TokenProjectorCross AttentionMultimodal Attention的基础。十四、为什么 VLM 能回答“图片里发生了什么”这个问题其实非常有意思。模型并不是像人一样“我真的看到了这辆汽车。”从机器学习角度来说它做的是图片 ↓ 视觉特征 ↓ 多模态表示 ↓ 语言模型 ↓ 概率分布 ↓ 生成 Token ↓ 完整回答例如模型生成图然后图 → 片然后图片 → 中最终图片中有一辆汽车……因此从底层来看VLM 本质上仍然是一个概率生成模型。只是它的输入空间从Text扩展到了Text Image甚至进一步扩展到了Text Image Audio Video这就是我们通常所说的Multimodal Model十五、VLM 和多模态大模型有什么区别这两个概念经常被混在一起。可以简单理解VLM重点强调Vision Language也就是视觉 语言Multimodal LLM范围更大Text Image Audio Video Document ...都可能作为输入。因此Multimodal AI │ ├── Vision ├── Language ├── Audio └── Video而 VLM 可以看成多模态 AI 中非常重要的一条技术路线。十六、为什么 VLM 是 Agent 发展的关键这也是整个专栏后面非常重要的一条主线。传统 Agent用户 ↓ LLM ↓ Tool ↓ Result但是这种 Agent 的感知能力主要来自文本。如果 Agent 能够直接理解现实世界Camera ↓ VLM ↓ 理解环境 ↓ Agent ↓ Tool ↓ Action那么 Agent 就拥有了视觉感知能力。例如智能监控摄像头 ↓ VLM ↓ “有人进入危险区域” ↓ Agent ↓ 调用报警工具 ↓ 发送通知例如机器人Camera ↓ VLM ↓ 理解环境 ↓ LLM Agent ↓ 规划路径 ↓ 执行动作所以VLM 并不是多模态技术的终点而可能是多模态 Agent 的感知入口。十七、把整个技术体系串起来到这里我们已经可以建立第一张完整的技术地图AI │ ┌──────────┴──────────┐ │ │ LLM CV │ │ │ CNN │ │ │ ViT │ │ └──────────┬──────────┘ │ CLIP │ ↓ VLM │ ┌──────────┼──────────┐ ↓ ↓ ↓ RAG Agent 推理优化 │ │ │ └──────────┼──────────┘ ↓ Multimodal Agent │ ↓ Real World AI这也是整个专栏接下来 20 篇文章的路线。十八、接下来我们会学什么本专栏一共20 篇。我们不会停留在“介绍几个 VLM 模型”的层面而是从底层原理一直走到工程实践。大致路线如下01 VLM 是什么从 CV 到 VLM ↓ 02 Vision EncoderVLM 是怎么看图片的 ↓ 03 CLIP视觉和语言如何对齐 ↓ 04 拆解 VLMVision Encoder Projector LLM ↓ 05 Visual Token图片是如何进入 LLM 的 ↓ 06 VLM 如何进行视觉推理 ↓ 07 从零部署一个 VLM ↓ 08 VLM API 与多模态应用开发 ↓ 09 Multimodal RAG ↓ 10 多模态知识库 ↓ 11 Multimodal Retrieval Reranker ↓ 12 VLM Agent ↓ 13 VLM Function Calling ↓ 14 VLM RAG Agent ↓ 15 VLM 推理原理与 KV Cache ↓ 16 VLM 量化与压缩 ↓ 17 TensorRT / GPU 推理优化 ↓ 18 VLM 端侧部署 ↓ 19 构建完整多模态 AI 系统 ↓ 20 从 VLM 到 Multimodal Agent十九、总结如果只记住今天的内容可以记住下面这张图传统 CV │ │ 识别 ↓ Vision Transformer │ │ 视觉特征 ↓ CLIP │ │ 图文对齐 ↓ VLM │ │ 视觉 语言 ↓ Multimodal LLM │ │ 理解 推理 ↓ Multimodal RAG │ │ 外部知识 ↓ Multimodal Agent │ │ 工具调用 ↓ 真实世界智能系统所以如果用一句话解释 VLMVLM 的核心就是让语言模型获得理解视觉世界的能力并进一步将视觉感知与语言理解、知识检索和推理能力结合起来。而从工程角度看一个典型 VLM 可以先记住Image ↓ Vision Encoder ↓ Visual Features ↓ Projector ↓ Visual Tokens ↓ LLM ↓ Reasoning ↓ Text这条链路是后面整个专栏的核心。下一篇我们就真正进入 VLM 的“眼睛”Vision Encoder 到底是怎么把一张图片变成模型可以理解的视觉特征的我们将从Patch、Embedding、ViT、Attention开始一层一层拆开 VLM 的视觉编码器。专栏第 2 篇Vision Encoder——VLM 到底是怎么看懂一张图片的
返回列表