LLaVA 简介

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 Imageimage_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 grwith 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.mzph.cn/diannao/52364.shtml

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

相关文章

【数据结构】堆主要的应用场景

1. 堆排序 所谓堆排序&#xff0c;就是在堆的基础上进行排序。 在讲解堆排序之前&#xff0c;让我们先来回顾一下堆的概念&#xff0c; 1.1 大根堆和小根堆 堆是一种完全二叉树&#xff0c;它有两种形式&#xff0c;一种是大根堆&#xff0c;另外一种是小根堆。 大根堆&…

Java共享内容通信 VS Golang通信共享内存

接触的编程语言从C到Java再到现在Go&#xff0c;每个语言都有其独有特性&#xff0c;也具备共通之处。 最近在学习并发编程的时候&#xff0c;发现一个很有意思的点&#xff1a;Java基于共享共享内存通信&#xff0c;而Golang则是通过通信共享内存。为什么&#xff1f;下面我们…

主机监控与审计系统是什么?这个功能让您的效率翻倍!

天下之事&#xff0c;皆需明察秋毫&#xff0c;方能运筹帷幄&#xff0c;决胜千里。 于信息之海&#xff0c;主机者&#xff0c;犹若疆土之基石&#xff0c;承载着数据之重&#xff0c;运行着系统之脉。 然&#xff0c;世事如棋局局新&#xff0c;网络之域&#xff0c;暗流涌…

缓存之Tair

介绍 ​ 在Tair出现之前的很长一段时间里&#xff0c;像redis、memcache这些知名NoSql数据库是不支持分布式的&#xff0c;在这样的背景下&#xff0c;由淘宝网自主开发并在2010.6开源的一个高性能、高扩展、高可靠分布式缓存&#xff0c;类似map的key/value结构&#xff0c;在…

【算法】粒子群优化

一、引言 粒子群优化算法&#xff08;Particle Swarm Optimization, PSO&#xff09;是一种基于群体智能的优化技术&#xff0c;由Eberhart和Kennedy在1995年提出。它模拟鸟群觅食行为&#xff0c;通过个体与群体的协作来寻找最优解。通过模拟一群粒子的运动来寻找最优解。每个…

qtcreator的vim模式下commit快捷键ctrl+g,ctrl+c没有反应的问题

首先开启vim后&#xff0c;CtrlG&#xff0c;CtrlC无法用 解决&#xff1a; 工具 -> 选项->FakeVim 转到Ex Command Mapping 搜索Commit 底栏Regular expression 输入commit &#xff08;理论上可以是随意的单词&#xff09; 设置好后&#xff0c;以后要运行&#x…

ETF指数通行红绿灯对接自动交易框架!添加绿灯品种进交易池!股票量化分析工具QTYX-V2.8.9...

前言 我们的股票量化系统QTYX在实战中不断迭代升级!!! 指数通行红绿灯作用就是识别出上升和下降趋势品种。对于上升趋势的品种&#xff0c;在红转绿时买入&#xff0c;绿转红时卖出&#xff0c;当识别出下降趋势后要果断离场&#xff01; 在QTYX的2.8.7版本我们推出了“ETF全自…

【css】伪元素实现跟随鼠标移动的渐变效果

主要功能是在按钮上实现鼠标跟随渐变效果。每当用户将鼠标移动到按钮上时&#xff0c;按钮会显示一个以鼠标位置为中心的渐变效果。 1. 核心部分: 监听鼠标在元素内移动 监听鼠标在元素内移动&#xff0c;并触发该事件。 const handleMouseMove (e: MouseEvent) > {if (…

el-form中使用v-model和prop实现动态校验

如何在Vue的el-form中使用v-model和prop实现动态校验&#xff0c;包括多个变量控制校验、数组循环校验和字段级条件显示。通过实例演示了如何配合rules和自定义验证函数来确保表单的完整性和有效性。 公式&#xff1a; 动态校验项的v-model的绑定值 el-form的属性 :model的值 …

多系统萎缩不慌张,这些维生素是你的“守护神”✨

亲爱的朋友们&#xff0c;今天我们来聊聊一个可能不太为人熟知但至关重要的健康话题——多系统萎缩&#xff08;MSA&#xff09;。面对这样的挑战&#xff0c;除了医疗治疗&#xff0c;日常的营养补充也是不可或缺的一环。特别是维生素&#xff0c;它们在我们的身体中扮演着举足…

