1. LLaVA 源码架构全景解析
LLaVA(Large Language-and-Vision Assistant)作为当前多模态领域的标杆性开源项目,其架构设计体现了"视觉-语言"联合建模的最前沿思想。整个代码库虽然规模庞大,但通过四大核心功能区的划分,形成了清晰的模块化结构。让我们先来解剖这个"多模态生物体"的器官分布:
1.1 核心架构区:模型的中枢神经系统
llava/model/目录承载着整个系统的核心架构,相当于人体的中枢神经系统。这里包含三个关键组件:
-
CLIP视觉编码器:作为模型的"眼睛",负责将原始图像转换为机器可理解的视觉特征。其核心是一个ViT(Vision Transformer)结构,输入尺寸通常为336x336像素,输出576个视觉token(每个token维度为768或1024,取决于CLIP版本)。
-
Projector投影层:这个被称为"黑市翻译官"的模块,实际上是一个轻量级的MLP(多层感知机)。它的设计非常精妙 - 第一层将视觉token维度扩展到与语言模型隐藏层相同的维度(如4096),第二层再精细调整到最终维度。这种两阶段设计既保证了特征融合的有效性,又控制了参数量。
-
LLaMA语言模型:作为模型的"大脑",负责处理文本理解和生成。在LLaVA中通常使用7B或13B版本的LLaMA,其关键创新在于通过特殊的token插入机制处理视觉特征。
技术细节:Projector的设计直接影响多模态融合效果。原始论文中发现,简单的单层线性投影会导致严重的模态鸿沟(modality gap),而两层MLP配合GeLU激活函数能显著改善特征对齐。
1.2 训练区:模型的学习引擎
llava/train/目录是模型的"炼丹炉",核心文件train.py实现了整个训练流水线。这里有几个关键技术点值得注意:
-
LazySupervisedDataset:采用延迟加载策略,仅在需要时处理数据,这对处理海量多模态数据至关重要。其内存效率比传统Dataset提升约40%。
-
动态批处理:根据GPU显存情况自动调整batch size,特别是在处理不同分辨率的图像时,这种策略能提高约15%的训练效率。
-
混合精度训练:默
