LLaVA:GPT-4V(ision) 的新开源替代品

LLaVA:GPT-4V(ision) 的新开源替代品。

在这里插入图片描述

LLaVA (https://llava-vl.github.io/,是 Large Language 和Visual A ssistant的缩写)。它是一种很有前景的开源生成式 AI 模型,它复制了 OpenAI GPT-4 在与图像对话方面的一些功能。

用户可以将图像添加到 LLaVA 聊天对话中,可以以聊天方式讨论这些图像的内容,还可以将它们用作以视觉方式描述想法、上下文或情况等方式。

LLaVA 最引人注目的功能是它能够改进其他开源解决方案,同时使用更简单的模型架构和更少的训练数据。这些特性使得 LLaVA 不仅训练速度更快、成本更低,而且更适合在消费类的硬件上进行推理。

在这里插入图片描述

本篇文章将概述 LLaVA,其目标如下:

展示如何从网页界面进行试验,以及如何将其安装在您的计算机或笔记本电脑上
详细解释其主要技术特性
说明如何使用它进行编程,以使用 Google Colab 上的 HuggingFace 库( Transformers和Gradio )构建的简单聊天机器人应用程序为例。
在线使用 LLaVA

如果你还没有尝试过它,使用 LLaVA 最简单的方法是访问其作者提供的Web 界面。

下面的屏幕截图说明了其界面的运行方式,用户根据冰箱内容的图片询问要做什么饭菜。可以使用左侧的小部件加载图像,其聊天界面允许用户以文本形式提出问题并获得答案。

访问地址:https://llava.hliu.cc/

在这里插入图片描述

在这里插入图片描述
LLaVA 网页界面:https://llava.hliu.cc/

在上面的对话示例中,LLaVA 已经正确识别了冰箱中存在的成分,例如蓝莓、草莓、胡萝卜、酸奶或牛奶,并提出相关建议,例如水果沙拉、冰沙或蛋糕。

该项目网站(
https://llava-vl.github.io/)上还给出了与 LLaVA 对话的其他示例,这说明了 LLaVA 不仅能够描述图像,还能够根据图像中的元素进行推理和推理(使用图片中的线索识别电影或人,从绘图中编写一个网站,解释段子文案等)。

如何本地运行 LLaVA

LLaVA 还可以使用Ollama(https://ollama.ai/)或 Mozilla ’ llamafile’ (
https://github.com/Mozilla-Ocho/llamafile)安装在本地计算机上。

这些工具可以在大多数仅使用 CPU 的消费级机器上运行,因为该模型仅需要 8GB RAM 和 4GB 可用磁盘空间,甚至被证明可以在 Raspberry PI (相关链接:
https://towardsdatascience.com/running-local-llms-and-vlms-on-the-raspberry-pi-57bd0059c41a)上成功运行。

在围绕 Ollama 项目开发的工具和界面中,一个值得注意的举措是Ollama-WebUI(如下所示),它再现了 OpenAI ChatGPT 用户界面的外观和感觉。

在这里插入图片描述

LLaVA 主要功能简介

LLaVA 由威斯康星大学麦迪逊分校、微软研究院和哥伦比亚大学的研究人员设计,最近在 NeurIPS 2023 上进行了展示。该项目的代码和技术规范可以在其Github 存储库上访问。该存储库地址如下:

https://github.com/haotian-liu/LLaVA

作者在论文摘要中总结道:

[LLava] 在 11 项基准测试中达到了最先进的水平。我们的最终 13B 检查点仅使用 120 万个公开可用数据,并在单个 8-A100 节点上约 1 天完成完整训练。我们希望这能让最先进的 LMM 研究变得更容易实现。代码和模型将公开。

详细地址:
https://arxiv.org/pdf/2310.03744.pdf

本文中以雷达图形式报告的基准测试结果说明了与其他最先进模型相对比的改进。

在这里插入图片描述

LLaVA内部运作流程

LLaVA 的数据处理工作流程在概念上很简单。

该模型本质上作为标准因果语言模型工作,将语言指令(用户文本提示)作为输入,并返回语言响应。语言模型处理图像的能力是由单独的视觉编码器模型实现的,该模型将图像转换为语言标记,这些标记被悄悄地添加到用户文本提示中(充当一种软提示)。

LLaVA 执行过程,来看下图所示。
在这里插入图片描述
LLaVA 的语言模型和视觉编码器分别依赖于两个参考模型:Vicuna 和 CLIP。

Vicuna基于 LLaMA-2(由 Meta 设计)的预训练大型语言模型,其性能与中型 LLM 具有竞争力。

CLIP (https://openai.com/research/clip)是 OpenAI 设计的图像编码器,经过预训练,可使用对比语言图像预训练(因此称为“CLIP”)在类似的嵌入空间中对图像和文本进行编码。

LLaVA 中使用的模型是视觉变换器变体 CLIP-ViT-L/14(请参阅HuggingFace 上的模型卡)。

为了将视觉编码器的维度与语言模型的维度相匹配,应用了投影模块(上图中的W )。它是原始LLaVA中的简单线性投影,以及LLaVA 1.5中的两层感知器。

训练流程

LLaVA 的训练过程由两个相对简单的阶段组成。

第一阶段目标在调整投影模块W,并且视觉编码器和LLM的权重保持冻结。使用来自CC3M 概念字幕数据集的大约 600k 图像/字幕对的子集来执行训练,并且可以在该存储库的HuggingFace 上找到。

在第二阶段,使用 158K 语言图像指令跟踪数据的数据集,对投影模块权重W与 LLM 权重一起进行微调(同时保持视觉编码器的权重冻结)。数据是使用 GPT4 生成的,具有对话示例、详细描述和复杂推理,也可在 HuggingFace 上的存储库中获取。

整个训练大约需要一天时间,使用 8 个 A100 GPU。

使用 LLaVA 编程:如何开始

LLaVA 模型集成在 Transformers 库中,可以使用标准管道对象加载。模型的 7B 和 13B 变体可在LLaVA GitHub 空间上使用,并且可以以 4 和 8 位加载以节省 GPU 内存。下面我们将说明如何使用可在具有 T4 TPU(15GB RAM GPU)的 Colab 上执行的代码来加载和运行模型。

下面是以 4 位加载 LLaVA 1.5 的 7B 变体的代码片段:

from transformers import pipeline, BitsAndBytesConfig
import torch

quantization_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_compute_dtype=torch.float16
)

model_id = "llava-hf/llava-1.5-7b-hf"

pipe = pipeline("image-to-text", model=model_id, model_kwargs={"quantization_config": quantization_config})

使用标准的PIL库来加载图片:

import requests
from PIL import Image


image_url = "https://cdn.pixabay.com/photo/2018/01/29/14/13/italy-3116211_960_720.jpg"
image = Image.open(requests.get(image_url, stream=True).raw)
image

最后让我们用图像查询 LLaVA 模型,并提示要求描述图片。提示格式如下

“USER: \n\nASSISTANT:”

prompt = "USER: <image>\nDescribe this picture\nASSISTANT:"


outputs = pipe(image, prompt=prompt, generate_kwargs={"max_new_tokens": 200})
print(outputs[0]['generated_text'])

它将返回以下答案:

用户:请描述一下这张图片
助理:图片上有一个巨大的、空荡荡的圆形剧场,背景是令人惊叹的海洋景色。圆形剧场周围是郁郁葱葱的绿色山坡,远处可以看到雄伟的山峰。景色宁静而美丽,阳光照耀着大地。

LLaVA 聊天机器人

我们最终创建一个依赖于 LLaVA 模型的简单聊天机器人。我们将使用Gradio 库,它提供了一种快速、简单的方法来创建机器学习 Web 界面。

该界面的核心由一行图像上传器(一个 Gradio Image 对象)和一个聊天界面(一个 Gradio ChatInterface对象)组成。

import gradio as gr

with gr.Blocks() as demo:

    with gr.Row():
      image = gr.Image(type='pil', interactive=True)

      gr.ChatInterface(
          update_conversation, additional_inputs=[image]
      )

聊天界面连接到一个函数update_conversation,该函数负责保存对话历史记录,并在用户发送消息时调用 LLaVA 模型进行响应。

def update_conversation(new_message, history, image):

    if image is None:
        return "Please upload an image first using the widget on the left"

    conversation_starting_from_image = [[user, assistant] for [user, assistant] in history if not assistant.startswith('Please')]

    prompt = "USER: <image>\n"

    for i in range(len(history)):
        prompt+=history[i][0]+'ASSISTANT: '+history[i][1]+"USER: "

    prompt = prompt+new_message+'ASSISTANT: '

    outputs = pipe(image, prompt=prompt, generate_kwargs={"max_new_tokens": 200, "do_sample" : True, "temperature" : 0.7})[0]['generated_text']

    return outputs[len(prompt)-6:]

调用launch方法启动界面。

demo.launch(debug=True)

几秒钟后,将出现聊天机器人 Web 界面:
在这里插入图片描述

恭喜,您的 LLaVA 聊天机器人现在已经启动,并成功运行!

相关参考链接:

HuggingFace LLaVA 模型文档:
https://huggingface.co/docs/transformers/model_doc/llava

Llava 抱脸组织
https://huggingface.co/llava-hf

使用 AutoPrecessor 和 LLaVAForConditionalGeneration 加载并运行 LLaVA:Colab 笔记本
https://colab.research.google.com/drive/1_q7cOB-jCu3RExrkhrgewBR0qKjZr-Sx

GPT-4V(ision)系统卡
https://cdn.openai.com/papers/GPTV_System_Card.pdf

视觉指令调整
https://newsletter.artofsaience.com/p/understanding-visual-instruction

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

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

相关文章

SpringCloud-生产者和消费者

一、生产者和消费者的定义 在 Spring Cloud 中&#xff0c;术语 "生产者" 和 "消费者" 用于描述微服务架构中的两种基本角色。 角色定义生产者 Provider生产者是提供具体服务或功能的模块。它将业务逻辑封装成服务&#xff0c;供其他模块调用。生产者向服…

如何构建多种系统架构支持的 Docker 镜像

如何构建多种系统架构支持的 Docker 镜像 1.概述2.解决方案3.使用manifest案例 1.概述 我们知道使用镜像创建一个容器&#xff0c;该镜像必须与 Docker 宿主机系统架构一致&#xff0c;例如 Linux x86_64 架构的系统中只能使用 Linux x86_64 的镜像创建容器 例如我们在 Linux…

python Flask 写一个简易的 web 端上传文件程序 (附demo)

python Flask 写一个简易的 web 端上传文件程序 &#xff08;附demo&#xff09; 需求介绍核心代码&#xff1a; 文件结构前端文件后端文件 完整代码演示 需求 在当今数字化时代&#xff0c;文件上传需求日益普遍。无论是个人还是企业&#xff0c;都可能需要实现文件上传功能。…

商业智能(BI)数据分析、挖掘概念

商业智能&#xff08;BI&#xff09;数据分析挖掘概念 一、商业智能&#xff08;BI&#xff09;数据分析挖掘概念 数据挖掘目前在各类企业和机构中蓬勃发展。因此我们制作了一份此领域常见术语总结。 1.分析型客户关系管理&#xff08;Analytical CRM/aCRM 用于支持决策&…

MySQL集群 1主1从 主从复制(原理 及配置命令)

CSDN 成就一亿技术人&#xff01; 今天分享一期 MySQL集群方案&#xff1a;主从集群 也是最常用的一种 CSDN 成就一亿技术人&#xff01; 目录 使用主从复制的原因&#xff08;优点&#xff09; 主从复制的过程&#xff08;原理&#xff09; 了解两大线程&#xff08; I/O…

day 19 (进阶)

一 首先 昨日内容回顾 思维导图&#xff1a;&#xff08;日更附 养成习惯 加油&#xff09; 补充Linux思维导图 衔接一下之前学过的 二 课堂知识提炼 练习&#xff1a;统计文件行数 想查看是否正确就用 grep -c “文件名” 来看 会输出结果 练习&#xff1a;把file.c里面的…

数据包跟踪器-实施 DHCPv4

实验大纲 第 1 部分&#xff1a;把路由器配置为 DHCP 服务器 步骤 1&#xff1a;配置要排除在外的 IPv4 地址 步骤 2&#xff1a;在 R2 上 给 R1 LAN 创建一个 DHCP 池 步骤 3&#xff1a;在 R2 上 给 R3 LAN 创建一个 DHCP 池 第 2 部分&#xff1a;配置 DHCP 中继 步骤…

爱上算法:每日算法(24-2月4号)

&#x1f31f;坚持每日刷算法&#xff0c;&#x1f603;将其变为习惯&#x1f91b;让我们一起坚持吧&#x1f4aa; 文章目录 [232. 用栈实现队列](https://leetcode.cn/problems/implement-queue-using-stacks/)思路CodeJavaC 复杂度 [225. 用队列实现栈](https://leetcode.cn/…

Maven配置笔记

1、下载Maven 在Maven的官网即可下载&#xff0c;点击访问Apache Maven。 2、配置环境变量 chcp 65001 echo off set mvnhomeE:\apache-maven-3.8.4 rem LPY echo. echo ************************************************************ echo * …

手写分布式存储系统v0.3版本

引言 承接 手写分布式存储系统v0.2版本 &#xff0c;今天开始新的迭代开发。主要实现 服务发现功能 一、什么是服务发现 由于咱们的服务是分布式的&#xff0c;那从服务管理的角度来看肯定是要有一个机制来知道具体都有哪些实例可以提供服务。举个例子就是&#xff0c;张三家…

ConcurrentHashMap的使用以及源码分析

一、ConcurrentHashMap&#xff1f; 1.1 存储结构 ConcurrentHashMap是线程安全的HashMap ConcurrentHashMap在JDK1.8中是以CASsynchronized实现的线程安全 CAS&#xff1a;在没有hash冲突时&#xff08;Node要放在数组上时&#xff09; synchronized&#xff1a;在出现ha…

Linux实验记录:使用BIND提供域名解析服务

前言&#xff1a; 本文是一篇关于Linux系统初学者的实验记录。 参考书籍&#xff1a;《Linux就该这么学》 实验环境&#xff1a; VmwareWorkStation 17——虚拟机软件 RedHatEnterpriseLinux[RHEL]8——红帽操作系统 备注&#xff1a; 为了降低用户访问网络资源的门槛&am…

解决IntellIJ Idea内存不足

突然有一天我在IDEA打开两个项目时&#xff0c;发生了报错&#xff0c;说我内存不足&#xff0c;我这电脑内存16G怎么会内存不足。下面是我的解决方案。 IntelliJ IDEA 报告内存不足的原因通常与以下几个因素有关&#xff1a; 项目规模较大&#xff1a;如果您正在开发的项目非…

【Python之Git使用教程001】Git简介与安装

一、简介 Git其实就是一个分布式版本的控制系统&#xff0c;在分布式版本的控制系统&#xff0c;大家都拥有一个完整的版本库&#xff0c;不需要联网也可以提交修改&#xff0c;所以中心服务器就显得不那么重要。由于大家都拥有一个完整的版本库&#xff0c;所有只需要把各自的…

假期刷题打卡--Day23

1、MT1190分数乘法 输入5组分数&#xff0c;对他们进行乘法运算&#xff0c;输出结果。不考虑分母为0等特殊情况。 格式 输入格式&#xff1a; 输入整型&#xff0c;每组一行&#xff0c;如样例所示。 输出格式&#xff1a; 输出计算结果实型&#xff0c;如样例所示。 样…

Centos 7.5 安装 NVM 详细步骤

NVM&#xff08;Node Version Manager&#xff09;是一个用于管理Node.js版本的工具&#xff0c;它可以让你轻松地在多个版本之间切换。NVM 通过下载和管理 Node.js 的多个版本&#xff0c;为用户提供了一种灵活的方式来使用不同版本的 Node.js。如果你需要更多关于NVM的信息&a…

【MySQL进阶】事务原理

文章目录 事务机制基本介绍事务管理基本操作提交方式事务 ID 隔离级别四种级别加锁分析 原子特性实现方式实现原理undo log 隔离特性实现方式MVCC实现原理隐藏字段undo logRead View RC RR 持久特性实现方式redo log 一致特性 面试题MySQL的ACID特性分别是怎么实现的&#xff1…

工信部颁发的《计算机视觉处理设计开发工程师》中级证书

计算机视觉&#xff08;Computer Vision&#xff09;是一门研究如何让计算机能够理解和分析数字图像或视频的学科。简单来说&#xff0c;计算机视觉的目标是让计算机能够像人类一样对视觉信息进行处理和理解。为实现这个目标&#xff0c;计算机视觉结合了图像处理、机器学习、模…

在java中获取excel的cell值的时候报错

在获取cell的时候&#xff0c;通常会有报错类型不匹配的问题&#xff0c;这是因为你的cell中存储的数据类型和使用的方法不匹配的原因&#xff0c;假如说cell中存储了一个数字&#xff0c;但是使用的cell.getStringCellValue()获取值&#xff0c;就会有如下错误 java.lang.Ill…

属性“xxxx”在类型“ArrayConstructor”上不存在。是否需要更改目标库? 请尝试将 “lib” 编译器选项更改为“es2015”或更高版本。

使用vscode编写vue&#xff0c;在使用elementUI时&#xff0c;发现代码中的form报错如下&#xff1a; 属性“form”在类型“ArrayConstructor”上不存在。是否需要更改目标库? 请尝试将 “lib” 编译器选项更改为“es2015”或更高版本。 解决方法&#xff1a; 打开jsconfig.…