พัฒนาโดยใช้ Databricks ด้วย ❤️
บล็อกที่อธิบายเกี่ยวกับการสร้างแบบจำลองภาษาการมองเห็นแบบผู้เชี่ยวชาญ: https://huggingface.co/blog/AviSoori1x/seemoe คุณสามารถคิดได้ว่านี่เป็นเวอร์ชันที่เรียบง่ายของ Grok 1.5/ GPT-4 Vision ตั้งแต่เริ่มต้นในที่เดียว ไฟล์ PyTorch การใช้งานแบบรวมอยู่ใน seeMoE.py สมุดบันทึกคือ seeMoE_from_scratch.ipynb
บล็อกที่กล่าวถึงสิ่งนี้: https://avisoori1x.github.io/2024/04/22/seemore-_Implement_a_Vision_Language_Model_from_Scratch.html
https://huggingface.co/blog/AviSoori1x/seemore-vision-Language-model
ในการใช้งาน Vision Language Model (VLM) แบบง่ายๆ นี้ มีองค์ประกอบหลัก 3 ส่วน
Image Encoder เพื่อแยกคุณสมบัติภาพจากรูปภาพ ในกรณีนี้ ฉันใช้การดำเนินการตั้งแต่เริ่มต้นของ Vision Transformer ดั้งเดิมที่ใช้ใน CLIP นี่เป็นตัวเลือกยอดนิยมใน VLM ยุคใหม่จำนวนมาก ข้อยกเว้นที่น่าสังเกตประการหนึ่งคือโมเดลซีรีส์ Fuyu จาก Adept ซึ่งส่งภาพที่แพตช์แล้วไปยังเลเยอร์การฉายภาพโดยตรง
เครื่องฉายภาพภาษา - การฝังรูปภาพนั้นมีรูปร่างไม่เหมือนกับการฝังข้อความที่ตัวถอดรหัสใช้ ดังนั้นเราจึงจำเป็นต้อง 'ฉายภาพ' นั่นคือเปลี่ยนมิติของคุณสมบัติภาพที่แยกออกมาโดยตัวเข้ารหัสรูปภาพเพื่อให้ตรงกับสิ่งที่สังเกตได้ในพื้นที่ฝังข้อความ ดังนั้นคุณสมบัติของภาพจึงกลายเป็น 'โทเค็นภาพ' สำหรับตัวถอดรหัส นี่อาจเป็นชั้นเดียวหรือ MLP ฉันใช้ MLP เพราะมันคุ้มค่าที่จะแสดง
รูปแบบภาษาถอดรหัสเท่านั้น นี่คือองค์ประกอบที่สร้างข้อความในท้ายที่สุด ในการใช้งานของฉัน ฉันได้เบี่ยงเบนไปจากสิ่งที่คุณเห็นใน LLaVA ฯลฯ เล็กน้อยโดยการรวมโมดูลการฉายภาพเข้ากับตัวถอดรหัสของฉัน โดยทั่วไปจะไม่มีการสังเกตสิ่งนี้ และคุณปล่อยให้สถาปัตยกรรมของตัวถอดรหัส (ซึ่งโดยปกติแล้วเป็นแบบจำลองที่ได้รับการฝึกไว้แล้ว) ไม่ถูกแตะต้อง
การใช้ความสนใจตนเองของผลิตภัณฑ์ดอทแบบปรับขนาดนั้นยืมมาจาก makemore ของ Andrej Kapathy (https://github.com/karpathy/makemore) นอกจากนี้ตัวถอดรหัสยังเป็นโมเดลภาษาระดับอักขระแบบ autoregressive เช่นเดียวกับใน makemore ตอนนี้คุณจะเห็นแล้วว่าชื่อ 'seemore' มาจากไหน :)
ทุกอย่างถูกเขียนตั้งแต่ต้นจนจบโดยใช้ pytorch ซึ่งรวมถึงกลไกความสนใจ (ทั้งสำหรับตัวเข้ารหัสการมองเห็นและตัวถอดรหัสภาษา) การสร้างแพตช์สำหรับ Vision Transformer และทุกอย่างอื่น ๆ หวังว่านี่จะเป็นประโยชน์สำหรับทุกคนที่ผ่าน repo และ/หรือบล็อกที่เกี่ยวข้อง
สิ่งตีพิมพ์ที่มีการอ้างอิงอย่างมากสำหรับการใช้งานนี้:
seemore.py คือความสมบูรณ์ของการนำไปใช้งานในไฟล์เดียวของ pytorch
seemore_from_Scratch.ipynb อธิบายสัญชาตญาณของสถาปัตยกรรมโมเดลทั้งหมด และวิธีที่ทุกอย่างมารวมกัน ฉันแนะนำให้เริ่มต้นที่นี่
seemore_Concise.ipynb เป็นการใช้งานแบบแฮ็กได้แบบรวมที่ฉันสนับสนุนให้คุณแฮ็ก ทำความเข้าใจ ปรับปรุง และสร้างของคุณเอง
input.txt พร้อมด้วย Tinyshakespear และการแสดงสตริงที่เข้ารหัส base64 + คำอธิบายที่เกี่ยวข้องจะอยู่ในไฟล์ inputs.csv ในไดเร็กทอรีรูปภาพ
ไดเร็กทอรีย่อยของโมดูลประกอบด้วยแต่ละส่วนประกอบในไฟล์ .py ของตัวเองเพื่อความสะดวก (คุณควรเลือกแฮ็กทีละชิ้น/ นำมาใช้ซ้ำสำหรับโปรเจ็กต์ของคุณเอง ฯลฯ)
รหัสได้รับการพัฒนาทั้งหมดบน Databricks โดยใช้ A100 ตัวเดียวสำหรับการคำนวณ หากคุณใช้งานสิ่งนี้บน Databricks คุณสามารถปรับขนาดนี้บนคลัสเตอร์ GPU ขนาดใหญ่ตามอำเภอใจโดยไม่มีปัญหาบนผู้ให้บริการคลาวด์ที่คุณเลือก
ฉันเลือกใช้ MLFlow (ซึ่งติดตั้งไว้ล่วงหน้าใน Databricks ซึ่งเป็นโอเพ่นซอร์สโดยสมบูรณ์และคุณสามารถ pip ติดตั้งที่อื่นได้อย่างง่ายดาย) เนื่องจากฉันพบว่าการติดตามและบันทึกการวัดทั้งหมดที่จำเป็นมีประโยชน์ นี่เป็นทางเลือกโดยสิ้นเชิง แต่ได้รับการสนับสนุน
โปรดทราบว่าการใช้งานเน้นความสามารถในการอ่านและความสามารถในการแฮ็กเทียบกับประสิทธิภาพ จึงมีหลายวิธีที่คุณสามารถปรับปรุงสิ่งนี้ได้ โปรดลองและแจ้งให้เราทราบ!
หวังว่าคุณจะพบว่าสิ่งนี้มีประโยชน์ มีความสุขในการแฮ็ก!!