ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

MiniCPM-V 项目中的 OmniLMM-12B:架构原理、RLHF 对齐与实时多模态交互实战解读

MiniCPM-V 项目中的 OmniLMM-12B:架构原理、RLHF 对齐与实时多模态交互实战解读 MiniCPM-V 项目中的 OmniLMM-12B架构原理、RLHF 对齐与实时多模态交互实战解读【免费下载链接】MiniCPM-VA Pocket-Sized MLLM for Ultra-Efficient Image and Video Understanding on Your Phone项目地址: https://gitcode.com/GitHub_Trending/mi/MiniCPM-V本文基于 docs/omnilmm_en.md 撰写是该项目早期发布的 OmniLMM-12B 模型的技术指南。文章以该文档为主体骨架结合仓库内omnilmm/目录下的源码实现omnilmm/model/omnilmm.py、omnilmm/model/resampler.py 等与 chat.py 中的推理调用流程从模型架构、训练对齐方式、评测表现到实际推理用法做纵深展开。读者阅读后既能掌握 OmniLMM-12B 的完整技术画像也能直接在仓库中找到对应的模型实现与可运行的推理代码路径。一、模型概览OmniLMM-12B 是什么OmniLMM-12B 是 MiniCPM-V 项目早期归档于 2024-05-19发布的多模态大语言模型MLLM也是当时该系列中能力最强的版本。模型总参数量约 11.6B基于EVA02-5B 视觉编码器与Zephyr-7B-β 大语言模型初始化构建两者之间通过一层perceiver resampler连接并采用**课程学习curriculum fashion**的方式在多模态数据上完成训练。从架构定位看OmniLMM-12B 与后续主打端侧高效部署的 MiniCPM-V 系列形成互补前者追求综合多模态能力与可信行为后者侧重在手机等端侧设备上的超高效推理。这一点在项目 README.md 的更新日志中亦有印证——2024.02.01 同日开源 MiniCPM-V 与 OmniLMM-12B分别对应高效端侧部署与强大多模态能力两条路线。因此当读者需要了解该模型在项目中的位置时可以将其视为该仓库多模态能力路线的早期旗舰模型。二、模型架构EVA02-5B 视觉编码 Perceiver Resampler Zephyr-7B-βOmniLMM-12B 遵循视觉塔 连接器 语言模型的经典 MLLM 三段式结构但每个组件都有其针对性设计。仓库源码 omnilmm/model/omnilmm.py 完整保留了这套实现以下逐一拆解。2.1 视觉编码器EVA02-5B 与倒数第二层特征视觉塔通过create_vision_module(config)函数构建核心代码如下omnilmm/model/omnilmm.pydef create_vision_module(config): vision_tower timm.create_model(eva02_enormous_patch14_clip_224.laion2b_plus, pretrainedFalse, num_classes0, dynamic_img_sizeTrue, dynamic_img_padTrue) # 使用倒数第二层输出 vision_tower.blocks[-1] Identity() embed_dim config.hidden_size resampler Resampler( grid_sizeint(math.sqrt(config.num_query)), embed_dimembed_dim, num_headsembed_dim // 128, kv_dimvision_tower.embed_dim, ) return vision_tower, resampler其中值得注意的工程细节视觉塔选型使用 timm 提供的eva02_enormous_patch14_clip_224.laion2b_plus预训练模型patch size 为 14输入尺寸 224并开启dynamic_img_size与dynamic_img_pad以支持动态分辨率输入倒数第二层特征代码将最后一个 Transformer block 替换为Identity()即实际取倒数第二层 block 的输出作为视觉特征这是一种常见于 MLLM 的特征选取策略——通常倒数第二层特征在语义与空间细节之间更为均衡attn_pool 替换若视觉塔自带 attention pooling 层attn_pool同样替换为Identity()避免提前做全局池化而丢失空间信息。2.2 连接器2D Perceiver Resampler连接视觉特征与大语言模型的关键组件是 omnilmm/model/resampler.py 中实现的Resampler其类注释明确说明了结构A 2D perceiver-resampler network with one cross attention layers by (grid_size**2) learnable queries and 2d sincos pos_emb。即一层交叉注意力配以grid_size²个可学习 query 和二维正弦余弦位置编码。从实现看omnilmm/model/resampler.py其核心部件包括可学习 queryself.query nn.Parameter(torch.zeros(self.num_queries, embed_dim))用trunc_normal_(std.02)初始化2D sincos 位置编码由get_2d_sincos_pos_embed生成不参与梯度更新requires_grad_(False)并在前向传播时通过get_abs_pos按目标序列长度做 bicubic 插值以适配动态分辨率维度投影当视觉塔维度与 LLM 隐藏维度不一致时用kv_proj线性层无 bias将视觉特征投影到embed_dim否则退化为Identity()单层交叉注意力nn.MultiheadAttention(embed_dim, num_heads)其中num_heads embed_dim // 128输出投影ln_post归一化后经proj矩阵线性映射输出形状为(grid_size², embed_dim)。这意味着任意尺寸的视觉特征网格都会被压缩为固定数量的num_query个视觉 tokengrid_size sqrt(num_query)从而实现视觉侧与语言侧之间的定长桥接。从源码结构可以推断config.num_query直接决定了视觉 token 数量是影响计算量与语义粒度平衡的关键配置项。2.3 语言模型继承 Mistral 架构OmniLMM 的语言骨干直接继承自 Hugging Face Transformers 的 Mistral 实现OmniLMMConfig(MistralConfig)、OmniLMMModel(MistralModel)、OmniLMMForCausalLM(MistralForCausalLM)并在文件末尾完成自动注册omnilmm/model/omnilmm.pyAutoConfig.register(omnilmm, OmniLMMConfig) AutoModelForCausalLM.register(OmniLMMConfig, OmniLMMForCausalLM)这样便可通过标准的AutoModelForCausalLM.from_pretrained(...)加载 OmniLMM 权重。前向传播中模型将视觉 token 的 embedding 与文本 embedding 按占位符位置拼接后送入 Mistral 解码器并在OmniLMMForCausalLM.forward中通过CrossEntropyLoss计算标准的自回归语言建模损失omnilmm/model/omnilmm.py。2.4 训练数据处理课程学习的数据面文档指出模型在多模态数据上以课程学习方式训练。仓库中虽然未附带完整训练脚本但 omnilmm/train/train_utils.py 保留了训练侧的数据预处理逻辑可作为佐证omni_preprocess(sources, tokenizer, generation)将多轮对话源数据role/content结构转换为 chat template 文本再 tokenize 得到input_ids与labels标签掩码策略以\n|assistant|\n与\n|user|\n为锚点将非模型回复部分的 token 标签置为ignore_index -100即只对 assistant 回复计算损失omnilmm/train/train_utils.py。由此可以推断OmniLMM 的训练遵循先多模态预训练、后指令微调的课程化路径而损失函数层面只监督回复文本与主流 MLLM 训练范式一致。三、三大核心特性原文档将 OmniLMM-12B 的能力概括为三个特性本节逐条展开。3.1 强性能同规模领先的多模态能力OmniLMM-12B 在 MME、MMBench、SEED-Bench 等多个基准上相对同规模模型取得领先成绩详见第四节完整评测表并具备较丰富的多模态世界知识。需要说明的是领先是原文档相对当时2024 年上半年公开模型如 Yi-VL 6B、Qwen-VL-Chat、CogVLM-Chat、LLaVA 1.5 等的比较结论评测细节与数据来源均以原文档表格为准。3.2 可信行为多模态 RLHF 对齐降低幻觉多模态大模型普遍存在幻觉问题——模型可能确信地描述图片中并不存在的物体。OmniLMM-12B 的差异化亮点在于它是首个通过多模态 RLHF 对齐借助 RLHF-V 系列技术的、综合能力优秀的开源多模态大模型。据原文档声明它在幻觉评测基准 MMHal-Bench 上达到开源模型最佳水平并在 Object HalBench 上优于 GPT-4V。这一特性直接指向行为可信trustworthy behavior这一模型设计目标。3.3 实时多模态交互视频流 语音的实时助手项目将 OmniLMM-12B 与纯文本的 GPT-3.5 组合成一个实时多模态交互助手摄像头视频流与麦克风语音流作为输入模型输出语音回复。虽然该方案仍属初步尝试但文档指出其无需任何视频剪辑即可复现 Gemini 演示视频中的部分趣味场景详见第六节。四、评测结果8 项基准完整数据以下是原文档提供的详细评测表格†标记为闭源模型MMHal-Bench 与 Object HalBench 的分数格式为得分 / 指标率ModelSizeMMEMMB dev (en)MMMU valMMHal-BenchObject HalBenchSeedBench-IMathVistaLLaVA BenchGPT-4V†-1771.575.156.83.53 / 70.886.4 / 92.771.647.893.1Qwen-VL-Plus†-2183.466.245.2--65.736.073.7Yi-VL 6B6.7B1915.168.640.3--67.528.851.9Qwen-VL-Chat9.6B1860.060.635.92.93 / 59.456.2 / 80.064.833.867.7CogVLM-Chat17.4B1736.663.732.12.68 / 52.173.6 / 87.468.834.773.9LLaVA 1.513.6B1808.468.236.42.71 / 51.053.7 / 77.468.126.464.6OmniLMM-12B11.6B1935.871.640.73.45 / 68.890.3 / 95.571.134.972.0观察该表可以发现几个信息点在 MME、MMBench 与 SeedBench-I 上OmniLMM-12B 均显著高于同期的开源对标模型如 LLaVA 1.5、CogVLM-Chat 等在面向幻觉检测的 Object HalBench 上其 90.3 / 95.5 的分数高于表中包括 GPT-4V 在内的所有模型与多模态 RLHF 对齐降低幻觉的定位相互印证在 MMHal-Bench 上其 3.45 / 68.8 的得分也位居开源模型前列。表格与雷达图数据均继承自原文档评测设置细节请以原始基准为准。五、实时多模态交互助手OmniLMM-12B × GPT-3.5原文档描述的实时交互方案是一个视觉-语言-语音的组合系统视频帧描述OmniLMM-12B 将摄像头捕获的视频帧逐帧转化为文本描述回复生成纯文本的 ChatGPT-3.5 依据这些描述与用户指令生成最终回复语音输出借助语音处理工具完成语音合成与播放。整个链路中OmniLMM-12B 承担视觉理解角色GPT-3.5 承担对话规划角色。文档强调演示视频为原始录制、未经剪辑并指出该组合能够复现 Gemini 演示视频中的部分趣味场景。典型的多模态对话示例见下图该方案在仓库源码中亦有对应接口chat.py中的OmniLMM12B类封装了完整的单图对话能力详见第六节而视频帧描述 文本模型规划的编排思路属于文档层面描述的系统级设计。六、推理实战从 chat.py 理解 OmniLMM-12B 的调用流程虽然文档本身未给出安装与推理命令该部分在中文版 docs/omnilmm.md 中补充了安装步骤克隆仓库后创建 Python 3.10 的 conda 环境并pip install -r requirements.txt但仓库根目录的 chat.py 提供了可直接运行的推理实现本节结合源码还原完整调用链。6.1 模型加载与配置init_omni_lmm(model_path)chat.py负责加载模型与预处理组件model OmniLMMForCausalLM.from_pretrained( model_name, tune_clipTrue, torch_dtypetorch.bfloat16 ).to(devicecuda, dtypetorch.bfloat16) image_processor build_transform( is_trainFalse, input_sizemodel.model.config.image_size, std_modeOPENAI_CLIP)要点以bfloat16精度加载并放置到 CUDAtune_clipTrue表示视觉塔直接以模块形式挂载非 FSDP 列表形式图像预处理使用build_transform(is_trainFalse, ...)即评估态变换Resize到input_size × input_size后ToTensor 按OPENAI_CLIP 的 mean/std归一化均值(0.48145466, 0.4578275, 0.40821073)标准差(0.26862954, 0.26130258, 0.27577711)具体见 omnilmm/model/utils.py加载后需向 tokenizer 注册三个特殊 tokenim_patch、im_start、im_end并将mm_use_im_start_end置为 Truechat.py。6.2 文本侧处理图像占位符展开wrap_question_for_omni_lmmchat.py将用户问题中的image占位符替换为固定长度的视觉 token 序列question_text[0][content] question_text[0][content].replace( image, im_st_token im_patch_token * image_token_len im_ed_token)即num_query个im_patch被im_start与im_end包裹随后调用omni_preprocess(..., generationTrue)走与训练一致的 chat template 与 tokenize 流程确保推理输入分布与训练对齐。6.3 视觉侧处理与生成OmniLMM12B.decodechat.py将图像经build_transform处理后调用模型的generate_vllm完成自回归生成output self.model.generate_vllm( input_idsinput_ids.unsqueeze(0).cuda(), imagesimage.unsqueeze(0).half().cuda(), temperature0.6, max_new_tokens1024, do_sampleTrue, repetition_penalty1.1, top_k30, top_p0.9, )generate_vllmomnilmm/model/omnilmm.py内部先调用get_vllm_embedding对每张图执行get_vision_embedding视觉塔forward_features→ 去掉 prefix token →Resampler压缩为num_query个 token再将这些视觉 embedding 按占位符位置拼接到文本 embedding 序列中最后交给标准generate。上述生成超参temperature0.6、top_k30、top_p0.9、repetition_penalty1.1、max_new_tokens1024即为仓库提供的默认解码配置可直接作为复现基线。6.4 一句话复现入口chat.py末尾将默认模型路径设为openbmb/OmniLMM-12Bchat.py即以该模型 ID 为默认加载目标配合仓库的依赖文件requirements.txt即可复现推理。需要注意模型权重托管在 Hugging Face 与 ModelScope 平台的 OpenBMB 账号下加载前需确保网络可访问对应模型仓库。七、Model Zoo 与后续演进原文档的 Model Zoo 记录了 OmniLMM-12B 的唯一发布版本模型描述获取渠道OmniLMM-12B能力最强的版本综合性能领先Hugging Face模型 IDopenbmb/OmniLMM-12BModelScopeOpenBMB 组织需要特别提醒的是原文档明确标注 OmniLMM-12B 发布于项目早期并推荐读者使用项目最近发布的模型见 README.md 中的 MiniCPM-V / MiniCPM-o 系列以获得更好的性能与效率。在项目 README.md 的 Legacy Models 列表中OmniLMM-12B 与 MiniCPM-V 1.0/2.0/2.5/2.6/4.0 等一同被归入历史模型README.md因此若目标是复现与研究早期多模态 RLHF 对齐技术OmniLMM-12B 及其源码是完整且可运行的参考实现若目标是实际业务落地建议按项目方推荐转向后续系列模型它们在端侧效率与综合能力上均持续演进。八、总结OmniLMM-12B 作为 MiniCPM-V 项目早期推出的旗舰多模态模型完整展示了三条技术路线EVA02-5B Perceiver Resampler Zephyr-7B-β 的架构组合、多模态 RLHF 对齐带来的可信行为以及视觉-语言-语音的实时交互系统雏形。仓库中的 omnilmm/ 目录与 chat.py 保留了从模型定义、数据预处理到端到端推理的完整实现读者可以基于本文梳理的调用链直接复现其评测所展示的对话能力并以此为参考研究 MLLM 的架构设计与对齐训练方法。【免费下载链接】MiniCPM-VA Pocket-Sized MLLM for Ultra-Efficient Image and Video Understanding on Your Phone项目地址: https://gitcode.com/GitHub_Trending/mi/MiniCPM-V创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表