معرفی مدل CLIP

نویسندگان: رکسانا میرزایی، زهرا علیزاده

مقدمه

تو این مقاله، میخوایم در مورد مدل CLIP که یکی از مدل‌های multi-modal پرکاربرد هست، صحبت کنیم. ابتدا به معرفی معماری مدل CLIP می‌پردازیم و سپس ویژگی‌های کلیدی و کاربردهای آن رو بررسی می‌کنیم و در پایان هم یک نمونه کد از نحوه‌ استفاده از CLIP میاریم. هدف ما تو این مقاله اینه که مدل CLIP رو به زبان ساده و قابل فهم توضیح بدیم تا بتونیم ازش تو تسک‌ها و پروژه‌هامون استفاده کنیم.

مدل CLIP مخفف عبارت Contrastive Language-Image Pre-training هست و توسط OpenAI در سال 2021 معرفی شده. این مدل، یک مدل تعبیه‌ی متن و تصویر است که می‌تونه تصویر و متن را به صورت یکپارچه درک کنه و روابط معنادار بین تصویر و متن رو پیدا کنه. در واقع، مدل CLIP با پر کردن شکاف بین بینایی کامپیوتر و پردازش زبان طبیعی باعث پیشرفت قابل توجهی در زمینه هوش مصنوعی شده. برخلاف مدل‌های سنتی که فقط بر روی یک تسک خاص آموزش داده می‌شدن، CLIP با استفاده از یک مجموعه داده‌ی بزرگ و متنوع شامل 400 میلیون جفت متن و تصویر جمع‌آوری شده از اینترنت آموزش دیده و می‌تونه برای تسک‌های مختلفی (حتی برای تسک‌هایی که مستقیماً برای آنها آموزش ندیده) استفاده بشه. در دنیای امروزه که با حجم زیادی از داده‌های بصری و متنی مواجه هستیم، توانایی CLIP در پر کردن شکاف بین این دو نوع داده برای تسک‌هایی مثل طبقه‌بندی یا تشریح تصاویر بسیار مهم و ارزشمند است و این قابلیت CLIP رو به یک ابزار قدرتمند برای کاربردهای متنوع در هوش‌ مصنوعی تبدیل کرده.

ساختار مدل‌های multi-modal

در قسمت مقدمه اشاره کردیم که CLIP یک مدل multi-modal هست. تو این قسمت میخایم یکم بیشتر با این مدل‌ها و نحوه‌ی عملکردشون آشنا بشیم. بیشتر مدل‌های سنتی یادگیری ماشین برای حل تنها یک تسک خاص مثل رگرسیون، طبقه‌بندی تصویر یا تشخیص گفتار طراحی شدن اما بسیاری از مسائل دنیای واقعی، تسک‌های پیچیده‌ای هستند که نیازمند پردازش داده‌ها از منابع مختلف هستند و با انواع داده‌ها مثل متن، تصویر، صدا، ویدیو یا هر نوع داده دیگری سروکار دارن.

ایده‌ی اصلی پشت مدل‌های multi-modal اینه که ویژگی‌های آموخته‌شده از انواع مختلف داده‌ها را آنها را ترکیب ‌کنن تا در تسک‌های پیچیده‌تر هوش مصنوعی بهتر عمل کنن و دقت بیشتری ارائه دهند. در واقع، هدف این نوع مدل‌ها ایجاد یک فضای بازنمایی مشترک از ویژگی‌های استخراج شده از هر یک از نوع داده‌های مختلف است. در این نوع مدل‌ها، ابتدا، هر نوع داده ورودی (به عنوان مثال، متن، تصویر، صدا) با توجه به encoder جداگانه‌ی خود به صورت مستقل پردازش میشه و ورودی‌های خام به بردارهای ویژگی یا بردارهای embedding معنادار تبدیل میشن. پس از encoding هر داده، مدل، بردارهای ویژگی حاصل از هر نوع داده را ترکیب میکنه تا یک فضای بازنمایی واحد و یکپارچه ایجاد بشه که روابط بین انواع ورودی‌های مختلف را نشان میده (این قسمت بسته به معماری مدل خاص می‌تونه متفاوت باشه). در مرحله نهایی از بازنمایی‌های ادغام شده برای تسک مورد نظر استفاده میشه و این مرحله قابل انطباق هست و میتونه برای کارهای مختلفی طراحی بشه. این رویکرد، به مدل‌های multi-modal این امکان رو میده تا اطلاعات از انواع مختلف ورودی‌ها را پردازش و ادغام کنه تا درک دقیق‌تر و جامع‌تری از داده‌های ورودی داشته باشه که منجر به عملکرد بهتر و پیش‌بینی‌های دقیق‌تر در طیف گسترده‌ای از تسک‌ها میشه.

