多模态模型 (Multimodal)

从单一模态到多模态,AI 正在迈向真正理解世界。


🎯 学习目标

2 小时 理解:

  1. 什么是多模态模型
  2. 主流模型和架构
  3. 如何使用多模态模型
  4. 最新进展和应用

📚 快速模式(30 分钟)

什么是多模态?

多模态 = 处理多种类型的数据

常见模态:

为什么需要多模态?

人类是多模态的:

AI 也应该一样!

应用场景

任务 输入 输出 例子
图文理解 图像 + 文本 文本/分类 “这张图片里有什么?”
图像生成 文本 图像 “画一只猫”
视频理解 视频 + 文本 文本/分类 “这段视频在讲什么?”
音频理解 音频 + 文本 文本/分类 “这首歌的情绪是什么?”

实战:用 CLIP 做图文检索

from transformers import CLIPProcessor, CLIPModel
import torch
from PIL import Image

# 加载模型
model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32")

# 输入
image = Image.open("cat.jpg")
texts = ["a cat", "a dog", "a car"]

# 处理
inputs = processor(text=texts, images=image, return_tensors="pt", padding=True)

# 推理
outputs = model(**inputs)
logits_per_image = outputs.logits_per_image  # 图像和文本的相似度
probs = logits_per_image.softmax(dim=1).tolist()[0]

# 结果
for text, prob in zip(texts, probs):
    print(f"{text}: {prob:.2%}")
# Output: a cat: 95%, a dog: 3%, a car: 2%

📖 深度模式(2 小时)

主流多模态模型

1. CLIP (Contrastive Language-Image Pre-training)

提出: OpenAI (2021)

核心思想: 对比学习,把图像和文本映射到同一空间

图像编码器 → 图像向量
文本编码器 → 文本向量

对比损失:同一对的向量应该接近,不同对的向量应该远离

应用:

2. BLIP (Bootstrapping Language-Image Pre-training)

提出: Salesforce (2022)

核心创新:

应用:

3. LLaVA (Large Language-and-Vision Assistant)

提出: 2023

核心思想: 连接视觉编码器和 LLM

图像 → CLIP ViT → 图像向量
文本 → LLM

将图像向量作为 LLM 的输入

应用:

4. GPT-4V

提出: OpenAI (2023)

特点:

5. 其他重要模型

模型 公司 特点
DALL·E OpenAI 文本生成图像
Stable Diffusion Stability AI 开源图像生成
Midjourney Midjourney 艺术风格图像生成
Flamingo DeepMind 少样本视觉学习

架构对比

CLIP 架构

图像 → Vision Transformer (ViT) → 图像向量
文本 → Text Transformer → 文本向量

对比损失:拉近相关对,推开不相关对

BLIP-2 架构(2023)

图像 → 冻结的 ViT → Q-Former → LLM
文本 → 冻结的 LLM

只训练 Q-Former(轻量级适配器)

LLaVA 架构

图像 → CLIP ViT → 线性投影 → LLM Token
文本 → LLM Token

拼接后输入 LLM

实战:构建多模态应用

项目 1: 图文问答

from transformers import BlipProcessor, BlipForQuestionAnswering
from PIL import Image

# 加载模型
processor = BlipProcessor.from_pretrained("Salesforce/blip-vqa-base")
model = BlipForQuestionAnswering.from_pretrained("Salesforce/blip-vqa-base")

# 加载图像
image = Image.open("image.jpg")

# 提问
question = "What is in this image?"

# 处理
inputs = processor(image, question, return_tensors="pt")

# 推理
out = model.generate(**inputs)
answer = processor.decode(out[0], skip_special_tokens=True)

print(answer)

项目 2: 图像生成

import torch
from diffusers import StableDiffusionPipeline

# 加载模型
pipe = StableDiffusionPipeline.from_pretrained(
    "runwayml/stable-diffusion-v1-5",
    torch_dtype=torch.float16
).to("cuda")

# 生成
prompt = "A cat sitting on a couch, digital art"
image = pipe(prompt).images[0]

# 保存
image.save("cat.png")

项目 3: 图像描述

from transformers import BlipProcessor, BlipForConditionalGeneration

processor = BlipProcessor.from_pretrained("Salesforce/blip-image-captioning-base")
model = BlipForConditionalGeneration.from_pretrained("Salesforce/blip-image-captioning-base")

image = Image.open("image.jpg")

inputs = processor(image, return_tensors="pt")

out = model.generate(**inputs)
caption = processor.decode(out[0], skip_special_tokens=True)

print(caption)

多模态模型的应用

1. 内容创作

2. 搜索和检索

3. 医疗诊断

4. 教育

5. 自动驾驶


多模态的挑战

挑战 说明
对齐 如何让不同模态对齐到同一语义空间
数据 高质量多模态数据稀缺
计算 处理图像和视频需要大量计算
评估 如何评估多模态理解能力
偏见 可能继承多个模态的偏见

最新进展 (2024-2025)

1. 视频多模态

2. 音频多模态

3. 3D 多模态

4. 传感器融合


如何选择模型?

任务 推荐模型
图文检索 CLIP, BLIP
图像理解 LLaVA, GPT-4V
图像生成 Stable Diffusion, DALL·E
视频理解 Video-LLaVA, InternVideo
音频理解 Whisper

💡 学习建议

必须理解

可以简化


📝 总结

关键要点

下一步


🔗 相关资源


继续学习 LLM深度学习 🚀