【模型手术室】第九篇:多模态微调 —— 让模型学会“看图说话”:从像素到行业认知的飞跃
专栏进度:09 / 10 (微调实战专题)
如果你使用的是 LLaVA、Qwen2-VL 或 DeepSeek-VL,它们原生具备识别猫狗和常识图片的能力。但如果你给它一张半导体无尘车间的传感器拓扑图,它大概率会胡言乱语。多模态微调的目标,就是建立“视觉像素”与“行业黑话”之间的强关联。
一、 核心架构:视觉投影层(Vision Projector)
多模态模型并不是直接把图片丢给大模型,它通常由三部分组成:
Vision Tower (视觉塔):通常是 CLIP 或 SigLIP,把图片切成一个个“补丁”(Patches)并转化为向量。
Projector (投影层):一个小型的连接器,负责把视觉向量“翻译”成大模型能听懂的语言。
LLM (大脑):负责最终的逻辑推理。
微调重点:在数据量较小时,我们通常只微调 Projector 和 LLM 的 LoRA 插件,而不动昂贵的视觉塔。
二、 数据准备:构建“图文对”数据集
多模态微调的数据集不再是简单的 JSONL,而是 图片 + 描述。
- 数据格式示例:
JSON
[
{
“id”: “circuit_001”,
“image”: “images/pcb_board_001.jpg”,
“conversations”: [
{“from”: “human”, “value”: “\n请找出这张 PCB 板上的电容 C12 是否存在虚焊风险?”},
{“from”: “gpt”, “value”: “经过视觉分析,位于 CPU 供电模块左侧的 C12 电容焊点光泽度异常,边缘存在拉尖现象,判定为虚焊风险,建议返修。”}
]
}
]
2. 图像预处理的“红线”:
分辨率:行业图纸通常极其精细。如果模型只支持 336×336 分辨率,微细裂纹会直接消失。对策:使用支持 AnyRes(多尺度) 的模型(如 Qwen2-VL)。
OCR 增强:如果图中包含文字,建议在训练数据中显式标注出坐标(Bounding Boxes),强制模型关注文字区域。
三、 Python 实战:使用 Swift 或 LLaMA-Factory 微调 VL 模型
多模态微调对显存的要求更高,建议至少开启 4-bit 量化微调。
Bash
使用 LLaMA-Factory 微调 Qwen2-VL-7B
llamafactory-cli train
–stage sft
–model_name_or_path Qwen/Qwen2-VL-7B-Instruct
–dataset my_pcb_data
–template qwen2_vl
–finetuning_type lora
–visual_inputs \ # 开启视觉输入支持
–output_dir ./saves/pcb_expert_vl
–per_device_train_batch_size 1
–gradient_accumulation_steps 8
–learning_rate 1e-4
–fp16
四、 避坑指南:视觉幻觉(Visual Hallucination
)
多模态模型最容易出现“睁眼说瞎话”:图中明明没有某个零件,它却说有。
原因:LLM 的“语言先验”太强,它根据常识猜出了答案,而不是看图。
对策:在数据集中加入反向样本。例如:故意问图中没有的东西,要求模型回答“图中未发现该元件”。
五、 进阶:从“描述”到“定位”(Grounding)
如果你希望模型不仅能说话,还能在图上把问题点圈出来,你需要进行 Grounding(视觉定位) 微调。
技巧:在 Output 中使用特定格式 [xmin, ymin, xmax, ymax]。经过微调后,你的 AI 助手就能在复杂的工程图上为你精准导航。
