自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

LLaVA:GPT-4V(ision)?的開源替代品

譯文
人工智能
本文將向您展示一款優(yōu)秀的GPT-4V的開源替代品——LLaVA,并分別展示以Web、本地和Google Colab三種方式運行LLaVA。

LLaVA(大型語言和視覺助理)(鏈接::https://llava-vl.github.io/)是一個很有前途的開源生成式人工智能模型,它復(fù)制了OpenAI GPT-4在圖像轉(zhuǎn)換方面的一些功能。用戶可以將圖像添加到LLaVA聊天對話中,允許討論這些圖像的內(nèi)容,也可以將其用作以視覺方式描述想法、上下文或情況的一種方式。

LLaVA最引人注目的特點是它能夠改進其他開源的解決方案,同時使用更簡單的模型架構(gòu)和數(shù)量級更少的訓(xùn)練數(shù)據(jù)。這些特性使LLaVA不僅訓(xùn)練更快、更便宜,而且更適合在消費類硬件上進行推理。

這篇文章旨在概述LLaVA的主要功能,更具體地說:

  • 展示如何從Web界面進行實驗,以及如何將其安裝在您的計算機或筆記本電腦上。
  • 解釋其主要技術(shù)特征。
  • 舉例說明如何使用它進行編程,將使用Google Colab上的HuggingFace庫(Transformers和Gradio)構(gòu)建一個簡單的聊天機器人應(yīng)用程序。

在線使用LLaVA

如果您還沒有嘗試過,那么使用LLaVA最簡單的方法是轉(zhuǎn)到其作者提供的Web界面(https://llava.hliu.cc/)。下面的屏幕截圖展示了該界面的操作方式,用戶在給出冰箱內(nèi)容圖片的情況下,詢問該怎么吃。你可以使用界面中左側(cè)的小部件加載圖像,聊天界面允許以文本的形式提問和獲得答案。

LLaVA Web界面

在這個例子中,LLaVA能夠正確地識別冰箱中存在的成分,如藍莓、草莓、胡蘿卜、酸奶或牛奶,并提出了相關(guān)的想法,如水果沙拉、奶昔或蛋糕。

項目網(wǎng)站(https://llava-vl.github.io/)上還提供了與LLaVA對話的其他例子,這些例子表明LLaVA不僅能夠描述圖像,而且能夠根據(jù)圖像中的元素進行推斷和推理(使用圖片中的線索識別電影或人物,根據(jù)繪圖對網(wǎng)站進行編碼,解釋幽默的情況,等等)。

本地運行LLaVA

LLaVA也可以借助于Ollama(https://ollama.ai/)或Mozilla的“l(fā)lamafile”(https://github.com/Mozilla-Ocho/llamafile)安裝在本地機器上。這些工具可以在大多數(shù)僅使用CPU的消費級機器上運行,因為該模型只需要8GB的RAM和4GB的可用磁盤空間,甚至可以在Raspberry PI上成功運行。在圍繞Ollama項目開發(fā)的工具和界面中,一個值得注意的辦法是Ollama WebUI(https://github.com/ollama-webui/ollama-webui,如下圖所示),它再現(xiàn)了OpenAI ChatGPT用戶界面的外觀。

Ollama Web用戶界面——靈感來自O(shè)penAI ChatGPT

LLaVA主要功能概述

LLaVA由威斯康星大學(xué)麥迪遜分校、微軟研究所和哥倫比亞大學(xué)的研究人員共同設(shè)計而成,最近在NeurIPS 2023上展出。該項目的代碼和技術(shù)規(guī)范可以在其Github存儲庫(https://github.com/haotian-liu/LLaVA)中訪問,該存儲庫還提供了與助理交互的各種接口。

正如作者在論文摘要(https://arxiv.org/pdf/2310.03744.pdf)中總結(jié)的那樣:

“LLaVA在11個基準(zhǔn)測試中達到了最先進的水平。我們的最終13B檢查點僅使用了120萬個公開可用的數(shù)據(jù),并在單個8-A100級節(jié)點上在約1天內(nèi)完成了完整的訓(xùn)練。我們希望這能使最先進的LMM研究更容易訪問。有關(guān)研究代碼和模型都將以開源方式發(fā)布?!?/span>

此論文中以雷達圖的形式報告的基準(zhǔn)結(jié)果說明了它與其他最先進的模型相比的改進情況。

LLaVA基準(zhǔn)結(jié)果雷達圖(圖片來自論文https://arxiv.org/pdf/2304.08485.pdf)

內(nèi)部工作原理

LLaVA的數(shù)據(jù)處理工作流程在概念上很簡單。該模型本質(zhì)上是一個標(biāo)準(zhǔn)的因果語言模型,以語言指令(用戶文本提示)為輸入,并返回語言響應(yīng)。語言模型處理圖像的能力是由一個單獨的視覺編碼器模型所支持的,該模型將圖像轉(zhuǎn)換為語言標(biāo)記,這些標(biāo)記被“悄悄地”添加到用戶文本提示中(充當(dāng)一種軟提示)。LLaVA的整體實現(xiàn)流程如下圖所示:

LLaVA網(wǎng)絡(luò)架構(gòu)(圖片來自論文https://arxiv.org/pdf/2304.08485.pdf)

LLaVA的語言模型和視覺編碼器分別依賴于兩個參考模型,即Vicuna和CLIP。其中,Vicuna(https://lmsys.org/blog/2023-03-30-vicuna/)是一個基于LLaMA-2(由Meta設(shè)計)的預(yù)訓(xùn)練大型語言模型,具有與中等規(guī)模LLM競爭的性能(請參閱HuggingFace上的7B和13B版本的模型卡)。CLIP(https://openai.com/research/clip)是由OpenAI設(shè)計的圖像編碼器,使用對比語言圖像預(yù)訓(xùn)練(因此稱為“CLIP”)技術(shù)進行預(yù)訓(xùn)練,從而能夠在類似的嵌入空間中對圖像和文本進行編碼。LLaVA中使用的模型是視覺轉(zhuǎn)換器變體CLIP-ViT-L/14(請參閱HuggingFace上的模型卡:https://huggingface.co/openai/clip-vit-large-patch14)。

為了使視覺編碼器的尺寸與語言模型的尺寸相匹配,應(yīng)用了投影模塊(上圖中的W)。它實際上是原始LLaVA中的簡單線性投影,以及LLaVA 1.5中的兩層感知器。

訓(xùn)練過程

LLaVA的訓(xùn)練過程由兩個相對簡單的階段組成。

第一階段僅為了實現(xiàn)微調(diào)投影模塊W,此階段中視覺編碼器和LLM的權(quán)重保持凍結(jié)。這個階段使用來自CC3M概念字幕數(shù)據(jù)集(https://ai.google.com/research/ConceptualCaptions/)的約600k個圖像/字幕對的子集進行訓(xùn)練,有關(guān)內(nèi)容可在HuggingFace的存儲庫(https://huggingface.co/datasets/liuhaotian/LLaVA-Instruct-150K)上免費獲得。

在第二階段中,使用158K語言圖像指令的數(shù)據(jù)集,將投影模塊權(quán)重W與LLM權(quán)重一起微調(diào)(同時保持視覺編碼器的權(quán)重凍結(jié))。數(shù)據(jù)是使用GPT4生成的,具有對話示例、詳細(xì)描述和復(fù)雜推理的功能,可在HuggingFace的存儲庫(https://huggingface.co/datasets/liuhaotian/LLaVA-Instruct-150K)上免費獲得有關(guān)內(nèi)容。

整個訓(xùn)練大約需要一天的時間,使用八個A100 GPU。

LLaVA基礎(chǔ)編程

本部分相關(guān)代碼可通過Colab相關(guān)筆記本文件(https://colab.research.google.com/drive/1L28bJX14-Y5lJvswYwydsletYFMIxVH5)獲取。

LLaVA模型集成在Transformers庫中,可以使用標(biāo)準(zhǔn)管道對象加載。模型的7B和13B變體均可免費從LLaVA存儲庫空間上獲取,并且可以以4位和8位方式加載以節(jié)省GPU內(nèi)存。接下來,我們將說明如何使用可在帶有T4 TPU(15GB RAM GPU)的Colab上執(zhí)行的代碼加載和運行模型。

以下是用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})

然后,讓我們加載此圖片:

我們使用了標(biāo)準(zhǔn)的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模型,并提示要求描述圖片。

注意,提示的格式(https://huggingface.co/docs/transformers/model_doc/llava)如下:

“USER: <image>\n<prompt>\nASSISTANT:”

相關(guān)代碼如下:

prompt = "USER: <image>\nDescribe this picture\nASSISTANT:"
outputs = pipe(image, prompt=prompt, generate_kwargs={"max_new_tokens": 200})
print(outputs[0]['generated_text'])

返回了以下答案:

USER: Describe this picture
ASSISTANT: The image features a large, empty amphitheater with a stunning view of the ocean in the background. The amphitheater is surrounded by a lush green hillside, and a majestic mountain can be seen in the distance. The scene is serene and picturesque, with the sun shining brightly over the landscape.

創(chuàng)建LLaVA聊天機器人

最后,讓我們創(chuàng)建一個簡單的依賴于LLaVA模型的聊天機器人。我們將使用Gradio庫(https://www.gradio.app/),它提供了一種快速簡便的方法來創(chuàng)建機器學(xué)習(xí)Web界面。

接口的核心由一行代碼組成,該行包含一個圖像上傳組件(Gradio image對象)和一個聊天接口(Gradio ChatInterface對象:https://www.gradio.app/docs/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]
      )

聊天界面連接到函數(shù)update_conversation,該函數(shù)負(fù)責(zé)保存對話歷史記錄,并在用戶發(fā)送消息時調(diào)用LLaVA模型進行響應(yīng)。

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:]

下面的代碼通過調(diào)用launch方法啟動接口。

demo.launch(debug=True)

幾秒鐘后,聊天機器人Web界面即將出現(xiàn):

祝賀您,您的LLaVA聊天機器人現(xiàn)已啟動并成功運行!

注:除非另有說明;否則,文中所有圖片均由作者本人提供。

參考文獻

  • HuggingFace LLaVA model documentation(HuggingFace LLaVA參考文檔),https://huggingface.co/docs/transformers/model_doc/llava。
  • Llava Hugging Face organization(Llava Hugging Face組織架構(gòu)),https://huggingface.co/llava-hf。
  • Loading and running LLaVA with AutoPrecessor and LLaVAForConditionalGeneration: Colab notebook(使用AutoPrecessor和LLaVAForConditionalGeneration加載和運行LLaVA),https://colab.research.google.com/drive/1_q7cOB-jCu3RExrkhrgewBR0qKjZr-Sx。
  • GPT-4V(ision) system card(GPT-4V(vision)系統(tǒng)卡),https://cdn.openai.com/papers/GPTV_System_Card.pdf。
  • Understanding Visual Instruction Tuning(了解可視化指令微調(diào)),https://newsletter.artofsaience.com/p/understanding-visual-instruction。

譯者介紹

朱先忠,51CTO社區(qū)編輯,51CTO專家博客、講師,濰坊一所高校計算機教師,自由編程界老兵一枚。

原文標(biāo)題:LLaVA: An open-source alternative to GPT-4V(ision),作者:Yann-A?l Le Borgne

鏈接:https://towardsdatascience.com/llava-an-open-source-alternative-to-gpt-4v-ision-b06f88ce8efa。

責(zé)任編輯:姜華 來源: 51CTO
相關(guān)推薦

2019-10-22 19:00:16

PhotoshopAdobe開源

2024-01-03 12:56:39

2022-08-02 10:45:29

AppFlowyNotion開源

2020-02-17 21:35:21

JoplinEvernote開源

2016-09-13 15:50:24

TurtlEvernote開源

2017-02-27 15:30:39

2024-01-15 14:19:34

開源ChatGPT

2020-07-07 09:10:29

VS CodeLinux開源

2010-09-04 10:21:03

2022-06-29 15:40:28

MinecraftMinetest開源

2021-11-03 21:20:54

FerdiFranz開源

2020-12-09 10:28:10

Github開源編程代碼

2020-06-15 07:49:32

開源奇妙清單Wunderlist

2022-06-01 09:28:43

??Umami??開源

2011-04-12 09:13:51

OpenIndianaSolaris替代品

2022-01-05 11:21:19

開源工具操作系統(tǒng)

2021-09-04 15:21:39

ZulipSlack開源

2013-11-19 14:36:38

UbuntuDebianPCLinuxOS

2022-04-14 09:19:34

Notion開源AppFlowy

2021-12-29 18:18:59

開源MedusaShopify
點贊
收藏

51CTO技術(shù)棧公眾號