论文精读:Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models

Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models

Status: Reading
Author: Chunrui Han, Haoran Wei, Jianjian Sun, Jinrong Yang, Jinyue Chen, Liang Zhao, Lingyu Kong, Xiangyu Zhang, Zheng Ge
Institution: 中国科学院大学, 华中科技大学, 旷视科技(MEGVII Technology)
Publisher: arXiv
Publishing/Release Date: December 11, 2023
Score /5: ⭐️⭐️⭐️
Type: Paper
Link: https://arxiv.org/abs/2312.06109



论文精读

摘要

大规模视觉-语言模型(Large Vision-Language Models,LVLMs)基本上使用得都是同一个视觉词表——CLIP,它也适用于大部分的视觉任务。但是,对于一些特殊的任务往往需要更密集和更细致的感知,比如文档OCR和图标理解,特别是对于非英语场景,CLIP的词表在分词时往往比较低效,并且还可能会遇到无法分词的问题。基于此问题,作者提出了Vary(Vision vocabulary),一种有效扩展LVLMs视觉词表的方法。该方法主要包括两步,首先是生成新的视觉词表,作者通过解码器 Transformer 设计了一个词表网络,通过自回归的方式生成词表。然后将新的词表合并到原本的视觉词表(CLIP)中,以此来快速增强LVLMs的特征表示能力。

引言

类似于GPT-4的LVLMs,比如BLIP-2、MiniGPT4、LLaVA和Qwen-VL等,在各个方面都有很出色的性能,它们一般都具有两部分:LLMs和视觉编码器。为了将图像编码与文本编码对齐,BLIP-2和MiniGPT-4引入了高质量的图像-文本对进行有监督微调,LLaVA则是利用线性层将视觉编码映射到文本编码,Qwen-VL则是利用了交叉注意力层。

在这里插入图片描述

然而,上述的LVLMs的视觉编码器部分基本上都是CLIP,这有可能会成为一个瓶颈。我们可以将CLIP视为一个巨大的通用视觉词表,但是在一些特殊的领域(例如中文OCR),CLIP可能无法非常有效的将所有的视觉信息编码进一个固定长度的tokens中。尽管mPlug-Owl和Qwen-VL通过解冻并继续训练视觉编码器的方式来缓解上述问题,但是作者认为这种方法会有3个问题:① 可能会覆盖原始词表的知识;② 在较大的LLM上的训练效率较低;③ LLM具有较强的记忆能力,因此不能一张图片看多次,也就是说epoch不能太大。

作者提出的Vary启发于LLMs中的文本词表扩充,主要分为两步:① 生成新的词表;② 合并新旧词表。如下图所示,首先第一步,构造了一个小的pipeline,包含一个词表网络和一个小的解码器Transformer,然后通过自回归的方式来训练词表网络。作者认为,基于自回归的训练方式可能比CLIP基于对比学习的方式更加适合密集感知型任务。(这一块以OCR为例,那这个pipeline的输入就是图片,输出就是文本)一方面,自回归的next-token可以让视觉词表压缩更长的文本,另一方面,这种方式可以使用的数据格式更加多样。然后第二步,将新的视觉词表添加到LVLMs,这一步为了避免知识覆盖,将新旧词表网络都冻结了。

在这里插入图片描述

Vary通过增加视觉词表,可以有效地增强LVLMs在下游视觉任务的适配能力。

方法

架构

Vary在架构上分为两个模块:Vary-tiny和Vary-base,Vary-tiny负责生成新的视觉词表,Vary-base则是使用新的词表。

Vary-tiny由一个词表网络和一个OPT-125M组成,为了集中于细粒度的感知任务,这个模块中并没有文本输入。作者希望新的视觉词表网络可以更好的处理人工图片,例如文档和图表,以此来弥补CLIP的不足。因此在训练Vary-tiny时,数据集中,文档和图表数据是正例,而自然图像是负例。

在Vary-base中,两个词表之间通过一个线性层来对齐,两个词表网络冻结后,各自独立进行分词,在进入LLM之前再concat在一起。

在这里插入图片描述

生成新的视觉词表

  1. 新词表

使用SAM预训练的ViTDet图像编码器作为新的词汇表网络的主要部分,但是由于它的输入图片分辨率是1024×1024,最后一层输出的特征图尺寸是64×64×256,跟CLIP-L的输出尺寸对不上,因此又加了两个卷积层进行转换。

在这里插入图片描述

  1. 数据集

文档数据:主要是高分辨率的图像-文本对作数据集的正例,尤其是OCR可以训练模型的细粒度图像感知能力。这块的数据集是作者自建的,收集了arXiv上的PDF文章然后用PyMuPDF提取文本信息以及将每一页转换为图片。构建了1M的中文和1M的英文文档图像-文本对。

图表数据:现有的LVLMs的图表理解能力很差,因此这也是新词表需要重点掌握的知识。作者从网上找了一些语料,分别通过matplotlib和pyecharts绘制图表(中英文各750k),并将文本真实值转换为Python的字典形式。

