小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

復現(xiàn)OpenVLA:開源的視覺-語言-動作模型及原理詳解

 netouch 2024-12-29 發(fā)布于北京

  • 1. 摘要
  • 2. 引言
  • 3. 相關(guān)工作
  • 4. 模型結(jié)構(gòu)
    • 4.1 模視覺-語言模型VLM
    • 4.2 訓練流程
    • 4.3 圖像分辨率
    • 4.4 微調(diào)視覺編碼器
    • 4.5 訓練輪數(shù)
    • 4.6 學習率
    • 4.7 訓練細節(jié)
    • 4.8 參數(shù)高效微調(diào)
  • 5. 復現(xiàn)
    • 5.1 下拉代碼
    • 5.2 安裝環(huán)境依賴
      • 5.2.1 創(chuàng)建conda環(huán)境
      • 5.2.2 安裝torch
      • 5.2.3 安裝openvla repo
      • 5.2.4 安裝其它依賴
    • 5.3 加載預訓練模型推理

開篇總結(jié):OpenVLA是第一個 開源、 支持高效微調(diào)、 參數(shù)量比RT-2-X更 的通用VLA。

1. 摘要

OpenVLA,一個7 B參數(shù)的開源視覺語言動作模型(VLA),在Open X-Embodiment數(shù)據(jù)集的970 k機器人集上進行了訓練。OpenVLA為通用機器人操作策略設定了一個新的藝術(shù)狀態(tài)。它支持開箱即用控制多個機器人,并可以通過參數(shù)高效的微調(diào)快速適應新的機器人領(lǐng)域。OpenVLA權(quán)重和PyTorch訓練管道是完全開源的,可以從HuggingFace下載和微調(diào)模型。
互聯(lián)網(wǎng)規(guī)模的視覺語言數(shù)據(jù)和多樣化的機器人演示的組合上預先訓練的大型策略有可能改變我們教機器人新技能的方式:與其從頭開始訓練新的行為,我們可以微調(diào)這樣的視覺-語言-動作(VLA)模型,以獲得用于視覺控制的魯棒的、可推廣的策略。
OpenVLA構(gòu)建在Llama 2語言模型之上,并結(jié)合了視覺編碼器,融合了DINOv2SigLIP的預訓練特征。
作為增加的數(shù)據(jù)多樣性和新模型組件的產(chǎn)物,OpenVLA在通才操作方面表現(xiàn)出了強大的結(jié)果,在29個任務和多個機器人實施例中,絕對任務成功率超過RT-2-X(55 B)等封閉模型16.5%,參數(shù)減少了7倍。
實驗進一步表明,我們可以有效地微調(diào)OpenVLA以適應新的設置,在涉及多個對象和強語言基礎(chǔ)能力的多任務環(huán)境中具有特別強的泛化結(jié)果,并且比從頭開始的模仿學習方法(如擴散策略)高出20.4%。
我們還探索計算效率,OpenVLA可以通過主流的低秩自適應方法微調(diào)消費者GPU,并通過量化有效地服務,而不會影響下游的成功率。

2. 引言

用于機器人操作的學習策略的一個關(guān)鍵弱點是它們無法具有泛化訓練數(shù)據(jù)以外的能力:它們對場景干擾或新物體缺乏魯棒性,并且難以執(zhí)行看不見的任務指令。但是,除了機器人技術(shù)之外,現(xiàn)有的視覺和語言基礎(chǔ)模型,如CLIP、SigLIP和Llama 2,甚至能夠進行這些類型的泛化,這些泛化都源于互聯(lián)網(wǎng)規(guī)模的預訓練數(shù)據(jù)集所捕獲的先驗知識。然而復制這種規(guī)模的機器人預訓練仍然是一個公開的挑戰(zhàn)—即使是最大的機器人操作數(shù)據(jù)集也只有10萬到100萬個示例—這種不平衡意味著一個機會:使用現(xiàn)有的視覺和語言基礎(chǔ)模型作為訓練機器人策略的核心構(gòu)建塊,這些策略可以推廣到新對象,場景和任務。
為了實現(xiàn)這一目標,現(xiàn)有的工作已經(jīng)探索了將預訓練的語言和視覺語言模型進行整合用于機器人表征學習。
然而,有兩個關(guān)鍵原因阻止了現(xiàn)有VLA的廣泛使用:
1)當前模型是封閉的,無法開源訪問,對模型架構(gòu),訓練過程和數(shù)據(jù)混合的可見性有限;
2)現(xiàn)有工作沒有提供部署和適應新機器人,環(huán)境和任務的VLA的最佳實踐-特別是在商品硬件上(例如,消費級GPU)。我們認為,為了為未來的研究和開發(fā)奠定堅實的基礎(chǔ),機器人技術(shù)需要支持有效微調(diào)和適應的開源通用VLA,類似于圍繞開源語言模型的現(xiàn)有生態(tài)系統(tǒng)。
為此,我們引入了OpenVLA,這是一個7B參數(shù)的開源VLA,它為通用機器人操作策略建立了一個新的SOTA水平。OpenVLA由一個預訓練的視覺-條件語言模型主干組成,該模型以多個粒度捕獲視覺特征,并在Open-X的970k機器人操作軌跡的大型多樣化數(shù)據(jù)集上進行了微調(diào)。
第一個證明了利用低秩自適應[LoRA]和模型量化的計算高效微調(diào)方法的有效性,以促進在消費級GPU而不是大型服務器節(jié)點上適應OpenVLA模型,而不會影響性能。

