آشنایی با Vision Transformers (ViTs) | به سمت هوش مصنوعی


نویسنده(های): یاش تیوب

در ابتدا منتشر شد به سمت هوش مصنوعی.

آشنایی با Vision Transformers (ViTs)

و آنچه در حین اجرای آنها یاد گرفتم!

ترانسفورماتورها انقلاب کرده اند پردازش زبان طبیعی (NLP)، قدرت بخشیدن به مدل هایی مانند GPT و BERT. اما اخیراً آنها در بینایی رایانه نیز موج ایجاد کرده اند. Vision Transformers (ViTs) را وارد کنید، رویکردی برای طبقه‌بندی تصاویر که تصاویر را مانند دنباله‌هایی از وصله‌ها، شبیه به نشانه‌ها در متن، در نظر می‌گیرد.

در اینجا چیزی است که من هنگام پیاده سازی ViT در PyTorch برای طبقه بندی ارقام دست نویس یاد گرفتم و چگونه دیدگاه من را در مورد طبقه بندی تصاویر تغییر داد.

کاری که من کردم

من تصمیم گرفتم یک مدل Vision Transformer (ViT) در PyTorch بسازم و آن را برای طبقه بندی ارقام دست نویس (0-9) از MNIST آموزش دهم. مجموعه داده. هدف این بود که ببینم آیا می‌توانم این ارقام را با استفاده از رویکرد مبتنی بر ترانسفورماتور شناسایی کنم، که کاملاً متفاوت از روش سنتی است. شبکه عصبی کانولوشنال (CNN) روش هایی که بیشتر با آنها آشنا بودم.

چگونه به آنجا رسیدم

📌آماده سازی داده ها

  • مجموعه داده: من با مجموعه داده MNIST شروع کردم، آن را از فایل های CSV بارگیری کردم و آن را به مجموعه های آموزشی، اعتبار سنجی و آزمایش تقسیم کردم.
  • مجموعه داده های سفارشی: من PyTorch سفارشی ایجاد کردم Dataset کلاس هایی برای مدیریت بارگذاری، پیش پردازش، و اعمال افزایش مانند چرخش های تصادفی. این مرحله برای من جدید بود و به من کمک کرد تا بفهمم چگونه مدل‌ها را قوی‌تر کنم.
  • عادی سازی: من مقادیر پیکسل را بین -1 و 1 مقیاس کردم، که فهمیدم به تثبیت تمرین کمک می کند.
  • بارگذارهای داده: من از PyTorch استفاده کردم DataLoader برای مدیریت بچینگ و مخلوط کردن، که روند آموزش را روان‌تر کرد.

📌پیاده سازی مدل ViT

این هیجان انگیزترین قسمت بود!

  • Patch Embedding Layer: من هر تصویر را با استفاده از یک لایه کانولوشن به تکه های کوچک (مثلاً 16×16 پیکسل) تقسیم کردم. صاف کردن این تکه‌ها به صورت بردارها و افزودن جاسازی‌های موقعیتی مانند تبدیل قطعات یک پازل به چیزی است که مدل می‌تواند پردازش کند.
  • رمزگذار ترانسفورماتور: من رمزگذار را با لایه های متناوب ساختم

✔️توجه به خود چند سر (MSA): این به هر وصله اجازه می‌دهد به تمام وصله‌های دیگر نگاه کند. حال، MSA چیست؟ این اجازه می دهد تا هر قسمت از یک تصویر (یا وصله) روی قسمت های دیگر تصویر تمرکز کند و روابط را در کل تصویر درک کند. به این فکر کنید که تمام قطعات یک پازل را در یک زمان تجزیه و تحلیل کنید تا بفهمید چگونه آنها با هم هماهنگ می شوند. به عنوان مثال، در یک تصویر گربه، یک تکه ممکن است روی گوش تمرکز کند و در عین حال موقعیت چشم ها را برای زمینه در نظر می گیرد. با استفاده از چندین “سر”، MSA چشم اندازهای مختلف را به طور همزمان ثبت می کند.

