विज़न ट्रांसफॉर्मर्स (ViT) ट्यूटोरियल: आर्किटेक्चर और कोड उदाहरण
जानें कि विज़न ट्रांसफॉर्मर्स (ViTs) पैच एम्बेडिंग्स और सेल्फ-अटेंशन का उपयोग करके आधुनिक इमेज क्लासिफिकेशन में CNNs को कैसे पीछे छोड़ते हैं। यह विस्तृत ट्यूटोरियल ViT आर्किटेक्चर को समझाता है, चरण-दर-चरण Python कोड देता है, और बताता है कि वास्तविक प्रोजेक्ट्स में कब ViTs चुनें।
हम सब जानते हैं कि ट्रांसफॉर्मर्स प्राकृतिक भाषा संसाधन में बुनियादी बन गए हैं और अब कंप्यूटर विज़न में भी तेजी से लोकप्रिय हो रहे हैं। विज़न ट्रांसफॉर्मर्स (ViTs) इमेज समझने के लिए एक नया तरीका देते हैं—पाठ-आधारित मॉडलों में इस्तेमाल होने वाले वही सिद्धांत—लार्ज लैंग्वेज मॉडल्स—का उपयोग करके।
ViTs को पहली बार 2020 में Google Research के पेपर “An Image is Worth 16×16 Words” में पेश किया गया था, जिसने दिखाया कि बड़े इमेज डेटासेट्स पर ट्रेन किए गए ट्रांसफॉर्मर्स CNNs के बराबर या उनसे बेहतर प्रदर्शन कर सकते हैं। तब से, DeiT और Swin जैसे व्यावहारिक वेरिएंट्स ने उनके उपयोग को कई विज़न कार्यों में फैला दिया है।
इस ट्यूटोरियल में, मैं आपको विज़न ट्रांसफॉर्मर्स (वैनिला/मूल वेरिएंट) के मूल सिद्धांतों, आर्किटेक्चरल कंपोनेंट्स, और व्यावहारिक अनुप्रयोगों से परिचित कराऊंगा। अंत तक, हम न केवल यह समझेंगे कि ViTs कैसे काम करते हैं, बल्कि यह भी कि उन्हें अपने कंप्यूटर विज़न प्रोजेक्ट्स में कैसे लागू करें। मैं अपने इस गाइड को भी देखने की सलाह देता/देती हूं—मल्टी-हेड अटेंशन।
विज़न ट्रांसफॉर्मर (ViT) क्या है?
आइए विज़न ट्रांसफॉर्मर्स का एक सरल परिचय देकर शुरुआत करते हैं।
ये मॉडल किसी इमेज को डेटा के अनुक्रम की तरह ट्रीट करते हैं, जैसे कोई भाषा मॉडल वाक्य में शब्दों को प्रोसेस करता है। फिर इमेज को स्थिर आकार के पैच में बांटा जाता है, प्रत्येक पैच को फ्लैटन कर एक वेक्टर में एम्बेड किया जाता है।
इन वेक्टर्स को फिर एक स्टैंडर्ड ट्रांसफॉर्मर एन्कोडर से पास किया जाता है, जो अटेंशन मैकेनिज्म का उपयोग करके पैचों के बीच के संबंधों को ग्लोबल स्तर पर मॉडल करता है।
कन्वोल्यूशनल न्यूरल नेटवर्क्स से तुलना
यह मूल रूप से कन्वोल्यूशनल न्यूरल नेटवर्क्स (CNNs) से अलग है, जो लोकल फीचर्स पर फोकस करते हैं और हायरार्किकल फीचर एक्सट्रैक्शन पर निर्भर करते हैं।
चूंकि हम CNNs की बात कर रहे हैं, आइए उनके और ViTs के बीच के अंतर पर चर्चा करें:
फ़ीचर
कन्वोल्यूशनल न्यूरल नेटवर्क्स (CNNs)
विज़न ट्रांसफॉर्मर्स (ViTs)
आर्किटेक्चर
कन्वोल्यूशन + पूलिंग लेयर्स का उपयोग
सेल्फ-अटेंशन के साथ ट्रांसफॉर्मर एन्कोडर का उपयोग
रिसेप्टिव फील्ड
स्थानीय रिसेप्टिव फील्ड, जो गहराई के साथ बढ़ता है
शुरू से ही ग्लोबल
पोज़िशनल अवेयरनेस
स्ट्रक्चर के माध्यम से अप्रत्यक्ष
पोज़िशनल एनकोडिंग्स के माध्यम से प्रत्यक्ष
डेटा आवश्यकताएँ
छोटे डेटासेट्स पर भी काफी प्रभावी
बड़े पैमाने के डेटासेट्स की आवश्यकता
इंडक्टिव बायस
मजबूत
न्यूनतम लेकिन अधिक लचीला
पैरललिज़्म की क्षमता
मध्यम
बहुत अधिक
मॉडल स्केलिंग
बहुत बड़े मॉडलों तक स्केल करना कठिन
बेहद स्केलेबल
इंटरप्रिटेबिलिटी
पूलिंग लेयर्स के माध्यम से, फिर भी कठिन
अटेंशन विज़ुअलाइज़ेशन से बेहतर हो सकती है, लेकिन यह भी काफी कठिन
स्पष्ट है कि हमने अभी तक विज़न ट्रांसफॉर्मर्स को पूरी गहराई में कवर नहीं किया है, लेकिन शुरुआत में ही कुछ ऐसे बिंदुओं पर जाना उपयोगी है जो तुरंत स्पष्ट न हों।
उदाहरण के लिए, इंडक्टिव बायस और रिसेप्टिव फील्ड्स महत्वपूर्ण शब्द हैं, जिनके बारे में आप पहले न सुना हो।
इंडक्टिव बायस की व्याख्या
इंडक्टिव बायस का मतलब है वे मान्यताएँ जो कोई मॉडल डेटा से सीखने में मदद के लिए बनाता है। यह पहले थोड़ा उलझा सकता है, पर इस मिसाल के बाद बात साफ हो जाएगी।
मान लीजिए हम साथ में जिग्सॉ पज़ल कर रहे हैं। हम मानते हैं कि टुकड़े आकार और रंग के आधार पर जुड़ेंगे। यह मान्यता हमें टुकड़ों को तेज़ी से जोड़ने में मदद करती है। CNN मॉडल भी इसी तरह काम करता है।
यह स्मार्ट अंदाज़े लगाता है—यह मानकर कि इमेज में पास-पास के हिस्से आपस में संबंधित हैं, जैसे पास के पज़ल पीस अक्सर तस्वीर के एक ही हिस्से से होते हैं। यह यह भी मानता है कि अगर हम किसी आकार को इधर-उधर करें तो भी वह वही आकार रहता है। इन सहायक मान्यताओं को मजबूत इंडक्टिव बायस कहा जाता है।
अब सोचिए हमें पज़ल के बहुत से टुकड़े दिए गए हैं, लेकिन हमें नहीं पता कि अंतिम तस्वीर कैसी दिखती है। हमें यह भी नहीं पता कि हमें आकार देखना चाहिए, रंग या कुछ और। तो हम सब आज़माकर धीरे-धीरे समझते हैं कि क्या काम करता है।
यही एक ट्रांसफॉर्मर मॉडल करता है। यह मजबूत मान्यताएँ नहीं बनाता। यह बहुत सारा डेटा देखकर पैटर्न सीखता है। इसे न्यूनतम इंडक्टिव बायस कहते हैं। यह मॉडल को अधिक आज़ादी देता है, पर सीखने के लिए ज्यादा डेटा और समय चाहिए।
रिसेप्टिव फील्ड की व्याख्या
ऊपर की इमेज दिखाती है कि CNN मॉडल का रिसेप्टिव फील्ड कैसे बदलता है। याद रखें, CNN में कई कन्वोल्यूशनल लेयर्स होती हैं, इसलिए जैसे-जैसे हम नेटवर्क में गहराई में जाते हैं, प्रत्येक लेयर का न्यूरॉन इनपुट के और बड़े क्षेत्र से प्रभावित होता है।
यह बढ़ता हुआ रिसेप्टिव फील्ड गहरी लेयर्स को अधिक जटिल और ग्लोबल फीचर्स पकड़ने देता है, जैसा कि ऊपर चित्र में (कान से चेहरे से पूरे कुत्ते तक) दिखाया गया है।
यह विज़न ट्रांसफॉर्मर के रिसेप्टिव फील्ड से काफी अलग है:
ऊपर के चित्र में, हम देखते हैं कि (वैनिला) ViT का रिसेप्टिव फील्ड ग्लोबल है, यानी सभी पैच एक-दूसरे पर अलग-अलग परिमाण से अटेंड करते हैं (जो तीरों की मोटाई से दिखाया गया है)।
सरलता के लिए, मैंने दिखाया है कि हरे रंग वाला पैच अन्य पैचों द्वारा अटेंड किया जा रहा है, पर वास्तव में, सभी पैच एक-दूसरे पर अटेंड करते हैं (इसे बनाना बहुत उलझा होता!)
CNNs बनाम विज़न ट्रांसफॉर्मर्स—कब उपयोग करें
किस समय CNN और किस समय विज़न ट्रांसफॉर्मर का उपयोग करना है, यह समझना हमारे कंप्यूटर विज़न वर्कफ़्लोज़ में प्रभावी आर्किटेक्चरल चुनाव लेने के लिए काफी महत्वपूर्ण है।
दोनों मॉडलों की अपनी ताकतें (और कमजोरियाँ!) हैं, पर उनका प्रदर्शन अलग परिस्थितियों में बेहतर होता है—डेटा के आकार, कम्प्यूटेशनल संसाधनों, और जिन दृश्य पैटर्न्स की जटिलता को हम मॉडल करना चाहते हैं, उन पर निर्भर करता है।
मैं निर्णय लेते समय इन बिंदुओं पर ध्यान देता/देती हूँ:
CNNs का उपयोग करें जब:
डेटा सीमित हो - हमने पहले ही कहा है कि CNNs में लोकैलिटी जैसी मजबूत इंडक्टिव बायस होते हैं, जो उन्हें छोटे डेटासेट्स पर भी अच्छा जनरलाइज़ करने में मदद करते हैं। यह उन्हें तब विश्वसनीय विकल्प बनाता है जब बड़े लेबल्ड डेटा एकत्र करना व्यावहारिक न हो।
रीयल-टाइम प्रदर्शन महत्वपूर्ण हो - CNNs में अक्सर इन्फरेंस लेटेंसी कम होती है और वे स्टैंडर्ड हार्डवेयर, खासकर मोबाइल और एज डिवाइसेज़ पर कम्प्यूटेशनली अधिक कुशल होते हैं। उनकी आर्किटेक्चर कम पैरामीटर्स और कम मेमोरी उपयोग के साथ प्रदर्शन के लिए अनुकूलित होती है।
कम्प्यूट बजट सीमित हो - किसी CNN को स्क्रैच से ट्रेन करना या प्रीट्रेंड CNN को फाइन-ट्यून करना ViTs की तुलना में काफी कम संसाधन माँगता है। एक सिंगल GPU और मध्यम मेमोरी के साथ हम एक अच्छा CNN ट्रेन कर सकते हैं, जो ट्रांसफॉर्मर-आधारित मॉडलों के लिए हमेशा संभव नहीं।
विज़न ट्रांसफॉर्मर्स का उपयोग करें जब:
बड़े पैमाने के लेबल्ड डेटासेट्स और मजबूत कम्प्यूट इंफ्रास्ट्रक्चर तक पहुँच हो - जैसा कि तुलना तालिका में बताया, विज़न ट्रांसफॉर्मर्स डेटा-भूखे होते हैं और खासकर वैनिला रूप में काफी ट्रेनिंग समय और मेमोरी लेते हैं। पर्याप्त डेटा और कम्प्यूट मिलने पर वे कई बेंचमार्क्स में CNNs को पछाड़ सकते हैं।
लंबी दूरी के स्पैटियल रिलेशनशिप्स कैप्चर करने की आवश्यकता हो - CNNs के विपरीत, जो प्रोसेसिंग में लोकल होते हैं (रिसेप्टिव फील्ड सेक्शन याद करें), ViTs सेल्फ-अटेंशन के जरिए सभी इमेज पैचों के बीच के संबंधों को मॉडल करते हैं, जिससे वे उन कार्यों के लिए विशेष रूप से उपयोगी हो जाते हैं जहाँ पूरी इमेज का स्पैटियल संदर्भ मायने रखता है।
प्रीट्रेंड मॉडल्स और ट्रांसफर लर्निंग का लाभ लेना हो - हम प्रीट्रेंड ViTs तक पहुँच सकते हैं (जैसे HuggingFace या timm के माध्यम से) और फाइन-ट्यूनिंग काफी व्यावहारिक हो जाती है। ऐसे में, मध्यम आकार के डेटासेट्स से भी बिना स्क्रैच से ट्रेनिंग किए बेहतरीन परिणाम मिल सकते हैं।
तो संक्षेप में, यदि आप लो-रिसोर्स वातावरण में हों या सीमित डेटा के साथ तेज़, भरोसेमंद परिणाम चाहिए हों, तो CNNs सुरक्षित और अधिक कुशल विकल्प हैं।
वहीं, यदि आपके प्रोजेक्ट को दृश्य स्पेस में गहन ग्लोबल रीजनिंग की ज़रूरत है और आपके पास पर्याप्त कम्प्यूट पावर है, तो विज़न ट्रांसफॉर्मर्स बेहतर विकल्प हैं।
विज़न ट्रांसफॉर्मर के घटक
अब आइए विज़न ट्रांसफॉर्मर की वास्तविक आर्किटेक्चर में उतरते हैं। चूंकि इसके कई चरण होते हैं (ठीक पाँच), तो इन्हें एक-एक करके समझते हैं।
चरण 1: इमेज पैचिंग
यह पहला ट्रांसफॉर्मेशन चरण है, जहाँ हमें इमेज को ऐसे रूप में बदलना होता है जिसे ट्रांसफॉर्मर समझ सके।
मान लें हमारे पास 224x224 की इमेज है। इसे ज्यों का त्यों देने के बजाय, हम इसे छोटे, स्थिर आकार के पैचों में बाँटते हैं। यदि हर पैच 16x16 (जैसा मूल पेपर में प्रस्तावित) है, तो इमेज 14×14 = 196 पैचों में बंट जाएगी, क्योंकि (224/16 = 14)।
इसे समझने का आसान तरीका है—एक तस्वीर को बिलकुल बराबर वर्गाकार टाइलों में काटना। हर पैच में स्थानीय जानकारी होती है और वह वाक्य के एक "शब्द" की तरह काम करेगा।
ऊपर के चित्र में आप देख सकते हैं कि भेड़िये की इमेज छोटे (और बराबर) वर्गाकार पैचों—कुल 196—में बंट जाती है।
यहाँ आपके मन में एक सवाल आ सकता है:
“इमेज RGB है, तो 3 कलर चैनल्स का क्या?”
यह एक महत्वपूर्ण बिंदु है—हर पैच वास्तव में डेटा का एक ब्लॉक होता है, जो हमारे मामले में 16x16x3 आकार का होता है। 16x16 ऊँचाई और चौड़ाई है, और 3 कलर चैनल्स हैं—जिससे हर पैच 3-डायमेंशनल टेन्सर बनता है।
इससे हर पैच इमेज के स्थानीय भाग की स्थानिक और रंग जानकारी का संक्षिप्त प्रतिनिधित्व बनता है।
पैचों में यह विभाजन इमेज की 2D स्थानिक संरचना को 1D अनुक्रम में बदल देता है—मल्टी-डायमेंशनल डेटा का—जो ट्रांसफॉर्मर मॉडल के लिए उपयुक्त है।
चरण 2: पैच एम्बेडिंग
अगला कदम है हर इमेज पैच को ऐसी संख्यात्मक अभिव्यक्ति में बदलना जिसे ट्रांसफॉर्मर उपयोग कर सके।
हर 16x16 RGB पैच को फ्लैटन करके एक सिंगल वेक्टर बनाया जाता है। हमारे उदाहरण में, 16×16×3 = 768 मान। मूलतः, हम सभी पिक्सेल और रंग मानों को एक ही पंक्ति में खोल रहे होते हैं।
ये रॉ वेक्टर जानकारीपूर्ण तो हैं, पर अभी सीखने योग्य स्पेस में नहीं हैं। इसलिए हर वेक्टर को ट्रेनेबल लीनियर प्रोजेक्शन लेयर से पास किया जाता है। इसे एक डेंस लेयर समझें जो हर 768-डायमेंशनल इनपुट को आकार D (अक्सर 768, पर हमेशा नहीं) के नए एम्बेडिंग स्पेस में मैप करता है।
क्यों?
यह प्रोजेक्शन इसलिए जरूरी है ताकि सभी पैच टोकन्स एक समान, सीखने योग्य फ़ॉर्मेट में आ जाएँ जैसा ट्रांसफॉर्मर एन्कोडर अपेक्षा करता है। इस बिंदु तक, हमारे पास फिक्स्ड-लेंथ वेक्टर्स का अनुक्रम है, जहाँ हर वेक्टर इमेज के एक पैच का प्रतिनिधित्व करता है।
यह पूरी प्रक्रिया स्थानिक और रंग-समृद्ध पैचों को एकीकृत "टोकन्स" के अनुक्रम में बदल देती है (NLP में वर्ड एम्बेडिंग्स के समान), जिससे ट्रांसफॉर्मर इमेज को सीखने योग्य संस्थाओं की संरचित श्रृंखला की तरह ट्रीट कर सके।
चरण 3: पोज़िशनल एनकोडिंग
एन्कोडर को भेजने से पहले एक चीज़ बाकी है। यदि आप पहले LLMs कवर कर चुके हैं, तो आप यह अनुमान लगा चुके होंगे!
ट्रांसफॉर्मर्स स्वभावतः पोज़िशन-अज्ञेय होते हैं।
अर्थात, वे इनपुट्स के अनुक्रम को बिना क्रम वाले संग्रह के रूप में ट्रीट करते हैं—उनके पास टोकन्स के क्रम या स्थिति को समझने का कोई इनबिल्ट तंत्र नहीं है। और यह इमेज विश्लेषण में बड़ी समस्या है, जहाँ स्थानिक संरचना और लेआउट दोनों अत्यंत महत्वपूर्ण हैं!
आइए इसे विस्तार से समझते हैं।
इमेज के संदर्भ में, हर पैच मूल इमेज के किसी विशिष्ट क्षेत्र का प्रतिनिधित्व करता है। यदि हम पैच एम्बेडिंग्स का अनुक्रम मॉडल को बिना यह बताए दें कि हर पैच कहाँ से आया है, तो उसे पता ही नहीं चलेगा कि कोई पैच ऊपर-बाएँ कोने से आया या नीचे-दाएँ से।
स्थानिक जागरूकता की यह कमी मॉडल की पैटर्न्स, आकृतियों, संरचनाओं आदि को समझने की क्षमता सीमित कर देगी।
इसे हल करने के लिए, हम हर पैच एम्बेडिंग में पोज़िशनल एनकोडिंग जोड़ते हैं। यह एक वेक्टर होता है जो एक स्पैटियल टैग की तरह काम करता है—एक वेक्टर जो इमेज में पैच की मूल स्थिति को एन्कोड करता है। इन पोज़िशनल वेक्टर्स को पैच एम्बेडिंग्स में सीधे जोड़ दिया जाता है, और उसके बाद यह अनुक्रम ट्रांसफॉर्मर में प्रवेश करता है।
पोज़िशनल एनकोडिंग्स के दो सामान्य प्रकार हैं:
फिक्स्ड (साइनुसॉइडल) पोज़िशनल एनकोडिंग: ये अलग-अलग फ्रीक्वेंसी पर साइन और कोसाइन फंक्शनों का उपयोग करके स्थिति जानकारी एन्कोड करते हैं। ये नियतात्मक होते हैं और सीखने की आवश्यकता नहीं होती। यही “Attention is all you need” पेपर में उपयोग हुआ था।
लर्न्ड पोज़िशनल एनकोडिंग: ये ट्रेन करने योग्य पैरामीटर्स होते हैं जिन्हें मॉडल ट्रेनिंग के दौरान सीखता है। अनुक्रम में हर स्थिति के लिए अपना अलग सीखने योग्य वेक्टर होता है।
यदि आप अभी भी उलझन में हैं, तो इसे GPS निर्देशांकों की तरह समझिए—जो पैचों के लिए पोज़िशनल एनकोडिंग का काम करते हैं।
ये ट्रांसफॉर्मर को टोकन की मूल स्थिति बताते हैं। इस जानकारी को शामिल करके, हम सेल्फ-अटेंशन मैकेनिज्म को हर पैच की सामग्री और इमेज में उसकी सापेक्ष या निरपेक्ष स्थिति दोनों को मॉडल करने देते हैं।
यह चरण निर्णायक है—इसके बिना, विज़न ट्रांसफॉर्मर, चाहे अटेंशन मैकेनिज्म कितना भी शक्तिशाली क्यों न हो, इमेज की संरचना को पुनर्निर्मित नहीं कर पाएगा।
चरण 4: ट्रांसफॉर्मर एन्कोडर ब्लॉक
अब हम वहाँ पहुँच गए हैं जहाँ सारा डीप लर्निंग होता है—पैटर्न डिस्कवरी, संदर्भ मॉडलिंग, और फीचर फ्यूज़न।
पूरा विज़न ट्रांसफॉर्मर एन्कोडर ऐसे कई एन्कोडर ब्लॉक्स को एक के ऊपर एक स्टैक करके बनता है। आइए देखें कि हर एन्कोडर ब्लॉक में क्या होता है:
मल्टी-हेड सेल्फ-अटेंशन (MHSA): यह मैकेनिज्म हर पैच को हर अन्य पैच के साथ इंटरैक्ट करने देता है। इससे मॉडल यह निर्धारित करता है कि इमेज के कौन-से हिस्से एक-दूसरे के लिए सबसे प्रासंगिक हैं।
किसी पैच को अलग-थलग देखने के बजाय, MHSA उसे ग्लोबल संदर्भ देता है।
कई अटेंशन हेड्स संबंधों के अलग-अलग पहलुओं को देखते हैं, जिससे इमेज की समृद्ध व्याख्या मिलती है।
फीडफॉरवर्ड न्यूरल नेटवर्क (FFN): यह एक छोटा मल्टी-लेयर परसेप्ट्रॉन है जो अटेंशन के बाद प्रत्येक टोकन को स्वतंत्र रूप से प्रोसेस करता है। ऐसा हम मॉडल की जटिल, नॉनलाइनियर पैटर्न्स सीखने की क्षमता बढ़ाने के लिए करते हैं।
रेज़िडुअल कनेक्शंस और लेयर नॉर्म: ये ट्रेनिंग को स्थिर बनाते हैं और नेटवर्क में ग्रेडिएंट बहाव को बेहतर करते हैं।
कुल मिलाकर, ये एन्कोडर ब्लॉक्स लेयर्स में स्टैक किए जाते हैं (उदाहरण के लिए, ViT-Base में 12), और हर लेयर के साथ इमेज की गहरी अभिव्यक्तियाँ सीखी जाती हैं।
चरण 5: क्लासिफिकेशन टोकन और MLP हेड
हम लगभग पहुँच चुके हैं! अब (वैनिला) ViT के अंतिम चरण पर चलते हैं।
सभी एन्कोडर लेयर्स के बाद, हमें सब कुछ समरीज़ कर भविष्यवाणी करनी होती है।
इसके लिए हम पैच अनुक्रम की शुरुआत में एक विशेष [CLS] टोकन जोड़ते हैं। यह एक सीखने योग्य एम्बेडिंग है जो एन्कोडिंग के दौरान सभी अन्य टोकन्स के साथ इंटरैक्ट करती है।
ट्रांसफॉर्मर लेयर्स से गुजरते हुए यह ग्लोबल जानकारी एकत्र करता है। अंत में, हम इस टोकन को निकालकर एक मल्टीलेयर परसेप्ट्रॉन (MLP) हेड से पास करते हैं, जो आमतौर पर कुछ डेंस लेयर्स के बाद एक सॉफ्टमैक्स (क्लासिफिकेशन के लिए) होता है।
यह अंतिम चरण हमें अनुमानित लेबल देता है, जैसे “यह इमेज एक कुत्ता है”—यह [CLS] टोकन द्वारा एकत्र की गई जानकारी पर आधारित होता है। यह एक महत्वपूर्ण बिंदु है: अंतिम MLP हेड में केवल [CLS] टोकन ही भेजा जाता है और क्लासिफिकेशन के लिए उसी का उपयोग होता है—अन्य टोकन्स का नहीं!
उल्लेखनीय विज़न ट्रांसफॉर्मर आर्किटेक्चर
अब कुछ क्रांतिकारी विज़न ट्रांसफॉर्मर आर्किटेक्चर्स देखते हैं।
ViT (Google Brain) - यह मूल विज़न ट्रांसफॉर्मर था (और वही जिसे हमने इस लेख में फॉलो किया) जिसने बड़े डेटासेट्स जैसे ImageNet-21k पर इमेज क्लासिफिकेशन के लिए पैच-आधारित ट्रांसफॉर्मर मॉडल प्रस्तुत किया।
DeiT (डेटा-इफिशिएंट इमेज ट्रांसफॉर्मर) - Facebook AI द्वारा प्रस्तुत, DeiT नॉलेज डिस्टिलेशन तकनीकों को शामिल कर डेटा दक्षता बेहतर करता है, जिससे छोटे डेटासेट्स पर ट्रेनिंग संभव होती है।
Swin ट्रांसफॉर्मर - हायरार्किकल आर्किटेक्चर और शिफ्टेड विंडोज़ का उपयोग करके, यह गणना घटाते हुए सटीकता बनाए रखता है। यह ऑब्जेक्ट डिटेक्शन जैसी डेंस प्रेडिक्शन टास्क्स में विशेष रूप से प्रभावी है।
अन्य वेरिएंट्स - BEiT, CvT, और MobileViT जैसे मॉडल्स ने ट्रेनिंग दक्षता, मॉडल कॉम्पैक्टनेस या इन्फरेंस स्पीड में सुधार के लिए विभिन्न डिज़ाइन संवर्द्धन जोड़े हैं।
प्री-ट्रेंड विज़न ट्रांसफॉर्मर्स का उपयोग
अक्सर हम ViT को स्क्रैच से ट्रेन नहीं करेंगे! तो आइए देखें कि लोकप्रिय डीप लर्निंग लाइब्रेरियों से प्री-ट्रेंड ViT मॉडल्स का उपयोग कैसे करें।
Huggingface ट्रांसफॉर्मर्स लाइब्रेरी
विज़न ट्रांसफॉर्मर्स का उपयोग करने के सबसे आसान और भरोसेमंद तरीकों में से एक है Hugging Face Transformers लाइब्रेरी। यह प्रीट्रेंड ViT मॉडल्स देती है जिन्हें कुछ पंक्तियों के कोड से ही इस्तेमाल किया जा सकता है।
मैंने यहाँ ओरिजिनल ViT Base मॉडल को डाउनलोड और उपयोग करने के लिए कुछ कोड लिखा है:
# Imports neededfrom transformers import ViTImageProcessor, ViTForImageClassificationfrom PIL import Imageimport torchimport requests# Here I am loading and preprocessing an image - but you can use any image of your choiceimage = Image.open(requests.get(https://huggingface.co/datasets/huggingface/cats-image?image-viewer=ED6CB286C90CF5F1FAF278077DF091477DF05416', stream=True).raw)# Here, we load and process the ViT modelprocessor = ViTImageProcessor.from_pretrained('google/vit-base-patch16-224')model = ViTForImageClassification.from_pretrained('google/vit-base-patch16-224')# Preprocessing the image so it gets it into the necessary formatinputs = processor(images=image, return_tensors='pt')# Forward pass - with no backpropagationwith torch.no_grad(): outputs = model(**inputs)# Here we get the predicted labels (since we are performing classification)logits = outputs.logits predicted_class = logits.argmax(-1) # Selects the index of the class with the highest logit score (highest predicted probability)print(f"Predicted class index: {predicted_class.item()}")संचालित द्वारा
आइए इस कोड को थोड़ा विस्तार से समझें। सबसे पहले, आप दो अलग-अलग कंपोनेंट्स को डाउनलोड करने की आवश्यकता पर सवाल कर सकते हैं। ये अलग हैं, लेकिन एक-दूसरे के पूरक हैं:
ViTImageProcessor – यह इमेज को प्रीप्रोसेस करने के लिए जिम्मेदार है—मॉडल में भेजने से पहले। यह रिसाइज़िंग, नॉर्मलाइज़ेशन, और इमेज को विज़न ट्रांसफॉर्मर द्वारा अपेक्षित फ़ॉर्मेट में बदलना संभालता है। इसे NLP में टोकनाइज़र के विज़न समकक्ष की तरह समझना सबसे अच्छा है!
ViTForImageClassification – यह वास्तविक मॉडल है जो इन्फरेंस करता है। यह एक विशिष्ट टेन्सर फ़ॉर्मेट में इनपुट्स की अपेक्षा करता है और प्रेडिक्शंस (जैसे, लॉजिट्स या क्लास प्रॉबेबिलिटीज) आउटपुट करता है।
एक और शंका output.logitsको लेकर हो सकती है—और खासतौर पर लॉजिट्स क्या हैं।
मशीन लर्निंग मॉडलों—खासकर क्लासिफिकेशन मॉडलों—में लॉजिट्स अंतिम लेयर द्वारा एक्टिवेशन फंक्शन (जैसे सॉफ्टमैक्स) लगाने से पहले निकले रॉ आउटपुट वैल्यूज़ होते हैं। ये प्रत्येक क्लास के लिए अननॉर्मलाइज़्ड स्कोर्स को दर्शाते हैं।
इन्हें आप मॉडल के आंतरिक आत्मविश्वास स्तरों की तरह समझ सकते हैं। ये मान सकारात्मक या नकारात्मक हो सकते हैं और इनका योग एक होने की बाध्यता नहीं होती।
लॉजिट्स को प्रॉबेबिलिटीज में बदलने के लिए, हमें सॉफ्टमैक्स फंक्शन लगाना होता है, जो मानों को प्रॉबेबिलिटी डिस्ट्रीब्यूशन में स्केल करता है।
तो, जब हम argmax(logits, -1) का उपयोग करते हैं, तो हम बस सबसे ऊँचे रॉ स्कोर (क्लास) के इंडेक्स का चयन कर रहे होते हैं—जो सॉफ्टमैक्स के बाद सबसे अधिक प्रॉबेबिलिटी वाले क्लास के बराबर ही होता है।
timm लाइब्रेरी का उपयोग
विज़न ट्रांसफॉर्मर्स का उपयोग करने के लिए एक और बेहतरीन और प्रसिद्ध लाइब्रेरी है timm (Ross Wightman द्वारा)। यह भी प्रीट्रेंड ViT वेरिएंट्स की विस्तृत रेंज देती है और तेज़ प्रयोग या फाइन-ट्यूनिंग के लिए उपयुक्त है। यहाँ देखें कि इन्फरेंस के लिए ViT मॉडल कैसे लोड और उपयोग करें:
# Relevant importsimport timmimport torchfrom torchvision import transformsfrom PIL import Imageimport requests# Loading an imageurl = 'https://huggingface.co/datasets/huggingface/cats-image?image-viewer=ED6CB286C90CF5F1FAF278077DF091477DF05416'image = Image.open(requests.get(url, stream=True).raw)# Here we have defined the transformation we are going to do on the imagetransform = transforms.Compose([ transforms.Resize((224, 224)), transforms.ToTensor(), transforms.Normalize(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5])])image_tensor = transform(image).unsqueeze(0) # Adding batch dimension# Loading the ViT modelmodel = timm.create_model('vit_base_patch16_224', pretrained=True)model.eval() # Setting it to evaluation mode# Inference componentwith torch.no_grad(): outputs = model(image_tensor) predicted_class = outputs.argmax(dim=1) # Obtaining the class with the highest probabilityprint(f"Predicted class index: {predicted_class.item()}")संचालित द्वारा
अब आप timm और transformers लाइब्रेरी के बीच समानता देख पाएँगे। दोनों प्रीट्रेंड ViT मॉडल्स देती हैं, इमेज प्रोसेसिंग की सुविधा देती हैं (हालाँकि timm में हमने स्टैंडर्ड PyTorch कोड का उपयोग किया), और अंत में हम सबसे ऊँचे लॉजिट वाले क्लास को प्राप्त करते हैं।
निष्कर्ष
कुल मिलाकर, विज़न ट्रांसफॉर्मर्स ने इमेजेज़ को पैचों की “सेंटेन्स” में बदलकर और पहले ही लेयर से ग्लोबल संदर्भ पकड़ने के लिए सेल्फ-अटेंशन का उपयोग करके कंप्यूटर विज़न को नया रूप दिया है। इस ट्यूटोरियल में, हमने सीखा:
ViTs CNNs से क्यों भिन्न हैं – न्यूनतम इंडक्टिव बायस, ग्लोबल रिसेप्टिव फील्ड्स, बड़े पैमाने पर स्केलेबिलिटी, आदि
किस मॉडल को कब चुनें – फिर से, सीमित डेटा और कड़े लेटेंसी बजट में CNNs उत्कृष्ट हैं, जबकि प्रचुर डेटा और शक्तिशाली हार्डवेयर होने पर ViTs बेहतर हैं।
ViT की अंतर्निहित आर्किटेक्चर – हमने इमेज पैचिंग और पोज़िशनल एनकोडिंग्स से लेकर मल्टी-हेड सेल्फ-अटेंशन, रेज़िडुअल पाथ्स, और क्लासिफिकेशन के लिए [CLS] टोकन तक सभी चरण कवर किए।
व्यावहारिक इम्प्लीमेंटेशन – अलग-अलग लाइब्रेरियों—Hugging Face या timm—से प्रीट्रेंड मॉडल्स लोड करना, इमेज प्रीप्रोसेस करना, और प्रेडिक्शंस निकालना।
यदि आप दोनों को साथ-साथ सीखते हुए हाथों-हाथ अनुभव लेना चाहते हैं, तो हमारा कोर्स Transformer Models with PyTorch आपके लिए सही जगह है।
विज़न ट्रांसफॉर्मर FAQs
विज़न ट्रांसफॉर्मर्स कच्चे पिक्सेल पढ़ने के बजाय 16 × 16 पैच में इमेज को क्यों काटते हैं?⌄
पैचिंग 2-डी इमेज को 1-डी “सेंटेन्स” के टोकन्स में बदल देती है, जिससे ट्रांसफॉर्मर वही सेल्फ-अटेंशन तकनीकें लगा सकता है जो भाषा मॉडलों को शक्ति देती हैं।
क्या ViTs को अच्छा काम करने के लिए हमेशा लाखों इमेज की ज़रूरत होती है?⌄
हमेशा नहीं—हम प्रीट्रेंड ViT से शुरू कर फाइन-ट्यून कर सकते हैं। इसके लिए आमतौर पर कुछ हज़ार लेबल्ड इमेजेज़ भी अच्छे नतीजों के लिए काफ़ी होती हैं।
ViTs को कैसे “पता” चलता है कि हर पैच कहाँ से आया है?⌄
वे हर पैच टोकन में पोज़िशनल एनकोडिंग जोड़ते हैं, जिससे मॉडल को स्थानिक क्रम का बोध मिलता है।
मुझे कब अब भी ViT की बजाय CNN चुनना चाहिए?⌄
जब डेटा कम हो या एज डिवाइसेज़ पर अल्ट्रा-फास्ट, कम मेमोरी वाले इन्फरेंस की ज़रूरत हो, तब हमें CNNs चुनना चाहिए।
क्या मैं देख सकता/सकती हूँ कि ViT किस पर ध्यान दे रहा है?⌄
हाँ, हम अटेंशन मैप्स निकालकर, उन्हें अपस्केल कर, और हीटमैप के रूप में ओवरले करके देख सकते हैं कि किन पैचों ने प्रेडिक्शन को प्रभावित किया।
हम सब जानते हैं कि ट्रांसफॉर्मर्स प्राकृतिक भाषा संसाधन में बुनियादी बन गए हैं और अब कंप्यूटर विज़न में भी तेजी से लोकप्रिय हो रहे हैं। विज़न ट्रांसफॉर्मर्स (ViTs) इमेज समझने के लिए एक नया तरीका देते हैं—पाठ-आधारित मॉडलों में इस्तेमाल होने वाले वही सिद्धांत—लार्ज लैंग्वेज मॉडल्स—का उपयोग करके।
ViTs को पहली बार 2020 में Google Research के पेपर “An Image is Worth 16×16 Words” में पेश किया गया था, जिसने दिखाया कि बड़े इमेज डेटासेट्स पर ट्रेन किए गए ट्रांसफॉर्मर्स CNNs के बराबर या उनसे बेहतर प्रदर्शन कर सकते हैं। तब से, DeiT और Swin जैसे व्यावहारिक वेरिएंट्स ने उनके उपयोग को कई विज़न कार्यों में फैला दिया है।
इस ट्यूटोरियल में, मैं आपको विज़न ट्रांसफॉर्मर्स (वैनिला/मूल वेरिएंट) के मूल सिद्धांतों, आर्किटेक्चरल कंपोनेंट्स, और व्यावहारिक अनुप्रयोगों से परिचित कराऊंगा। अंत तक, हम न केवल यह समझेंगे कि ViTs कैसे काम करते हैं, बल्कि यह भी कि उन्हें अपने कंप्यूटर विज़न प्रोजेक्ट्स में कैसे लागू करें। मैं अपने इस गाइड को भी देखने की सलाह देता/देती हूं—मल्टी-हेड अटेंशन।
विज़न ट्रांसफॉर्मर (ViT) क्या है?
आइए विज़न ट्रांसफॉर्मर्स का एक सरल परिचय देकर शुरुआत करते हैं।
ये मॉडल किसी इमेज को डेटा के अनुक्रम की तरह ट्रीट करते हैं, जैसे कोई भाषा मॉडल वाक्य में शब्दों को प्रोसेस करता है। फिर इमेज को स्थिर आकार के पैच में बांटा जाता है, प्रत्येक पैच को फ्लैटन कर एक वेक्टर में एम्बेड किया जाता है।
इन वेक्टर्स को फिर एक स्टैंडर्ड ट्रांसफॉर्मर एन्कोडर से पास किया जाता है, जो अटेंशन मैकेनिज्म का उपयोग करके पैचों के बीच के संबंधों को ग्लोबल स्तर पर मॉडल करता है।
कन्वोल्यूशनल न्यूरल नेटवर्क्स से तुलना
यह मूल रूप से कन्वोल्यूशनल न्यूरल नेटवर्क्स (CNNs) से अलग है, जो लोकल फीचर्स पर फोकस करते हैं और हायरार्किकल फीचर एक्सट्रैक्शन पर निर्भर करते हैं।
चूंकि हम CNNs की बात कर रहे हैं, आइए उनके और ViTs के बीच के अंतर पर चर्चा करें:
फ़ीचर
कन्वोल्यूशनल न्यूरल नेटवर्क्स (CNNs)
विज़न ट्रांसफॉर्मर्स (ViTs)
आर्किटेक्चर
कन्वोल्यूशन + पूलिंग लेयर्स का उपयोग
सेल्फ-अटेंशन के साथ ट्रांसफॉर्मर एन्कोडर का उपयोग
रिसेप्टिव फील्ड
स्थानीय रिसेप्टिव फील्ड, जो गहराई के साथ बढ़ता है
शुरू से ही ग्लोबल
पोज़िशनल अवेयरनेस
स्ट्रक्चर के माध्यम से अप्रत्यक्ष
पोज़िशनल एनकोडिंग्स के माध्यम से प्रत्यक्ष
डेटा आवश्यकताएँ
छोटे डेटासेट्स पर भी काफी प्रभावी
बड़े पैमाने के डेटासेट्स की आवश्यकता
इंडक्टिव बायस
मजबूत
न्यूनतम लेकिन अधिक लचीला
पैरललिज़्म की क्षमता
मध्यम
बहुत अधिक
मॉडल स्केलिंग
बहुत बड़े मॉडलों तक स्केल करना कठिन
बेहद स्केलेबल
इंटरप्रिटेबिलिटी
पूलिंग लेयर्स के माध्यम से, फिर भी कठिन
अटेंशन विज़ुअलाइज़ेशन से बेहतर हो सकती है, लेकिन यह भी काफी कठिन
स्पष्ट है कि हमने अभी तक विज़न ट्रांसफॉर्मर्स को पूरी गहराई में कवर नहीं किया है, लेकिन शुरुआत में ही कुछ ऐसे बिंदुओं पर जाना उपयोगी है जो तुरंत स्पष्ट न हों।
उदाहरण के लिए, इंडक्टिव बायस और रिसेप्टिव फील्ड्स महत्वपूर्ण शब्द हैं, जिनके बारे में आप पहले न सुना हो।
इंडक्टिव बायस की व्याख्या
इंडक्टिव बायस का मतलब है वे मान्यताएँ जो कोई मॉडल डेटा से सीखने में मदद के लिए बनाता है। यह पहले थोड़ा उलझा सकता है, पर इस मिसाल के बाद बात साफ हो जाएगी।
मान लीजिए हम साथ में जिग्सॉ पज़ल कर रहे हैं। हम मानते हैं कि टुकड़े आकार और रंग के आधार पर जुड़ेंगे। यह मान्यता हमें टुकड़ों को तेज़ी से जोड़ने में मदद करती है। CNN मॉडल भी इसी तरह काम करता है।
यह स्मार्ट अंदाज़े लगाता है—यह मानकर कि इमेज में पास-पास के हिस्से आपस में संबंधित हैं, जैसे पास के पज़ल पीस अक्सर तस्वीर के एक ही हिस्से से होते हैं। यह यह भी मानता है कि अगर हम किसी आकार को इधर-उधर करें तो भी वह वही आकार रहता है। इन सहायक मान्यताओं को मजबूत इंडक्टिव बायस कहा जाता है।
अब सोचिए हमें पज़ल के बहुत से टुकड़े दिए गए हैं, लेकिन हमें नहीं पता कि अंतिम तस्वीर कैसी दिखती है। हमें यह भी नहीं पता कि हमें आकार देखना चाहिए, रंग या कुछ और। तो हम सब आज़माकर धीरे-धीरे समझते हैं कि क्या काम करता है।
यही एक ट्रांसफॉर्मर मॉडल करता है। यह मजबूत मान्यताएँ नहीं बनाता। यह बहुत सारा डेटा देखकर पैटर्न सीखता है। इसे न्यूनतम इंडक्टिव बायस कहते हैं। यह मॉडल को अधिक आज़ादी देता है, पर सीखने के लिए ज्यादा डेटा और समय चाहिए।
रिसेप्टिव फील्ड की व्याख्या
ऊपर की इमेज दिखाती है कि CNN मॉडल का रिसेप्टिव फील्ड कैसे बदलता है। याद रखें, CNN में कई कन्वोल्यूशनल लेयर्स होती हैं, इसलिए जैसे-जैसे हम नेटवर्क में गहराई में जाते हैं, प्रत्येक लेयर का न्यूरॉन इनपुट के और बड़े क्षेत्र से प्रभावित होता है।
यह बढ़ता हुआ रिसेप्टिव फील्ड गहरी लेयर्स को अधिक जटिल और ग्लोबल फीचर्स पकड़ने देता है, जैसा कि ऊपर चित्र में (कान से चेहरे से पूरे कुत्ते तक) दिखाया गया है।
यह विज़न ट्रांसफॉर्मर के रिसेप्टिव फील्ड से काफी अलग है:
ऊपर के चित्र में, हम देखते हैं कि (वैनिला) ViT का रिसेप्टिव फील्ड ग्लोबल है, यानी सभी पैच एक-दूसरे पर अलग-अलग परिमाण से अटेंड करते हैं (जो तीरों की मोटाई से दिखाया गया है)।
सरलता के लिए, मैंने दिखाया है कि हरे रंग वाला पैच अन्य पैचों द्वारा अटेंड किया जा रहा है, पर वास्तव में, सभी पैच एक-दूसरे पर अटेंड करते हैं (इसे बनाना बहुत उलझा होता!)
CNNs बनाम विज़न ट्रांसफॉर्मर्स—कब उपयोग करें
किस समय CNN और किस समय विज़न ट्रांसफॉर्मर का उपयोग करना है, यह समझना हमारे कंप्यूटर विज़न वर्कफ़्लोज़ में प्रभावी आर्किटेक्चरल चुनाव लेने के लिए काफी महत्वपूर्ण है।
दोनों मॉडलों की अपनी ताकतें (और कमजोरियाँ!) हैं, पर उनका प्रदर्शन अलग परिस्थितियों में बेहतर होता है—डेटा के आकार, कम्प्यूटेशनल संसाधनों, और जिन दृश्य पैटर्न्स की जटिलता को हम मॉडल करना चाहते हैं, उन पर निर्भर करता है।
मैं निर्णय लेते समय इन बिंदुओं पर ध्यान देता/देती हूँ:
CNNs का उपयोग करें जब:
विज़न ट्रांसफॉर्मर्स का उपयोग करें जब:
तो संक्षेप में, यदि आप लो-रिसोर्स वातावरण में हों या सीमित डेटा के साथ तेज़, भरोसेमंद परिणाम चाहिए हों, तो CNNs सुरक्षित और अधिक कुशल विकल्प हैं।
वहीं, यदि आपके प्रोजेक्ट को दृश्य स्पेस में गहन ग्लोबल रीजनिंग की ज़रूरत है और आपके पास पर्याप्त कम्प्यूट पावर है, तो विज़न ट्रांसफॉर्मर्स बेहतर विकल्प हैं।
विज़न ट्रांसफॉर्मर के घटक
अब आइए विज़न ट्रांसफॉर्मर की वास्तविक आर्किटेक्चर में उतरते हैं। चूंकि इसके कई चरण होते हैं (ठीक पाँच), तो इन्हें एक-एक करके समझते हैं।
चरण 1: इमेज पैचिंग
यह पहला ट्रांसफॉर्मेशन चरण है, जहाँ हमें इमेज को ऐसे रूप में बदलना होता है जिसे ट्रांसफॉर्मर समझ सके।
मान लें हमारे पास 224x224 की इमेज है। इसे ज्यों का त्यों देने के बजाय, हम इसे छोटे, स्थिर आकार के पैचों में बाँटते हैं। यदि हर पैच 16x16 (जैसा मूल पेपर में प्रस्तावित) है, तो इमेज 14×14 = 196 पैचों में बंट जाएगी, क्योंकि (224/16 = 14)।
इसे समझने का आसान तरीका है—एक तस्वीर को बिलकुल बराबर वर्गाकार टाइलों में काटना। हर पैच में स्थानीय जानकारी होती है और वह वाक्य के एक "शब्द" की तरह काम करेगा।
ऊपर के चित्र में आप देख सकते हैं कि भेड़िये की इमेज छोटे (और बराबर) वर्गाकार पैचों—कुल 196—में बंट जाती है।
यहाँ आपके मन में एक सवाल आ सकता है:
“इमेज RGB है, तो 3 कलर चैनल्स का क्या?”
यह एक महत्वपूर्ण बिंदु है—हर पैच वास्तव में डेटा का एक ब्लॉक होता है, जो हमारे मामले में 16x16x3 आकार का होता है। 16x16 ऊँचाई और चौड़ाई है, और 3 कलर चैनल्स हैं—जिससे हर पैच 3-डायमेंशनल टेन्सर बनता है।
इससे हर पैच इमेज के स्थानीय भाग की स्थानिक और रंग जानकारी का संक्षिप्त प्रतिनिधित्व बनता है।
पैचों में यह विभाजन इमेज की 2D स्थानिक संरचना को 1D अनुक्रम में बदल देता है—मल्टी-डायमेंशनल डेटा का—जो ट्रांसफॉर्मर मॉडल के लिए उपयुक्त है।
चरण 2: पैच एम्बेडिंग
अगला कदम है हर इमेज पैच को ऐसी संख्यात्मक अभिव्यक्ति में बदलना जिसे ट्रांसफॉर्मर उपयोग कर सके।
हर 16x16 RGB पैच को फ्लैटन करके एक सिंगल वेक्टर बनाया जाता है। हमारे उदाहरण में, 16×16×3 = 768 मान। मूलतः, हम सभी पिक्सेल और रंग मानों को एक ही पंक्ति में खोल रहे होते हैं।
ये रॉ वेक्टर जानकारीपूर्ण तो हैं, पर अभी सीखने योग्य स्पेस में नहीं हैं। इसलिए हर वेक्टर को ट्रेनेबल लीनियर प्रोजेक्शन लेयर से पास किया जाता है। इसे एक डेंस लेयर समझें जो हर 768-डायमेंशनल इनपुट को आकार D (अक्सर 768, पर हमेशा नहीं) के नए एम्बेडिंग स्पेस में मैप करता है।
क्यों?
यह प्रोजेक्शन इसलिए जरूरी है ताकि सभी पैच टोकन्स एक समान, सीखने योग्य फ़ॉर्मेट में आ जाएँ जैसा ट्रांसफॉर्मर एन्कोडर अपेक्षा करता है। इस बिंदु तक, हमारे पास फिक्स्ड-लेंथ वेक्टर्स का अनुक्रम है, जहाँ हर वेक्टर इमेज के एक पैच का प्रतिनिधित्व करता है।
यह पूरी प्रक्रिया स्थानिक और रंग-समृद्ध पैचों को एकीकृत "टोकन्स" के अनुक्रम में बदल देती है (NLP में वर्ड एम्बेडिंग्स के समान), जिससे ट्रांसफॉर्मर इमेज को सीखने योग्य संस्थाओं की संरचित श्रृंखला की तरह ट्रीट कर सके।
चरण 3: पोज़िशनल एनकोडिंग
एन्कोडर को भेजने से पहले एक चीज़ बाकी है। यदि आप पहले LLMs कवर कर चुके हैं, तो आप यह अनुमान लगा चुके होंगे!
ट्रांसफॉर्मर्स स्वभावतः पोज़िशन-अज्ञेय होते हैं।
अर्थात, वे इनपुट्स के अनुक्रम को बिना क्रम वाले संग्रह के रूप में ट्रीट करते हैं—उनके पास टोकन्स के क्रम या स्थिति को समझने का कोई इनबिल्ट तंत्र नहीं है। और यह इमेज विश्लेषण में बड़ी समस्या है, जहाँ स्थानिक संरचना और लेआउट दोनों अत्यंत महत्वपूर्ण हैं!
आइए इसे विस्तार से समझते हैं।
इमेज के संदर्भ में, हर पैच मूल इमेज के किसी विशिष्ट क्षेत्र का प्रतिनिधित्व करता है। यदि हम पैच एम्बेडिंग्स का अनुक्रम मॉडल को बिना यह बताए दें कि हर पैच कहाँ से आया है, तो उसे पता ही नहीं चलेगा कि कोई पैच ऊपर-बाएँ कोने से आया या नीचे-दाएँ से।
स्थानिक जागरूकता की यह कमी मॉडल की पैटर्न्स, आकृतियों, संरचनाओं आदि को समझने की क्षमता सीमित कर देगी।
इसे हल करने के लिए, हम हर पैच एम्बेडिंग में पोज़िशनल एनकोडिंग जोड़ते हैं। यह एक वेक्टर होता है जो एक स्पैटियल टैग की तरह काम करता है—एक वेक्टर जो इमेज में पैच की मूल स्थिति को एन्कोड करता है। इन पोज़िशनल वेक्टर्स को पैच एम्बेडिंग्स में सीधे जोड़ दिया जाता है, और उसके बाद यह अनुक्रम ट्रांसफॉर्मर में प्रवेश करता है।
पोज़िशनल एनकोडिंग्स के दो सामान्य प्रकार हैं:
यदि आप अभी भी उलझन में हैं, तो इसे GPS निर्देशांकों की तरह समझिए—जो पैचों के लिए पोज़िशनल एनकोडिंग का काम करते हैं।
ये ट्रांसफॉर्मर को टोकन की मूल स्थिति बताते हैं। इस जानकारी को शामिल करके, हम सेल्फ-अटेंशन मैकेनिज्म को हर पैच की सामग्री और इमेज में उसकी सापेक्ष या निरपेक्ष स्थिति दोनों को मॉडल करने देते हैं।
यह चरण निर्णायक है—इसके बिना, विज़न ट्रांसफॉर्मर, चाहे अटेंशन मैकेनिज्म कितना भी शक्तिशाली क्यों न हो, इमेज की संरचना को पुनर्निर्मित नहीं कर पाएगा।
चरण 4: ट्रांसफॉर्मर एन्कोडर ब्लॉक
अब हम वहाँ पहुँच गए हैं जहाँ सारा डीप लर्निंग होता है—पैटर्न डिस्कवरी, संदर्भ मॉडलिंग, और फीचर फ्यूज़न।
पूरा विज़न ट्रांसफॉर्मर एन्कोडर ऐसे कई एन्कोडर ब्लॉक्स को एक के ऊपर एक स्टैक करके बनता है। आइए देखें कि हर एन्कोडर ब्लॉक में क्या होता है:
कुल मिलाकर, ये एन्कोडर ब्लॉक्स लेयर्स में स्टैक किए जाते हैं (उदाहरण के लिए, ViT-Base में 12), और हर लेयर के साथ इमेज की गहरी अभिव्यक्तियाँ सीखी जाती हैं।
चरण 5: क्लासिफिकेशन टोकन और MLP हेड
हम लगभग पहुँच चुके हैं! अब (वैनिला) ViT के अंतिम चरण पर चलते हैं।
सभी एन्कोडर लेयर्स के बाद, हमें सब कुछ समरीज़ कर भविष्यवाणी करनी होती है।
इसके लिए हम पैच अनुक्रम की शुरुआत में एक विशेष [CLS] टोकन जोड़ते हैं। यह एक सीखने योग्य एम्बेडिंग है जो एन्कोडिंग के दौरान सभी अन्य टोकन्स के साथ इंटरैक्ट करती है।
ट्रांसफॉर्मर लेयर्स से गुजरते हुए यह ग्लोबल जानकारी एकत्र करता है। अंत में, हम इस टोकन को निकालकर एक मल्टीलेयर परसेप्ट्रॉन (MLP) हेड से पास करते हैं, जो आमतौर पर कुछ डेंस लेयर्स के बाद एक सॉफ्टमैक्स (क्लासिफिकेशन के लिए) होता है।
यह अंतिम चरण हमें अनुमानित लेबल देता है, जैसे “यह इमेज एक कुत्ता है”—यह [CLS] टोकन द्वारा एकत्र की गई जानकारी पर आधारित होता है। यह एक महत्वपूर्ण बिंदु है: अंतिम MLP हेड में केवल [CLS] टोकन ही भेजा जाता है और क्लासिफिकेशन के लिए उसी का उपयोग होता है—अन्य टोकन्स का नहीं!
उल्लेखनीय विज़न ट्रांसफॉर्मर आर्किटेक्चर
अब कुछ क्रांतिकारी विज़न ट्रांसफॉर्मर आर्किटेक्चर्स देखते हैं।
प्री-ट्रेंड विज़न ट्रांसफॉर्मर्स का उपयोग
अक्सर हम ViT को स्क्रैच से ट्रेन नहीं करेंगे! तो आइए देखें कि लोकप्रिय डीप लर्निंग लाइब्रेरियों से प्री-ट्रेंड ViT मॉडल्स का उपयोग कैसे करें।
Huggingface ट्रांसफॉर्मर्स लाइब्रेरी
विज़न ट्रांसफॉर्मर्स का उपयोग करने के सबसे आसान और भरोसेमंद तरीकों में से एक है Hugging Face Transformers लाइब्रेरी। यह प्रीट्रेंड ViT मॉडल्स देती है जिन्हें कुछ पंक्तियों के कोड से ही इस्तेमाल किया जा सकता है।
मैंने यहाँ ओरिजिनल ViT Base मॉडल को डाउनलोड और उपयोग करने के लिए कुछ कोड लिखा है:
आइए इस कोड को थोड़ा विस्तार से समझें। सबसे पहले, आप दो अलग-अलग कंपोनेंट्स को डाउनलोड करने की आवश्यकता पर सवाल कर सकते हैं। ये अलग हैं, लेकिन एक-दूसरे के पूरक हैं:
ViTImageProcessor– यह इमेज को प्रीप्रोसेस करने के लिए जिम्मेदार है—मॉडल में भेजने से पहले। यह रिसाइज़िंग, नॉर्मलाइज़ेशन, और इमेज को विज़न ट्रांसफॉर्मर द्वारा अपेक्षित फ़ॉर्मेट में बदलना संभालता है। इसे NLP में टोकनाइज़र के विज़न समकक्ष की तरह समझना सबसे अच्छा है!ViTForImageClassification– यह वास्तविक मॉडल है जो इन्फरेंस करता है। यह एक विशिष्ट टेन्सर फ़ॉर्मेट में इनपुट्स की अपेक्षा करता है और प्रेडिक्शंस (जैसे, लॉजिट्स या क्लास प्रॉबेबिलिटीज) आउटपुट करता है।एक और शंका
output.logitsको लेकर हो सकती है—और खासतौर पर लॉजिट्स क्या हैं।मशीन लर्निंग मॉडलों—खासकर क्लासिफिकेशन मॉडलों—में लॉजिट्स अंतिम लेयर द्वारा एक्टिवेशन फंक्शन (जैसे सॉफ्टमैक्स) लगाने से पहले निकले रॉ आउटपुट वैल्यूज़ होते हैं। ये प्रत्येक क्लास के लिए अननॉर्मलाइज़्ड स्कोर्स को दर्शाते हैं।
इन्हें आप मॉडल के आंतरिक आत्मविश्वास स्तरों की तरह समझ सकते हैं। ये मान सकारात्मक या नकारात्मक हो सकते हैं और इनका योग एक होने की बाध्यता नहीं होती।
लॉजिट्स को प्रॉबेबिलिटीज में बदलने के लिए, हमें सॉफ्टमैक्स फंक्शन लगाना होता है, जो मानों को प्रॉबेबिलिटी डिस्ट्रीब्यूशन में स्केल करता है।
तो, जब हम
argmax(logits, -1)का उपयोग करते हैं, तो हम बस सबसे ऊँचे रॉ स्कोर (क्लास) के इंडेक्स का चयन कर रहे होते हैं—जो सॉफ्टमैक्स के बाद सबसे अधिक प्रॉबेबिलिटी वाले क्लास के बराबर ही होता है।timm लाइब्रेरी का उपयोग
विज़न ट्रांसफॉर्मर्स का उपयोग करने के लिए एक और बेहतरीन और प्रसिद्ध लाइब्रेरी है
timm(Ross Wightman द्वारा)। यह भी प्रीट्रेंड ViT वेरिएंट्स की विस्तृत रेंज देती है और तेज़ प्रयोग या फाइन-ट्यूनिंग के लिए उपयुक्त है। यहाँ देखें कि इन्फरेंस के लिए ViT मॉडल कैसे लोड और उपयोग करें:अब आप
timmऔरtransformersलाइब्रेरी के बीच समानता देख पाएँगे। दोनों प्रीट्रेंड ViT मॉडल्स देती हैं, इमेज प्रोसेसिंग की सुविधा देती हैं (हालाँकिtimmमें हमने स्टैंडर्ड PyTorch कोड का उपयोग किया), और अंत में हम सबसे ऊँचे लॉजिट वाले क्लास को प्राप्त करते हैं।निष्कर्ष
कुल मिलाकर, विज़न ट्रांसफॉर्मर्स ने इमेजेज़ को पैचों की “सेंटेन्स” में बदलकर और पहले ही लेयर से ग्लोबल संदर्भ पकड़ने के लिए सेल्फ-अटेंशन का उपयोग करके कंप्यूटर विज़न को नया रूप दिया है। इस ट्यूटोरियल में, हमने सीखा:
सीखते रहने के लिए, मैं यह लेख देखने की सलाह देता/देती हूँ—ट्रांसफॉर्मर्स कैसे काम करते हैं—जो ट्रांसफॉर्मर्स के पीछे के सिद्धांत सिखाएगा। इसे पुख्ता करने के लिए, उसके बाद स्क्रैच से ट्रांसफॉर्मर बनाना एक्सप्लोर करें।
यदि आप दोनों को साथ-साथ सीखते हुए हाथों-हाथ अनुभव लेना चाहते हैं, तो हमारा कोर्स Transformer Models with PyTorch आपके लिए सही जगह है।