负例的自然图像:对于自然图像数据CLIP处理的非常好,因此需要确保新的词表不会对其造成干扰。因此,作者又从COCO数据集中采样了120k张图片作为负例的图像-文本对,以此来保证新的词表网络能够正确的编码这些自然图像。

  1. 输入格式

图像编码以前缀的形式跟文本编码打包在一起,用和来表示图像编码的开始和结束。

扩充视觉词表

  1. Vary-base的结构

新的视觉词表和原本的CLIP是并行的,各自有独立的输入嵌入层,也就是一个线性层,最后将输出concat在一起。

  1. 数据集

LATEX文档:从arXiv上收集了一些.tex文档,然后提取其中的表格、数学公式和纯文本,通过pdflatex进行重新渲染,得到了50w的英文页面和40w的中文页面。

语义关联图表渲染:利用GPT-4根据相关语料库生成了200k的高质量图表数据用于训练Vary-base。

通用数据:先用从LAION-COCO中采样的4 million样本进行预训练,然后用LLaVA-80k或LLaVA-CC665k以及DocVQA和ChartVQA作为SFT数据集。

  1. 对话格式

<|im_start|>user: “” “texts input”<|im_end|> <|im_start|>assistant: “texts output” <|im_end|>

实验

数据集与评价指标

作者在做个数据集对模型进行了评估,主要包括:

  1. 做着自己创建的OCR测试集,用以测试模型的细节感知能力;
  2. DocVQA和ChartQA,测试模型对下游任务的提升;
  3. MMVet,测试模型的通用性能。

实现细节

在Vary-tiny训练阶段,对所有参数进行了优化,批量大小为512,训练周期为3,使用AdamW优化器和余弦退火调度器,学习率设定为5e-5。

对于Vary-base的训练,冻结了视觉词汇网络的权重,专注于优化输入嵌入层和LLM的参数,其中预训练的学习率为5e-5,SFT阶段为1e-5,批量大小为256,训练周期为1。其他设置与Vary-tiny保持一致。

细节感知能力

在这里插入图片描述

下游任务能力

在这里插入图片描述

通用能力

Vary的训练策略不会伤害模型的通用能力。

在这里插入图片描述

结论

这篇文章主要强调了扩充LVLMs的视觉编码词表的重要性,实验结果证明成绩还可以。

作者认为这个方向还有改进空间,因为现在的文本词表扩展方法相对来说更加简单易用。


Notion持续更新:Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

虚幻UE 材质-材质图层、材质图层混合

学习材质图层和材质图层混合的使用&#xff0c;便于节点扫盲。 文章目录 前言一、材质图层混合二、使用步骤总结 前言 材质混合我们之前用Bridge的插件进行混合过 而此次我们的材质混合使用UE自带的材质图层和材质图层混合来实现 一、材质图层混合 材质图层混合是一种允许将…

Vant4在Vue3.3中如何按需导入组件和样式

前言 最近我在Vue 3.3的项目中对Vant4做按需导入时&#xff0c;尽管按照Vant4的官方指南进行操作&#xff0c;但样式仍然无法正确加载。经过深入研究和多篇文章的比较&#xff0c;我终于找到了在Vue3中如何正确的按需导入Vant 4组件和样式的方法。由于Vue3.3和Vant4相对较新&am…

考古学家 - 华为OD统一考试

OD统一考试 分值: 200分 题解: Java / Python / C++ 题目描述 有一个考古学家发现一个石碑,但是很可惜发现时其已经断成多段。 原地发现N个断口整齐的石碑碎片,为了破解石碑内容,考古学家希望有程序能帮忙计算复原后的石碑文字组合数,你能帮忙吗? 备注: 如果存在石碑…

国产六核CPU商显板,三屏异显,米尔基于全志D9360开发板

芯驰D9-Pro 自主可控、安全可信的高性能商显方案 采用国产CPU&#xff1a;集成了6个ARM Cortex-A551.6GHz 高性能CPU和1个ARM Cortex-R5800MHz&#xff1b; 高性能的高安全HSM安全的处理器&#xff0c;支持TRNG、AES、RSA、SHA、SM2/3/4/9&#xff1b; 它包含100GFLOPS 3D G…

CRLF漏洞靶场记录

搭建 利用 docker 搭建 vulhub 靶场 git clone https://github.com/vulhub/vulhub.git 进入 /vulhub/nginx/insecure-configuration 目录 启动前关闭现有的 8080、8081、8082 端口服务&#xff0c;避免端口占用 docker-compose up -d 进入容器 docker exec -it insecure-…

Spring事务失效场景之类内部方法调用及解决方案

一、背景 在日常开发中&#xff0c;经常有需要使用事务来保证数据一致性的情况。简单点的话直接在方法上面加Transactional注解就可以了。 但这样存在一个问题&#xff0c;在整个业务方法层面加注解会把很多并不需要归入事务的操作也归入到了事务里面&#xff0c;这样会可能会…

uni-app修改头像和个人信息

效果图 代码&#xff08;总&#xff09; <script setup lang"ts"> import { reqMember, reqMemberProfile } from /services/member/member import type { MemberResult, Gender } from /services/member/type import { onLoad } from dcloudio/uni-app impor…

