【大模型理论篇】CogVLM:多模态预训练语言模型

1. 模型背景

        前两天我们在《Skywork R1V: Pioneering Multimodal Reasoning with Chain-of-Thought》中介绍了将ViT与推理模型结合构造多模态推理模型的案例,其中提到了VLM的应用。追溯起来就是两篇前期工作:Vision LLM以及CogVLM。

        今天准备回顾一下CogVLM。视觉语言模型具有很强的通用性。许多视觉和跨模态任务可以被表述为下一个token预测。

        先来看张图,CogVLM直接拉满。CogVLM通过在注意力和FFN层中引入可训练的视觉专家模块,在预训练的语言模型和图像编码器之间建立了桥梁。这种方法使得视觉语言特征能够深度融合,并且不会牺牲任何自然语言处理任务的性能。CogVLM-17B在17个经典跨模态基准测试中取得了最先进的表现,包括NoCaps、Flicker30k等图像标注数据集,OKVQA、TextVQA、OCRVQA、ScienceQA等VQA数据集,MM-Vet、MMBench、SEED-Bench、LLaVABench、POPE、MMMU、MathVista等LVLM基准测试,以及RefCOCO、RefCOCO+、RefCOCOg、Visual7W等视觉定位数据集。

2. 模型结构

        CogVLM的模型,用于实现图像文本的联合理解与生成。该模型包括四个基本组件:视觉Transformer编码器、多层感知机适配器、预训练的大语言模型以及视觉专家模块。其中,视觉专家模块能够将不同注意力头的语义信息映射到不同的特征空间中,从而实现深度视觉语言特征对齐。该模型采用了统一指令监督微调(SFT)的方式对数据进行训练。

        ViT 编码器。在 CogVLM-17B 中使用了预训练的 EVA2-CLIP-E。由于其专门用于对比学习聚合 [CLS] 特征,因此移除了 ViT 编码器的最后一层。

        MLP适配器。为了将ViT的输出映射到与单词嵌入的文本特征相同的空间中,使用了MLP适配器,一个两层MLP(SwiGLU)。在语言模型中所有图像特征共享相同的词元位置ID。

        预训练的大语言模型。CogVLM 的模型设计与GPT风格预训练大模型兼容。具体来说,CogVLM-17B 采用 Vicuna1.5-7B 进行进一步训练。对所有注意力操作(包括图像特征之间的注意力)应用因果遮盖。

        视觉专家模块。在每一层中添加一个视觉专家模块,以实现深度视觉语言特征对齐。具体来说,每个层中的视觉专家模块由一个 QKV 矩阵和每个层中的 MLP 组成。QKV 矩阵和 MLP 的形状与预训练的语言模型相同,并从其中进行初始化。语言模型中的每个注意力头都会捕获语义信息的不同方面,而可训练的视觉专家可以将图像特征转换为与不同头部对齐,从而实现深度融合。

        位置嵌入。在 RoPE 中,允许所有视觉token共享一个单个的位置 ID,因为当它们被输入到 ViT 时,它们已经包含了位置信息。这种方法缓解了 LLM 中token之间的远程注意力衰减的影响。由于一张图片可以占据数百到数千个token,并且典型的输入序列结构为 " query",使用传统的位置编码会导致过长的编码序列。此外,它还会导致查询更多地关注更接近它的图像序列,即图像的下部分。

3. 论文实验

3.1 预训练

3.1.1 数据

        用于预训练的图像文本对都是公开可用的,包括LAION-2B和COYO-700M。在删除了损坏的URL、NSFW 图像、带有嘈杂标题的图像、具有政治偏见的图像以及具有 >6 或 <1/6 的宽高比的图像后,大约有 15 亿张图像可用于预训练。

        此外,还制作了一个包含 4000 万张图像的visual grounding数据集。图像标题中的每个名词都与边界框相关联,以指示图像中的位置。构建过程,通过spaCy提取名词,并使用GLIPv2预测边界框。图像文本对是从LAION-115M中采样而来的,是滤过的LAION-400M的一个子集。筛选并保留了4000万张图像的一部分,以确保超过75%的图像至少包含两个边界框。

