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 的短板通常不是“会不会生成文字”,而是:

  1. 图像 token 是否能正确映射到语言空间;
  2. 小 LLM 是否真正理解视觉特征;
  3. projector 是否把视觉语义压缩得足够好;
  4. 小模型是否容易忽略局部目标、空间关系和细粒度属性。

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”

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