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

news2024/11/27 12:29:11

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(5)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—12种聚类算法说明与归纳

目录 一、12种聚类(无监督学习)算法说明和区分比较 聚类算法的类型(一) ​编辑导入函数库 加载数据集 ​编辑 (1)K-Means --Centroid models (2)Mini-Batch K-Means -- Centroid models (3)AffinityPropagation (Hierarchical) -- Connectivity models (4)Mean Shift…

最新GPT4.0使用教程,AI绘画,GPT语音对话使用,DALL-E3文生图

一、前言 ChatGPT3.5、GPT4.0、GPT语音对话、Midjourney绘画&#xff0c;文档对话总结DALL-E3文生图&#xff0c;相信对大家应该不感到陌生吧&#xff1f;简单来说&#xff0c;GPT-4技术比之前的GPT-3.5相对来说更加智能&#xff0c;会根据用户的要求生成多种内容甚至也可以和…

算法练习-三数之和(思路+流程图+代码)

难度参考 难度&#xff1a;中等 分类&#xff1a;数组 难度与分类由我所参与的培训课程提供&#xff0c;但需要注意的是&#xff0c;难度与分类仅供参考。且所在课程未提供测试平台&#xff0c;故实现代码主要为自行测试的那种&#xff0c;以下内容均为个人笔记&#xff0c;旨在…

openGauss学习笔记-214 openGauss 性能调优-确定性能调优范围

文章目录 openGauss学习笔记-214 openGauss 性能调优-确定性能调优范围214.1 性能因素214.2 调优范围确定 openGauss学习笔记-214 openGauss 性能调优-确定性能调优范围 数据库性能调优通常发生在用户对业务的执行效率不满意&#xff0c;期望通过调优加快业务执行的情况下。正…

机器学习的整个流程

机器学习的整个流程定义了数据科学团队执行以创建和交付机器学习模型的工作流。此外&#xff0c;机器学习流程还定义了团队如何协作合作&#xff0c;以创建最有用的预测模型。 机器学习high level的流程 机器学习流程的关键步骤包括问题探索&#xff08;Problem Exploration&a…

《dx12 龙书》第四部分学习笔记——预备知识(下)

7、多重采样技术的原理 由于屏幕中显示的像素不可能是无穷小的&#xff0c;所以并不是任意一条直线都能在显示器上“平滑”而完美地呈现出来。即为以像素矩阵 &#xff08;matrix of pixels&#xff0c; 可以理解为“像素2D数组”&#xff09;逼近直线的方法所产生的“阶梯” &…

C# 使用 MailKit 接收邮件(附demo)

C# 使用 MailKit 接收邮件&#xff08;附demo&#xff09; 介绍安装包&#xff08;依赖&#xff09;案例简单代码 获取附件核心代码完整代码 介绍一下POP3 介绍 MailKit 是一个开源的 C# 邮件处理库&#xff0c;用于在应用程序中发送和接收电子邮件。它提供了一个强大且易于使…

linux实时调度

面对陌生的知识体系&#xff0c;应该从什么角度来 简介 一、进程管理基本概念 在单处理器系统上&#xff0c;在给定时刻只有一个程序可以运行&#xff0c;在多处理器系统上&#xff0c;可以真正并行运行的进程数据&#xff0c;取决于物理CPU的数目&#xff1b; 进程优先级 …

jss/css/html 相关的技术栈有哪些?

js 的技术组件有哪些&#xff1f;比如 jQuery vue 等 常见的JavaScript技术组件&#xff1a; jQuery&#xff1a; jQuery是一个快速、小巧且功能丰富的JavaScript库&#xff0c;用于简化DOM操作、事件处理、动画效果等任务。 React&#xff1a; React是由Facebook开发的用于构…

FPGA高端项目:IMX327 MIPI 视频解码 USB3.0 UVC 输出,提供FPGA开发板+2套工程源码+技术支持

