- Paper:https://arxiv.org/pdf/2410.16261
- Github:https://github.com/OpenGVLab/InternVL/tree/main/internvl_chat/shell/mini_internvl
- Author:Zhangwei Gao et al. 上海人工智能实验室
文章目录
- 0 总结(省流版)
- 1 模型结构
- 1.1 InternViT-300M
- 1.2 下游任务迁移学习框架
- 1.2.1 数据格式
- 1.2.2 训练策略
- 2 指标情况
- 3 消融实验结论
- 3.1 通用数据和特定领域数据比例探究
- 3.2 训练样本数量对模型性能的影响
- 3.3 不同训练参数量对于模型性能的影响
0 总结(省流版)
核心1:通过蒸馏的方式得到Visual encoder(InternViT-6B -> InternViT-300M),与InternVL2-76B对比,mini-InternVL-4B仅用5%参数实现90%的性能
核心2:提出一个迁移到不同下游任务学习框架
同参数量级下,指标低于Qwen2vl系列。
1 模型结构
- Visual encoder: 使用CLIP初始化InternViT-300M,并蒸馏InternViT-6B
- 动态分辨率策略(crop)
- pixel unshuffle减少visual token数量,输入448,输出token数量为256(16x16)
- LLM:
- Mini-InternVL-1B: Qwen2-0.5B
- Mini-InternVL-2B: InternLM2-1.8B
- Mini-InternVL-4B: Phi-3-Mini
1.1 InternViT-300M
- 参数使用CLIP-ViT-L-336px初始化,从InternViT-6B中蒸馏出InternViT-300M。
- 通过计算最后K层transformer layer的hidden states之间的负余弦相似度来更新student模型参数
- 使用数据集如下,策略是图片resize到448,关闭dynamic resolution
1.2 下游任务迁移学习框架
1.2.1 数据格式
- Image classification task: multi-choice
USER: [Image][Prompt_Prefix][Candidate Labels][Prompt_Suffix]
ASSISTANT: [Ground Truth]
- Visual Grounding Tasks
需要被检测目标的描述:
目标位置:[[x1, y1], [x2, y2]],坐标归一化到0~1000
- Region Perception Tasks:基于指定坐标识别目标,问题和回答中均带上目标位置信息
question:What object is in this location[[x1, y1, x2, y2]]
anwser:“object name[[x1, y1, x2, y2]]
-
Multi-View Images: 使用动态分辨率,针对自动驾驶的6个视角图片,先resize到896x448,再拼接成2x3(2688x896),最终可以得到12个tiles(448x448)。最后再用”CAM_FRON“等文本来标记位置。
-
Video Frames:每帧resize到448x448
Frame1: <IMG_CONTEXT> Frame2: <IMG_CONTEXT>
1.2.2 训练策略
- domain adaption阶段:全参数微调
- domain-specific application scenario:将对应的数据转化成1.2.1中的格式,加入到通用多模态数据中;
2 指标情况
mini-InternVL指标:
Qwen2-VL指标:
同2B量级,qwen2-vl-2B指标较高
同72B量级,InternVL2-Llamma3-76B指标比qwen2-vl-72B指标略低
3 消融实验结论
3.1 通用数据和特定领域数据比例探究
- 只使用特定领域的数据进行微调并不能达到最佳性能
- 通用数据占比为0.25时,性能可达到最佳(作者仅在自动驾驶领域上的测试,从曲线图上来看,这个结论也不是那么确定)
3.2 训练样本数量对模型性能的影响
作者将通用数据和特定领域数据控制在1:1,验证不同比例训练数据下的模型指标情况:
- 仅在1/4训练集时,在特定领域上的指标就达到了瓶颈,之后长的幅度比较小
- 通用benchmark上的指标基本保持稳定
讲道理:这个结论也不太鲁棒,特定领域的指标还存在明显的上升趋势,如果多训练几个epoch呢?
3.3 不同训练参数量对于模型性能的影响
比较直观的是,全参数微调 > 部分参数微调 > LoRA,所以,有条件还是直接全参微调吧。