知识蒸馏在 sVLM 中的作用及实现方式
Small Vision-Language Model / 小型视觉语言模型,通常由 视觉编码器 + 多模态 projector / adapter + 小型 LLM 组成。LLaVA 类模型证明了“视觉编码器接入 LLM + 视觉指令数据”可以形成通用多模态助手;MobileVLM 则进一步面向移动端,用 CLIP 风格视觉模型、轻量 projector 和 1.4B / 2.7B 级语言模型实现端侧 VLM。([arXiv][1])
1. 知识蒸馏在 sVLM 中的核心作用
1.1 把大 VLM 的多模态能力压缩到小模型
大 VLM 具备较强的图像理解、视觉问答、OCR、关系推理、空间理解和复杂指令跟随能力,但参数量和推理成本高,不适合 Jetson、移动端、RK3588、低功耗边缘盒子等场景。知识蒸馏的核心目标是:
用大模型 Teacher 的输出、特征、推理偏好和跨模态表示,训练小模型 Student,使 sVLM 在更小参数量、更低显存和更低延迟下保留尽可能多的多模态能力。
MobileVLM 的目标就是面向移动设备部署,并报告了在 Snapdragon 888 CPU 和 Jetson Orin GPU 上的推理速度结果;MobileVLM V2 进一步说明,通过结构设计、训练策略和高质量数据,小模型可以达到或接近更大 VLM 的效果。([arXiv][2])
1.2 提升视觉-语言对齐能力
sVLM 的短板通常不是“会不会生成文字”,而是:
- 图像 token 是否能正确映射到语言空间;
- 小 LLM 是否真正理解视觉特征;
- projector 是否把视觉语义压缩得足够好;
- 小模型是否容易忽略局部目标、空间关系和细粒度属性。
LLaVA-KD 这类方法专门指出,单纯做文本响应蒸馏不够,视觉模态同样关键;它提出 Multimodal Distillation, MDist,同时蒸馏视觉和语言模态表示,并用 Relation Distillation, RDist 迁移视觉 token 之间的空间/语义关系。([CVF Open Access][3])
1.3 降低幻觉,提高“看图说话”的可信度
sVLM 容易出现:
- 图像里没有的物体却回答存在;
- SKU / 文字 / 数量识别错误;
- 空间关系判断错误;
- 多目标场景下漏看、错看;
- 对细粒度包装、Logo、颜色、位置判断不稳定。
知识蒸馏可以让 Student 学习 Teacher 对“正确答案 / 错误答案”的偏好。LLaVA-MoD 采用 progressive knowledge transfer:先做 mimic distillation,用 KL 散度让学生模仿教师输出分布;再做 preference distillation / DPO,让小模型学会区分优劣答案,并报告其在幻觉相关 benchmark 上有优势。([arXiv][4])
2. sVLM 中常见的蒸馏对象
sVLM 的知识蒸馏不只是“拿大模型回答做标签”,而是可以蒸馏多个层次。
| 蒸馏对象 | 作用 | 适合场景 |
|---|---|---|
| 输出文本蒸馏 | 学 Teacher 的最终回答 | VQA、图像描述、OCR 问答、指令跟随 |
| Logits 蒸馏 | 学 Teacher 对每个 token 的概率分布 | 小 LLM 训练、减少错误回答 |
| 视觉特征蒸馏 | 学 Teacher 的 visual token / patch 表示 | 细粒度目标识别、OCR、检测辅助 |
| Projector 蒸馏 | 学视觉特征到语言空间的映射 | sVLM 预训练阶段,非常关键 |
| Attention / Relation 蒸馏 | 学视觉 token 之间的关系矩阵 | 空间关系、多目标、遮挡、货架场景 |
| Chain-of-thought / rationale 蒸馏 | 学 Teacher 的推理过程摘要 | 复杂 VQA、工业质检、库存判断 |
| Preference 蒸馏 | 学会偏好正确答案,拒绝幻觉答案 | 减少 hallucination,提高鲁棒性 |
| 数据蒸馏 | 用 Teacher 自动生成图文指令数据 | 低成本构造训练集 |
3. 推荐的 sVLM 蒸馏训练流程
一个比较实用的工程流程可以分成三阶段,类似 LLaVA-KD 提出的 DPT → SFT → DFT 框架:DPT 用蒸馏预训练强化视觉-语言对齐,SFT 用监督微调获得基础指令能力,DFT 再用蒸馏微调进一步迁移大模型知识。([CVF Open Access][3])
大 VLM Teacher
│
├── 生成图像描述 / VQA / OCR / 推理答案
├── 生成 hard label / soft logits / preference pair
├── 提取 visual token / hidden state / attention relation
│
▼
训练数据构建
│
├── image-caption pair
├── image-question-answer
├── positive / negative answer pair
├── visual token relation matrix
│
▼
sVLM Student 训练
│
├── Stage 1: Distilled Pre-Training, 对齐视觉-语言空间
├── Stage 2: Supervised Fine-Tuning, 学会基础指令跟随
├── Stage 3: Distilled Fine-Tuning, 强化 Teacher 能力迁移
│
▼
部署优化
├── LoRA / QLoRA
├── INT8 / INT4 量化
├── projector 合并
├── KV cache
└── ONNX / TensorRT / llama.cpp / MNN / QNN
4. 关键损失函数设计
4.1 文本响应蒸馏
最基础方式是让 Student 学 Teacher 的回答:
L_ce = - Σ log P_student(y_teacher | image, question)
适合低成本数据蒸馏:Teacher 根据图像生成 caption、VQA、OCR 问答、检测解释,然后 Student 用这些问答做 SFT。
4.2 Logits 蒸馏
如果能拿到 Teacher 的 logits,可以使用 KL 散度:
L_kd = T² * KL(
softmax(z_teacher / T) || softmax(z_student / T)
)
其中:
T是 temperature;z_teacher是教师模型 logits;z_student是学生模型 logits。
最终语言损失可以写成:
L_text = α * L_ce + β * L_kd
这种方式比只学最终答案更细,因为 Student 不仅知道正确 token,也知道 Teacher 对其他 token 的相对偏好。LLaVA-MoD 的 mimic distillation 就使用了 KL 散度来让学生模拟教师的输出分布。([arXiv][4])
4.3 视觉特征蒸馏
对于 sVLM,视觉特征蒸馏非常关键。可以让 Student 的 visual token 接近 Teacher 的 visual token:
L_visual = MSE(
Proj_s(V_s),
Proj_t(V_t)
)
或者使用 cosine loss:
L_visual = 1 - cosine(
Proj_s(V_s),
Proj_t(V_t)
)
适合以下场景:
- 商品 SKU 识别;
- OCR / 文本区域理解;
- 货架 / 自动售货柜图像理解;
- 遮挡、多目标、局部细粒度识别;
- 小模型视觉编码器能力不足时。
4.4 Relation 蒸馏
Relation 蒸馏不是直接对齐单个 token,而是对齐视觉 token 之间的关系:
R_t = cosine_matrix(V_t)
R_s = cosine_matrix(V_s)
L_relation = MSE(R_s, R_t)
它的意义是让 Student 学到 Teacher 对空间布局、目标关系、局部依赖的理解。LLaVA-KD 明确提出 RDist,用于迁移 Teacher 捕获视觉 token 关系的能力,尤其适合复杂视觉场景。([CVF Open Access][3])
对你的自动售货柜 / 商品识别场景,这一项很有价值,因为货柜图像里常见:
- 同类商品重复排列;
- 局部遮挡;
- 包装相似;
- 上下左右货架关系明显;
- 单个商品判断依赖周边结构。
4.5 Preference / DPO 蒸馏
构造正负样本:
{
"image": "cabinet_001.jpg",
"question": "图中第三层左侧有几瓶可乐?",
"chosen": "第三层左侧有 4 瓶可乐。",
"rejected": "第三层左侧有 6 瓶可乐。"
}
然后用 DPO / preference loss 训练 Student 学会偏好正确答案。LLaVA-MoD 在 mimic distillation 后加入 preference distillation,并将大模型作为 reference model,以提升学生模型辨别优劣回答的能力。([arXiv][4])
适合减少:
- 数量幻觉;
- 目标不存在却回答存在;
- OCR 乱读;
- 细粒度 SKU 混淆;
- 复杂视觉推理错误。
5. 工程实现方式
5.1 数据蒸馏:最容易落地
这是最推荐优先做的方式,因为不需要改模型内部结构,也不需要 Teacher logits。
输入:图像 + 任务模板
Teacher:生成高质量问答 / caption / OCR / 检测解释
过滤:规则校验 + 人工抽检 + 小模型一致性检查
Student:用生成数据做 SFT
示例数据格式:
{
"image": "images/cabinet_0001.jpg",
"conversations": [
{
"from": "human",
"value": "<image>\n请识别货柜中第二层有哪些商品,并统计数量。"
},
{
"from": "gpt",
"value": "第二层包含可乐 3 瓶、矿泉水 2 瓶、绿茶 4 瓶。"
}
]
}
优点:
- 实现简单;
- 可直接复用 LLaVA / TinyLLaVA / MobileVLM 训练格式;
- 适合领域数据快速扩充;
- 对边缘端 sVLM 很实用。
缺点:
- Teacher 错误会被 Student 学进去;
- 需要数据清洗;
- 对空间关系、视觉 token 细节迁移有限。
5.2 Logits 蒸馏:效果好,但成本高
训练时同时跑 Teacher 和 Student,或提前离线保存 Teacher logits。
with torch.no_grad():
teacher_outputs = teacher(
image=image,
input_ids=input_ids,
output_logits=True
)
student_outputs = student(
image=image,
input_ids=input_ids,
output_logits=True
)
loss_ce = cross_entropy(student_outputs.logits, labels)
loss_kd = kl_divergence(
softmax(teacher_outputs.logits / T),
softmax(student_outputs.logits / T)
)
loss = alpha * loss_ce + beta * loss_kd
缺点是 vocab logits 很大,保存成本高。工程上可以只保存:
- top-k logits;
- answer token logits;
- hidden states;
- preference pair;
- Teacher 生成的 rationale。
5.3 Projector 蒸馏:sVLM 最值得做
很多 sVLM 的瓶颈在 projector。视觉编码器输出的 patch token 必须映射到小 LLM 的 embedding 空间,如果 projector 学不好,小模型就会“看不懂图”。
推荐训练目标:
输入图像 I
Teacher: V_t = projector_t(vision_encoder_t(I))
Student: V_s = projector_s(vision_encoder_s(I))
L_projector = MSE(V_s, stop_grad(V_t))
可以先冻结小 LLM,只训练:
- vision projector;
- visual adapter;
- LoRA adapter。
这样显存成本低,训练稳定。
5.4 Visual token + Relation 蒸馏:适合工业视觉
对于商品识别、货架结构、OCR、检测辅助,推荐加入:
L_total =
λ1 * L_ce
+ λ2 * L_kd
+ λ3 * L_visual
+ λ4 * L_relation
其中:
L_visual : 对齐 Teacher / Student 的视觉 token
L_relation : 对齐视觉 token 之间的相似度矩阵
L_ce : 学标准答案
L_kd : 学 Teacher token 分布
这种方式比单纯 SFT 更适合多目标场景。LLaVA-KD 的思路就是同时迁移视觉和语言模态表示,并显式迁移视觉 token 关系。([CVF Open Access][3])
6. 面向边缘端 sVLM 的推荐方案
Jetson Orin / RK3588 / Qualcomm QNN / MNN / llama.cpp 端侧部署,建议不要一上来做完整 logits 蒸馏,而是分层推进。
第一阶段:Teacher 数据蒸馏
使用大 VLM 生成领域数据:
图像 → Teacher → caption / VQA / OCR / 数量统计 / 结构描述
比如自动售货柜场景:
问题模板:
1. 图中有哪些商品?
2. 每一层分别有哪些商品?
3. 某个 SKU 是否存在?
4. 某个区域有几个商品?
5. 商品是否被遮挡?
6. 是否需要补货?
7. 检测框中商品是什么?
8. mask 区域对应什么 SKU?
第二阶段:Projector + LoRA 蒸馏
冻结大部分模型,只训练:
vision projector
+ LoRA on small LLM
+ optional visual adapter
目标是让小模型学会“看懂领域图像”。
第三阶段:Relation 蒸馏
对货架、柜体、商品排列这种空间结构强的场景,加入 relation loss:
视觉 token 相似度矩阵
局部 patch 关系
货架层级关系
目标-目标关系
目标-货架关系
这比只训练 caption 更能提升复杂场景理解。
第四阶段:部署压缩
训练完成后再做:
INT8 / INT4 量化
KV cache
图像分辨率裁剪
ROI crop 输入
视觉 encoder 替换为轻量模型
projector 合并
ONNX / TensorRT / MNN / QNN 推理优化
MobileVLM / MobileVLM V2 这类工作也说明,小型 VLM 的性能不是只靠缩小 LLM,而是依赖移动端导向的结构、训练策略和高质量数据。([arXiv][2])
7. 推荐落地架构
┌────────────────────────────┐
│ Large VLM Teacher │
│ GPT-4V / Qwen-VL / LLaVA等 │
└──────────────┬─────────────┘
│
┌─────────────────────┼─────────────────────┐
│ │ │
▼ ▼ ▼
生成图文问答数据 提取视觉/语言特征 生成偏好样本
caption / VQA visual token chosen / rejected
OCR / count hidden state hallucination pair
│ │ │
└─────────────────────┼─────────────────────┘
▼
┌─────────────────────────┐
│ sVLM Student │
│ small vision encoder │
│ projector / adapter │
│ small LLM │
└─────────────┬───────────┘
│
┌───────────────┼────────────────┐
▼ ▼ ▼
CE/SFT Loss KD Loss Relation Loss
学标准答案 学Teacher分布 学视觉关系
└───────────────┼────────────────┘
▼
端侧部署 sVLM
Jetson / RK3588 / Snapdragon / QNN
9. 小结
知识蒸馏在 sVLM 中的本质作用是:
把大 VLM 的视觉理解、语言推理、跨模态对齐、空间关系建模和答案偏好,迁移到小模型中,使其可以在边缘设备上以较低成本完成多模态理解。
工程上推荐优先级:
1. 数据蒸馏:最简单,最容易落地
2. Projector 蒸馏:提升视觉-语言对齐
3. Visual token 蒸馏:提升图像细节理解
4. Relation 蒸馏:提升多目标/空间关系理解
5. Preference / DPO 蒸馏:减少幻觉和错误答案
6. Logits 蒸馏:效果好,但存储和训练成本较高
对于边缘端 sVLM,最佳实践不是单纯压小模型,而是:
轻量结构 + 高质量蒸馏数据 + projector 对齐 + LoRA 微调 + 量化部署
参考链接:
[1]: https://arxiv.org/abs/2304.08485 “[2304.08485] Visual Instruction Tuning”
[2]: https://arxiv.org/abs/2312.16886 “[2312.16886] MobileVLM : A Fast, Strong and Open Vision Language Assistant for Mobile Devices”
[3]: https://openaccess.thecvf.com/content/ICCV2025/papers/Cai_LLaVA-KD_A_Framework_of_Distilling_Multimodal_Large_Language_Models_ICCV_2025_paper.pdf “LLaVA-KD: A Framework of Distilling Multimodal Large Language Models”
[4]: https://arxiv.org/abs/2408.15881 “[2408.15881] LLaVA-MoD: Making LLaVA Tiny via MoE Knowledge Distillation”
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)