LLaVA 简介

news2024/11/14 14:24:57

LLaVA 简介

好奇这张照片是在哪里拍摄的?问 LLaVA!(图片来自Pixabay的Guy Rey-Bellet)。

LLaVA(L arge L anguage 和V isual A ssistant 的缩写)是一种很有前途的开源生成式人工智能模型,它复制了 OpenAI GPT-4 在图像对话方面的一些功能。用户可以将图像添加到 LLaVA 聊天对话中,这样就可以讨论这些图像的内容,也可以用它们来以视觉方式描述想法、背景或情况。

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

这篇文章概述了 LLaVA,更具体地说旨在

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

在线使用 LLaVA

如果您还没有尝试过,使用 LLaVA 最简单的方法是访问其作者提供的Web 界面。下面的屏幕截图说明了界面的运行方式,用户可以根据冰箱内容的图片询问该做什么饭菜。可以使用左侧的小部件加载图像,聊天界面允许提问并以文本形式获得答案。

LLaVA 简介

LLaVA Web 界面

在这个例子中,LLaVA 正确识别了冰箱里的食材,例如蓝莓、草莓、胡萝卜、酸奶或牛奶,并提出了相关的建议,例如水果沙拉、冰沙或蛋糕。

项目网站上给出了与 LLaVA 对话的其他示例,说明 LLaVA 不仅能够描述图像,还能够根据图像中的元素进行推断和推理(使用图片中的线索识别电影或人物、根据图画编码网站、解释幽默情景等)。

在本地运行 LLaVA

LLaVA 还可以使用Ollama或 Mozilla 的“ llamafile ”安装在本地机器上。这些工具可以在大多数仅配备 CPU 的消费级机器上运行,因为该模型只需要 8GB 的​​ RAM 和 4GB 的可用磁盘空间,甚至被证明可以在 Raspberry PI 上成功运行。在围绕 Ollama 项目开发的工具和界面中,一个值得注意的举措是Ollama-WebUI(如下图所示),它再现了 OpenAI ChatGPT 用户界面的外观和感觉。

LLaVA 简介


Ollama Web 用户界面——受OpenAI ChatGPT启发

LLaVA 主要功能简要概述

LLaVA 由威斯康星大学麦迪逊分校、微软研究院和哥伦比亚大学的研究人员设计,最近在 NeurIPS 2023 上展出。该项目的代码和技术规范可以在其Github 存储库中访问,它还提供了与助手交互的各种界面。

正如作者在论文摘要中总结的那样:

[LLava] 在 11 个基准测试中取得了最佳成绩。我们最终的 13B 检查点仅使​​用 1.2M 公开数据,并在单个 8-A100 节点上约 1 天内完成完整训练。我们希望这可以让最先进的 LMM 研究更容易获得。代码和模型将公开。

基准测试结果(如下面的雷达图所示)说明了与其他最先进模型相比的改进。

LLaVA 简介

LLaVA 基准测试结果雷达图(图片来自论文)

内部工作原理

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

LLaVA 简介

LLaVA 网络架构(图片来自论文)

LLaVA 的语言模型和视觉编码器依赖于两个参考模型,分别为 Vicuna 和 CLIP。Vicuna是一个基于 LLaMA-2(由 Meta 设计)的预训练大型语言模型,其性能与中型 LLM 相当(请参阅HuggingFace 上7B和13B版本的模型卡)。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 的此存储库中找到。

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

使用 LLaVA 进行编程:如何开始

代码可在Colab 相关笔记本上找到。

LLaVA 模型集成在 Transformers 库中,可以使用标准管道对象加载。模型的 7B 和 13B 变体可在LLaVA 😊 Hub 空间上使用,并且可以以 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})

然后让我们加载这张图片

LLaVA 简介

我们使用标准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 模型,并要求描述图片。

注意:提示的格式如下

“用户:<图像>\n<提示>\n助手:”

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 简介

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

 欢迎前往我们的公众号,资讯