معماری CLIP

کاری که مدل CLIP انجام میده اینه که تصویر و متن رو به یک فضای برداری مشابه می‌بره برای مثال اگر ما تصویری از یک سگ و متن "این یک سگ است" را داشته باشیم این دو در یک فضای برداری بسیار مشابه تعبیه می‌شن. برای اینکه دقیق‌تر متوجه بشیم که کلیپ چه کاری انجام می‌ده و چطور کار می‌کنه، باید مفهوم یادگیریcontrastive را درک کنیم. یادگیریcontrastive یک تکنیک یادگیری بدون نظارت است که هدف در اون یادگیری بازنمایی از داده‌ها است که نمونه‌های مشابه در فضای نمایش نزدیک به هم باشن و نمونه‌های غیرمشابه دور از هم باشن. برای اندازه‌گیری میزان شباهت و فاصله‌ی بین نمونه‌ها از شباهت کسینوسی استفاده میشه که معادله آن به صورت زیر هست:

مدل CLIP با یک دسته‌ از جفت‌های تصویر-متن با اندازه‌ی N، آموزش داده میشه تا پیش‌بینی کنه که کدام یک از N × N جفت‌ (تصویر-متن) ممکن در یک دسته درست هستند. هدف اینه شباهت کسینوسی تعبیه‌های تصویر و متن N جفت درست در دسته را به حداکثر برسونه و در عین حال شباهت کسینوسی تعبیه‌ جفت‌های نادرست (N2 - N) را به حداقل برسونه. در زمان تست و ارزیابی هم میزان شباهت بین بردار embedding تصویر ورودی با مجموعه‌ای از embedding های متن موجود محاسبه میشه و متن با بیشترین شباهت انتخاب میشه. برای به حداکثر رساندن شباهت جفت‌های درست و به حداقل رساندن شباهت جفت‌های نادرست از cross entropy loss استفاده شده.

شکل 1: روش کار مدل CLIP - ماتریس ضرب نقطه‌ای تعبیه‌های تصویر و متن که شباهت کسینوسی رو بینشون محاسبه می‌کند. قطر اصلی ماتریس (رنگ سبز) جفت‌های صحیح تصویر-متن است که ماکسیمم شباهت کسینوسی دارد و جفت‌های تصویر-متن نادرست (رنگ زرد) کمترین امتیاز را می‌گیرن به این معنی که کمترین شباهت رو دارند.
شکل 1: روش کار مدل CLIP - ماتریس ضرب نقطه‌ای تعبیه‌های تصویر و متن که شباهت کسینوسی رو بینشون محاسبه می‌کند. قطر اصلی ماتریس (رنگ سبز) جفت‌های صحیح تصویر-متن است که ماکسیمم شباهت کسینوسی دارد و جفت‌های تصویر-متن نادرست (رنگ زرد) کمترین امتیاز را می‌گیرن به این معنی که کمترین شباهت رو دارند.


