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 torchquantization_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 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 模型,并提示要求描述图片。提示格式如下

“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 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 聊天机器人现在已经启动,并成功运行!

相关参考链接:

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.mzph.cn/news/668004.shtml

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

相关文章

arping交叉编译

arping命令依赖libpcap和libnet&#xff0c;需要先交叉编译这两个库。 1.交叉编译libpcap 下载libpcap源文件&#xff0c;从github上克隆: git clone https://github.com/the-tcpdump-group/libpcap.git source交叉编译环境 # environment-setup是本机的交叉编译环境, 里面…

LabVIEW风力发电机在线监测

LabVIEW风力发电机在线监测 随着可再生能源的发展&#xff0c;风力发电成为越来越重要的能源形式。设计了一个基于控制器局域网&#xff08;CAN&#xff09;总线和LabVIEW的风力发电机在线监测系统&#xff0c;实现风力发电机的实时监控和故障诊断&#xff0c;以提高风力发电的…

windows安装Visual Studio Code,配置C/C++运行环境(亲测可行)

一.下载 Visual Studio Code https://code.visualstudio.com/ 二.安装 选择想要安装的位置: 后面的点击下一步即可。 三.下载编译器MinGW vscode只是写代码的工具&#xff0c;使用编译器才能编译写的C/C程序&#xff0c;将它转为可执行文件。 MinGW下载链接&#xff1a;…

Stable Diffusion 模型下载:国风3 GuoFeng3

文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十推荐提示词下载地址模型介绍 欢迎使用GuoFeng3模型 - 这是一个中国华丽古风风格模型,也可以说是一个古风游戏角色模型,具有2.5D的质感。 条目内

CDH6.3.2 多 Spark 版本共存

一 部署Spark客户端 1.1 部署spark3客户端 tar -zxvf spark-3.3.1-bin-3.0.0-cdh6.3.2.tgz -C /opt/cloudera/parcels/CDH/lib cd /opt/cloudera/parcels/CDH/lib mv spark-3.3.1-bin-3.0.0-cdh6.3.2/ spark3将 CDH 集群的 spark-env.sh 复制到 /opt/cloudera/parcels/CDH/li…

C语言函数递归例子2青蛙跳台阶问题

接下来我们来看一下第二个例子青蛙跳台阶 青蛙跳台阶问题 这个问题经常在各类面试中看到。一只青蛙一次可以跳上1级台阶&#xff0c;也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。是实践函数递归的典型问题 分析问题 我们先假设有n个台阶&#xff0c;如果n1&am…

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

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

PyTorch 2.2 中文官方教程(七)

使用 torchtext 库进行文本分类 原文&#xff1a;pytorch.org/tutorials/beginner/text_sentiment_ngrams_tutorial.html 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 注意 点击这里下载完整示例代码 在本教程中&#xff0c;我们将展示如何使用 torchtext 库构建文…

Vue中nextTick方法的作用与原理

在Vue的开发中&#xff0c;你可能会遇到一些异步更新的问题&#xff0c;如在改变数据后需要等待DOM更新完毕后再进行下一步操作。这时就可以使用Vue提供的nextTick方法来解决这个问题。 nextTick方法的作用是在DOM更新之后执行回调函数&#xff0c;确保在下次DOM更新循环结束之…

ReactNative实现一个圆环进度条

我们直接看效果&#xff0c;如下图 我们在直接上代码 /*** 圆形进度条*/ import React, {useState, useEffect} from react; import Svg, {Circle,G,LinearGradient,Stop,Defs,Text, } from react-native-svg; import {View, StyleSheet} from react-native;// 渐变色 const C…

PyTorch 2.2 中文官方教程(四)

torch.nn 到底是什么&#xff1f; 原文&#xff1a;pytorch.org/tutorials/beginner/nn_tutorial.html 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 注意 点击这里下载完整示例代码 作者&#xff1a; Jeremy Howard&#xff0c;fast.ai。感谢 Rachel Thomas 和 Fr…