创作不易,觉得不错的话,点个赞吧!!!

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

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

相关文章

Arduino 定时器 [终极指南](原文)

Arduino Timers [Ultimate Guide] by Khaled Magdy In this tutorial, we’ll discuss Arduino Timers from the very basic concepts all the way to implementing Arduino timer-based systems. We’ll start off by discussing what is a timer, how they work, and what …

最近公共祖先(LCA),树上差分,树的直径总结

最近也是一不小心就学到了树论&#xff0c;这方面确实太不行了&#xff0c;也该开始学习一下了&#xff0c;那么话不多说&#xff0c;进入今日份的树论学习&#xff0c;直接开冲 最近公共祖先&#xff08;LCA&#xff09;——倍增思想&#xff08;可以结合我之前写的ST表学习&…

Windows安装java8\java17并存切换版本操作

问题描述&#xff1a; 首先肯定一台电脑可以安装多个JDK&#xff0c;切换版本也是可实现的。 存在版本切换问题是企业项目用java8&#xff0c;个人研究技术用的17。希望两者并存&#xff0c;随时切换&#xff0c;记录一下操作步骤。 第一&#xff1a;先安装不同版本的jdk到系…

vue项目中,修改elementui一些复杂控件样式

1.前言 在vue项目中&#xff0c;我们为了快速开发&#xff0c;会用到elementui。但很多时候&#xff0c;elementui的样式不满足于我们项目的样式需求。这时候我们需要修改原生elementui的样式。 2.简单控件的样式修改 对于elementui中一些简单的控件&#xff0c;如按钮之类的…

Xshell链接本地20.04Ubuntu虚拟机

一、打开虚拟机设置选择自定义-net8 二、打开虚拟网络编辑器&#xff0c;点击更改设置 三、打开网络设置&#xff0c;如图操作 四。打开虚拟机&#xff0c;进入终端&#xff0c;输入ifconfig 五、su root进入root模式&#xff0c;配置静态网卡 # 备份配置文件 cd /etc/netpla…

Qt:玩转QPainter序列一

前言 最近想潜心研究一下QPainter这个类&#xff0c;最好把QPainter所有的函数都敲一遍&#xff0c;特地记录一下。 在说QPainter之前我们需要了解两个非常重要的东西 第一个坐标系 我用两张图来表示 代码实操的结果 更加详细的坐标系内容请看我的另一篇博客 第二个是有…

一款基于cesium的开源地图工具

Cesium是一个开源的、世界级的、展现3D全球地图的JavaScript类库,它毫无疑问已然成为WebGIS开发中三维地球框架的首选。本次给大家带来的是一个结合CesiumVue的前端地图开发框架&#xff0c;支持很多种地图渲染特效&#xff0c;同时还支持模型加载到地图上面。 开源地址&#…

Linux安装显卡驱动

本文详细阐述了在Linux系统中安装显卡驱动的步骤和注意事项。首先&#xff0c;文章介绍了显卡驱动的重要性&#xff0c;以及为什么需要安装或更新显卡驱动。接着&#xff0c;针对不同类型的显卡&#xff08;如NVIDIA、AMD等&#xff09;&#xff0c;文章提供了具体的安装步骤和…

进程与程序的学习

1、进程与程序 程序:本地文件,编译后产生的文件.elf执行文件,存储在硬盘中的文件;进程:程序运行期间就是一个进程;(主要讨论两个进程的交互)程序是静态的,进程是动态的;程序执行后Linux内核自动完成虚拟内存(资源)分配,成进程; 将数据段、代码段这些运行时必要的…

ProxySQL 读写分离配置

ProxySQL 是一个高性能、高可用的 MySQL 代理软件&#xff0c;旨在提升 MySQL 数据库的可扩展性和性能。它可以在应用程序和 MySQL 服务器之间充当中间层&#xff0c;提供强大的路由、负载均衡和查询优化功能。 ProxySQL 的主要功能&#xff1a; 查询路由&#xff1a; ProxySQ…