مدل CLIP از دو جزء اصلی Text encoder و Image encoder تشکیل شده. Text encoder متن را به عنوان ورودی می‌گیره و یک نمایش برداری با ابعاد بالا تولید می‌کند. برای درک و حفظ ویژگی‌های معنایی و مفهوم توضیحات متنی از transformer به عنوان encoder استفاده می‌کنه. هدف image encoder هم استخراج ویژگی‌های مهم تصویر و تولید یک نمایش برداری با ابعاد بالا هست که برای این کار دو معماری ResNet-50 و Vision Transformer (ViT) آزمایش شده که در نهایت معماری ViT به دلیل سرعت بیشتر ترجیح داده شده.

کاربردهای CLIP :

این مدل کاربردهای زیادی داره و تو تسک‌ها و مسائل مختلف میشه ازش استفاده کرد. یکی از مهمترین کاربردهاش Zero-shot Learning هست. همانطور که گفتیم، مدل CLIP با درک مشترک بین متن و تصویر مدل را قادر میکنه تا قابلیت تعمیم بالایی داشته باشه و برای یادگیری zero-shot مناسب باشه. در یادگیری zero-shot ما با دیتایی سروکار داریم که مدل هیچ آموزشی روی آن ندیده. برای مثال در تسک zero-shot image classification مدل می‌تونه تصاویر جدید و ناشناخته را بدون نیاز به آموزش روی آن دسته‌بندی خاص، طبقه‌بندی کنه یعنی مدل میتونه تصاویر را بر اساس توصیفات متنی که هرگز قبلاً ندیده، طبقه‌بندی کنه. و یکی از راه‌هایی که میشه عملکرد zero-shot رو به طور قابل توجهی بهبود داد استفاده از prompt engineering هست. با این تکنیک متن داده شده رو طوری سفارشی می‌کنن تا با محتوای داده‌ها بیشتر هماهنگ بشه و به مدل برای درک بهتر چیزی که باید شناسایی یا طبقه‌بندی کنه، کمک می‌کنه. به عنوان مثال، برای دسته‌بندی تصاویر حیوانات خانگی، مشخص کردن نوع حیوان، در دسته‌بندی غذاها، نوع غذا و در هواپیماها نیز اشاره به نوع آنها مؤثر است. به عنوان مثال، استفاده از “عکسی از یک {برچسب}، نوعی حیوان خانگی“ برای کمک به درک محتوا و بهبود عملکرد مدل کمک می‌کنه.

از کاربردهای دیگه‌اش میتونیم به Content moderation اشاره کنیم که محتوای نامناسب را از پلتفرم‌های آنلاین فیلتر می‌کنه. این مدل برای multi-modal learning هم مناسب است و می‌تونه انواع مختلف داده‌ها مثل متن و تصاویر را ترکیب کنه‌ به عنوان مثال می‌تونه آن را با یک مدل generative مانند DALL-E ادغام کنه تا یک تصویر با توجه به ورودی‌های متن تولید کنه، همچنین میتونه تصاویر موجود را بر اساس دستورات متنی ویرایش کنه. علاوه بر این کاربردها در Image captioning و Semantic image search and retrieval استفاده بشه که در این سیستم کاربران می‌تونن پرس‌وجوهای خود را وارد کنند و مدل، تصاویری را بازیابی می‌کنه که به بهترین وجه با توضیحات متنی مطابقت داره.

محدودیت‌های مدل CLIP:

با همه‌ی اینها مدل CLIP هم محدودیت‌های خودش رو داره که دونستن این نکات به استفاده‌ی درست و بجا از این مدل کمک میکنه. با اینکه این مدل در بسیاری از تسک‌ها قابل استفاده هست و کیفیت قابل قبولی هم داره اما به طور کلی عملکرد آن در حالت zero-shot به طور قابل توجهی پایین‌تر از وضعیت پیشرفته‌ترین مدل‌های موجود است یعنی کار زیادی برای بهبود قابلیت‌های یادگیری CLIP لازم هست. این یعنی CLIP نتونسته مشکل کلی تعمیم‌پذیری مدل‌های یادگیری عمیق را حل کنه. علاوه بر این، عملکرد CLIP در حالت zero-shot در برخی مسائل نسبتاً ضعیف است مثلاً در دسته‌بندی کردن درست و دقیق مدل‌ خودروها، انواع گل و نوع‌های مختلف هواپیما و ... .