队列---数据结构

定义 队列&#xff08;Queue&#xff09;简称队&#xff0c;也是一种操作受限的线性表&#xff0c;只允许在表的一端进行插入&#xff0c;而在表的另一端进行删除。向队列中插入元素称为入队或进队&#xff1b;删除元素称为出队或离队。 队头&#xff08;Front&#xff09;&a…

2024年Java面试题大全 面试题附答案详解,BTA内部面试题

基础篇 1、 Java语言有哪些特点 1、简单易学、有丰富的类库 2、面向对象&#xff08;Java最重要的特性&#xff0c;让程序耦合度更低&#xff0c;内聚性更高&#xff09; 阿里内部资料 基本类型 大小&#xff08;字节&#xff09; 默认值 封装类 6、Java自动装箱与拆箱 装箱就是…

Maven提示Failure to find com.oracle:ojdbc14:jar:10.2.0.4.0

目录 问题 解决方案 1、下载oracle的驱动jar包 2、安装到本地仓库 3、检查本地仓库是否成功安装 4、Maven先clean &#xff0c;再install。 问题 项目引入Oracle依赖后报错&#xff0c;显示为红色。 解决方案 1、下载oracle的驱动jar包 首先我们要去下载一个oracle的…

undefined symbol: avio_protocol_get_class, version LIBAVFORMAT_58

rv1126上进行编译和在虚拟机里面进行交叉编译ffmpeg都不行 解决办法查看 查看安装的ffmpeg链接的文件 ldd ./ffmpeg rootEASY-EAI-NANO:/home/nano/ffmpeg-4.3.6# ldd ffmpeg linux-vdso.so.1 (0xaeebd000)libavdevice.so.58 > /lib/arm-linux-gnueabihf/libavde…

哪些因素会限制带宽的可用性?

当我们讨论带宽的可用性时&#xff0c;我们主要关注的是数据传输的速度和容量。带宽就像一条公路&#xff0c;数据就像行驶在公路上的车辆&#xff0c;带宽越大&#xff0c;可以同时传输的数据就越多&#xff0c;数据传输的速度也就越快。但是&#xff0c;就像公路会有各种限制…

【云原生运维问题记录】kubesphere登录不跳转问题

文章目录 现象问题排查 结论先行&#xff1a;kubesphere-system名称空间下reids宕机重启&#xff0c;会判断是否通过registry-proxy重新拉取镜像&#xff0c;该镜像原本是通过阿里云上拉取&#xff0c;代理上没有出现超时情况&#xff0c;导致失败。解决方案&#xff1a;删除re…

k8s-常用工作负载控制器(更高级管理Pod)

一、工作负载控制器是什么&#xff1f; 二、Deploymennt控制器&#xff1a;介绍与部署应用 部署 三、Deployment控制器&#xff1a;滚动升级、零停机 方式一&#xff1a; 通个加入健康检查可以&#xff0c;看到&#xff0c;nginx容器逐个被替代&#xff0c;最终每个都升级完成&…

AI助力农作物自动采摘,基于YOLOv5全系列【n/s/m/l/x】参数模型开发构建作物生产场景下番茄采摘检测计数分析系统

去年十一那会无意间刷到一个视频展示的就是德国机械收割机非常高效自动化地24小时不间断地在超广阔的土地上采摘各种作物&#xff0c;专家设计出来了很多用于采摘不同农作物的大型机械&#xff0c;看着非常震撼&#xff0c;但是我们国内农业的发展还是相对比较滞后的&#xff0…

国辰智企APS自动化排产平台:实现生产计划与其他系统无缝协同

在当今竞争激烈的制造环境中&#xff0c;有效的生产计划和排程对于企业的成功至关重要。APS生产计划排程平台作为一种先进的工具&#xff0c;正越来越受到企业的关注和应用。那么&#xff0c;APS生产计划排程平台有哪些类型呢&#xff1f;本文将为您详细介绍。 1.基于规则的APS…