✔️شبکه عصبی پیشخور (MLP): این لایه ها پیچیدگی و غیرخطی بودن را اضافه کردند. MLP؟ پس از درک روابط از طریق توجه، MLP این اطلاعات را با اعمال تبدیل ها و اضافه کردن غیر خطی بودن اصلاح می کند. برای مثال، اگر MSA ویژگی‌های کلیدی مانند «چشم‌ها» یا «گوش‌ها» را در تصویر گربه شناسایی کند، MLP این ویژگی‌ها را برای پیش‌بینی بهتر ترکیب و وزن می‌کند. این مانند یک لایه تصمیم گیری است که تضمین می کند مدل می تواند الگوهای پیچیده را ثبت کند.

  • سر طبقه بندی: نشانه کلاس اطلاعات را از همه وصله ها جمع می کند تا برچسب تصویر را پیش بینی کند.

📌آموزش مدل

  • عملکرد از دست دادن: من از کراس استفاده کردمآنتروپی ضرر برای ارزیابی پیش بینی ها
  • بهینه ساز: بهینه ساز Adam وزن های مدل را در طول تمرین تنظیم کرد.
  • حلقه آموزشی:
  • بیش از 40 دوره، دسته‌ای از تصاویر را پردازش کردم، تلفات را محاسبه کردم و وزن‌ها را به‌روزرسانی کردم.
  • من معیارهای اعتبارسنجی را بعد از هر دوره نظارت کردم، که به من کمک کرد پیشرفت را پیگیری کنم.
  • پیگیری پیشرفت: ترسیم تلفات و دقت های آموزشی و اعتبار سنجی راهی عالی برای تجسم فرآیند یادگیری بود.

📌ارزیابی و پیش بینی

  • تست کردن: بعد از آموزش، مدل را روی مجموعه تست ارزیابی کردم.
  • فایل ارسالی: من پیش‌بینی‌ها را در یک فایل CSV ذخیره کردم، که بعد از همه تلاش‌ها، لذت بخش بود.
  • تجسم: دیدن نمونه های پیش بینی در کنار برچسب آنها نتایج را ملموس کرد.

چالش هایی که با آن مواجه شدم و چگونه بر آنها غلبه کردم

📌محدودیت های محاسباتی

در ابتدا، سخت افزار من با آموزش ViT به دلیل نیاز به منابع زیاد، با مشکل مواجه شد. من به این موضوع پرداختم،

  • کاهش اندازه پچ، که پیچیدگی محاسباتی را کاهش داد.
  • استفاده از آموزش دقیق ترکیبی با PyTorch torch.cuda.amp بسته ای برای سرعت بخشیدن به محاسبات و کاهش مصرف حافظه.

📌بیش از حد

در طول آموزش اولیه، متوجه شدم که مدل در مجموعه آموزشی به خوبی عمل می‌کند اما در داده‌های اعتبارسنجی ضعیف عمل می‌کند. برای مقابله با این،

  • من از افزایش داده ها مانند چرخش های تصادفی و تلنگرها استفاده کردم تا مدل بهتر تعمیم یابد.
  • من از لایه های dropout در رمزگذار Transformer برای جلوگیری از اضافه شدن استفاده کردم.

📌درک توجه به خود

در ابتدا، توجه به خود انتزاعی بود و درک آن چالش برانگیز بود، اما با

  • مطالعه تجسم نقشه های توجه برای دیدن اینکه چگونه مدل بر روی تکه های مختلف تمرکز می کند.
  • منابعی مانند “ترانسفورماتور مصور” این مفهوم را به طور مستقیم تجزیه کردند.

آنچه من به دست آوردم

  • عملکرد: در پایان 40 دوره، ViT به بیش از 92٪ دقت اعتبار در MNIST رسید. تماشای افزایش دقت تمرین از 10% به 90% در حالی که دقت اعتبارسنجی از 16% به 93% افزایش یافت رضایت بخش بود.
  • یادگیری مفاهیم اصلی: پیاده‌سازی ViTs به من کمک کرد تا ایده‌هایی مانند تعبیه پچ، توجه به خود و طبقه‌بندی مبتنی بر نشانه کلاس را درک کنم.
توزیع
سری زمانی

توضیح ساده شده

اکنون چگونه آن را درک می کنم: یک تصویر را به عنوان یک پازل در نظر بگیرید. هر قطعه (پچ) حاوی بخشی از تصویر است، اما تنها با درک اینکه چگونه همه قطعات با هم قرار می گیرند می توانید تصویر کامل را ببینید. ViTها تصاویر را به تکه‌هایی تقسیم می‌کنند، با آن‌ها مانند قطعات پازل رفتار می‌کنند و از یک Transformer برای کشف روابط خود استفاده می‌کنند. این دیدگاه جهانی آنها را از CNN ها متمایز می کند که بیشتر بر جزئیات محلی تمرکز دارند.