محدودیت دیگه‌ی CLIP اینه که یک مدل پیچیده هست و برای افزایش دقت و بهبود مدل نیاز به افزایش 1000 برابری قدرت محاسباتی هست که با سخت‌افزار موجود قابل تحقق نیست. همچنین، CLIP در انجام وظایف انتزاعی و سیستماتیک مانند شمارش اشیاء در تصاویر با مشکلاتی روبرو است. به علاوه، برای تسک‌های جدید که احتمالاً در مجموعه داده‌های پیش‌آموزش CLIP وجود ندارد، مانند تعیین فاصله تا نزدیکترین خودرو در یک تصویر، عملکرد CLIP می‌تونه تصادفی باشه.

از طرف دیگر CLIP بر روی متن‌ها و تصاویر جمع‌آوری شده از اینترنت آموزش دیده و این جفت‌های تصویر-متن بدون فیلتر و نظارت هستند که باعث میشه مدل CLIP بسیاری از تعصبات اجتماعی رو یاد بگیره.

استفاده از CLIP برای طبقه‌بندی تصاویر

در این قسمت به نحوه‌ی استفاده از مدل CLIP در طبقه‌بندی تصاویر می‌پردازیم. برای استفاده، میشه هم از مدل موجود در Hugging Face و هم از ریپازیتوری گیت‌هاب OpenAI استفاده کرد. برای پیاده‌سازی این کار از محیط گوگل کولب استفاده شده.

دیتاستی که انتخاب کردیم Food101 است که شامل 101 دسته غذایی با 101 هزار تصویر است. یک نمونه داده از دیتاست نمایش داده شده. از vision transformer (ViT-B/32) به عنوان image encoder استفاده شده و اول تصویر preprocess میشه و بعد به متد encode_image برای استخراج ویژگی داده میشه. همچنین متن ورودی هم tokenize میشه و بعد به text encoder داده میشه. البته خوبه که اینم بدونیم که مدل‌ CLIP برای encode کردن تصاویر فقط به ViT محدود نیست و از مدل‌های دیگه هم میشه استفاده کرد. در نهایت، ویژگی‌های استخراج شده از text promptها و تصویر نرمالسازی میشه و با استفاده از شباهت کسینوسی نزدیکترین کلاس به تصویر ورودی انتخاب و 5 تا از نزدیکترین کلاس‌های پیش‌بینی شده رو چاپ میکنه.

https://gist.github.com/zahra-alizadeh/94daa99658f59e22523233931173d75f

کارهای مشابه

از کارهای مشابه دیگه میتونیم به ImageBind که توسط شرکت متا منتشر شده اشاره کنیم که یک تعبیه مشترک از شش نوع مختلف داده‌های تصویر، متن، صدا، عمق، حرارت و داده‌های IMU را یاد می‌گیره. مدل ALIGN و CoCa از شرکت گوگل، Florence مایکروسافت و Flamingo از DeepMind که یک مدل visual-language برای few-shot learning از کارهای مشابه دیگر هستند. از کارهای جالب دیگر میتونیم به LiT گوگل اشاره کنیم.

نتیجه‌گیری

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

رفرنس‌ها

  • https://arxiv.org/abs/2103.00020
  • https://medium.com/one-minute-machine-learning/clip-paper-explained-easily-in-3-levels-of-detail-61959814ad13
  • https://medium.com/@paluchasz/understanding-openais-clip-model-6b52bade3fa3
  • https://cv-tricks.com/how-to/understanding-clip-by-openai/
  • https://towardsdatascience.com/clip-model-and-the-importance-of-multimodal-embeddings-1c8f6b13bf72
  • https://viso.ai/deep-learning/clip-machine-learning/