LLaVA:大型语言和视觉助手,图片识别和理解能力让人惊叹

2023-10-10 17:52

本文主要是介绍LLaVA:大型语言和视觉助手,图片识别和理解能力让人惊叹,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

01简介        

视觉指令调整:针对多模式 GPT-4 级别功能而构建的大型语言和视觉助手。

视觉聊天:构建多模式 GPT-4 级聊天机器人66e5b30664fe648bf29e7fd68351e6f6.jpeg构建了包含 30 个未见过的图像的评估数据集:每个图像都与三种类型的指令相关联:对话、详细描述和复杂推理。这导致了 90 个新的语言图像指令,我们在这些指令上测试 LLaVA 和 GPT-4,并使用 GPT-4 对它们的响应进行评分,从 1 到 10 分。报告每种类型的总分和相对分数。总体而言,与 GPT-4 相比,LLaVA 获得了 85.1% 的相对分数,表明所提出的自指导方法在多模态设置中的有效性。

  • Science QA:LLaVA 与 GPT-4 协同作用的新 SoTA

05afcc5649391e9ffa77638c2dab498a.jpeg仅 LLaVA 就达到了 90.92%。我们使用纯文本的 GPT-4 作为判断,根据它自己之前的答案和 LLaVA 答案来预测最终答案。这个“GPT-4 作为判断”方案产生了新的 SOTA 92.53%。

  • 视觉指令跟随示例

OpenAI GPT-4 技术报告中两个示例的视觉推理

41c9e88e03a68cae46e5bdb2bdec0ea3.jpeg

  • 光学字符识别 (OCR)

0abefa3b56ca3429d7e38c397f734e59.jpeg

  • 效果展示

634c19c3f61dd30d6995160ab58507bb.jpeg29d6a10a2f1fead096823ae6d3f9498e.jpeg4e4e6d87135ed1c5558ca3a2c5c11221.jpeg

02安装

  1. 克隆此存储库并导航到 LLaVA 文件夹

git clone https://github.com/haotian-liu/LLaVA.gitcd LLaVA

2. 安装包

conda create -n llava python=3.10 -yconda activate llavapip install --upgrade pip # enable PEP 660 supportpip install -e .

3.安装附加包

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

升级到最新的代码库

git pullpip uninstall transformerspip install -e .


03演示

要运行我们的演示,您需要在本地准备 LLaVA 检查点。请按照此处的说明下载检查点。

  • 渐变网页用户界面

要在本地启动 Gradio 演示,请一一运行以下命令。如果您计划启动多个模型工作人员以在不同检查点之间进行比较,则只需启动控制器和 Web 服务器一次


  • 启动控制器

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

启动 gradio Web 服务器。

python -m llava.serve.gradio_web_server --controller http://localhost:10000 --model-list-mode reload您刚刚启动了 Gradio Web 界面。现在,您可以打开 Web 界面,并将 URL 打印在屏幕上。您可能会注意到模型列表中没有模型。别担心,我们还没有推出任何劳模。当您启动模型工作人员时,它将自动更新。这是在 GPU 上执行推理的实际工作程序。每个工作人员负责 中指定的单个模型--model-path。

python -m llava.serve.model_worker --host 0.0.0.0 --controller http://localhost:10000 --port 40000 --worker http://localhost:40000 --model-path liuhaotian/llava-v1.5-13b等到进程完成加载模型,您会看到“Uvicorn running on ...”。

现在,刷新您的 Gradio Web UI,您将在模型列表中看到刚刚启动的模型。您可以根据需要启动任意数量的工作程序,并在同一 Gradio 界面中比较不同模型检查点。请保持不变,并将和--controller修改为每个worker的不同端口号。--port--worker

python -m llava.serve.model_worker --host 0.0.0.0 --controller http://localhost:10000 --port <different from 40000, say 40001> --worker http://localhost:<change accordingly, i.e. 40001> --model-path <ckpt2>


如果您使用的是带有 M1 或 M2 芯片的 Apple 设备,则可以使用标志指定 mps 设备--device:--device mps。

  • 多个 GPU,当 GPU VRAM <= 24GB 时

如果您的 GPU 的 VRA&nbsp;小于 24GB(例如 RTX3090、RTX 4090&nbsp;等),您可以尝试使用多个 GPU 运行它。如果您有多个 GPU,我们最新的代码库将自动尝试使用多个 GPU。您可以指定要使用哪些 GPU CUDA_VISIBLE_DEVICES。下面是使用前两个 GPU 运行的示例。

CUDA_VISIBLE_DEVICES=0,1 python -m llava.serve.model_worker --host 0.0.0.0 --controller http://localhost:10000 --port 40000 --worker http://localhost:40000 --model-path liuhaotian/llava-v1.5-13b

  • (4位、8位推理、量化)