用通俗易懂的方式讲解大模型分布式训练并行技术:序列并行

近年来&#xff0c;随着Transformer、MOE架构的提出&#xff0c;使得深度学习模型轻松突破上万亿规模参数&#xff0c;传统的单机单卡模式已经无法满足超大模型进行训练的要求。因此&#xff0c;我们需要基于单机多卡、甚至是多机多卡进行分布式大模型的训练。 而利用AI集群&a…

杭州中科微 BDS/GNSS 全星座定位导航模块 ATGM332D-5N31使用笔记

一、BDS/GNSS 全星座定位导航模块 ATGM332D-5N31 介绍 ATGM332D-5N 系列模块是 12X16 尺寸的高性能 BDS/GNSS 全星座定位导航模块系列的总称。该系列模块产品都是基于中科微第四代低功耗 GNSS SOC 单芯片—AT6558&#xff0c;支持多种卫星导航系统&#xff0c;包括中国的 BDS&a…

C++:cout 的一些注意事项

有时cout不会将结果立即输出到屏幕&#xff08;也就是缓冲&#xff09;&#xff0c;该情况不会对竞赛测评有影响。 例子如下&#xff1a; ps:用puts立即输出 原因&#xff1a; 解决方法&#xff1a;在每一个cout后跟\n或flush cout << "This will be immediately d…

网络变压器POE的功能

网络变压器&#xff0c;也被称为POE&#xff08;Power over Ethernet&#xff09;&#xff0c;是一种用于在以太网中传输数据和电力的技术。它的主要功能包括&#xff1a; 1. 传输数据&#xff1a;网络变压器可以传输高速的网络数据&#xff0c;如10/100/1000Mbps。 2. 传输电…

数据结构二叉树创建及例题(上)

今天就带领大家来到树的世界,树无论是在考试上还是实际学习方面都是比较重点的,大家在这块知识要花时间搞懂. 文章目录 前言 一、树的二叉链表定义 二、二叉树三种遍历方式(递归方式) 1.先序遍历方式(根左右) 2.中序遍历方式(左根右) 3.后序遍历方式(左右根) 三、二叉树的…

ubuntu nginx安装部署

上传nginx-1.18.0.tar.gz mv nginx-1.18.0.tar.gz /usr/local/ #解压 tar -zxvf nginx-1.18.0.tar.gz #安装 cd nginx-1.18.0 #安装依赖包apt-get install build-essential zlib1g-dev libpcre3 libpcre3-dev libssl-dev libxslt1-dev libxml2-dev libgeoip-dev openssl libgd…

Cmake 中的list介绍

这个链接非常好&#xff0c;都有例子。 https://www.jianshu.com/p/89fb01752d6f

在线项目实习分享:股票价格形态聚类与收益分析

01前置课程 数据挖掘基础数据探索数据预处理数据挖掘算法基础Python数据挖掘编程基础Matplotlib可视化Pyecharts绘图 02师傅带练 行业联动与轮动分析 通过分析申银万国行业交易指数的联动与轮动现象&#xff0c;获得有意义的行业轮动关联规则&#xff0c;并在此基础上设计量…

vue3安装 router 路由

安装路由 cnpm i vue-router在src文件夹下创建router/index.ts import {createRouter,createWebHashHistory} from vue-router const routercreateRouter({history:createWebHashHistory(),routes:[{path:"/",name:home,component: () > import(../views/Home/i…

pyside6 捕捉主窗口关闭后,进行释放相关的资源

import sys from PySide6 import QtGui from PySide6.QtWidgets import QWidget,QApplication,QMessageBoxclass Message(QWidget):def __init__(self):# 如果希望窗口内嵌于其他部件&#xff0c;可添加parent参数super(Message, self).__init__()# 调用初始化方法self.initUI(…

分块矩阵的定义、计算

目录 一、定义 二、分块矩阵的加减乘法 三、考点 一、定义 分块&#xff0c;顾名思义&#xff0c;将整个矩阵分成几部分&#xff0c;如下图所示 二、分块矩阵的加减乘法 三、考点 分块矩阵的考点不多&#xff0c;一般来说&#xff0c;有一种&#xff1a; 求分块矩阵的转置…

伐木工 - 华为OD统一考试

OD统一考试 题解: Java / Python / C++ 题目描述 一根X米长的树木,伐木工切割成不同长度的木材后进行交易,交易价格为每根木头长度的乘积。规定切割后的每根木头长度都为正整数,也可以不切割,直接拿整根树木进行交易。请问伐木工如何尽量少的切割,才能使收益最大化? 输…

如何在 openKylin 上安装 ONLYOFFICE 文档?

文章作者&#xff1a;ajun ONLYOFFICE 文档是一款全面的在线办公工具&#xff0c;提供了文本文档、电子表格和演示文稿的查看和编辑功能。它高度兼容微软 Office 格式&#xff0c;包括 .docx、.xlsx 和 .pptx 等文件格式&#xff0c;并支持实时协作编辑&#xff0c;使团队成员能…
最新文章