歡迎 PaliGemma 2 – Google 全新的視覺語言模型
我們很高興地歡迎 Google 全新的視覺語言模型 PaliGemma 2,它是 PaliGemma 的新一代版本。與前身一樣,PaliGemma 2 採用相同的強大 SigLIP 用於視覺部分,但文字解碼器部分升級到了最新的 Gemma 2。
PaliGemma 2 帶有新的預訓練 (pt) 模型,引數規模分別為 3B
、10B
和 28B
。所有模型都支援多種輸入解析度:224x224
、448x448
和 896x896
。這些組合為不同的用例提供了很大的靈活性,因此實踐者可以在質量/效率之間選擇所需的平衡。相比之下,之前的 PaliGemma 僅提供 3B 版本。
這些預訓練模型旨在方便地對下游任務進行微調。第一個 PaliGemma 被社群廣泛用於多種目的。憑藉額外版本帶來的靈活性提升,以及更好的預訓練質量,我們迫不及待地想看看社群這次能做些什麼。
例如,Google 還發布了在 DOCCI 資料集上微調的一些版本,展示了通用且穩健的、長篇、細緻入微的字幕生成能力。微調的 DOCCI 模型適用於 3B 和 10B 版本,並支援 448x448 的輸入解析度。
本次釋出包括所有開放模型倉庫、transformers 整合、微調指令碼,以及我們自己在 VQAv2 資料集上對視覺問答任務進行微調的模型演示。
目錄
PaliGemma 2 簡介
PaliGemma 2 是 Google 於 5 月份釋出的 PaliGemma 視覺語言模型 的新一代版本。PaliGemma 2 將強大的 SigLIP 影像編碼器與 Gemma 2 語言模型連線起來。
新模型基於 Gemma 2 的 2B、9B 和 27B 語言模型,從而產生了相應的 3B、10B 和 28B PaliGemma 2 變體,其命名考慮了(緊湊型)影像編碼器的額外引數。如上所述,它們支援三種不同的解析度,為下游任務的微調提供了極大的靈活性。
PaliGemma 2 遵循 Gemma 許可證分發,該許可證允許再分發、商業用途、微調和建立模型衍生品。
本次釋出包含以下 bfloat16
精度的檢查點:
9 個預訓練模型:3B、10B 和 28B,解析度分別為
224x224
、448x448
和896x896
。2 個在 DOCCI 上微調的模型:兩個在 DOCCI 資料集(影像-文字標題對)上微調的模型,支援 3B 和 10B PaliGemma 2 變體以及
448x448
的輸入解析度。
模型能力
正如之前的 PaliGemma 釋出所見,預訓練 (pt) 模型非常適合在下游任務上進行進一步的微調。
pt 模型是在以下資料混合上預訓練的。預訓練資料集的多樣性使得在類似領域的下游任務上進行微調時可以使用相對較少的示例。
WebLI: 一個從公共網路構建的萬億規模多語言影像-文字資料集。使用各種 WebLI 分割來獲取通用模型能力,例如視覺語義理解、目標定位、視覺情境文字理解和多語言能力。
CC3M-35L: 從網頁中整理的英文影像-alt_text 對 (Sharma et al., 2018)。為了標記此資料集,作者使用 Google Cloud Translation API 翻譯成 34 種其他語言。
帶有問答驗證的視覺問題生成 (VQ2A): 一個改進的問答資料集。該資料集使用 Google Cloud Translation API 翻譯成相同的 34 種其他語言。
OpenImages: 基於 OpenImages 資料集,透過手工規則生成的檢測和物件感知問題和答案 (Piergiovanni et al. 2022)。
WIT: 從維基百科收集的影像和文字 (Srinivasan et al., 2021)。
PaliGemma 2 團隊在內部對 PT 模型進行了廣泛的視覺語言理解任務的微調,並在 模型卡 和 技術報告 中提供了這些微調模型的基準。
在 DOCCI 資料集上微調的 PaliGemma 2 可以完成廣泛的字幕任務,包括文字渲染、捕捉空間關係以及在字幕中包含世界知識。
下面是 DOCCI 微調的 PaliGemma 2 檢查點的效能,與(摘自 技術報告 中表 6 的)其他模型進行比較。
#par | #char | #sent | NES↓ | |
---|---|---|---|---|
MiniGPT-4 | 7B | 484 | 5.6 | 52.3 |
mPLUG-Owl2 | 8B | 459 | 4.4 | 48.4 |
InstructBLIP | 7B | 510 | 4.0 | 42.6 |
LLaVA-1.5 | 7B | 395 | 4.2 | 40.6 |
VILA | 7B | 871 | 8.6 | 28.6 |
PaliGemma | 3B | 535 | 8.9 | 34.3 |
PaLI-5B | 5B | 1065 | 11.3 | 32.9 |
PaliGemma 2 | 3B | 529 | 7.7 | 28.4 |
PaliGemma 2 | 10B | 521 | 7.5 | 20.3 |
- #char: 生成字幕中的平均字元數。
- #sent: 平均句子數。
- NES: 不一致句子(越低越好),衡量事實不準確性。
您可以在下面找到 DOCCI 檢查點的一些模型輸出,這些輸出展示了模型的通用性。
輸入圖片 | 字幕 |
---|---|
![]() |
一個折線圖顯示了 ImageNet 模型微調後的 top-1 準確率。圖中有四條線,分別是藍色、橙色、綠色和黑色。藍線是四條線中最低的,它在 |
![]() |
一張白色紙的特寫鏡頭,上面有黑色文字。紙張中間彎曲。紙上的文字採用打字機字型。紙的頂部寫著“Ashley Hotel West Coast”。下面是“WiFi Internet Service”。再下面是“使用者名稱: fqpp”。再下面是“密碼: aaeu |
![]() |
一幅大衛·鮑伊 Ziggy Stardust 造型的壁畫畫在一面白牆上。壁畫是並排的三張臉,每張臉都有紅色的頭髮,眼睛上畫有藍色閃電。這些臉有藍色眼影、粉色腮紅和紅色嘴唇。中間的臉上方有一個黑色方窗,上面有藍色文字“JAM”。一輛銀色汽車 |
![]() |
俯檢視顯示一張白色大理石臺面,上面有四個咖啡杯。左邊有兩個灰色的,左下角有一個白色的。右邊的是灰色的。右上角有一個木製支架上的金屬絲果籃,裡面有橘子。左邊有一個裝有水的透明玻璃水罐,部分 |
![]() |
一本白色書的特寫鏡頭,底部有一條藍色條紋。書的上半部分是白色的。書的白色部分印有黑色文字。文字寫著“Visual Concept Learning from User-tagged Web Video”。黑色文字下方是一個白色方框,裡面有五張小圖片。最左邊的圖片是一個人站在草地上的景象。右邊那張是藍色的海洋 |
演示
為了演示目的,Hugging Face 團隊對 解析度為 448x448 的 PaliGemma 2 3B 模型 在一小部分 VQAv2 資料集 上進行了微調。我們使用了 LoRA 微調和 PEFT,具體請參閱微調部分。下面的演示展示了最終結果。您可以隨意查閱 Space 中的程式碼,瞭解其工作原理,或克隆它以適應您自己的微調。
如何與 Transformers 結合使用
您可以使用 🤗 transformers 中的 PaliGemmaForConditionalGeneration 和 AutoProcessor API 對 PaliGemma 2 模型進行推理。請確保您安裝了 4.47 或更高版本的 transformers。
pip install --upgrade transformers
之後,您可以按如下方式執行推理。像往常一樣,請確保您遵循用於訓練模型的任務所使用的提示格式。
from transformers import AutoProcessor, PaliGemmaForConditionalGeneration
from PIL import Image
import requests
model_id = "google/paligemma2-10b-ft-docci-448"
model = PaliGemmaForConditionalGeneration.from_pretrained(model_id)
model = model.to("cuda")
processor = AutoProcessor.from_pretrained(model_id)
prompt = "<image>caption en"
image_file = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/cats.png"
raw_image = Image.open(requests.get(image_file, stream=True).raw).convert("RGB")
inputs = processor(prompt, raw_image, return_tensors="pt").to("cuda")
output = model.generate(**inputs, max_new_tokens=200)
input_len = inputs["input_ids"].shape[-1]
print(processor.decode(output[0][input_len:], skip_special_tokens=True))
# A medium shot of two cats laying on a pile of brown fishing nets. The cat in the foreground is a gray tabby cat with white on its chest and paws. The cat is laying on its side with its head facing the bottom right corner of the image. The cat in the background is laying on its side with its head facing the top left corner of the image. The cat's body is curled up, its head is slightly turned to the right, and its front paws are tucked underneath its body. There is a teal rope hanging from the fishing net in the top right corner of the image.
您還可以使用 transformers 的 bitsandbytes
整合來載入量化後的模型。以下示例使用 4 位 nf4
。
from transformers import BitsAndBytesConfig
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.bfloat16
)
model = PaligemmaForConditionalGeneration.from_pretrained(
model_id,
quantization_config=bnb_config,
device_map={"":0}
)
我們透過評估在 textvqa 資料集上微調的 3B 檢查點(使用 224x224 輸入影像)來快速測試量化後的效能下降。這是我們在 5,000 個驗證集條目上得到的結果:
bfloat16
,未量化:60.04% 準確率。8位
: 59.78%.4 位
,使用上述程式碼片段的配置:58.72%。
這些數字非常令人鼓舞!當然,量化對於更大的檢查點最有趣,我們建議您始終測量您將使用的領域和任務的結果。
微調
如果您之前微調過 PaliGemma,那麼 PaliGemma 2 的微調 API 也是相同的,您可以直接使用您的程式碼。我們提供了一個 微調指令碼 和一個 notebook,用於您微調模型、凍結模型部分或應用 LoRA 或 QLoRA 等記憶體高效微調技術。
為了演示目的,我們對 VQAv2 驗證集的一半資料上的 PaliGemma 2 模型進行了 LoRA 微調。這在 3 個 A100 GPU (80GB 視訊記憶體) 上花費了半小時。該模型可以在 此處 找到,這是展示它的 Gradio 演示。
總結
新的 PaliGemma 2 版本比前一個更令人興奮,它擁有適合每個人需求的不同尺寸和更強大的預訓練模型。我們期待看到社群將構建什麼!
我們感謝 Google 團隊釋出了這令人驚歎的開放模型系列。非常感謝 Pablo Montalvo 將模型整合到 transformers,以及 Lysandre、Raushan、Arthur、Yieh-Dar 和團隊其他成員的快速評審、測試和合並。