您可以使用量化位(4 位、8 位)启动模型工作线程,这样您就可以在减少 GPU 内存占用的情况下运行推理,从而有可能在具有低至 12GB VRAM 的 GPU 上运行。请注意,使用量化位进行的推理可能不如全精度模型准确。只需将--load-4bit或附加--load-8bit到您正在执行的

模型工作器命令即可。下面是使用 4 位量化运行的示例。python -m llava.serve.model_worker --host 0.0.0.0 --controller http://localhost:10000 --port 40000 --worker http://localhost:40000 --model-path liuhaotian/llava-v1.5-13b --load-4bit

  • (LoRA 权重,未合并)

您可以启动具有 LoRA 权重的模型工作线程,无需将它们与基本检查点合并,以节省磁盘空间。会有额外的加载时间,而推理速度与合并检查点相同。未合并的 LoRA 检查点在型号名称中没有lora-merge,并且通常比合并的检查点小得多(小于 1GB)(7B 为 13G,13B 为 25G)。要加载未合并的 LoRA 权重,您只需传递一个附加参数--model-base,它是用于训练 LoRA 权重的基础 LLM。您可以在模型动物园中检查每个 LoRA 权重的基础 LLM 。

python&nbsp;-m&nbsp;llava.serve.model_worker&nbsp;--host&nbsp;0.0.0.0&nbsp;--controller&nbsp;http://localhost:10000&nbsp;--port&nbsp;40000&nbsp;--worker&nbsp;http://localhost:40000&nbsp;--model-path&nbsp;liuhaotian/llava-v1-0719-336px-lora-vicuna-13b-v1.3&nbsp;--model-base&nbsp;lmsys/vicuna-13b-v1.3


这篇关于LLaVA:大型语言和视觉助手,图片识别和理解能力让人惊叹的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/182101

相关文章

C语言中%zu的用法解读

《C语言中%zu的用法解读》size_t是无符号整数类型,用于表示对象大小或内存操作结果,%zu是C99标准中专为size_t设计的printf占位符,避免因类型不匹配导致错误,使用%u或%d可能引发... 目录size_t 类型与 %zu 占位符%zu 的用途替代占位符的风险兼容性说明其他相关占位符验证示

C语言进阶(预处理命令详解)

《C语言进阶(预处理命令详解)》文章讲解了宏定义规范、头文件包含方式及条件编译应用,强调带参宏需加括号避免计算错误,头文件应声明函数原型以便主函数调用,条件编译通过宏定义控制代码编译,适用于测试与模块... 目录1.宏定义1.1不带参宏1.2带参宏2.头文件的包含2.1头文件中的内容2.2工程结构3.条件编

Go语言并发之通知退出机制的实现

《Go语言并发之通知退出机制的实现》本文主要介绍了Go语言并发之通知退出机制的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1、通知退出机制1.1 进程/main函数退出1.2 通过channel退出1.3 通过cont

Go语言编译环境设置教程

《Go语言编译环境设置教程》Go语言支持高并发(goroutine)、自动垃圾回收,编译为跨平台二进制文件,云原生兼容且社区活跃,开发便捷,内置测试与vet工具辅助检测错误,依赖模块化管理,提升开发效... 目录Go语言优势下载 Go  配置编译环境配置 GOPROXYIDE 设置(VS Code)一些基本

深入理解Go语言中二维切片的使用

《深入理解Go语言中二维切片的使用》本文深入讲解了Go语言中二维切片的概念与应用,用于表示矩阵、表格等二维数据结构,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录引言二维切片的基本概念定义创建二维切片二维切片的操作访问元素修改元素遍历二维切片二维切片的动态调整追加行动态

基于Python实现一个图片拆分工具

《基于Python实现一个图片拆分工具》这篇文章主要为大家详细介绍了如何基于Python实现一个图片拆分工具,可以根据需要的行数和列数进行拆分,感兴趣的小伙伴可以跟随小编一起学习一下... 简单介绍先自己选择输入的图片,默认是输出到项目文件夹中,可以自己选择其他的文件夹,选择需要拆分的行数和列数,可以通过

Go语言中make和new的区别及说明

《Go语言中make和new的区别及说明》:本文主要介绍Go语言中make和new的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1 概述2 new 函数2.1 功能2.2 语法2.3 初始化案例3 make 函数3.1 功能3.2 语法3.3 初始化

Go语言中nil判断的注意事项(最新推荐)

《Go语言中nil判断的注意事项(最新推荐)》本文给大家介绍Go语言中nil判断的注意事项,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.接口变量的特殊行为2.nil的合法类型3.nil值的实用行为4.自定义类型与nil5.反射判断nil6.函数返回的

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

Go语言代码格式化的技巧分享

《Go语言代码格式化的技巧分享》在Go语言的开发过程中,代码格式化是一个看似细微却至关重要的环节,良好的代码格式化不仅能提升代码的可读性,还能促进团队协作,减少因代码风格差异引发的问题,Go在代码格式... 目录一、Go 语言代码格式化的重要性二、Go 语言代码格式化工具:gofmt 与 go fmt(一)