FastGPT+ollama 搭建私有AI大模型智能体工作流-Mac

一、大模型工作流的优势 1. 降低任务门槛&#xff1a;工作流可以将复杂任务分解成多个小任务&#xff0c;降低每个任务的复杂度&#xff0c;从而减少对提示词和大模型推理能力的依赖。这样可以提升大模型处理复杂任务的性能和容错能力。 2. 提升任务效率&#xff1a;工作流可以…

【OpenHarmony】openharmony移植到RK3568------获取源码编译OpenHarmony源码

一、源码获取 源码获取有好几种方式&#xff0c;在这里直接在镜像网站下载源码&#xff0c;点击下面连接下载全量版本的OpenHarmony4.1 https://repo.huaweicloud.com/openharmony/os/4.1-Release/code-v4.1-Release.tar.gz 将源码放到自己建立的目录下解压&#xff0c;我放…

PHP轻创推客集淘客地推任务平台于一体的综合营销平台系统源码

&#x1f680;轻创推客&#xff0c;营销新纪元 —— 集淘客与地推任务于一体的全能平台&#x1f310; &#x1f308;【开篇&#xff1a;营销新潮流&#xff0c;轻创推客引领未来】 在瞬息万变的营销世界里&#xff0c;你还在为寻找高效、全面的营销渠道而烦恼吗&#xff1f;&…

[Meachines] [Easy] jerry Tomcat用户暴力破解+war包webshell上传

信息收集 IP AddressOpening Ports10.10.10.95TCP:8080 $ sudo masscan -p1-65535 10.10.10.95 --rate1000 -e tun0 > /tmp/ports $ ports$(cat /tmp/ports | awk -F " " {print $4} | awk -F "/" {print $1} | sort -n | tr \n , | sed s/,$//) $ …

微服务——远程调用

为什么需要远程调用&#xff1f; 在微服务架构中&#xff0c;每个服务都是独立部署和运行的&#xff0c;它们之间需要相互协作以完成复杂的业务逻辑。因此&#xff0c;远程调用成为微服务之间通信的主要方式。通过远程调用&#xff0c;一个服务可以请求另一个服务执行某些操作或…

【前端面试】操作系统

进程与线程 进程线程定义是计算机中的程序关于某数据集合上的一次运行活动&#xff0c;是系统进行资源分配和调度的基本单位是进程中的一个实体&#xff0c;是CPU调度和分派的基本单位&#xff0c;共享进程的资源资源分配拥有独立的内存空间和系统资源共享进程的内存和资源开销…

Educational Codeforces Round 169 (Rated for Div. 2)

前言 电脑显示屏一闪一闪地感觉要拿去修了&#xff0c;比赛时重启了好几次。 手速场&#xff0c;E 题没学过 Sprague-Grundy 吃了亏&#xff0c;好在前四题都一发过才不至于掉分。 Standings&#xff1a;1214 题目链接&#xff1a;Dashboard - Educational Codeforces Round 16…

【架构设计】-- aarch(ARM) and X86

1、aarch(ARM) 架构 &#xff08;1&#xff09;操作系统支持&#xff1a;早期为 32 位操作系统&#xff0c;目前大部分都是 64 位操作系统 &#xff08;2&#xff09;全称&#xff1a;Advanced RISC Machine&#xff0c;由英国ARM Holdings plc公司开发 这种架构主要⽤于智能…

Android车载蓝牙音乐实例(附Demo源码):实现手机播放音乐后车机应用显示音乐名称,歌手,专辑名。且可控制上一曲下一曲,暂停播放功能

一、功能需求 功能需求是在Android10以上设备上实现蓝牙音乐功能&#xff0c;细分为两个功能点&#xff1a; 1、手机和车载设备实现蓝牙连接 &#xff08;本Demo文只做监听蓝牙连接状态&#xff0c;需手动到设置中连接蓝牙&#xff09; 2、连接蓝牙成功后手机播放音乐时车载…

leetcode 递归(回溯)——java实现

递归算法与DFS类似&#xff0c;也与二叉树的先序遍历类似 以下摘自 leetcode回溯算法入门级详解 回溯法 采用试错的思想&#xff0c;它尝试分步的去解决一个问题。在分步解决问题的过程中&#xff0c;当它通过尝试发现现有的分步答案不能得到有效的正确的解答的时候&#xff…