ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

视觉语言模型学习路径:从原理到微调部署的完整指南

视觉语言模型学习路径:从原理到微调部署的完整指南 直接说结论视觉语言模型VLM不是大模型赛道里的“下一个热点”它已经是当下落地最凶、岗位需求最猛的方向之一。从电商图文审核、医疗影像报告、自动驾驶场景理解到机器人拿取物体前“看一眼再动手”背后全是VLM在撑场面。这篇文章我不打算给你列一堆论文标题和收藏夹吃灰的链接而是按我自己从纯NLP背景转到多模态方向时踩过的坑、走过的弯路整理出一条能真正跑通的学习路径。路径的核心不是“看多少资料”而是“在哪个阶段必须动手做什么事”。我会把每个阶段需要补的知识、要做的实验、能拿得出手的项目以及容易卡住的地方都讲清楚目标是让你顺着这条路径走完能独立完成一个VLM的微调、评估和部署。1. 先想清楚VLM到底在解决什么问题很多初学者一上来就抱着“多模态 视觉 文本拼接”的心态结果看模型结构图时一脸懵。这里先花点篇幅把VLM的本质说透。1.1 从单一模态到大统一模型的演进逻辑传统AI pipeline里图片理解和文本理解是两条平行线CV模型负责分类、检测、分割NLP模型负责翻译、问答、摘要。你如果要做一个“根据图片回答‘杯子里还剩多少水’”的功能得先接一个检测模型定位杯子再写规则算水位最后套一个文本模板输出答案。这套路子的天花板很明显规则写不尽所有场景错误会在模块间层层放大。VLM做的事情是把“看”和“说”放进同一个网络里联合优化。模型直接吃像素和文本输出文本或定位框等结构化结果。它学到的不是“杯子”这个类别标签而是“杯子、水、水位、半满”这些概念之间的关联。这种表达方式更接近人理解世界的方式也让下游任务的泛化性上了一个台阶。1.2 当前VLM能干什么六大核心能力盘点基于我最近几个月实测过的开源模型Qwen-VL系列、LLaVA系列、InternVL系列把VLM的能力归纳成六类视觉问答VQA给定一张图回答自然语言问题。比如“这张图里的人在做什么运动”图像描述Captioning生成对图片内容的完整描述常用于辅助盲人理解图像或生成社交媒体文案。视觉推理Visual Reasoning需要结合常识和逻辑推断比如“如果这个杯子倒了水会流向哪边”文档理解OCR 结构化抽取从截图、扫描件、表格中抽取关键信息这是目前企业落地最猛的方向。定位与 groundingReferring Expression Comprehension根据文本描述在图中框出目标物体比如“把穿红色裙子的那个女生框出来”。多图对比与视频理解进阶比较两张图的异同或理解短视频中的事件序列。你不需要一开始就把六种能力全部吃透但心里要有这张能力地图后面学哪个模块、做什么项目都能对号入座。1.3 为什么2025年是入门VLM的好时机如果两年前想入门VLM你需要自己从CLIP开始预训练光数据清洗就能劝退一大半人。但现在开源生态已经完全不一样了Qwen2-VL、InternVL2.5、MiniCPM-V这些模型权重直接开放下载具备中英文双语能力而且有大量适配HuggingFace Transformers的推理和微调代码。像LLaVA系列连训练代码都开源了你在消费级显卡上用LoRA也能跑通微调流程。再加上上海交大《动手学大模型》这类开源教程把大模型从原理到部署的路径都梳理好了学习成本已经降到历史最低。这个时间点不入门等下一波技术范式切换又要重新爬坡。2. 核心架构拆解看懂VLM的三件套我不打算从Transformer的attention公式开始讲那个你随便找篇博客都能看懂。这里只讲清楚VLM独有的结构设计逻辑以及每个组件为什么存在。2.1 视觉编码器怎么把图片变成Token视觉编码器的作用是把一张224x224或更高分辨率的图片切块并编码成一组向量。CLIP的ViT是当前最主流的视觉编码器它把图片切成16x16的patch每个patch过一个共享的Transformer层输出一个向量。一张224x224的图就变成14x14196个patch向量。这里有个关键点这些向量要跟文本Token对齐到同一个语义空间。CLIP在做预训练时用了对比学习同一张图/同一句话的表示靠近无关的推开所以CLIP的视觉特征天然跟文本语义有一定的对齐基础。这也是为什么VLM基本都用CLIP系列做视觉编码器而不是用纯分类模型ResNet——ResNet的特征没有一个“跟文本比对”的训练目标拉齐语义空间要费更多力气。实操中要注意不同VLM对图片分辨率的要求不一样。LLaVA默认用CLIP的224x224但Qwen2-VL支持更高分辨率输入且做了动态分辨率切分。高分辨率能保留更多细节尤其是OCR场景但计算量会显著增大。2.2 连接器最容易被忽略的“翻译官”视觉编码器输出的向量维度和文本Token的维度通常不一致比如CLIP是1024维LLM的hidden size是4096而且视觉特征的语义层级跟文本Token也不完全对齐。所以中间需要一个连接器做“翻译”。主流方案有两种。一种是MLP投影LLaVA的做法把视觉向量直接过两层MLP映射到LLM的输入空间。简单粗暴效果却不差。另一种是Q-FormerBLIP-2的做法用一组可学习的query向量通过cross-attention从视觉特征中“查询”出跟文本任务最相关的信息输出长度固定且比原始patch数少得多。Q-Former的优点是压缩率高、计算效率好缺点是结构复杂端到端微调时梯度流动路径更长。如果你是做微调而不是从头训练我的建议是优先保持原模型的连接器结构不变只在LLM部分做LoRA微调。改连接器结构往往需要重新对齐视觉和文本空间训练数据量和时间成本都会翻倍。2.3 大语言模型基座决定推理能力的上限VLM的推理能力、指令遵循能力、世界知识全部来自底座LLM。这部分就是纯Decoder-only的Transformer跟你熟悉的GPT结构没有本质区别。VLM训练时视觉Token和文本Token拼成一个序列喂给LLMLLM做标准的next-token prediction。这个设计带来一个深远影响VLM的视觉能力上限由视觉编码器决定但推理能力上限由LLM基座决定。如果你的任务需要复杂推理比如“根据图表判断下季度营收趋势”基座必须是强模型如果只是做简单的物体识别和描述小模型也够用。2.4 三种训练阶段各解决什么问题VLM的训练通常分三个阶段预训练Pre-training在大规模图文对上做对比学习或生成学习目标是拉齐视觉和文本的语义空间。阶段产出是“看得懂图、配得上文”的底座模型。普通学习者不需要自己训直接用CLIP或现成VLM的权重即可。指令微调Instruction Tuning用图片指令回答三元组数据做监督微调让模型学会“听懂人类指令并按指令回答”。这是普通人最需要掌握的阶段因为直接决定了模型在你的业务场景下的可用性。对齐Alignment用RLHF或DPO让模型的回答符合人类偏好。VLM领域对齐研究还在早期实际项目中用到的不多可以放到进阶阶段再学。提示刚入门不要碰预训练数据量要求太高一张A100跑一个月也不一定收敛。从指令微调入手成本低、见效快能最快建立对VLM训练流程的整体认知。3. 五阶段学习路径从零到能部署这部分是文章的核心。我把学习路径拆成五个阶段每个阶段给出具体目标、必做事项、推荐资源类型和自测标准。按这个顺序走理论上3到4个月每天2小时能达到“能独立微调并部署一个VLM”的水平。3.1 阶段一夯实基础2周这个阶段的目标是补齐三块基础Python编程、深度学习基础、Transformer原理。如果你已经有NLP或CV的背景可以直接跳到Transformer部分。必做事项用PyTorch手动实现一个完整的Transformer encoder层包括multi-head self-attention、FFN、layer norm、residual connection不要用torch.nn自带的TransformerEncoder。读懂CLIP论文《Learning Transferable Visual Models From Natural Language Supervision》的核心思想并用OpenAI官方开源代码跑一遍CLIP的推理demo用CLIP做zero-shot图片分类。掌握HuggingFace Transformers库的基本用法加载模型、tokenizer、处理输入、推理。自测标准能画出Transformer的结构图并解释每个组件的shape变化。能说清楚CLIP的图文对比学习loss是怎么算的。能用自己的话解释“为什么CLIP的视觉特征可以用于zero-shot分类”。这个阶段容易踩的坑是沉迷理论、不动手。Transformer原理看上十遍不如手写一遍CLIP的demo跑到跑通也就半小时千万别在这阶段拖太久。3.2 阶段二理解VLM的推理流程1周这个阶段的目的不是训练而是彻底搞清楚“一个训练好的VLM输入一张图和一句文本中间到底发生了什么”。必做事项跑通LLaVA或Qwen-VL的推理代码逐行阅读model.forward()的输入输出。手动打印出视觉Token和文本Token的shape、attention mask理解它们是怎么拼接的。用同一个模型对比不同prompt指令对输出的影响体会指令设计的重要性。自测标准能说清楚从“加载图片”到“输出文本”的全过程包括每个张量的维度变化。能回答“如果图片分辨率变了视觉Token数量怎么变”这类问题。能通过修改prompt让同一个模型输出不同风格的回答。这里推荐一个非常高效的学习方式把模型打印出来print(model)逐个模块对照源码看。视觉编码器长什么样、连接器有几层、LLM有多少层一目了然。看完你会对整个VLM的结构印象非常深。3.3 阶段三动手微调一个VLM3-4周这个阶段是整个学习路径的重心。目标是在自己的数据上微调一个VLM让模型学会一个特定的能力比如“识别电路板上的元器件”“看懂手写发票”。必做事项准备数据集。可以用公开数据集如COCO的子集先跑通流程再切换到自己收集的私有数据。数据集格式统一为JSON每个样本包含image图片路径、conversations多轮对话字段。用LLaVA官方训练代码或HuggingFace的transformerspeft库做LoRA微调。LoRA是低秩自适应只训练一小部分参数显存和训练时间都大幅降低。微调完成后用测试集评估模型效果对比微调前后的输出差异。关键参数参考基于8GB显存的消费级显卡基座模型Qwen2-VL-2B 或 LLaVA-1.5-7B7B需要量化或更多优化2B更稳妥LoRA rank8到16LoRA alpha16到32学习率1e-4到2e-4LoRA通常比全量微调学习率大一两个数量级Batch size1到4配合梯度累积到等效16训练轮数2到3轮数据量小的话1轮也可能够小技巧如果显存不够可以用bitsandbytes做4bit量化加载基座模型。4bit LoRA的组合是消费级显卡跑VLM微调的最优解效果跟16bit全量微调差距很小。自测标准微调后模型在自己测试集上的输出质量明显优于微调前。能解释LoRA的哪些超参影响训练速度、哪些影响效果。能独立处理训练过程中的显存溢出OOM、loss不下降等常见问题。3.4 阶段四评估与部署2周训练出模型不是终点能稳定跑在业务环境里才是价值所在。这个阶段学两件事评估和部署。评估方面学会用客观指标评估VLM效果COCO Caption任务用CIDEr、BLEUVQA任务用准确率OCR任务用字符准确率Accuracy和编辑距离。建立人工评估集比如100条典型case逐条看模型输出记录错误类型。这一步不可省自动指标无法覆盖“回答是否符合业务逻辑”。部署方面学会用vLLM或SGLang部署VLM服务。vLLM对VLM的支持已经非常成熟支持Qwen-VL、LLaVA等多种架构。理解--image-input-type pixel_values这类参数的含义以及为什么部署时要把图片预处理和模型推理分成两个服务便于横向扩展和缓存优化。用OpenAI API兼容格式包装自己的服务这样业务方可以无缝接入。自测标准能把微调后的模型用vLLM跑成一个HTTP服务并成功通过API发送图片和文本、拿到结构化响应。能给出自己模型在测试集上的量化指标并解释这些指标的局限。能估算模型推理的吞吐量QPS和延迟判断是否能满足业务要求。3.5 阶段五进阶与选题方向持续走到这一步你已经具备独立完成VLM微调和部署的能力。接下来可以根据职业方向选择深入的方向Agent方向学习如何让VLM作为多模态Agent的“眼睛”结合工具调用完成复杂任务比如“帮我把这封邮件里的行程加到日历”。视频理解方向把静态图扩展为视频输入学习时序建模方法如Qwen2-VL对视频的处理方式。模型压缩方向研究如何把VLM蒸馏到小模型如MiniCPM-V到手机端降低部署成本。数据工程方向研究如何清洗、构造高质量图文指令数据这是很多大厂的核心岗位方向。注意事项进阶方向选一个就够不要同时铺多个。多模态领域知识点极其分散贪多嚼不烂。选定方向后用三个月的业余时间做出一个能展示的项目比泛泛了解十个方向更能打动面试官。4. 常用开源模型选型对比与实测体验很多读者会问到底选哪个开源模型作为学习起点。我把自己实际用过的主流开源VLM做个横向对比方便你按需选择。4.1 四款主流模型参数与定位对比模型参数量视觉编码器底座LLM显存占用4bit推理特点LLaVA-1.57B/13BCLIP ViT-L/14Vicuna-7B/13B约6GB / 10GB结构简单开源生态最完善最适合学习原理Qwen2-VL2B/7B/72B自研ViTQwen2系列约2GB / 6GB / 40GB中英文能力强OCR效果好支持视频输入适合落地InternVL2.51B~78BInternViTQwen2/InternLM视尺寸而定综合能力强在多个榜单上性能领先社区活跃MiniCPM-V2B~8BCLIP/SigLIPMiniCPM约2GB面向端侧部署量化后可以在手机上跑4.2 不同场景下的选择建议纯学习/理解原理选LLaVA-1.5-7B。它的代码结构最清晰训练流程完全开源社区讨论多遇到问题搜一下就有答案。缺点是模型本身能力相对弱毕竟是2023年的架构但在学习阶段够用。中文业务落地选Qwen2-VL-7B。通义实验室的模型在中文图文理解上优势非常明显OCR、文档抽取能力尤其出众。如果你的业务数据是中文为主发票、合同、工单截图Qwen2-VL几乎是当前最优选择。极致性能选InternVL2.5系列。它在多个公开评测集MMBench、MathVista等上的成绩都很亮眼。如果你的机器配置足够至少单张V100/A100可以直接上InternVL2.5-26B。端侧部署选MiniCPM-V-4B或更新的MiniCPM-V 2.6/3.0。它专为端侧优化量化后内存占用不到2GB可以在手机或边缘设备上做离线推理。4.3 我的实测体验和踩坑记录LLaVA-1.5系列CLIP ViT对高分辨率图片支持不太好处理发票截图时文字会糊。不建议用它做OCR类任务做基础学习没问题。Qwen2-VLOCR和图表理解能力明显强于同尺寸的LLaVA。但它的连接器结构比LLaVA复杂有特殊的分辨率处理逻辑如果要做连接器级别的改造代码理解成本高一些。用LoRA微调LLM部分完全没毛病。InternVL2.5能力很强但模型序列长度计算逻辑跟Qwen不太一样部署时显存估算要额外注意。另外它的tokenizer和transformers版本的兼容性有点“挑食”建议直接用官方要求的transformers版本避免不必要的报错。提示不要盲目追新。论文新增一个模块到开源代码可用、社区踩坑贴累积起来中间有3到6个月的时间差。对学习者和工程落地来说选一个生态成熟、资料丰富的模型远比选一个“最新但没人用过”的模型划算。5. 实战项目用Qwen2-VL微调一个“发票信息抽取”模型理论说了这么多列一个我从数据准备到部署的完整实战项目方便你照着做一遍。选发票信息抽取是因为它业务价值明确、数据集容易造、评估指标清晰。5.1 项目目标与数据准备目标输入一张发票截图模型输出JSON格式的关键字段包括发票号、开票日期、购买方名称、金额不含税、税额、价税合计。数据准备收集500到1000张发票图片。可以用公开的发票OCR数据集也可以自己拍摄或截图。用OCR工具如PaddleOCR先跑一遍得到每张票的文本框和内容。这一步是偷懒做法能省去大量手工标注时间。把OCR结果组织成指令微调格式。每条样本包含{ image: invoice_001.jpg, conversations: [ { from: human, value: 请从这张发票中提取以下字段发票号、开票日期、购买方名称、不含税金额、税额、价税合计输出JSON格式。 }, { from: gpt, value: {\invoice_number\: \...\, \invoice_date\: \...\, \buyer_name\: \...\, \amount_excluding_tax\: \...\, \tax_amount\: \...\, \total_amount\: \...\} } ] }注意这里用“OCR结果辅助构造GT”的做法前提是你自己对OCR结果做人工抽检和修正。纯粹拿OCR结果当GT模型学到的是“OCR错误”而不是“发票字段”效果会打折扣。5.2 微调脚本核心代码我用HuggingFacetransformerspeft库来微调Qwen2-VL-2B。核心代码长这样import torch from transformers import Qwen2VLForConditionalGeneration, Qwen2VLProcessor, TrainingArguments from peft import LoraConfig, get_peft_model from datasets import load_dataset from trl import SFTTrainer # 加载模型和处理器 model Qwen2VLForConditionalGeneration.from_pretrained( Qwen/Qwen2-VL-2B-Instruct, torch_dtypetorch.bfloat16, device_mapauto, attn_implementationflash_attention_2, # 需要环境已安装flash-attn ) processor Qwen2VLProcessor.from_pretrained(Qwen/Qwen2-VL-2B-Instruct) # 配置LoRA lora_config LoraConfig( r16, lora_alpha32, target_modules[q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj], lora_dropout0.05, biasnone, task_typeCAUSAL_LM, ) model get_peft_model(model, lora_config) # 定义数据整理函数 def format_instruction(example): messages [] for conv in example[conversations]: if conv[from] human: messages.append({ role: user, content: [ {type: image}, {type: text, text: conv[value]} ] }) else: messages.append({ role: assistant, content: [{type: text, text: conv[value]}] }) text processor.apply_chat_template(messages, tokenizeFalse, add_generation_promptFalse) image example[image] # 需要预先加载为PIL Image或路径 return {text: text, images: image} # 训练参数 training_args TrainingArguments( output_dir./qwen2vl-invoice-lora, per_device_train_batch_size2, gradient_accumulation_steps8, learning_rate2e-4, num_train_epochs3, logging_steps10, save_steps200, bf16True, remove_unused_columnsFalse, gradient_checkpointingTrue, ) trainer SFTTrainer( modelmodel, argstraining_args, train_datasetdataset, formatting_funcformat_instruction, data_collatorDataCollatorForSeq2Seq(processor, paddingTrue), ) trainer.train()这段代码有几个关键细节target_modules里同时包含了attention层和MLP层。很多LoRA教程只改attention但实测对VLM来说MLP层也加LoRA效果更好因为视觉Token和文本Token的语义融合大量发生在FFN里。gradient_checkpointingTrue对显存友好很多。开这个选项后训练速度会慢20%左右但显存能省将近一半对于8GB显存用户几乎是必选项。attn_implementationflash_attention_2能显著加速训练和推理但需要额外安装flash-attn库。如果没有安装删掉这个参数改用默认的sdpa也可以。5.3 训练中容易踩的坑坑一图片加载失败或格式不统一。一定在数据预处理阶段统一图片格式统一为RGB、统一最大边长否则训练到一半突然崩一个样本整个epoch就白跑了。坑二loss不下降。如果前几百步loss纹丝不动先检查数据格式。最常见的问题是prompt里没有加图片占位符imagetoken模型根本没看到图片。再检查是不是学习率太小LoRA建议从1e-4起步。坑三输出JSON格式不合法。模型可能输出“这是发票信息{...}”这类带额外文本的脏数据。解决办法是在微调数据里多放一些“只输出JSON”的正例同时在推理阶段可以用正则从输出中提取JSON片段。坑四模型复读或答非所问。多半是数据里负样本不够或者训练轮数太多导致过拟合。减少训练轮数或者在数据里混入一些“无法回答”的样本都能缓解。5.4 部署为HTTP服务微调完模型后用vLLM部署是最省心的方式vllm serve Qwen/Qwen2-VL-2B-Instruct \ --dtype bfloat16 \ --max-model-len 8192 \ --limit-mm-per-prompt image1 \ --lora-modules invoice/path/to/your/lora/adapter然后通过OpenAI兼容API调用from openai import OpenAI client OpenAI(base_urlhttp://localhost:8000/v1, api_keyEMPTY) response client.chat.completions.create( modelinvoice, # 对应 --lora-modules 里的名字 messages[ { role: user, content: [ {type: image_url, image_url: {url: https://example.com/invoice.jpg}}, {type: text, text: 请提取发票字段输出JSON}, ], } ], ) print(response.choices[0].message.content)这里有个关键点vLLM加载LoRA adapter时需要把adapter的target modules和原模型的module名称对应起来。如果你的LoRA是用peft训练的adapter目录下的adapter_config.json里已经有这些信息vLLM会自动读取不用额外配置。实际上我在项目里遇到过一次vLLM版本和peft版本不兼容导致adapter加载失败的情况换到官方推荐的vLLM版本后问题解决。6. 效果评估与优化策略模型训练完不等于大功告成。要在实际业务中用起来还得过评估这一关。6.1 建立三层评估体系只用一个整体准确率评估VLM是大忌因为不同类型的错误对业务的影响完全不同。我习惯把评估拆成三层第一层字段级准确率。对发票抽取来说每个字段分别计算准确率。比如发票号要求100%准确错一个字整张票就废了而购买方名称允许别名之类的模糊匹配。第二层结构化合规率。模型输出的JSON能否被直接解析字段是否齐全类型是否正确这一步用脚本自动检查即可。第三层主观质量人工抽检。随机抽100条case人工标注“完全正确”“部分正确”“完全错误”。重点看错误集中在哪些场景比如红色发票电子发票模糊图片定位模型的系统性缺陷。6.2 四步优化法评估发现问题后按以下顺序优化不要一上来就调模型参数先优化prompt。同样一个模型把“请提取字段”改成“请从这张发票中提取字段并以JSON格式返回不要输出其他内容”准确率可能提升好几个点。Prompt调优成本最低先试。再优化数据。把错误case补充到训练集里尤其是模型的“高频错误模式”比如某种特殊版式的发票。每类错误准备20个样本就够了不需要盲目扩充数据量。然后调模型。如果数据也补了还不行再考虑调LoRA超参增大rank、调整学习率、增加训练轮数或换更大的基座模型。最后考虑系统架构。单个VLM搞不定时接一个前置的OCR模型或后置的规则校验模块兜底。比如用VLM提取完字段后加一个字段格式校验器发票号要满足特定正则能拦下一部分模型错误。6.3 实测效果参考在我自己的发票抽取项目上用Qwen2-VL-2B基座 LoRA微调训练数据约800张票测试集200张票。字段级准确率从微调前的约75%零样本提升到微调后的约94%。其中发票号字段的准确率从68%提升到98%价税合计字段从70%提升到95%。剩余6%的错误主要集中在三种情况图片拍摄倾斜严重、发票盖章遮挡关键字段、电票二维码干扰了OCR排版。针对这三种case补了数据后准确率又提了2个百分点到96%。再往上提就需要换7B或更大尺寸的模型了。这个数据仅供参考不同数据质量和场景的收益不一样。但至少说明一个核心结论小模型 好数据微调在垂直场景里可以打平甚至超过通用大模型的零样本效果而成本只有后者的零头。这也是推荐入门路径时我一直强调“垂直数据”比“大模型尺寸”更重要的原因。7. 常见问题与排查技巧实录最后把新手最常见的几个问题集中回答一遍。这些问题我在带人做项目时几乎每次都会遇到提前知道能省很多时间。7.1 训练相关问题速查问题现象可能原因排查与解决训练loss一直不下降数据格式错误模型没看到图片打印一条训练样本确认imagetoken和图片tensor是否正确传入训练loss下降但效果差过拟合数据格式泛化不足减少训练轮数增加prompt多样性加正则化显存溢出OOMbatch size太大或序列太长减小batch size开gradient checkpointing降图片分辨率训练速度极慢没有用flash attention或bf16安装flash-attn确认dtype是bf16而不是fp32模型回答全是复读机数据里负样本不足或训练轮数过多加入“无法回答”的样本降低训练轮数7.2 推理和部署相关问题速查问题现象可能原因排查与解决部署后图片传进去报错图片url无法访问或base64格式不对先用curl测试图片url是否可访问确认图片格式是JPEG/PNG输出乱码或无关文本temperature设置太高或prompt太短降低temperature到0.1以下把prompt写完整同一次调用结果不稳定采样参数随机性设置seedtemperature调为0关闭random samplingLoRA加载报错peft和vllm版本不兼容按官方文档匹配版本或用transformers加载测试7.3 三个独家避坑技巧第一图片预处理要在数据管线里统一不要在推理时才处理。训练时如果对图片做了resize、归一化部署时也要做完全一样的操作。我在项目里就栽过一次训练用了224x224部署时忘了resize模型效果直接掉了一半。第二多模态数据集的清洗比模型更重要。500条高质量数据的效果往往胜过5000条垃圾数据。判断数据质量有一个简单标准拿基座模型微调前跑一遍你的数据如果基座模型能答对的样本占比太少比如少于10%说明你的数据太难或太偏如果基座模型全都能答对说明数据太简单学不到东西。理想区间是基座模型能答对20%到40%这样微调有提升空间又不会学不动。第三vLLM部署VLM时注意图片数量限制。--limit-mm-per-prompt image1表示每个请求最多一张图。如果要支持多图输入要改成image4或更高同时要确认模型本身支持多图。这个参数不设对多图请求会被静默截断输出结果莫名其妙。从实际踩坑经验来说VLM学习路径里最大的障碍不是技术难度而是信息噪声。网上的资料要么停留在“调API”层面要么直接甩出一堆论文术语中间真正动手能复现的环节反而少有系统讲解。这篇文章把路径、选型、代码、坑位都整理出来了剩下的就靠你自己跑一遍了。按阶段规划走3个月后再回来看你大概率会发现自己已经能做一些“生产环境可用”的东西了。
返回列表