LLaVA论文笔记

llava这篇文章提到的主要的3点贡献:
1、提出一种构建多模态指令数据集的方法,并构建了一套多模态指令数据集 ;
2、提出了一个新的多模态图文模型;
3、提出了一个多模态指令测试的benchmark。

一、多模态数据集构建
在这里插入图片描述

这里数据集构建的方法是一张图片给一个标题和一些框线的坐标,利用纯文本的GPT4生成图文问答(llava 2023年4月提出,gpt4-v 2023年9月推出,个人猜测当时是因为没有直接能用的图文大模型,所以采用了这种方法,这个在当时算是创新点,现在估计不算了。现在有直接能用的图文大模型,如何构造更详细、更能体现推理能力的图文数据集也是个问题)。
这里以coco数据集为例,每个图片有5个说明,和一些标签的类别和位置,根据这些信息可以构造出一个包含图片内容的图文问答数据集。

二、模型
1、模型结构
在这里插入图片描述

模型结构没什么可以说的,就是一个一个语言模型、一个图片encoder(这里用的clip),中间用一个mlp的projection将图片encoder的特征投影到和llm相同的尺寸,和llm的embedding拼接后输入llm,其余就和语言模型一样了。
2、图像预处理
llava v1是直接用了clip-vit-large-patch14的processor。
处理流程:
1、对图片大小进行缩放,默认将短的那个边缩放到224大小,长的那个边按照对应比例进行缩放。
images = [
self.resize(image=image, size=size, resample=resample, input_data_format=input_data_format)
for image in images
]
这里默认使用的方法是PIL库的PILImageResampling.BICUBIC(双三次插值)。
2、对图片进行裁剪,默认是裁剪到224224。
images = [
self.center_crop(image=image, size=crop_size, input_data_format=input_data_format) for image in images
]
裁剪方法是保留图片中心区域的224
224大小,如果图片不满足224224,则进行填充。
3、对输入图片像素值进行缩放,将s像素值缩放到[0, 1]范围内。
images = [
self.rescale(image=image, scale=rescale_factor, input_data_format=input_data_format)
for image in images
]
4、对输入图片进行归一化处理。即从图像的每个像素值中减去均值,然后除以标准差。这里的像素值和标准差是clip提供的默认值。
OPENAI_CLIP_MEAN = [0.48145466, 0.4578275, 0.40821073]
OPENAI_CLIP_STD = [0.26862954, 0.26130258, 0.27577711]
images = [
self.normalize(image=image, mean=image_mean, std=image_std, input_data_format=input_data_format)
for image in images
]
5、最后对通道格式在进行转换。
images = [
to_channel_dimension_format(image, data_format, input_channel_dim=input_data_format) for image in images
]
三、数据处理流程
将问答字符串数据转换成token_ids,并将图片的’'转换成IMAGE_TOKEN_INDEX,loss只计算回答的部分。
clip-vit-large-patch14的图像是 224x224,patch_size=14,一共生成(224/14)
(224/14)=256个patch。这256个patch生成256个图像embedding,经过投影层后生成256个token输入到llm中,其余流程就和llm一样了。
四、训练方法
训练方法也比较简单,第一阶段使用595K的单轮对话数据、学习率2e-3只训练projection,第二阶段使用158K多轮对话数据、学习率2e-5同时更新projection和llm。有点类似于llm训练过程中的数据退火,训练的最后放开衰减后的学习率再用高质量数据再精调,效果会更好。
五、模型评估
这里模型评估用的是纯文本的GPT4的评估方式,就是设计问题和和回答,让GPT4进行打分,并与BLIP和OpenFlamingo进行对比。
我认为模型评估是训练模型中最重要的部分,并且应该在训练模型前就想好如何评估。但是感觉目前还缺乏比较好的评估方法,尤其是一些特定场景。llava中数据本身就是利用GPT4生成的,再利用GPT4进行评估,难免生成的数据更符合GPT4的偏好,得分容易更高。但是llava本身能力也很强,后面的许多开源图文模型都是基于llava的结构来实现了。


这里介绍一个我的多模态大模型开源项目:Zero-Qwen-VL。这个项目项目的初衷是想训练一个对中文支持更友好的图文多模态模型,所以挑了qwen-vl的图片编码器,语言模型选择了qwen2,这个项目提供了模型权重组合的方法,用中文数据集对模型进行训练,可以完成基本的中文图文问答。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值