3.1.2 训练

        预训练的第一阶段是图像标题损失,即文本部分的下一个token预测。在上面介绍的 15 亿对图像-文本对上用批量大小为 8,192 的方式训练了 120,000 次 CogVLM-17B 模型。预训练的第二阶段是图像标题生成和指代表达式理解(REF)的混合。REF 是一项任务,根据对象的文本描述来预测图像中的边界框,以视觉问答的形式进行训练,例如问题:物体在哪里?回答:[[x0, y0, x1, y1]]。x 和 y 坐标范围从 000 到 999,表示图像中的归一化位置。仅考虑“答案”部分中下一个token预测的损失。在上述介绍的文本-图像对和视觉定位数据集上使用 1,024 的批量大小预训练了第二阶段模型 60,000 次迭代。在最后的 30,000 次迭代中,将输入分辨率从 224x224 改为 490x490。总可训练参数数量为 6.5B。这里之所以升维,是可以喂入更高精度更多细节的内容,提升模型的理解能力。

3.1.3 对齐

        在指导对齐阶段,训练了两个通用模型:CogVLM-Chat 和 CogVLM-Grounding。CogVLM-Chat 接受自然语言输入和输出,而 CogVLM-Grounding 则接受带框的输入和输出。

        CogVLM-Chat。在研究中整合了来自各种开源视觉问答数据集的数据,包括 VQAv2 ,OKVQA,TextVQA,OCRvQA,ScienceQA,以及以多轮对话格式编排的数据集,如LLaVA-Instruct,LRV-Instruction,LLaVAR。然后在这些多样化的数据集上进行了统一指令监督微调(SFT)。SFT 数据的质量和完整性至关重要;最初通过仅使用语言GPT-4管道生成的LLaVA-Instruct数据集中存在某些不准确之处。需要通过手动检查和注释仔细纠正这些错误,以确保数据质量。视觉问答数据集通常以简洁的形式呈现,通常是单个单词的答案。为了适应这种多样性,在搜索阶段,需要使用格式为:(1)用于简洁的回答(问题:简短答案:);(2)用于扩展讨论的提示(问题:答案:)。在训练过程中,模型经过 6000 次迭代,学习率为 1e-5,批量大小为 1024。为了增强并确保训练的稳定性,激活了视觉编码器的参数,并将其学习率调整为剩余训练参数的十分之一。

        CogVLM-Grounding。为了赋予模型一致、交互式的视觉语义定位能力,收集了一个高质量的数据集,该数据集包含四种类型的定位数据:(1) 基于图像的标注(GC)——在图像中每个名词短语后跟相应的指代边界框;(2) 表达式生成(REG) ——针对每张图片,其上的每个边界框都被标记上准确描述文本表达式;(3) 基于视频的注释(VG)——每个视频帧都有与其对应的准确描述文本表达式;(4) 视觉问答(QA)——每个问题都带有正确答案所在视频帧的准确描述文本表达式。

3.2  多模态基准测试

        图像字幕生成。这些任务的主要目的是为给定图像生成文本摘要,总结主要的内容。使用数据集包括 NoCaps,COCO ,Flickr30k ,以及TextCaps进行评估。

        视觉问答。视觉问答任务要求模型根据给定的图像回答可能侧重于不同视觉内容的问题。评估涵盖多种数据集,包括 VQAv2、OKVQA、TextVQA、OCRvQA和 ScienceQ。LVLM基准主要用于评估大型多模态模型的高级功能,如对象识别和定位、OCR、视觉描述和视觉知识推理。

        视觉定位。通用模型在所有任务上都取得了不错的性能。

3.3 裁剪研究

        在 6,000 个迭代周期和批量大小为 8,192 的情况下进行消融研究。为了评估 CogVLM 模型的有效性,在多个结构变体和调优策略上进行,包括:

1)只调整 MLP Adapter 层;

2)调整所有 LLM 参数以及不添加视觉专家的 Adapter;

3)每四个 LLM 层仅添加一个视觉专家;

4)在所有层中仅向 FFN 添加视觉专家。        

4. 参考材料

【1】CogVLM: Visual Expert for Pretrained Language Models

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/38337.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux vim mode | raw / cooked

