多模态大模型这几年从论文里的概念一路走到工程落地,中间踩过的坑比很多人想象的多。我前后参与过几个图文理解与生成方向的项目,从早期把视觉编码器硬接到语言模型上跑不通,到后来能稳定训练出可用的模型,中间反复折腾过对齐策略、数据配比、并行切分这些事情。这篇就把我理解的架构设计和训练方法摊开讲一遍——它是什么、各模块怎么配合、训练分几步走、哪些参数和细节最容易翻车。不管你是刚接触多模态方向、想搞清楚"图文为什么能对齐"的新手,还是已经在做训练、被loss不降或者显存炸掉折磨过的同行,下面这些内容应该都能对上你的实际问题。
1. 多模态大模型到底在解决什么问题
先把概念钉死。多模态大模型(Multimodal Large Language Model,简称MLLM)指的是能同时接收并理解两种及以上模态信息(最常见是图像+文本,也有音频、视频、点云)的大模型。它的核心能力不是"识别图片里有什么",而是把视觉信息转成语言模型能理解的表征,然后用语言的方式做推理、问答、描述、甚至据此生成内容。这个区别很关键:传统视觉模型是"分类器思维",输出一个标签或一组框;MLLM是"对话思维",输出一段有逻辑的自然语言。
1.1 和传统视觉模型的分界线在哪
举个具体场景。给一张餐桌照片,传统目标检测模型告诉你:桌上有杯子、盘子、叉子,置信度分别多少。MLLM则可能告诉你:"桌上摆了三副餐具,左手边那副的叉子放反了,看摆放方式像是刚有人坐下还没动。"后者的输出里包含了空间关系推断、常识判断和意图猜测,这些都不是检测头能给的。
所以判断一个模型是不是MLLM,看两点:输入是否跨模态、输出是否以自然语言为主要载体并具备推理能力。只做图文检索(CLIP那类对比学习模型)严格说不算完整MLLM,因为它没有生成能力;只做图像描述(Image Captioning)的传统encoder-decoder也不算,因为推理能力弱。真正的MLLM得能接住"这张图里的电路哪里可能短路"这种需要视觉+领域知识联合推理的问题。
1.2 四类典型能力与对应场景
| 能力类型 | 具体表现 | 典型落地场景 |
|---|---|---|
| 视觉问答 | 针对图片提问并回答 | 电商导购、无障碍辅助、设备巡检 |
| 图文描述 | 生成图像的结构化文字说明 | 内容审核、素材打标、档案数字化 |
| 文档理解 | 读表格、公式、版面结构 | 票据识别、合同要素抽取、财报分析 |
| 视觉推理 | 多步逻辑推断、图表解读 | 教学辅导、数据分析辅助、科研图表解读 |
这四类能力对模型的要求是递进的。视觉问答只要对齐做得还行就能跑;文档理解对分辨率要求极高,因为小字和表格线一旦在视觉编码阶段被压没了,后面语言模型再强也救不回来;视觉推理则对语言模型的推理链能力依赖最重。搞清楚你的目标场景落在哪一档,直接决定了后面架构选型的取舍——这也是很多人一上来就堆参数、结果发现瓶颈根本不在参数量上的原因。
1.3 为什么"拼接"思路走不通
我刚接触这个方向时有过一个很朴素的想法:视觉编码器出特征,语言模型吃token,中间加个线性层映射一下维度,不就行了?实测下来问题一堆。视觉特征的空间结构被拉平成一维序列后,相邻patch的关系信息损失严重;视觉token数量动辄几百上千,直接塞进语言模型上下文,显存和计算量都吃不消;更麻烦的是,视觉特征和词嵌入处在两个完全不同的表征空间,简单线性映射后模型根本"看不懂",训练loss卡在高位不动。
这就引出了MLLM架构设计的核心命题:如何在保留视觉信息完整性的前提下,把视觉表征高效、可控地注入语言模型。后面所有架构上的花样——投影层设计、token压缩、交叉注意力——本质上都在回答这个问题。
2. 三大主流架构路线的取舍逻辑
业界把MLLM架构大致归成三类,这个分类不是学术上的严格划分,而是按"视觉信息在哪个环节进入语言模型"来分的。理解这个分类的意义在于:不同路线对应不同的训练成本、推理延迟和能力上限,选错了后面很难调头。
2.1 投影式架构:工程上最省心的主流选择
投影式(Projection-based)的做法是:视觉编码器先把图像编码成一组特征向量,经过一个投影模块(也叫连接器、adapter)映射到语言模型的嵌入空间,然后和文本token拼在一起,整体送进语言模型做自回归生成。整个流程里语言模型的结构完全不动,只多了一个投影模块要训。
这个路线最大的好处是复用成熟的语言模型。你不需要重新设计注意力机制,不需要改并行策略,现成的分布式训练框架直接能用。投影模块参数量通常很小(几百万到几千万级别),训练成本可控。代价是视觉token数量受上下文长度限制明显,高分辨率图像要么降采样丢细节,要么切patch导致序列变长。
投影模块本身也有讲究,常见几种做法:
- 单层线性映射:最轻,把视觉特征维度直接线性变换到词嵌入维度。快但表达能力有限,适合视觉编码器和语言模型维度接近、且训练数据量不大的情况。
- 两层MLP:中间加一层非线性激活,实践中比单层稳,是很多开源实现的选择。
- Perceiver Resampler类结构:用一组可学习的query向量去"抽取"视觉特征,把任意数量的视觉token压到固定数量(比如64或256个)。好处是序列长度可控,坏处是压缩会丢信息,小目标和小字容易糊掉。
我个人的经验是:如果你的场景以自然图像问答为主,两层MLP够用且好调;如果要做文档理解,尽量别用强压缩的resampler,宁可让序列长一点。
2.2 交叉注意力式:能力上限高但工程复杂度陡增
这类架构不在输入端拼接,而是在语言模型的每一层(或部分层)插入交叉注意力模块,让文本token在生成过程中主动"查询"视觉特征。视觉特征作为key/value常驻,文本作为query。
它的优势很明显:视觉信息不是一次性压缩成前缀,而是每层都能重新访问,细粒度信息保留更好,长文档、密集小目标的场景表现通常更优。但工程代价也实在:语言模型的每一层结构都被改了,所有现成的并行切分策略都要重新适配,训练时显存占用更高(视觉KV要一直留着),推理延迟也更大。我见过有团队在这个路线上投入几个月,最后因为训练稳定性问题退回投影式——不是说这条路不行,而是要看团队工程能力和时间预算。
2.3 专家混合式:用稀疏激活换容量
还有一类思路是把视觉和语言分别交给不同的专家子网络处理,通过门控机制做路由,本质上是MoE(Mixture of Experts)思想在多模态上的延伸。好处是在总参数量很大的情况下,单次前向只激活一部分,计算成本可控;坏处是路由策略难训,容易出现专家塌缩(所有输入都路由到同几个专家),而且多模态数据下路由的负载均衡比纯文本更难保证。
这条路目前更适合有充足算力和调优经验的团队。对大多数应用型项目来说,投影式架构加一个设计合理的连接器,性价比明显更高。
2.4 三条路线的横向对比
| 维度 | 投影式 | 交叉注意力式 | 专家混合式 |
|---|---|---|---|
| 语言模型改动 | 无 | 每层插入新模块 | 结构替换为MoE层 |
| 训练成本 | 低 | 中高 | 高 |
| 视觉细节保留 | 中(依赖连接器) | 高 | 中高 |
| 推理延迟 | 低 | 中高 | 中(稀疏激活) |
| 工程落地难度 | 低 | 高 | 高 |
| 适合场景 | 通用图文问答、描述 | 文档、密集目标、视频 | 超大规模、多任务并存 |
选型的判断标准其实很朴素:先看你的场景对视觉细节的敏感度,再看团队的工程预算。两个都不极端的话,投影式是默认答案。
3. 视觉编码器与连接器的设计细节
架构定了大方向,接下来是具体的模块设计。这部分是真正决定模型能力天花板的地方,也是最容易被"照抄开源配置"带偏的地方。
3.1 视觉编码器的选型与分辨率策略
视觉编码器负责把图像变成特征序列,主流选择是ViT系列(Vision Transformer)。选型时要关注三个参数:patch大小、输入分辨率、预训练方式。
patch大小决定了特征图的粒度。patch=14时,一张448×448的图会产生32×32=1024个patch;patch=16时同样尺寸是28×28=784个。patch越小,细粒度信息保留越好,但序列越长、计算越重。很多开源MLLM用336×336输入配patch=14,得到576个视觉token,这是个比较平衡的点。
分辨率策略是文档类场景的胜负手。固定低分辨率会把小字压糊,常见解法有:
- 动态分辨率:按图像原始长宽比切分成若干个子图,每个子图单独编码,再拼回序列。好处是不浪费、不拉伸,坏处是序列长度不固定,batch内需要padding,训练效率受影响。
- 切片(tiling):把大图切成固定大小的块分别编码,同时保留一张全局缩略图提供整体布局信息。文档理解场景里这套做法效果明显。
- 原生分辨率编码:直接用原始尺寸过ViT,需要位置编码支持插值,对显存要求高。
我实测过一个票据识别任务,固定336分辨率下小号金额数字识别率明显偏低,换成切片+全局图方案后,同一批测试集上的字段抽取准确率有可观提升。这个提升不是来自语言模型,纯粹是视觉端信息没丢。所以别急着调语言模型,先检查视觉端有没有把信息压没了。
提示:视觉编码器是否冻结是个常见纠结点。数据量小(几十万级以下)时建议冻结,只训连接器和语言模型侧;数据量大且有领域特殊性(医学、工业图像)时,解冻最后几层做轻量微调往往有收益,但学习率要显著低于其他部分,否则容易把预训练学到的通用特征破坏掉。
3.2 连接器设计:不是越复杂越好
连接器(connector/projector)的任务是把视觉特征空间对齐到语言模型的词嵌入空间。它的设计直接影响两件事:序列长度和信息保真度。
前面提过几种结构,这里展开讲实操细节。两层MLP的典型配置是:第一层把视觉维度(比如1024)升到语言模型隐藏维度(比如4096),配GELU激活;第二层维持维度不变做进一步变换。实践中第二层加不加LayerNorm影响不大,但第一层后面一定要有激活函数,我试过纯线性堆叠,收敛明显更慢。
对于需要压缩token数量的场景,Q-Former类结构(用可学习query做交叉注意力抽取)是常见方案,但要注意query数量这个超参:设太小(比如32)信息损失严重,设太大(比如512)压缩意义不大。经验值在64到256之间,具体看你的图像复杂度。
还有一个容易被忽略的点:连接器的初始化。如果随机初始化,训练初期视觉特征和文本特征完全不在一个尺度上,loss会先剧烈震荡一轮。我的做法是用一个小规模图文对数据集先单独训连接器(冻结两端),让它先学到一个合理的映射,再放开联合训练。这一步能省掉不少调参时间。
3.3 位置信息怎么传进去
视觉是二维的,语言模型处理的是一维序列,位置信息怎么编码直接影响空间理解能力。常见做法:
- 一维位置编码:把patch按行优先拉平,直接用序列位置。简单,但模型学不到"上下左右"的二维关系。
- 二维位置编码:分别编码行号和列号,再拼接或相加。空间关系保留更好。
- 不额外编码,靠语言模型自己学:依赖数据量,小数据下空间推理能力弱。
涉及空间定位的任务("图左上角的红色按钮是什么")对位置编码敏感。如果发现模型总是搞混方位,优先检查这里,而不是怀疑语言模型推理能力不行。
4. 训练流程的三阶段拆解
MLLM的训练不是一锅烩,而是分阶段推进的。每个阶段的数据类型、冻结策略、学习率都不同,混在一起训基本训不出东西。下面按我实践中的顺序讲。
4.1 第一阶段:对齐预热,只训连接器
这个阶段的目标很单一:让视觉特征能被语言模型"读懂"。做法是冻结视觉编码器和语言模型,只训练连接器。数据用大规模的图文对(描述类为主),损失就是标准的自回归语言建模损失——给定图像,让模型生成对应的描述文本。
数据规模通常在百万级到千万级图文对。质量比数量重要:我见过用千万级嘈杂网页图文对训出来的模型,描述能力泛化差、经常胡说;换成几百万条清洗过的、描述准确的数据,效果反而更好。清洗的重点是图文相关性——很多网页图片和周围文字其实关系不大,这种数据会把对齐带偏。
学习率设置上,这个阶段可以相对激进一些(比如1e-3到2e-4量级),因为只训一个小模块。训练轮数不用多,1到2个epoch通常就够,训太久连接器会过拟合到描述任务的固定句式上。
这个阶段结束时,一个合理的验收标准是:给模型一张图,它能生成语法通顺、内容大致相关的描述。如果还在输出无关内容或者重复token,说明对齐没成功,别急着进下一阶段。
4.2 第二阶段:指令微调,教会模型"听指令"
对齐完成后模型会"看图说话",但不会"按需回答"。你问它"这张图里有几只猫",它可能还是回一段泛泛的描述。第二阶段就是解决这个:用视觉指令数据做监督微调。
数据类型要覆盖你的目标能力:视觉问答、指代定位、多轮对话、拒答(图里没有的东西要会说没有)、格式遵循(要求输出JSON就得输出JSON)。这个阶段通常会解冻语言模型(或至少解冻大部分层),连接器继续训,视觉编码器一般仍然冻结。
这里有个实操要点:指令数据的多样性比单条数据的精致度更影响泛化。同一张图配十种不同问法,比十条精心打磨但问法雷同的数据更有价值。另外一定要混入纯文本指令数据(比例大概10%到20%),否则模型的语言能力会退化——这个现象在多模态微调里非常普遍,表现是模型回答变得简短生硬、丢失了原有的流畅表达能力。
学习率要比第一阶段小一到两个数量级(1e-5到5e-5),batch size尽量大,梯度累积凑。训练轮数2到3个epoch,跑多了容易过拟合到指令模板上。
4.3 第三阶段:偏好对齐,处理"答得对不对"之外的问题
前两阶段解决的是"会不会",第三阶段解决"好不好"。用人类偏好数据(对同一输入的两个回答做优劣标注)做优化,让模型输出更符合人类期望:更准确、更少幻觉、更安全的表述。
多模态场景下的幻觉问题特别突出——模型会描述图里根本不存在的物体。偏好对齐对缓解这个问题有帮助,但不是万能药。我的经验是,幻觉的根源往往在视觉端信息不足或对齐不充分,偏好对齐只能修正表面倾向。如果第一阶段对齐就没做好,指望第三阶段救回来不现实。
这个阶段成本较高(偏好数据标注贵、训练需要多模型联动),应用型项目可以视情况跳过,先把前两阶段做扎实。
4.4 三阶段的关键参数对照
| 阶段 | 冻结策略 | 学习率量级 | 数据规模 | 轮数 |
|---|---|---|---|---|
| 对齐预热 | 冻结视觉+语言,只训连接器 | 1e-4 ~ 1e-3 | 百万级图文对 | 1~2 |
| 指令微调 | 冻结视觉,训连接器+语言模型 | 1e-5 ~ 5e-5 | 十万~百万级指令 | 2~3 |
| 偏好对齐 | 全参或部分参数 | 1e-6 ~ 1e-5 | 万~十万级偏好对 | 1~2 |
注意:这张表是量级参考,不是可以直接抄的配置。实际取值要结合你的模型规模、batch size、优化器设置调整。模型越大,学习率通常要越小;用AdamW的话,beta2设0.95在多数多模态训练里比默认的0.999更稳。
5. 数据工程:决定成败但最不显眼的环节
模型结构开源配置一大把,真正拉开差距的是数据。这块我踩的坑最多,值得单独拎出来讲。
5.1 数据配比不是拍脑袋定的
多模态训练数据大致分几类:图文描述对、视觉问答、文档/图表理解、定位数据、纯文本。配比怎么定?我的方法是按目标能力的优先级倒推。
假设你的产品主要做电商商品图问答,那商品图相关的问答数据占比应该显著高于通用数据,同时保留一定比例的通用图文数据防止能力窄化。一个可参考的起步配比是:目标领域数据40%~50%,通用图文问答30%,文档理解10%,纯文本10%~20%。然后根据验证集表现动态调整——哪个能力弱就加哪类数据的权重。
这里有个反直觉的点:通用数据的比例不能太低。我试过把领域数据堆到80%,结果模型在开放场景下表现明显退化,连基本的常识问答都开始出错。多模态能力和语言能力是共享参数的,过度偏科会把底座带歪。
5.2 数据清洗里最该盯的几个指标
清洗不是简单去重。我实际会检查这几项:
- 图文相关性:用现成的图文匹配模型打分,过滤掉低分样本。注意阈值别设太狠,否则会把一些描述简洁但准确的样本误杀。
- 文本长度分布:过短(几个词)和过长(几千字)的都要抽查。过短的往往是噪声,过长的常常图文不符。
- 重复率:不仅是完全重复,还要看近似重复(同一张图配微调过的描述)。近似重复会让模型记住固定表达。
- 分辨率分布:极低分辨率的图(比如小于100×100)在小字场景下是纯噪声,但自然场景下可能还有用,要按场景决定去留。
5.3 指令数据的构造技巧
指令数据质量直接决定模型的可用性。几个实操心得:
第一,答案格式要和推理过程分离。如果你希望模型输出JSON,训练数据里就要有明确的格式示例,但不要把格式说明混在答案正文里,否则模型会学着把"以下是JSON"这种废话也输出出来。
第二,负样本要显式构造。图里没有的东西,要专门构造"图中没有X"这类问答对,否则模型倾向于对任何提问都给出肯定回答。这是幻觉的重要来源之一。
第三,多轮对话要控制轮数和话题切换。我见过数据里动辄十几轮的对话,其中话题反复跳转,训出来的模型容易在多轮中丢失上下文。实用做法是把轮数控制在3到5轮,且保证同一轮对话内话题连贯。
第四,指代和定位数据要精确。涉及"左边那个""上面第二个"这类表述时,标注必须严格对齐视觉位置,标注错了模型学到的空间概念就是歪的,后面很难纠正。
5.4 数据质量与模型规模的匹配关系
一个常被忽略的规律:模型越大,对数据质量越敏感,但对数据量的边际需求反而降低。小模型在嘈杂数据上还能靠容量限制"学个大概",大模型会把数据里的偏差和噪声完整学进去,表现为在某些奇怪的地方表现出莫名的自信。
所以如果你在训一个参数量较大的模型,数据清洗的投入应该成比例增加。反过来,如果数据实在有限且质量一般,别盲目上大模型,中等规模模型配合更严格的清洗往往更划算。
6. 训练稳定性:那些loss曲线不会告诉你的坑
这一节讲排错。多模态训练最折磨人的不是设计,是训着训着loss不降了、或者突然发散、或者训完发现模型有诡异行为。下面按排查链路讲。
6.1 loss卡住不降的三层排查法
遇到loss平台期,我的排查顺序是自下而上的:
第一层,检查数据管道。这是最常见的元凶。具体查:batch内的图文是否真的对应(数据加载的shuffle逻辑写错,导致图文错配,这种bug极隐蔽);tokenizer有没有把特殊字符处理坏;padding位置有没有参与loss计算(应该mask掉)。我遇到过一次loss完全不动的案例,最后发现是数据预处理时图像和文本的索引错位了一位,模型在学随机映射,当然学不动。
第二层,检查梯度流动。打印各模块的梯度范数。如果连接器的梯度一直是0或者极小,说明前面的视觉特征没有有效传过来,或者学习率设得太小。如果语言模型的梯度爆炸,检查学习率和梯度裁剪阈值。梯度裁剪在多模态训练里几乎是必开的,阈值1.0是个常用起点。
第三层,检查学习率与batch size的匹配。学习率相对batch size过大,训练会震荡;过小则进展缓慢。线性缩放规则(batch翻倍,学习率翻倍)在大模型上不完全适用,通常要打折扣。我的经验是大模型训练里,学习率宁可保守一点,配合warmup(前1%~3%的步数线性升温)更稳。
6.2 训练发散的典型诱因
发散的表现是loss突然飙升甚至出现NaN。常见原因和处理:
- 混合精度训练的数值溢出:bf16比fp16稳定得多,条件允许优先用bf16。如果必须用fp16,要开loss scaling,并注意某些归一化层(如LayerNorm)在fp16下容易出问题,可以强制这些层用fp32。
- 视觉特征尺度异常:某些图像(纯黑、纯白、极端对比度)经过视觉编码器后输出的特征范数异常大,投影后把语言模型的激活值带飞。解法是在连接器后加LayerNorm做尺度归一,或者在数据侧过滤掉这类极端图像。
- 注意力mask错误:视觉token和文本token拼接后,如果mask没正确设置(比如视觉部分被错误地当成padding mask掉),模型行为会完全乱掉。这个bug在自定义attention实现里很常见,建议先用小batch做一次前向,手动检查attention权重的形状和有效位置。
6.3 训练完才发现的问题及补救
有些问题训练过程中看不出来,验收测试才暴露:
问题一:模型过度依赖文本,忽略图像。表现是给一张图和一段与图无关的文字,模型跟着文字走。检测方法是做"反事实测试"——把图和文故意配错,看模型输出跟图还是跟文。原因是训练数据里文本信息量普遍大于视觉信息,模型走了捷径。补救办法是在数据里增加"必须看图才能答对"的样本比例。
问题二:位置和计数能力差。让模型数图里有几个物体,经常数错。这类能力对视觉token的粒度和位置编码很敏感,补救成本较高,通常要在数据侧加大量计数和定位样本重训。
问题三:特定分辨率下性能骤降。训练时用的都是方形图,遇到超宽或超高的图(比如长截图)表现崩掉。这是动态分辨率处理没做好,需要在训练数据里混入各种长宽比的图像。
提示:验收测试集一定要包含"分布外"样本——异常长宽比、低光照、密集小目标、图文不符的对抗样本。只用同分布测试集验收,上线后翻车的概率很高。
7. 显存与效率:工程侧绕不开的现实约束
理论和效果聊完,实际动手时第一个拦路虎往往是显存。多模态训练的显存开销比纯文本大得多,因为视觉token会显著拉长序列。
7.1 显存都花在哪了
粗略拆解一下,训练时的显存主要占在:模型参数、梯度、优化器状态(Adam类优化器每个参数要存两份动量,占参数显存的2倍)、激活值。前几项是固定的,激活值是变量,且和序列长度强相关。
视觉token是序列长度的主要贡献者。一张图576个token,一个batch 8张图就是4608个视觉token,加上文本token,序列轻松过万。激活值随序列长度增长,这是显存爆炸的主因。
7.2 几个立竿见影的优化手段
梯度检查点(gradient checkpointing):不保存中间激活,反向传播时重算。显存能省一大截(通常30%~50%),代价是训练速度下降20%~30%。这是性价比最高的手段,基本必开。
序列并行/张量并行:把长序列或大矩阵切到多卡上。视觉token导致的超长序列特别适合序列并行。但要注意,投影式架构里连接器通常不在语言模型的并行组内,切分时要单独处理,否则会出现通信瓶颈。
冻结策略:冻结视觉编码器不仅省它的梯度和优化器显存,还能省掉它反向传播的激活。这是为什么第一阶段只训连接器这么省资源。
混合精度:bf16训练配合fp32的主权重备份,是当前主流做法。
7.3 吞吐与效果的平衡点
一味追求省显存会拖慢训练。我一般的取舍是:训练阶段优先保证能跑起来(开梯度检查点、用bf16、冻结能冻结的),推理阶段再针对性优化(量化、KV cache优化、批处理)。
还有一个容易被忽略的效率问题:数据加载瓶颈。多模态数据要读图、解码、做增强,CPU侧压力大。如果GPU利用率上不去(比如长期低于70%),先查dataloader的worker数量和预处理流水线,别急着怀疑模型。图像解码用更快的库、把预处理做成并行流水线,往往能带来明显的吞吐提升。
8. 评估怎么做才不骗自己
最后讲评估。这块很多人做得敷衍,导致模型"测试集很好、上线就废"。
8.1 自动指标只能当参考
BLEU、CIDEr这类指标衡量的是和参考文本的字面重合度,对开放式问答意义有限。一个语义完全正确但表述不同的回答,在这些指标上可能得分很低。MLLM的评估更依赖任务导向的准确率:字段抽取对不对、计数准不准、判断是否成立。
我的做法是分两层:自动指标用于快速回归(看有没有明显退化),核心能力用构造好的测试集算准确率,关键场景(比如拒答、格式遵循)单独统计。
8.2 幻觉的量化评估
幻觉是多模态模型最需要盯的问题。评估方法我常用两种:
一是对抗性提问。拿一张只有猫的图,问"图中的狗是什么颜色",看模型是老老实实说没有狗,还是编一个颜色。统计编造率。
二是描述一致性核查。让模型生成详细描述,再用另一个模型(或人工)逐句核对描述中的物体是否真的存在。这个方法成本高但最贴近真实风险。
8.3 上线前的压力测试清单
- 长宽比极端图像(超宽、超高、极窄)
- 低质量图像(模糊、过曝、低光照)
- 密集小目标(大量文字、密集物体)
- 图文不符输入(考察是否盲目跟文本走)
- 超长多轮对话(考察上下文保持)
- 格式要求严格的输出(JSON、表格)
这套清单跑一遍,能暴露大部分线上会遇到的边界问题。我在项目里坚持每轮迭代都过一遍,省下了不少返工。
再多说一句我自己反复验证过的体会:多模态模型的效果提升,优先级排序大概是数据质量 > 视觉端分辨率与信息保留 > 对齐充分性 > 模型参数规模 > 架构花活。很多人一上来就在架构上折腾,实际上把数据清洗和分辨率策略做扎实,收益往往比换个连接器结构大得多。