多模态:视觉、语音与视频
目标:知道每类多模态能力「能做什么、不能做什么、怎么接进系统」。
对绝大多数工程岗位,多模态是用,不是训。了解结构 + 会调用 + 会评测就够。
一、四条技术路线
| 模态组合 | 结构 | 代表 | 工程用途 |
|---|---|---|---|
| 图文理解(VLM) | 视觉编码器 + 投影层 + LLM | GPT-4V 类、Qwen-VL、InternVL | 截图理解、票据识别、图表问答、UI 自动化 |
| 文生图 | 扩散模型(Diffusion) | Stable Diffusion、Flux | 素材生成、设计草图 |
| 语音识别(ASR) | 编码器 + 解码器 | Whisper、Paraformer | 会议记录、客服质检 |
| 语音合成(TTS) | 文本 → 声学特征 → 声码器 | CosyVoice、GPT-SoVITS | 播报、有声内容 |
| 视频理解 | 抽帧 + VLM / 时序编码 | 各家视频模型 | 内容审核、监控 |
二、VLM 是怎么「看见」的
图像 → 切成 patch(如 14×14 像素块)→ 视觉编码器(ViT)
→ 投影层映射到 LLM 的词向量空间
→ 变成一串「视觉 token」,与文本 token 拼在一起
→ LLM 统一处理关键认知:图像对模型来说就是一堆 token。 这解释了三件事:
| 现象 | 原因 |
|---|---|
| 高清图更贵 | 分块更多 → token 更多 |
| 小字识别不准 | 单个字像素太少,patch 信息不足 |
| 图表数值读错 | 视觉 token 的精度不足以还原数字 |
工程实践:图像预处理
python
from PIL import Image
def prepare_for_vlm(img_path, max_side=1280, min_side=640):
img = Image.open(img_path).convert("RGB")
w, h = img.size
scale = min(max_side / max(w, h), 1.0)
if max(w, h) * scale < min_side:
scale = min(min_side / max(w, h), 4.0) # 小图放大
new = img.resize((int(w * scale), int(h * scale)), Image.LANCZOS)
return new| 任务 | 建议 |
|---|---|
| 文档/票据 OCR | 长边 1600–2048,保留细节,可分块处理 |
| 通用图像理解 | 长边 1024–1280 足够 |
| 小字/密集文字 | 切块分别识别再合并,比一张大图更准 |
| 多图对比 | 控制在 2–4 张,太多会稀释注意力 |
三、ASR / TTS:最容易落地的两块
语音识别(Whisper 系)
python
import whisper
model = whisper.load_model("medium") # tiny/base/small/medium/large
result = model.transcribe("meeting.mp3", language="zh", vad_filter=True)
for seg in result["segments"]:
print(f"[{seg['start']:.1f}-{seg['end']:.1f}] {seg['text']}")| 关注点 | 说明 |
|---|---|
| VAD(静音检测) | 长音频必须切片,否则慢且易错 |
| 说话人分离 | Whisper 不做,需 diarization(如 pyannote) |
| 专有名词 | 用 initial_prompt 给词表提示 |
| 时间戳 | 用于字幕、定位、质检 |
语音合成(TTS)
| 关注 | 说明 |
|---|---|
| 音色克隆 | 需几秒到几分钟样本,注意授权与合规 |
| 流式合成 | 对话场景必须首包快(<500ms) |
| 多音字/数字 | 需文本归一化(TN)预处理 |
| 情感与韵律 | 影响真实感,通常需标点与停顿控制 |
四、组合成实用系统
| 场景 | 链路 |
|---|---|
| 会议纪要 | ASR(含说话人)→ LLM 分段总结 → 提取待办 → 结构化输出 |
| 票据报销 | 图像预处理 → VLM 抽取字段 → 规则校验(金额/日期)→ 人工复核异常 |
| 语音助手 | ASR → LLM(+工具/RAG)→ TTS,全链路流式 |
| 内容审核 | 抽帧 + VLM 描述 → 文本分类 → 高危人工复核 |
| 无障碍阅读 | 摄像头取图 → VLM 描述 → TTS 播报 |
一条通用架构原则
多模态系统的可靠性来自「结构化中间层」。 不要让它「一步出结果」。让 VLM 输出结构化字段,再用代码做校验与计算,最后才生成自然语言。
五、评测多模态:和纯文本不同
| 层级 | 指标 |
|---|---|
| 抽取准确 | 字段级 exact match / 编辑距离 |
| 视觉定位 | 是否指向正确区域(框的 IoU) |
| 幻觉检测 | 描述中是否出现图中不存在的物体(最高频错误) |
| ASR | 字错误率 CER / 词错误率 WER |
| TTS | 主观 MOS 分 + 首包延迟 |
多模态幻觉比文本幻觉更隐蔽:模型会「按常识补齐」图中没有的东西。评测集必须包含「图中没有 X,问 X 在哪」这类陷阱题。
六、成本与延迟的现实
| 项 | 量级 | 优化 |
|---|---|---|
| 一张 1024² 图 ≈ token 数 | 数百到数千 token | 降分辨率、裁剪 ROI |
| ASR | 实时率 0.1–0.5(快于实时) | 小模型 + VAD 切片 |
| TTS 首包 | 200–800ms | 流式 + 缓存常用句 |
| 视频 | 按抽帧数线性增长 | 关键帧抽取、场景切换检测 |