注&#xff1a;机翻&#xff0c;未校。 vim terminal “raw” mode Vim 终端 “raw” 模式 1. 原始模式与已处理模式的区别 We know vim puts the terminal in “raw” mode where it receives keystrokes as they are typed, opposed to “cooked” mode where the command…

【Linux线程】——线程概念线程接口

目录 前言 1.线程 2.线程的本质 3.Linux线程库 3.1创建线程——pthread_create 3.2线程终止——pthread_exit 3.3线程等待——pthread_join 3.4线程分离——pthread_detach 3.5获取线程tid——pthread_self 4.线程的优缺点 4.1线程的优点 4.2线程的缺点 结语 前言…

机器学习——KNN超参数

sklearn.model_selection.GridSearchCV 是 scikit-learn 中用于超参数调优的核心工具&#xff0c;通过结合交叉验证和网格搜索实现模型参数的自动化优化。以下是详细介绍&#xff1a; 一、功能概述 GridSearchCV 在指定参数网格上穷举所有可能的超参数组合&#xff0c;通过交叉…

STM32基础教程——定时器

前言 TIM定时器&#xff08;Timer&#xff09;:STM32的TIM定时器是一种功能强大的外设模块&#xff0c;通过时基单元&#xff08;包含预分频器、计数器和自动重载寄存器&#xff09;实现精准定时和计数功能。其核心原理是&#xff1a;内部时钟&#xff08;CK_INT&#xff09;或…

[特殊字符] 树莓派声卡驱动原理全解析:从模拟耳机口到HiFi DAC

一、为什么要关注树莓派的声卡驱动&#xff1f; 树莓派&#xff08;Raspberry Pi&#xff09;作为一款广泛应用的单板计算机&#xff0c;集成了多种音频输出接口&#xff08;如 3.5mm 耳机、HDMI、I2S 外接 DAC 等&#xff09;。但许多用户在使用中会遇到诸如“耳机输出杂音”…

使用若依AI生成springBoot的前后端分离版本

目录 1. 从Git上面下载前后端分离版本 2. 执行SQL脚本 3. 初始化前端 安装Node.js和npm配置 ✅ 第一步&#xff1a;在 Node 安装目录下创建两个文件夹 ✅ 第二步&#xff1a;配置 npm 全局目录和缓存目录 ✅ 第三步&#xff1a;验证配置是否成功 ✅ 第四步&#xff1a;…

神聖的綫性代數速成例題12. 齊次方程組零解充要條件、其齊次方程組非零解、 齊次方程組基礎解系

1. 綫性空間的定義&#xff1a; 設是一個非空集合&#xff0c;是一個數域。 在集合的元素之間定義了加法運算&#xff0c;即對於任意&#xff0c;有唯一的&#xff0c;使得&#xff1b;在數域與集合的元素之間定義了數乘運算&#xff0c;即對於任意和&#xff0c;有唯一的&am…

万亿级数据量的OceanBase应用从JVM到协议栈立体化改造实现性能调优

本文基于某电商平台亿级商品详情页场景&#xff0c;通过Java应用层与数据库层的协同优化&#xff0c;实现98%的查询响应时间低于50ms。 一、JDBC连接池深度调优 HikariCP配置示例&#xff1a; HikariConfig config new HikariConfig(); config.setJdbcUrl("jdbc:ocean…

腾讯:《详解DeepSeek:模型训练、优化及数据处理的技术精髓》23页|附下载方法

导 读 INTRODUCTION 这是一篇来自腾讯的关于DeepSeek大语言模型及其技术特点、应用场景和未来发展趋势的文章&#xff0c;主要介绍了DeepSeek的核心技术优势、行业应用案例以及在AI领域的竞争力和发展趋势。为理解DeepSeek大语言模型的技术优势和应用前景提供了深入的分析&…

Vue 入门到实战 五

第5章 过渡与动画 目录 5.1 单元素/组件过渡 5.1.1 过渡class 5.1.2 CSS 过渡 5.1.3 CSS 动画 5.1.4 同时使用过渡和动画 5.1.5 JavaScript 钩子方法 5.2 多元素/组件过渡 5.2.1 多元素过渡 5.2.2 多组件过渡 5.3 列表过渡 5.3.1 列表的普通过渡 5.3.2 列表的平滑…

