LLaVA और दृश्य निर्देशों के समायोजन
Type: Build
Languages: Python (stdlib, projector + instruction-template builder)
Prerequisites: Phase 12 · 02 (CLIP), Phase 11 (LLM Engineering — instruction tuning)
Time: ~180 minutes
सीखने के लक्ष्य
- एक 2-परत MLP प्रोजेक्टर का निर्माण करें जो ViT पैच एम्बेडमेंट्स (dim 1024) को LLM के एम्बेडिंग dim (dim 4096) पर मैप करता है।
- एलएलएवीए दो चरणों के नुस्खा पर चलेंः (1) 558k कैप्शन जोड़े पर प्रोजेक्टर संरेखण, (2) 158k जीपीटी-4-जनित मोड़ पर दृश्य निर्देश ट्यूनिंग।
- छवि टोकन प्लेसहोल्डर, सिस्टम प्रॉम्प्ट और उपयोगकर्ता/सहायक मोड़ के साथ LLaVA प्रारूप के प्रॉम्प्ट का निर्माण करें।
- समझाएं कि क्यू-फॉर्मर के टोकन-बजट जीत के बावजूद समुदाय क्यू-फॉर्मर से एमएलपी में क्यों चला गया।
समस्या
BLIP-2 का Q-Former (Lection 12.03) एक छवि को 32 टोकन तक संपीड़ित करता है। स्वच्छ, कुशल, बेंचमार्क के लिए अच्छा है। लेकिन इसमें दो समस्याएं हैं।
Q-Former को प्रशिक्षित किया जा सकता है लेकिन इसका नुकसान अंतिम कार्य नहीं है। स्टेज 1 ITC+ITM+ITG को प्रशिक्षित करता है। स्टेज 2 LM हानि को प्रशिक्षित करता है। क्वेरी कुछ मध्यवर्ती प्रतिनिधित्व सीखती है जिसे LLM को फिर डिकोड करना पड़ता है। जानकारी bottleneck में खो जाती है।
दूसरा, क्यू-फॉर्म 188 मिलियन पैरामीटर लेता है, और LLaVA के 2023 पैमाने पर आपको इसे अपने लक्षित LLM के साथ सह-डिजाइन करना था। LLM को बदलें, Q-Former को फिर से प्रशिक्षित करें। दृष्टि एन्कोडर को बदलें, फिर से प्रशिक्षित करें। प्रत्येक संयोजन एक अलग आर एंड डी परियोजना थी।
LLaVA उत्तर अपनी सादगी में शर्मनाक थाः ViT के 576 पैच टोकन ले लो, प्रत्येक को दो परत MLP के माध्यम से पारित करें (1024 → 4096 → 4096), और LLM के इनपुट अनुक्रम में सभी 576 फेंक. कोई बोतल गला. कोई चरण 1 अजीब उद्देश्यों पर पूर्व प्रशिक्षण. बस प्रत्यक्ष LM हानि पर MLP प्रशिक्षित.
डेटा कहां से आता है? LLaVA का दूसरा अंतर्दृष्टिः निर्देश डेटा उत्पन्न करने के लिए GPT-4 (केवल पाठ) का उपयोग करें। एक छवि के लिए GPT-4 को COCO कैप्शन और बॉन्डिंग बॉक्स डेटा खिलाएं, उससे बातचीत, विवरण और जटिल तर्क प्रश्न उत्पन्न करने के लिए कहें। 158k निर्देश-प्रतिक्रिया मुफ्त में चालू होता है। कोई मानव टिप्पणी नहीं।
परिणामः एक VLM जो एक दिन के लिए 8 A100 पर चला, एमएमएमयू पर फ्लेमिंगो को हराया, और एक खुला चेकपोस्ट भेजा जो समुदाय विस्तार कर सकता था। 2023 के अंत तक इसने 50+ कांटे पैदा किए थे।
अवधारणा
वास्तुकला
13B पर LLaVA-1.5:
- दृष्टि एन्कोडरः CLIP ViT-L/14 @ 336 (चरण 1 के दौरान जमे हुए, चरण 2 में वैकल्पिक रूप से अनजमे हुए)
- प्रोजेक्टरः GELU सक्रियण के साथ 2-परत MLP,
1024 → 4096 → 4096. . - LLM: Vicuna-13B (बाद में Llama-3.1-8B)
आगे एक छवि + पाठ प्रम्प्ट पर पास करेंः
img -> ViT -> 576 patches of dim 1024
patches -> MLP -> 576 tokens of dim 4096
prompt: system + "<image>" placeholder + user question
replace <image> token with the 576 projected tokens
feed the full sequence to the LLM
decode responseछवि LLM संदर्भ के 576 टोकन पर कब्जा करती है। 2048 संदर्भ में, यह पाठ के लिए 1472 टोकन छोड़ देता है। 32k संदर्भ में, यह एक गोल त्रुटि है।
चरण 1: प्रोजेक्टर संरेखण
फ्रीज ViT. फ्रीज LLM. केवल 2-परत MLP को प्रशिक्षित करें. डेटासेटः 558k छवि-कैप्शन जोड़े (LAION-CC-SBU). हानिः कैप्शन पर भाषा मॉडलिंग, अनुमानित छवि टोकन पर शर्त।
एक एकल युग में बैच 128 में यह कुछ घंटों में किया जाता है। प्रोजेक्टर को एलएलएम-स्पेस में वीटी-स्पेस को मैप करना सीखता है। कोई कार्य-विशिष्ट पर्यवेक्षण नहीं।
चरण 2: दृश्य निर्देशों को समायोजित करना
प्रोजेक्टर को फ्रीज करें (अभी भी प्रशिक्षित किया जा सकता है) । एलएलएम (आमतौर पर पूरी तरह से, कभी-कभी लोरा) को फ्रीज करें। 158k दृश्य-निर्देश मोड़ पर प्रशिक्षित करें।
निर्देश डेटा है चाल. लियू और अन्य द्वारा उत्पन्न किया गयाः
- COCO की एक छवि लें।
- पाठ विवरण निकालें (5 मानव उपशीर्षक + सीमांकन बॉक्स सूची) ।
- तीन शीघ्र टेम्पलेट के साथ GPT-4 को भेजेंः
- बातचीतः "एक उपयोगकर्ता और सहायक के बीच इस छवि के बारे में एक आगे-पीछे संवाद उत्पन्न करें।"
- विस्तृत विवरणः "छवि का समृद्ध, विस्तृत विवरण दें।"
- जटिल तर्कः "एक सवाल पूछिए जिसके लिए चित्र के बारे में तर्क की आवश्यकता है, फिर इसका उत्तर दें।"
- GPT-4 के आउटपुट को (निर्देश, प्रतिक्रिया) जोड़े में पार्स करें।
यह सब कुछ सीधे चित्र को नहीं छूता है केवल पाठ विवरण। GPT-4 दृश्य सामग्री को संदिग्ध करता है। कुछ शोर, लेकिन यह काम कियाः संवाद को अनलॉक करने के लिए 158k मोड़ पर्याप्त थे।
समुदाय ने इसे कॉपी क्यों किया
- चरण-1 के लिए कोई नुकसान नहीं है।
- प्रोजेक्टर घंटों में ट्रेन करता है, दिन नहीं।
- एलएलएम को केवल प्रोजेक्टर को पुनः प्रशिक्षित करके बदल दिया जा सकता है (एलएलएवीए-लमा2, एलएलएवीए-मिस्ट्रल, एलएलएवीए-लमा3) ।
- दृश्य निर्देश डेटा पाइपलाइन GPT-4 का उपयोग करती है और नए डोमेन के लिए पुनर्निर्माण करने के लिए सस्ता है।
LLaVA-1.5 और LLaVA-NeXT
LLaVA-1.5 (अक्टूबर 2023) में कहा गया है:
- शैक्षणिक कार्य डेटा (VQA, OKVQA, RefCOCO) को निर्देशों के समायोजन में मिलाया गया।
- बेहतर प्रणाली शीघ्रता.
- 2048 → 32k संदर्भ।
LLaVA-NeXT (जनवरी 2024) ने कहाः
- AnyRes: 336x336 फसलों के 2x2 या 1x3 ग्रिड में उच्च-रिज़ॉल्यूशन छवियों को विभाजित करें, साथ ही एक वैश्विक कम-रिज़ॉल्यूशन थंबनेल। प्रत्येक फसल 576 टोकन बन जाती है; प्रति छवि कुल लगभग 2880 दृश्य टोकन। ओसीआर और चार्ट कार्यों में छलांग लगाई गई।
- ShareGPT4V (उच्च गुणवत्ता वाले GPT-4V कैप्शन) के साथ निर्देश डेटा मिश्रण बेहतर।
- मजबूत आधार LLM (मिस्ट्रल-7बी, Yi-34B) ।
LLaVA-OneVision
पाठ 12.08 में वनविजन को गहराई से कवर किया गया है। छोटा संस्करणः एक ही प्रोजेक्टर, लेकिन एक पाठ्यक्रम के साथ प्रशिक्षित है जो साझा दृश्य-टोकन बजट के साथ एक मॉडल में एकल छवि, बहु-छवि और वीडियो को कवर करता है।
Q-Former की तुलना
| Q-Former (BLIP-2) | MLP (LLaVA) | |
|---|---|---|
| Visual tokens per image | 32 | 576 (base) or 2880 (AnyRes) |
| Trainable params | 188M + LM | 40M + LM |
| Stage 1 loss | ITC+ITM+ITG | LM only |
| LLM drop-in | Requires retrain | Swap with minimal retrain |
| Multi-image | Awkward | Natural (concat) |
| Video | Awkward | Natural (per-frame concat) |
| Token budget | Small | Large |
एमएलपी सरलता और टोकन लचीलापन पर जीतता है। क्यू-फॉर्म टोकन बजट पर जीतता है। 2023 के अंत तक टोकन बजट अब बाध्यकारी प्रतिबंध नहीं था (एलएलएम संदर्भ 32k-128k+ तक बढ़े) और सरलता हावी थी।
शीघ्र प्रारूप
A chat between a curious human and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the human's questions. USER: <image> Describe this image in detail. ASSISTANT: The image shows ...<image>टोकन एक स्थान धारक टोकन है। टोकनकरण से पहले, इसे 576 दृश्य टोकन (या AnyRes के साथ 2880) के साथ प्रतिस्थापित किया जाता है। टोकनराइज़र यह प्रशिक्षण से थोड़ा लंबा अनुक्रम देखता है, लेकिन एलएलएम नए इनपुट को संभालता है क्योंकि चरण 1 ने इसे सिखाया है।
पैरामीटर अर्थव्यवस्था
LLaVA-1.5-7B टूटनाः
- CLIP ViT-L/14 @ 336: 303M (मुश्किल से फ्रीज होने वाला चरण 1, अक्सर फ्रीज होने वाला चरण 2)
- प्रोजेक्टर (2x रैखिक): ~22M ट्रेनेबल।
- लामा-7बी: 7बी।
- कुलः 7.3B पैराम. चरण 2: पूर्ण 7B + 22M प्रोजेक्टर के दौरान प्रशिक्षित किया जा सकता है।
चरण 2: प्रशिक्षण लागत 8xA100 पर ~20 घंटे। यह कुंजी संख्या है एक दिन, एक नोड, पुनः उत्पन्न करने योग्य। यही कारण है कि LLaVA फैलता है।
इसका प्रयोग करें
code/main.pyकार्य करता हैः
- शुद्ध पायथन में 2-परत एमएलपी प्रोजेक्टर (टॉय स्केल के लिए 16 → 32 → 32) ।
- शीघ्र निर्माण पाइपलाइनः सिस्टम शीघ्र +
<image>N प्रोजेक्टेड टोकन + यूजर टर्न + असिस्टेंट जनरेशन प्लेसहोल्डर से प्रतिस्थापित किया गया। - LLM संदर्भ में 576-टोकन दृश्य ब्लॉक की तरह दिखने के लिए एक दृश्य (परसेंट 2k / 32k / 128k संदर्भ खपत) ।
इसे भेजें
यह सबक हमें फल देता हैoutputs/skill-llava-vibes-eval.md. एक LLaVA-परिवार चेकपॉइंट को देखते हुए, यह एक 10-प्रोम्प्ट वाइब्स-एवल सूट (3 कैप्शन, 3 VQA, 2 तर्क, 2 अस्वीकृति) चलाता है और एक मानव-पठनीय स्कोरकार्ड रिपोर्ट करता है। यह एक बेंचमार्क नहीं है; प्रोजेक्टर और LLM के अच्छे कनेक्शन की पुष्टि करने के लिए एक धुएं परीक्षण।
व्यायाम
- 2 परत MLP प्रोजेक्टर के लिए प्रशिक्षित पैरामीटर की गणना की गणना करें
1024 → 4096 → 4096. GELU और पूर्वाग्रह के साथ, यह LLaVA-13B के कितने अंश का प्रतिनिधित्व करता है?
- "अस्वीकार" मामले के लिए एक LLaVA संकेत बनाएं छवि में एक निजी व्यक्ति होता है। अपेक्षित सहायक प्रतिक्रिया लिखें। LLaVA को इस शून्य शॉट से इनकार क्यों करना चाहिए और अस्वीकार को मजबूत करने के लिए किस प्रशिक्षण डेटा की आवश्यकता होगी?
- LLaVA-NeXT ब्लॉग के AnyRes अनुभाग को पढ़ें। AnyRes पर 1344x672 छवि के लिए दृश्य टोकन की गणना करें। 336x336 पर 576 टोकन की आधार तुलना करें।
- LLaVA चरण-1 प्रोजेक्टर को कैप्शन पर LM हानि के साथ प्रशिक्षित किया गया है। यदि आप चरण 1 को छोड़कर सीधे चरण 2 (दृश्य निर्देश ट्यूनिंग) पर जाते हैं तो क्या होता है? उत्तर के लिए प्रिस्मेटिक VLMs अव्यय (arXiv:2402.07865) का उल्लेख करें।
- LLaVA-Instruct-150k निर्देश उत्पन्न करने के लिए GPT-4 का उपयोग COCO कैप्शन के साथ करता है। एक नए डोमेन (चिकित्सा एक्स-रे, उपग्रह छवियां) के लिए, डोमेन निर्देश उत्पन्न करने के लिए चार चरणों की डेटा पाइपलाइन का वर्णन करें। प्रत्येक चरण में क्या गलत हो सकता है?
प्रमुख शर्तें
| Term | What people say | What it actually means |
|---|---|---|
| Projector | "MLP bridge" | 2-layer MLP with GELU mapping ViT dim to LLM dim |
| Image token | "<image> placeholder" | Prompt marker replaced by N projected visual tokens before inference |
| Visual instruction tuning | "LLaVA stage 2" | Training on GPT-4-generated (image, instruction, response) triplets |
| Stage 1 alignment | "Projector pretraining" | Freeze ViT and LLM, train projector with LM loss on captions |
| AnyRes | "Multi-crop tiling" | Split high-res image into a tile grid and concatenate each tile's visual tokens |
| LLaVA-Instruct | "GPT-4-generated" | 158k instruction-response pairs synthesized from COCO captions + GPT-4 |
| Vision encoder freeze | "Backbone locked" | CLIP weights do not update in stage 1, sometimes not in stage 2 either |
| ShareGPT4V | "Better captions" | 1M dense captions generated by GPT-4V, used for higher-quality alignment |
| VQA | "Visual question answering" | Task of answering a free-form question about an image |
| Prismatic VLMs | "Design-space paper" | Karamcheti 2024 ablation systematically testing projector and data choices |
आगे पढ़ना
- Liu et al. — Visual Instruction Tuning (arXiv:2304.08485) LLaVA पेपर।
- Liu et al. — Improved Baselines with Visual Instruction Tuning (arXiv:2310.03744) LLaVA-1.5.
- Chen et al. — ShareGPT4V (arXiv:2311.12793) घने उपशीर्षक डेटासेट।
- Karamcheti et al. — Prismatic VLMs (arXiv:2402.07865) डिजाइन-स्पेस एब्लाशन।
- Li et al. — LLaVA-OneVision (arXiv:2408.03326) एकीकृत एकल-छवि, बहु-छवि, वीडियो।
This free lesson is part of the AI Engineering from Scratch curriculum. Read the full explanation, run the lesson code, and verify the result in the interactive reader or from the repository source.
Browse the complete course catalog or open this lesson on GitHub.