LLM MLLM 多模态

Ferret:以任何粒度引用和定位任何地方的任何内容

Apple出品的端到端多模态大模型。

2024年1月24日
ferret
分享

一个端到端的MLLM,接受任何形式的引用并可在响应中定位任何内容。[论文]

概述

ferret

Ferret模型

主要贡献:

  • Ferret 模型 - 混合区域表示 + 空间感知视觉采样器可实现 MLLM 中的细粒度和开放词汇的引用和定位。
  • GRIT 数据集 (~1.1M) - 大规模、分层、健壮的引用和定位参考指令微调数据集。
  • Ferret-Bench - 一种多模态评估基准,需要引用/定位、语义、知识和推理

发布

使用和许可声明:数据和代码仅供研究使用并获得许可。它们也仅限于遵循 LLaMA、Vicuna 和 GPT-4 许可协议的使用。该数据集为 CC BY NC 4.0(仅允许非商业用途),使用该数据集训练的模型不应在研究目的之外使用。

安装

克隆此存储库并进入到 FERRET 文件夹

git clone https://github.com/apple/ml-ferret
cd ml-ferret

安装包

conda create -n ferret python=3.10 -y
conda activate ferret
pip install --upgrade pip  # enable PEP 660 support
pip install -e .
pip install pycocotools
pip install protobuf==3.20.0

为训练例子安装附加包

pip install ninja
pip install flash-attn --no-build-isolation

训练

FERRET 在 8 个具有 80GB 内存的 A100 GPU 上进行训练。要在更少的 GPU 上进行训练,您可以相应地减少per_device_train_batch_size和增加gradient_accumulation_steps。始终保持全局的批大小相同:per_device_train_batch_sizex gradient_accumulation_stepsx num_gpus

超参数

我们在微调中使用了一组与 LLaVA(Vicuna) 类似的超参数。

超参数 全局的批大小 学习率 Epochs 最大长度 权重衰减
FERRET-7B 128 2e-5 3 2048 0
FERRET-13B 128 2e-5 3 2048 0

准备 Vicuna 检查点和 LLaVA 的投影

在开始之前,准备我们的基本模型 Vicuna,它是一个指令微调过的聊天机器人。请按照此处的说明下载其权重。Vicuna v1.3 用于 FERRET。

然后下载LLaVA的第一阶段预训练投影权重(7B13B)。

FERRET 训练

提供了脚本(7B13B)。

评估

请参阅此文档了解详细信息。

检查点

我们提取了delta预训练模型和 Vicuna 之间的差异。请先按照前面的说明下载 Vicuna 的权重。然后使用wgetcurl下载我们准备好的权重偏移量:7B13B,并解压缩下载的偏移量。最后,通过运行以下脚本将偏移量应用到 Vicuna 的权重:

# 7B
python3 -m ferret.model.apply_delta \
    --base ./model/vicuna-7b-v1-3 \
    --target ./model/ferret-7b-v1-3 \
    --delta path/to/ferret-7b-delta
# 13B
python3 -m ferret.model.apply_delta \
    --base ./model/vicuna-13b-v1-3 \
    --target ./model/ferret-13b-v1-3 \
    --delta path/to/ferret-13b-delta

请参阅下一节了解如何使用预训练权重设置本地演示。

演示

要运行演示,您需要训练 FERRET 并在本地使用检查点。这里使用了 Gradio Web UI。请一一运行以下命令。

启动控制器

python -m ferret.serve.controller --host 0.0.0.0 --port 10000

启动 gradio Web 服务器

python -m ferret.serve.gradio_web_server --controller http://localhost:10000 --model-list-mode reload --add_region_feature

启动一个模型工作器

这是加载 ckpt 并在 GPU 上进行推理的工作器。每个工作器负责--model-path中指定的单个模型。

CUDA_VISIBLE_DEVICES=0 python -m ferret.serve.model_worker --host 0.0.0.0 --controller http://localhost:10000 --port 40000 --worker http://localhost:40000 --model-path ./checkpoints/FERRET-13B-v0 --add_region_feature

等到进程加载模型完成,您会看到“Uvicorn running on ...”。现在,刷新您的 Gradio Web UI,您将在模型列表中看到刚刚启动的模型。

ferret2

Ferret 互动演示示例

引文

如果您发现 Ferret 有用,请使用此 BibTeX 进行引用:

@article{you2023ferret,
  title={Ferret: Refer and Ground Anything Anywhere at Any Granularity},
  author={You, Haoxuan and Zhang, Haotian and Gan, Zhe and Du, Xianzhi and Zhang, Bowen and Wang, Zirui and Cao, Liangliang and Chang, Shih-Fu and Yang, Yinfei},
  journal={arXiv preprint arXiv:2310.07704},
  year={2023}
}

致谢

  • LLaVA:构建用到的基础代码库。
  • Vicuna:LLM 的基础代码库。

来自:https://github.com/apple/ml-ferret

更多文章

StreamDiffusion是一种新设计的扩散管道,专为实时交互生成而设计。

2024年1月23日 · Diffusion 视频 AI 实时
spotube-screenshot
开源Spotify客户端,不需要Premium也不使用Electron!适用于桌面和移动设备!
2024年1月22日 · spotify 音乐
crewai
用于编排角色扮演、自主人工智能代理的框架。
2024年1月11日 · 代理 AI
jan
Jan是ChatGPT的开源替代品,可在您的计算机上100%离线运行。
2024年1月10日 · ChatGPT AI