目录 1、前言免责声明 2、相关方案推荐我这里已有的 MIPI 编解码方案 3、本 MIPI CSI-RX IP 介绍4、个人 FPGA高端图像处理开发板简介5、详细设计方案设计原理框图IMX327 及其配置MIPI CSI RX图像 ISP 处理图像缓存UVC 时序USB3.0输出架构 6、vivado工程详解FPGA逻辑设计 7、工…

docker 网络模型

一、docker的网络模型分为四种 【1】Host(与宿主机共享一个网络)&#xff0c;宿主机的localhost 及 容器内的localhost 【2】Bridge(与宿主机共享一个局域网&#xff0c;有自己的网络&#xff1b;docker运行默认Bridge)&#xff1b;容器内localhost不是宿主机localhost 【3】…

PyTorch 2.2 中文官方教程(五)

对抗性示例生成 原文&#xff1a;pytorch.org/tutorials/beginner/fgsm_tutorial.html 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 注意 点击这里下载完整的示例代码 作者&#xff1a; Nathan Inkawhich 如果您正在阅读本文&#xff0c;希望您能欣赏一些机器学习…

MySQL | DDL 里 TEXT、JSON 类型字段不设置默认值

JSON、BLOB、TEXT 等类型字段的默认值需要设置为表达式&#xff0c;但在旧版本&#xff08;8.0.13&#xff09;前只支持设置字面量&#xff0c;参考官方文档&#xff1a;MySQL :: MySQL 8.0 Reference Manual :: 11.6 Data Type Default Values。 PS&#xff1a;还有说是考虑减…

【刷题题解】编辑距离

给你两个单词 word1 和 word2&#xff0c; 请返回将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作&#xff1a; 插入一个字符删除一个字符替换一个字符 这道题也是&#xff0c;一眼动态规划&#xff0c;乍一看感觉很复杂&#xff0c;仔细思考…

4.0 HDFS 配置与使用

之前提到过的 Hadoop 三种模式&#xff1a;单机模式、伪集群模式和集群模式。 单机模式&#xff1a;Hadoop 仅作为库存在&#xff0c;可以在单计算机上执行 MapReduce 任务&#xff0c;仅用于开发者搭建学习和试验环境。 伪集群模式&#xff1a;此模式 Hadoop 将以守护进程的…

2020年通信工程师初级专业实务真题

文章目录 一、第1章 现代通信网概述&#xff1a;信令网、同步网、管理网。第10章 通信业务&#xff1a;通信产业链&#xff0c;通信终端的分类&#xff0c;通信业务的定义及分类二、第3章 接入网&#xff1a;无线接入网的优点&#xff0c;接入网的接口&#xff08;UNI&#xff…

tar包部署nginx

理论部分 1.基本概念​ Nginx&#xff08;engine x&#xff09;是一个高性能的HTTP和反向代理Web服务器&#xff0c;同时也提供了IMAP、POP3、SMTP服务。中国大陆使用Nginx网站用户有百度、京东、新浪、网易、腾讯、淘宝等。 2.主要用途​ 在连接高并发的情况下&#xff0c;N…

JavaWeb之HTML-CSS --黑马笔记

什么是HTML ? 标记语言&#xff1a;由标签构成的语言。 注意&#xff1a;HTML标签都是预定义好的&#xff0c;HTML代码直接在浏览器中运行&#xff0c;HTML标签由浏览器解析。 什么是CSS ? 开发工具 VS Code --安装文档和安装包都在网盘中 链接&#xff1a;https://p…

全新 鸿蒙系统

一&#xff0c; 开发框架 基础 二&#xff0c; 官网地址 文档开发&#xff1a;华为HarmonyOS智能终端操作系统官网 | 应用设备分布式开发者生态 三&#xff0c;基础了解 鸿蒙系统是基于 js 和 ts 衍生出来的一个东西 要学 arkts 就要学习 js 和 ts 语法 四&#xff0c…

Sklearn、TensorFlow 与 Keras 机器学习实用指南第三版(二)

原文&#xff1a;Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第三章&#xff1a;分类 在第一章中&#xff0c;我提到最常见的监督学习任务是回归&#xff08;预测值&#xff09;和分类&#…