iT邦幫忙

2025 iThome 鐵人賽

DAY 25
0
生成式 AI

VLM系列 第 25

Day 25 :VLM QLoRA Fine-Tuning (2/3)

  • 分享至 

  • xImage
  •  

準備資料集

使用 Hugging Face 的 llava-instruct-150k 作為範例(圖像-指令對)

from datasets import load_dataset
raw_datasets = load_dataset("HuggingFaceH4/llava-instruct-mix-vsft")

raw_datasets

(輸出結果,llava-instruct-150k資料集的格式:每一筆資料主要包含兩個欄位:image 和 messages)
https://ithelp.ithome.com.tw/upload/images/20251009/20178920IOXh8BMVP4.jpg

train_dataset = raw_datasets["train"]
eval_dataset = raw_datasets["test"]

# 練習用,只隨機選取一小部分資料做測試
small_train_dataset = train_dataset.shuffle(seed=42).select(range(int(len(train_dataset)*0.1)))
small_eval_dataset = eval_dataset.shuffle(seed=42).select(range(int(len(eval_dataset)*0.1)))

檢視資料內容

example = small_train_dataset[10]
images = example["images"]
images[0]

https://ithelp.ithome.com.tw/upload/images/20251009/20178920drn0IIz4V5.png

messages = example['messages']
messages

https://ithelp.ithome.com.tw/upload/images/20251009/20178920DTxmpaWy0g.png

格式說明:資料集以 JSON-like 結構儲存,每筆樣本為一個字典,包含兩個主要欄位:images 與 messages

  • images 欄位: 圖像列表(list),長度固定為 1,內容為二進位圖像資料(binary)或 PIL 物件(在 Hugging Face 載入時自動處理)。
  • messages 欄位: 這是一個對話列表(list of dict),模擬了多輪對話的結構,每個元素為一輪訊息。
    • role:表示說話者的角色,"user" 代表使用者,"assistant" 代表模型(助理)。
    • content:內容列表(list of dict),每個元素為文字或圖像片段。
      • index:整數(圖像索引,通常為 0;若為文字則為 null)
      • text:字串(文字內容,若為圖像則為 null)。
      • type:字串,"text"(文字)或 "image"(圖像引用)。
        • 值若為"text",表示這部分的內容是文字。
        • 值若為"image",這是一個佔位符,表示圖片應該被插入到對話的這個位置。訓練框架(如 TRL)會自動處理這個佔位符,並將前述 images 欄位的圖片與之對應。

LLaVA 的對話格式需要符合特定的模板


修正:
格式 "USER: \n{question}\nASSISTANT: {answer}"
這個是LLaVA推理提示模板,但是微調訓練時不是這個格式!


上一篇
Day 24 :VLM QLoRA Fine-Tuning (1/3)
下一篇
Day 26:VLM QLoRA Fine-Tuning (3/4)- LLaVA微調
系列文
VLM30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言