3. 相關(guān)工作

視覺條件語言模型(VLM)在互聯(lián)網(wǎng)規(guī)模的數(shù)據(jù)上進行訓練,以從輸入圖像和語言提示中生成自然語言,已被用于從視覺問答[28-31]到對象定位[32,33]的無數(shù)應用。推動最近VLM的關(guān)鍵進步之一是模型架構(gòu),它將來自預訓練的視覺編碼器的特征預訓練語言模型連接起來,直接建立在計算機視覺和自然語言建模的進步基礎(chǔ)上,以創(chuàng)建強大的多模態(tài)模型。
OpenVLA采用了一種更端到端的方法,直接微調(diào)VLM,通過將它們視為語言模型詞匯表中的標記來生成機器人動作。
視覺語言動作模型(VLA),將機器人控制動作直接融合到VLM主干中。這有三個主要好處:(1)它在大型互聯(lián)網(wǎng)規(guī)模的視覺語言數(shù)據(jù)集上執(zhí)行預訓練的視覺和語言組件的對齊,(2)使用通用架構(gòu),而不是為機器人控制定制,允許我們利用現(xiàn)有VLM訓練的可擴展基礎(chǔ)設施,并擴展到以最少的代碼修改訓練十億參數(shù)策略(3)它為機器人技術(shù)從VLMs的快速改進中受益提供了直接途徑。

4. 模型結(jié)構(gòu)

4.1 模視覺-語言模型VLM

最新的VLM的架構(gòu)由三個主要部分組成(見下圖):
(1)將圖像輸入映射到許多“image patch embeddings”的視覺編碼器;
(2)將視覺編碼器的輸出嵌入并將其映射到語言模型的輸入空間的projector;
(3)大型語言模型(LLM)骨干。
在VLM訓練過程中,該模型是端到端訓練的。


Prismatic遵循與上述相同的標準架構(gòu),具有600 M參數(shù)的視覺編碼器,小型2層MLP的projector和7B參數(shù)的Llama 2語言模型骨干。值得注意的是,Prismatic使用兩部分視覺編碼器,由預訓練的SigLIP和DinoV 2模型組成。輸入圖像patch分別通過兩個編碼器,得到的特征向量按通道連接。
ps:與更常用的視覺編碼器(如CLIP或僅SigLIP編碼器)相比,DinoV 2功能的添加已被證明有助于改進空間推理,這對機器人控制特別有幫助。

4.2 訓練流程

為了訓練OpenVLA,對主干進行微調(diào),以進行機器人動作預測。將動作預測問題表述為“視覺語言”任務,其中輸入觀察圖像和自然語言任務指令映射到預測的機器人動作串。

4.3 圖像分辨率

輸入圖像的分辨率對VLA訓練的計算要求有顯著影響,因為更高分辨率的圖像導致更多的image patch tokens,從而導致更長的上下文長度,從而二次增加訓練計算。
比較了輸入為224 × 224px和384 × 384px的VLA,但在評估中沒有發(fā)現(xiàn)性能差異,而后者的訓練時間長3倍。因此,我們?yōu)樽罱K的OpenVLA模型選擇了224 × 224px的分辨率。
ps:請注意,在許多VLM基準測試中,提高分辨率確實可以提高性能,但在這里還沒有看到VLA的這種趨勢。

4.4 微調(diào)視覺編碼器

之前對VLM的研究發(fā)現(xiàn),在VLM訓練期間凍結(jié)視覺編碼器通常會帶來更高的性能。直觀地,凍結(jié)視覺編碼器可以更好地保留從其互聯(lián)網(wǎng)規(guī)模的預訓練中學習到的魯棒特征。然而,我們發(fā)現(xiàn)在VLA訓練期間微調(diào)視覺編碼器對于良好的VLA性能至關(guān)重要。我們假設,預先訓練的視覺骨干可能無法捕捉到足夠的關(guān)于場景重要部分的細粒度空間細節(jié),以實現(xiàn)精確的機器人控制。

4.5 訓練輪數(shù)