L2TP实验

一、拓朴图 二、实验配置 1.基础配置 1.1接口IP及服务配置 [PPPoE Client]interface GigabitEthernet 0/0/0 [PPPoE Client-GigabitEthernet0/0/0]service-manage all permit [NAS]interface GigabitEthernet 0/0/0 [NAS-GigabitEthernet0/0/0]ip add 192.168.0.2 24 [NAS-Gi…

简单实用!百度AI + Raphael AI = 免费生图

简单实用&#xff01;百度AI Raphael AI 免费生图 -- ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/b55eda9141d34697b05db0cd60f62b75.png#pic_center) 第一步&#xff1a;下载或截取一些好看的图片当参考图片 第二步&#xff1a;用百度AI描述你想要的图片&…

aws(学习笔记第三十四课) dockerized-app with asg-alb

文章目录 aws(学习笔记第三十四课) dockerized-app with asg-alb学习内容&#xff1a;1. 整体架构1.1 代码链接1.2 代码手动修改部分1.2.1 rds_stack.py1.2.2 efs_stack.py1.2.3 asg_stack.py1.2.4 userdata.sh 1.2 整体架构 2.代码解析2.1 全体app.py2.2 NetworkStatck网络2.3…

面试总结之 Glide自定义的三级缓存策略

一、为什么需要三级缓存&#xff1f; 在移动应用开发中&#xff0c;图片加载性能直接影响用户体验。根据 Google 统计&#xff0c;图片加载延迟超过 1 秒会导致 32% 的用户流失。传统图片加载方案存在以下痛点&#xff1a; 内存占用高&#xff1a;未压缩的大图直接占用大量内…

用Python实现交互式数据可视化:从基础图表到动态仪表板

用Python实现交互式数据可视化&#xff1a;从基础图表到动态仪表板 一、项目背景 本文将通过一个完整的Python项目&#xff0c;展示如何使用Plotly和ipywidgets构建从基础统计到动态交互的全栈数据可视化方案。 二、核心功能模块 1. 数据生成与预处理 np.random.seed(100)…

Linux进程信号

1.信号的认识 生活中例如闹钟&#xff0c;红绿灯&#xff0c;电话铃声等都属于信号&#xff0c;所白了信号就是中断我们正在做的事情&#xff0c;属于进行事件异步通知机制。 在Linux中信号是发给进程的&#xff0c;信号的产生相较于进程是异步的。 信号的相关知识点&#xff…

Java使用FFmpegFrameGrabber进行视频拆帧,结合Thumbnails压缩图片保存到文件夹

引入依赖 <dependency><groupId>net.coobird</groupId><artifactId>thumbnailator</artifactId><version>0.4.17</version></dependency><dependency><groupId>org.bytedeco</groupId><artifactId>ja…

c++项目-KV存储-模仿redis实现kv键值对存储的基本功能。

KV存储引擎的技术解析&#xff1a;数组、哈希与红黑树实现及其在网络I/O中的应用。 内容概要&#xff1a;本文档深入介绍了基于数组、哈希表和红黑树的键值存储引擎的设计与实现。文档首先阐述了系统的总体架构与类图关系&#xff0c;之后分别对底层存储结构进行了详细解释&am…

vue3:十一、主页面布局(优化页面跳转方式)

:router"true" 一、参考文章 vue3:十一、主页面布局(实现基本左侧菜单右侧内容效果)-CSDN博客 参考上述文章可知&#xff0c;页面跳转是通过在js中定义的菜单中携带的path&#xff0c;然后通过菜单的点击事件完成的跳转&#xff0c;现在可以进行优化&#xff0c;直…

深入解析 Java Stream API:筛选子节点的优雅实现!!!

&#x1f680; 深入解析 Java Stream API&#xff1a;筛选子节点的优雅实现 &#x1f527; 大家好&#xff01;&#x1f44b; 今天我们来聊聊 Java 8 中一个非常常见的操作&#xff1a;使用 Stream API 从 Map 中筛选出特定条件的元素。&#x1f389; 具体来说&#xff0c;我们…