王者站撸分析

王者站撸分析 问题背景 有这样两个角色 其中一个角色的被动是受到攻击会减少攻击者的攻速1%,该被动可以叠加40层 另一个角色的被动是攻击敌方会提升自己1%的免伤效果&#xff0c;该被动可以叠加20层。 在站撸情况下 哪方胜算更大&#xff1f; 为了解决这个问题&#xff0c;我…

基于Flask-REXTs创建一个项目接口并利用github上传部署

实习过程中需要自己单独编写一个项目使用到的api&#xff0c;并独立完成api的上传部署&#xff0c;这里记录一下全过程。 第一步 编写本地代码 IDE pycharm上创建一个项目名称&#xff0c;然后所有项目文件及结构如下&#xff1a; 其中app.py文件就是实现的接口&#xff0c;就…

ant design pro 如何实现动态菜单带上 icon 的

ant design pro 如何去保存颜色ant design pro v6 如何做好角色管理ant design 的 tree 如何作为角色中的权限选择之一ant design 的 tree 如何作为角色中的权限选择之二ant design pro access.ts 是如何控制多角色的权限的ant design pro 中用户的表单如何控制多个角色 如上图…

免费无损音乐、音效素材,马住着6个网站

如果你正在寻找免费的无损音乐和音效素材&#xff0c;这里有6个网站可以帮助你找到高质量的资源。无论是制作视频、播客还是其他创意项目&#xff0c;这些平台提供了丰富的选项&#xff0c;满足你的各种需求。 1、菜鸟图库 音效素材下载_mp3音效大全 - 菜鸟图库 菜鸟图库音…

Datawhale X 李宏毅苹果书 AI夏令营 学习笔记(三)

批量归一化(Batch Normalization&#xff0c;BN) 如果说自适应学习率是让训练适应loss&#xff0c;那归一化就是让loss适应训练。 我们抛掉使用自适应学习率的想法&#xff0c;重新看下面的图。可以看到w1固定时&#xff0c;w2的梯度是比较大的。w2固定时&#xff0c;w1的梯度…

GitHub开源的PDF管理工具Stirling-pdf

Stirling pdf 手动搭建docker搭建 官网&#xff1a;https://github.com/Stirling-Tools/Stirling-PDF 手动搭建 Ubuntu2404环境 安装所需软件包 apt install -y git automake autoconf libtool libleptonica-dev pkg-config zlib1g-dev make g openjdk-21-jdk python3…

【R语言】基于nls函数的非线性拟合

非线性拟合 1.写在前面2.实现代码 1.写在前面 以下代码记录了立地指数的计算过程&#xff0c;包括了优势树筛选、误差清理、非线性拟合以及结果成图。 优势树木确定以及数据清理过程&#xff1a; 相关导向函数&#xff1a; 2.实现代码 ##*******************************…

web测试之功能测试常用的方法有哪几种?有什么要点要注意?

1、前言 功能测试就是对产品的各功能进行验证&#xff0c;根据功能测试用例&#xff0c;逐项测试&#xff0c;检查产品是否达到用户要求的功能。 2、常用的测试方法如下&#xff1a; 1、页面链接检查&#xff1a; 每一个链接是否都有对应的页面&#xff0c;并且页面之间切换…

在Excel中“直接引用”字符串地址

indirect是Excel唯一可以拥有直接解析字符串引用地址参数能力的函数&#xff0c;是绝无仅有的宝贝疙瘩。 (笔记模板由python脚本于2024年08月21日 12:45:49创建&#xff0c;本篇笔记适合喜欢用Excel处理数据的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;ht…

Navicat中怎么查看数据库密码

一、版本问题 场景&#xff1a;在配置数据库连接后&#xff0c;忘记了数据库的密码&#xff0c;想要找回来。 其实有些版本&#xff08;好像是低版本才有&#xff0c;具体哪个版本就没去研究了&#xff09;在配置连接页面&#xff0c;是有个选项勾选是否显示密码的&#xff0…