VLM系列文章5-Idefics2

论文:https://arxiv.org/html/2405.02246v1

本文继续探究构建VLM的关键组件是什么,从pre-trained models, architecture choice, data, and training methods 角度出发进行控制变量法实验;并提出了Idefics2系列模型,同时提出了一个新的SFT数据集。

1、动机

关键组件探究:

  • 1、模型架构:视觉和文本如何交互,对推理的影响?
  • 2、训练策略对于稳定性影响?

在这里插入图片描述

2. 消融实验

前提:

  • 训练6’000 步
  • 在4个下游任务中汇报4-shot结果,任务包括:VQAv2、TextVQA、OKVQA、COCO caption;

2.1 VLM中视觉和语言同样重要吗?

LLaMA-1-7B(35.1% on MMLU 62.5
Mistral-7B(60.1% on MMLU) 67.6 yields a boost of 5.1

在这里插入图片描述
在这里插入图片描述

  • CLIP-ViT-H (78.0% on ImageNet: 57.4
  • SigLIP-SO400M (83.2% on ImageNet) yields a 3.3 increase in performance on the benchmarks: 60.2
  • EVA-CLIP-5B:60.7 (参数量大10倍,可能训练不充分)
    在这里插入图片描述

1、对于固定参数来说,对应最终性能的影响。LLM的作用要大于视觉模块;

2.2 自回归架构还是cross-attention架构

在这里插入图片描述
在这里插入图片描述

  • 参数量:cross-attention 架构比自回归架构多1.3B;
  • 推理:cross-attention 架构比自回归架构多10%;

发现:

1、当预训练主干保持冻结状态时,交叉注意力架构的性能优于完全自回归架构。然而,在训练单峰主干时,完全自回归架构优于交叉注意力架构,尽管后者具有更多参数。
2、在完全自回归架构下解冻预训练的主干可能会导致训练不稳定。利用 LoRA 仍然可以增加训练的表现力并使其稳定。

2.3 效率提升在何处?

在这里插入图片描述

1、通过可学习的池化(Q-former)减少视觉标记的数量可显着提高训练和推理的计算效率,同时提高下游任务的性能。

2.4 保留原始宽高比和图像分辨率

在这里插入图片描述

采用在固定大小的方形图像上预先训练的视觉编码器来保留图像的原始长宽比和分辨率,不会降低性能,同时加速训练和推理并减少内存。

3. 模型训练

3.1 Multi-stage pre-training

  • Interleaved image-text documents:OBELICS
  • Image-text pairs:LAION COCO …
  • PDF documents

We use a learning rate of 10−4 and do around 2 epochs on our training data.
It corresponds to approximately 1.5 billion images and 225 billion text tokens.
在这里插入图片描述

3.2 Instruction fine-tuning

  • Cauldron : massive collection of 50 vision-language datasets, covering a wide range of tasks
  • text-only instruction datasets to the mixture:
  • DoRA训练、NEFTune、训练阶段随机scale up分辨率、多轮中shuffle;
    在这里插入图片描述
    在这里插入图片描述

3.3 Optimizing for chat scenarios

We fine-tune Idefics2 for a few hundred steps on LLaVA-Conv and ShareGPT4V with a large batch size.

4. 总结

近期的几篇文章算是对MLLM中几个关键组件进行分析,看看是哪些因素启动关键因素。

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然,我可以给你提供一些 VLM (Visual Light Communication) 和 LLM (Low Level Message) 的代码示例。以下是一个简单的VLM代码示例: ```python import time import RPi.GPIO as GPIO # 设置GPIO引脚 LED_PIN = 18 # 初始化GPIO GPIO.setmode(GPIO.BCM) GPIO.setup(LED_PIN, GPIO.OUT) def transmit_message(message): for char in message: # 将字符转换为二进制 binary = bin(ord(char))[2:].zfill(8) # 发送二进制信号 for bit in binary: if bit == '1': GPIO.output(LED_PIN, GPIO.HIGH) else: GPIO.output(LED_PIN, GPIO.LOW) # 控制发送速度(根据实际情况调整) time.sleep(0.1) # 两个字符之间的间隔时间(根据实际情况调整) time.sleep(0.5) # 发送消息 transmit_message("Hello, World!") # 清理GPIO资源 GPIO.cleanup() ``` 这个示例使用树莓派的GPIO引脚来模拟光通信,通过控制LED的亮灭来传输二进制信号。 以下是一个简单的LLM代码示例,这里假设你是在C语言环境下进行开发: ```c #include <stdio.h> #include <string.h> // 定义消息缓冲区大小 #define BUFFER_SIZE 100 void process_message(char* message) { // 在这里实现对消息的处理逻辑 printf("Received message: %s\n", message); } int main() { char buffer[BUFFER_SIZE]; // 模拟接收消息 printf("Enter a message: "); fgets(buffer, BUFFER_SIZE, stdin); // 去除换行符 buffer[strcspn(buffer, "\n")] = '\0'; // 处理消息 process_message(buffer); return 0; } ``` 这个示例是一个简单的命令行程序,通过用户输入来模拟接收消息,并在控制台上输出收到的消息。 希望这些示例能对你有所帮助!如果你有任何其他问题,可以继续问我。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值