典型的LLM或VLM訓練在其訓練數(shù)據(jù)集中最多運行一個或兩個epoch。相比之下,我們發(fā)現(xiàn)VLA訓練通過訓練數(shù)據(jù)集進行更多次的訓練是很重要的,真實的機器人性能不斷提高,直到訓練動作令牌準確率超過95%。我們的最終訓練運行通過其訓練數(shù)據(jù)集完成了27個epoch。

4.6 學習率

我們在VLA訓練的多個數(shù)量級上掃描了學習率,并使用2e-5的固定學習率(與VLM預訓練期間使用的學習率相同)獲得了最佳結(jié)果。沒有發(fā)現(xiàn)學習率熱身可以帶來好處。

4.7 訓練細節(jié)

最終的OpenVLA模型在64個A100 GPU的集群上訓練14天,或總共21,500個A100小時,batch size 為2048。
在推理過程中,OpenVLA在以float16精度加載時需要15GB的GPU內(nèi)存(即,沒有量化),在一個NVIDIA RTX 4090 GPU上以大約6Hz的頻率運行(沒有編譯、推測解碼或其他推理加速技巧)。
我們可以在推理過程中通過量化進一步減少OpenVLA的內(nèi)存占用,而不會影響實際機器人任務的性能。

4.8 參數(shù)高效微調(diào)

具體來說,我們比較了以下微調(diào)方法:FFT完全微調(diào)在微調(diào)期間更新所有權(quán)重,last layer only僅微調(diào)OpenVLA的Transformer骨干的最后一層和token embedding矩陣,frozen vision結(jié)視覺編碼器,但微調(diào)所有其他權(quán)重,sandwich fine-tuning不凍結(jié)視覺編碼器,token embedding矩陣和最后一層,LoRA使用低秩自適應技術(shù),具有多個秩值r,應用于模型的所有線性層。

5. 復現(xiàn)

5.1 下拉代碼

git clone https://gitcode.com/gh_mirrors/op/openvla.git
# 下面的也行
git clone https://github.com/openvla/openvla.git

注意:
1.vla-scripts/是有關(guān)OpenVLA模型的完整培訓和驗證腳本。
2.scripts/主要是原始(基礎(chǔ))prismatic-vlms存儲庫的遺留物,支持訓練和評估視覺條件語言模型;注意:雖然可以使用此倉庫來訓練VLMs和VLAs,嘗試使用現(xiàn)有的OpenVLA模型生成語言(通過scripts/generate.py)是行不通的(因為只訓練當前的OpenVLA模型來生成動作,并且只訓練動作)。

5.2 安裝環(huán)境依賴

5.2.1 創(chuàng)建conda環(huán)境

conda create -n openvla python=3.10 -y
conda activate openvla

5.2.2 安裝torch

這個存儲庫是使用Python 3.10構(gòu)建的,但應該與任何Python>=3.8向后兼容。需要PyTorch 2.2*

conda install pytorch torchvision torchaudio pytorch-cuda=12.4 -c pytorch -c nvidia -y

5.2.3 安裝openvla repo

cd openvla
pip install -e .

5.2.4 安裝其它依賴

# Install Flash Attention 2 for training (https://github.com/Dao-AILab/flash-attention)
#   =>> If you run into difficulty, try `pip cache remove flash_attn` first
pip install packaging ninja
ninja --version; echo $?  # Verify Ninja --> should return exit code '0'
pip install 'flash-attn==2.5.5' --no-build-isolation

5.3 加載預訓練模型推理

# 安裝最少依賴項 (`torch`, `transformers`, `timm`, `tokenizers`, 等)
# pip install -r https://raw./openvla/openvla/main/requirements-min.txt
from transformers import AutoModelForVision2Seq, AutoProcessor
from PIL import Image
import torch

# 加載處理器與VLA
processor = AutoProcessor.from_pretrained('openvla/openvla-7b', trust_remote_code=True)
vla = AutoModelForVision2Seq.from_pretrained(
    'openvla/openvla-7b',
    attn_implementation='flash_attention_2',  # 需要`flash_attn`
    torch_dtype=torch.bfloat16,
    low_cpu_mem_usage=True,
    trust_remote_code=True
).to('cuda:0')

# 獲取圖像輸入并格式化提示
image: Image.Image = get_from_camera(...)  # 假設get_from_camera是獲取攝像頭圖像的函數(shù)
prompt = 'In: What action should the robot take to {<INSTRUCTION>}?\nOut:'

# 預測動作(7自由度;對BridgeData V2解歸一化)
inputs = processor(prompt, image).to('cuda:0', dtype=torch.bfloat16)
action = vla.predict_action(**inputs, unnorm_key='bridge_orig', do_sample=False)

# 執(zhí)行動作...
robot.act(action, ...)

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多