模型概述
模型特點
模型能力
使用案例
🚀 IDEFICS
IDEFICS(圖像感知解碼器增強版Flamingo,具備交錯交叉注意力機制) 是一個開源的多模態模型,它可以接受任意順序的圖像和文本輸入,並生成文本輸出。該模型在多個圖像文本基準測試中表現出色,可用於圖像問答、內容描述等多種任務。
🚀 快速開始
IDEFICS模型有基礎版本和指令微調版本,以下分別提供了這兩個版本的快速開始代碼示例。
基礎模型
import torch
from transformers import IdeficsForVisionText2Text, AutoProcessor
device = "cuda" if torch.cuda.is_available() else "cpu"
checkpoint = "HuggingFaceM4/idefics-9b"
model = IdeficsForVisionText2Text.from_pretrained(checkpoint, torch_dtype=torch.bfloat16).to(device)
processor = AutoProcessor.from_pretrained(checkpoint)
# 我們向模型輸入任意順序的文本字符串和圖像。圖像可以是URL或PIL圖像。
prompts = [
[
"https://upload.wikimedia.org/wikipedia/commons/8/86/Id%C3%A9fix.JPG",
"In this picture from Asterix and Obelix, we can see"
],
]
# --批量模式
inputs = processor(prompts, return_tensors="pt").to(device)
# --單樣本模式
# inputs = processor(prompts[0], return_tensors="pt").to(device)
# 生成參數
bad_words_ids = processor.tokenizer(["<image>", "<fake_token_around_image>"], add_special_tokens=False).input_ids
generated_ids = model.generate(**inputs, bad_words_ids=bad_words_ids, max_length=100)
generated_text = processor.batch_decode(generated_ids, skip_special_tokens=True)
for i, t in enumerate(generated_text):
print(f"{i}:\n{t}\n")
指令微調模型
import torch
from transformers import IdeficsForVisionText2Text, AutoProcessor
device = "cuda" if torch.cuda.is_available() else "cpu"
checkpoint = "HuggingFaceM4/idefics-9b-instruct"
model = IdeficsForVisionText2Text.from_pretrained(checkpoint, torch_dtype=torch.bfloat16).to(device)
processor = AutoProcessor.from_pretrained(checkpoint)
# 我們向模型輸入任意順序的文本字符串和圖像。圖像可以是URL或PIL圖像。
prompts = [
[
"User: What is in this image?",
"https://upload.wikimedia.org/wikipedia/commons/8/86/Id%C3%A9fix.JPG",
"<end_of_utterance>",
"\nAssistant: This picture depicts Idefix, the dog of Obelix in Asterix and Obelix. Idefix is running on the ground.<end_of_utterance>",
"\nUser:",
"https://static.wikia.nocookie.net/asterix/images/2/25/R22b.gif/revision/latest?cb=20110815073052",
"And who is that?<end_of_utterance>",
"\nAssistant:",
],
]
# --批量模式
inputs = processor(prompts, add_end_of_utterance_token=False, return_tensors="pt").to(device)
# --單樣本模式
# inputs = processor(prompts[0], return_tensors="pt").to(device)
# 生成參數
exit_condition = processor.tokenizer("<end_of_utterance>", add_special_tokens=False).input_ids
bad_words_ids = processor.tokenizer(["<image>", "<fake_token_around_image>"], add_special_tokens=False).input_ids
generated_ids = model.generate(**inputs, eos_token_id=exit_condition, bad_words_ids=bad_words_ids, max_length=100)
generated_text = processor.batch_decode(generated_ids, skip_special_tokens=True)
for i, t in enumerate(generated_text):
print(f"{i}:\n{t}\n")
文本生成推理
託管推理API由 Text Generation Inference 提供支持。要查詢模型,可以使用以下代碼片段。關鍵是通過markdown語法將圖像作為可獲取的URL傳遞:
from text_generation import Client
API_TOKEN = "<YOUR_API_TOKEN>"
API_URL = "https://api-inference.huggingface.co/models/HuggingFaceM4/idefics-80b-instruct"
DECODING_STRATEGY = "Greedy"
QUERY = "User: What is in this image?<end_of_utterance>\nAssistant:"
client = Client(
base_url=API_URL,
headers={"x-use-cache": "0", "Authorization": f"Bearer {API_TOKEN}"},
)
generation_args = {
"max_new_tokens": 256,
"repetition_penalty": 1.0,
"stop_sequences": ["<end_of_utterance>", "\nUser:"],
}
if DECODING_STRATEGY == "Greedy":
generation_args["do_sample"] = False
elif DECODING_STRATEGY == "Top P Sampling":
generation_args["temperature"] = 1.
generation_args["do_sample"] = True
generation_args["top_p"] = 0.95
generated_text = client.generate(prompt=QUERY, **generation_args)
print(generated_text)
⚠️ 重要提示
目前僅為指令微調模型提供託管推理服務。
💡 使用建議
若想快速測試軟件而不想等待大模型下載/加載,可以使用
HuggingFaceM4/tiny-random-idefics
,它未經訓練且權重隨機,但非常適合快速測試。
✨ 主要特性
- 多模態輸入:可以接受任意順序的圖像和文本輸入,並生成文本輸出。
- 強大的少樣本學習能力:在多個圖像文本基準測試中表現出色,與閉源模型性能相當。
- 開源可復現:基於公開可用的數據和模型構建,可進行復現和進一步開發。
- 指令微調版本:通過在監督和指令微調數據集上進一步訓練,提升了下游任務性能,更適用於對話場景。
📦 安裝指南
文檔未提供具體安裝命令,可參考 Hugging Face Transformers 進行安裝。
💻 使用示例
基礎用法
上述快速開始部分的基礎模型代碼示例展示瞭如何使用IDEFICS基礎模型進行推理。
高級用法
上述快速開始部分的指令微調模型代碼示例展示瞭如何使用IDEFICS指令微調模型進行推理。
📚 詳細文檔
模型詳情
- 開發者:Hugging Face
- 模型類型:多模態模型(圖像 + 文本)
- 支持語言:英文
- 許可證:見 許可證 部分
- 基礎模型:laion/CLIP-ViT-H-14-laion2B-s32B-b79K 和 huggyllama/llama-65b
- 更多信息資源:
IDEFICS是一個大型多模態英文模型,它以交錯的圖像和文本序列作為輸入,並生成文本輸出。該模型在上下文少樣本學習方面表現出強大的能力,與閉源模型性能相當,這使得IDEFICS成為在自定義數據上微調多模態模型的可靠起點。
模型用途
該模型可用於多模態(圖像 + 文本)任務的推理,其中輸入由文本查詢/指令和一個或多個圖像組成。此模型不支持圖像生成。
可以在特定用例的自定義數據上微調基礎模型。需要注意的是,經過指令微調的模型在遵循用戶指令方面表現顯著更好,因此在開箱即用的情況下應優先選擇這些模型。
訓練詳情
IDEFICS
訓練過程緊密遵循 Flamingo 的訓練程序,結合了兩個開源預訓練模型(laion/CLIP-ViT-H-14-laion2B-s32B-b79K 和 huggyllama/llama-65b),通過初始化新的Transformer塊來連接這兩個模態。預訓練的主幹網絡被凍結,同時訓練新初始化的參數。
訓練數據混合了公開可用的英文數據,具體如下:
數據源 | 數據類型 | 源數據中的令牌數量 | 源數據中的圖像數量 | 訓練輪數 | 令牌數量的有效比例 |
---|---|---|---|---|---|
OBELICS | 非結構化多模態網頁文檔 | 114.9B | 353M | 1 | 73.85% |
Wikipedia | 非結構化多模態網頁文檔 | 3.192B | 39M | 3 | 6.15% |
LAION | 圖像 - 文本對 | 29.9B | 1.120B | 1 | 17.18% |
PMD | 圖像 - 文本對 | 1.6B | 70M | 3 | 2.82% |
IDEFICS-instruct
從基礎的IDEFICS模型開始,通過解凍所有參數(視覺編碼器、語言模型、交叉注意力)進行微調。微調數據混合了以下英文數據集:
數據源 | 數據描述 | 唯一樣本數量 | 採樣比例 |
---|---|---|---|
M3IT | 帶提示的圖像 - 文本學術數據集 | 1.5M | 7.7% |
LRV-Instruction | 圖像/問題/答案三元組 | 155K | 1.7% |
LLaVA-Instruct | 基於圖像的問答對話 | 158K | 5.9% |
LLaVAR-Instruct | 關注包含文本圖像的問答對話 | 15.5K | 6.3% |
SVIT | 圖像/問題/答案三元組 | 3.2M | 11.4% |
General Scene Difference + Spot-the-Diff | 描述相關或相似圖像差異的文本對 | 158K | 2.1% |
UltraChat | 多輪純文本對話 | 1.5M | 29.1% |
評估
IDEFICS
由於未在視頻 - 文本數據集上訓練IDEFICS,因此未在視頻基準測試上進行評估。將該模型與原始的Flamingo和另一個開源復現版本 OpenFlamingo 進行了比較。
在多個圖像文本基準測試中進行了評估,包括視覺問答(開放式和多項選擇)、圖像字幕生成和圖像分類等。評估結果表明,IDEFICS在多個任務上表現出色,與閉源模型性能相當。
IDEFICS instruct
同樣在多個圖像文本基準測試中進行了評估,通過在驗證集上進行檢查點選擇,選擇了最佳的檢查點進行評估。評估結果表明,指令微調版本在多個任務上進一步提升了性能。
技術規格
硬件
- IDEFICS-9b預訓練:使用128個NVIDIA A100 GPU,訓練時長約350小時。
- IDEFICS-9b-instruct微調:使用128個NVIDIA A100 GPU,訓練時長約70小時。
- IDEFICS-80b預訓練:使用512個NVIDIA A100 GPU,訓練時長約672小時(28天)。
- IDEFICS-80b-instruct微調:使用384個NVIDIA A100 GPU,訓練時長約72小時(3天)。
軟件
訓練軟件基於HuggingFace Transformers + Accelerate構建,使用 DeepSpeed ZeRO-3 進行訓練,使用 WebDataset 進行數據加載。
環境影響
分別報告了IDEFICS創建過程中三個階段的碳排放:
- 初步實驗:碳排放16,714千克CO2eq。
- IDEFICS-9b預訓練:碳排放5,160千克CO2eq。
- IDEFICS-9b-instruct微調:碳排放1,032千克CO2eq。
- IDEFICS-80b預訓練:碳排放39,498千克CO2eq。
- IDEFICS-80b-instruct微調:碳排放3,174千克CO2eq。
整個IDEFICS項目的總碳足跡估計約為 65.57噸CO2eq。
🔧 技術細節
模型架構
IDEFICS基於兩個單模態的開源預訓練模型構建,通過新初始化的Transformer塊連接視覺編碼器和語言模型。在訓練過程中,預訓練的主幹網絡被凍結,只訓練新初始化的參數。
訓練方法
採用標準的下一個令牌預測作為訓練目標,使用Adam優化器進行訓練,並應用了梯度裁剪、Z-loss等技術來提高訓練穩定性。
數據處理
對於多模態網頁文檔,將文本段落和圖像的序列輸入模型;對於圖像 - 文本對,將圖像和其對應的字幕打包成訓練序列。圖像通過視覺編碼器進行編碼,視覺隱藏狀態通過Transformer Perceiver塊進行池化,然後通過交叉注意力塊融合到文本序列中。
📄 許可證
該模型基於兩個預訓練模型構建:laion/CLIP-ViT-H-14-laion2B-s32B-b79K 和 huggyllama/llama-65b。第一個模型以MIT許可證發佈,第二個模型以特定的非商業研究用途許可證發佈。因此,用戶需要直接申請 Meta的表單 以遵守該許可證。
新訓練的額外權重以MIT許可證發佈。
📖 引用
@misc{laurencon2023obelics,
title={OBELICS: An Open Web-Scale Filtered Dataset of Interleaved Image-Text Documents},
author={Hugo Laurençon and Lucile Saulnier and Léo Tronchon and Stas Bekman and Amanpreet Singh and Anton Lozhkov and Thomas Wang and Siddharth Karamcheti and Alexander M. Rush and Douwe Kiela and Matthieu Cord and Victor Sanh},
year={2023},
eprint={2306.16527},
archivePrefix={arXiv},
primaryClass={cs.IR}
}
👥 模型構建者、文檔作者和貢獻者
核心團隊()得到了Hugging Face眾多貢獻者的支持: Stas Bekman, Léo Tronchon*, Hugo Laurençon*, Lucile Saulnier*, Amanpreet Singh*, Anton Lozhkov, Thomas Wang, Siddharth Karamcheti, Daniel Van Strien, Giada Pistilli, Yacine Jernite, Sasha Luccioni, Ezi Ozoani, Younes Belkada, Sylvain Gugger, Amy E. Roberts, Lysandre Debut, Arthur Zucker, Nicolas Patry, Lewis Tunstall, Zach Mueller, Sourab Mangrulkar, Chunte Lee, Yuvraj Sharma, Dawood Khan, Abubakar Abid, Ali Abid, Freddy Boulton, Omar Sanseviero, Carlos Muñoz Ferrandis, Guillaume Salou, Guillaume Legendre, Quentin Lhoest, Douwe Kiela, Alexander M. Rush, Matthieu Cord, Julien Chaumond, Thomas Wolf, Victor Sanh*
📞 模型卡片聯繫
如有問題,請在社區板塊開啟討論!