مفاهیم کلیدی که از مقاله ViT یاد گرفتم

https://arxiv.org/abs/2010.11929

✔️تصویر به صورت پچ: ViT ها به جای پردازش پیکسل به پیکسل تصویر، آن را به وصله های با اندازه ثابت مانند ۱۶×۱۶ تقسیم می کنند.

✔️پچ جاسازی ها: هر وصله صاف شده و به یک وکتور تبدیل می شود، مانند جاسازی کلمه در NLP.

✔️جاسازی های موقعیتی: این تعبیه‌ها به مدل می‌گویند که هر پچ در تصویر به کجا تعلق دارد.

✔️توجه به خود: این مکانیسم به هر وصله کمک می‌کند تا در هر پچ دیگری شرکت کند و زمینه جهانی را بگیرد.

✔️ژتون طبقه بندی: یک توکن خاص اطلاعات را از تمام وصله ها جمع آوری می کند تا برچسب نهایی را پیش بینی کند.

✔️آموزش در مقیاس بزرگ: ViT ها برای عملکرد خوب به مجموعه داده های بزرگ (مثلا ImageNet-21k) نیاز دارند، زیرا فاقد سوگیری های خاص تصویر هستند که در CNN ها تعبیه شده است.

چرا من در مورد ViTs هیجان زده هستم؟🤔

  • انعطاف پذیری: آنها می توانند با وظایف مختلف، از طبقه بندی گرفته تا تشخیص شی.
  • زمینه جهانی: برخلاف CNN ها که بر ویژگی های محلی تمرکز می کنند، تصویر بزرگی را به تصویر می کشند.
  • مقیاس پذیری: با داده های کافی، ViT ها به نتایج پیشرفته ای دست می یابند.

منابع اضافی که مفید یافتم

📌 مبانی Vision Transformer (ViT).

✔️اوراق کلیدی

  • ارزش یک تصویر 16×16 کلمه است: ترانسفورماتورها برای تشخیص تصویر در مقیاس (کاغذ)
  • آموزش ترانسفورماتورهای تصویر کارآمد و تقطیر از طریق توجه (DeiT) (کاغذ)

✔️مفاهیم و آموزش

  • توجه تمام چیزی است که نیاز دارید (آیا باید پیوندی به این مقاله ارائه دهم؟)
  • Vision Transformer توضیح داده شد (پست وبلاگ)
  • ترانسفورماتورهای مصور (پست وبلاگ)

📌مدل های کانولوشنال ViT و Hybrid

  • CvT: معرفی Convolutions به Vision Transformers (کاغذ)
  • CoAtNet: پیچیدگی ازدواج و توجه برای همه اندازه‌های داده (کاغذ)
  • ConViT: بهبود ترانسفورماتورهای بینایی با بایاس های القایی کانولوشنال نرم (کاغذ)

📌ترانسفورماتورهای کارآمد و ترانسفورماتور Swin

  • ترانسفورماتور Swin: ترانسفورماتور بینایی سلسله مراتبی با استفاده از Windows Shifted (کاغذ)
  • ترانسفورماتور چشم انداز هرمی: ستون فقرات همه کاره برای پیش بینی متراکم بدون پیچش (کاغذ)
  • ترانسفورماتورهای کارآمد: یک بررسی (کاغذ)

📌تبدیل تصویر ویژن (ViViT)

  • ViViT: یک تبدیل کننده بینایی ویدیویی (کاغذ)
  • شبکه تبدیل ویدیو (کاغذ)

درک ViT به من کمک کرد تا ببینم چگونه آنها شکاف بین NLP و وظایف بینایی را پر می کنند و در عین حال دیدگاه جدیدی را در مورد بینایی رایانه ارائه می دهند. اگر در مورد آنها کنجکاو هستید، غواصی را به شدت توصیه می کنم! اگر می خواهید در مورد این موضوع بیشتر بحث کنید یا تجربیات خود را در مورد آزمایش ViTs به اشتراک بگذارید، به من اطلاع دهید.

📌کد پروژه

کنجکاو بمانید☺️….در قسمت بعدی شما را می بینم!

منتشر شده از طریق به سمت هوش مصنوعی



منبع: https://towardsai.net/p/machine-learning/understanding-vision-transformers-vits