مدلهای سنتی در حوزه بینایی کامپیوتری معمولا برای انجام وظایفی مانند تشخیص تصویر، دستهبندی اشیا یا جستجوی بصری به حجم زیادی از دادههای برچسبخورده نیاز دارند. همین محدودیتها باعث شد مدلهایی مانند CLIP مورد توجه قرار بگیرند؛ زیرا بسیاری از سیستمهای قدیمی فقط برای مجموعهای مشخص از کلاسها آموزش میبینند و هنگام مواجهه با مفاهیم جدید یا سناریوهای متفاوت، توانایی تعمیمپذیری محدودی دارند. علاوه بر این، آمادهسازی دیتاستهای اختصاصی فرایندی زمانبر و پرهزینه است و در بسیاری از پروژهها سرعت توسعه را کاهش میدهد.
در این میان، OpenAI با معرفی CLIP مسیر تازهای برای اتصال متن و تصویر ارائه کرد. در این مقاله بررسی میکنیم CLIP چیست، چگونه کار میکند، معماری آن از چه اجزایی تشکیل شده، چرا به یکی از مدلهای مهم حوزه هوش مصنوعی چندوجهی تبدیل شده و چه کاربردهایی در دنیای واقعی دارد. همچنین خواهیم دید چگونه میتوان از این مدل در پروژههای عملی و توسعه نرمافزار استفاده کرد.
CLIP چیست؟

CLIP مخفف Contrastive Language–Image Pretraining است؛ مدلی که توسط OpenAI معرفی شد تا ارتباط میان تصویر و زبان طبیعی را یاد بگیرد. CLIP یک مدل چندوجهی (multimodal) است، یعنی بهجای کار با یک نوع داده، میتواند همزمان متن و تصویر را پردازش کند و بین آنها ارتباط معنایی برقرار سازد.
ایده اصلی CLIP این است که تصاویر و توضیحات متنی مربوط به آنها را در یک فضای مشترک از embeddingها قرار دهد. به زبان ساده، مدل یاد میگیرد که کدام متن به کدام تصویر نزدیکتر است و چه مفهومی میان آنها وجود دارد. برای مثال، اگر تصویری از یک سگ به مدل داده شود، CLIP میتواند تشخیص دهد که عبارتهایی مانند «a photo of a dog» نسبت به عبارتهای نامرتبط، شباهت بیشتری با آن تصویر دارند.
یکی از مهمترین قابلیتهای CLIP، توانایی Zero-shot Classification است. این یعنی مدل میتواند بدون آموزش مجدد روی دیتاست جدید، تصاویر را در کلاسهای تازه دستهبندی کند. کافی است نام کلاسها را بهصورت متن به مدل بدهید تا خودش بررسی کند کدام گزینه با تصویر ورودی بیشترین تطابق را دارد.
چرا CLIP ساخته شد؟
پیش از ظهور CLIP، بسیاری از مدلهای بینایی کامپیوتری با یک الگوی تکراری توسعه داده میشدند: جمعآوری دیتاست، برچسبگذاری دستی تصاویر، آموزش مدل و سپس ساخت نسخهای جدید برای هر مسئله تازه. این روش اگرچه در بسیاری از پروژهها موفق بود، اما با محدودیتهای جدی همراه شد.
یکی از مهمترین چالشها، ساخت دیتاستهای برچسبخورده بود. آمادهسازی هزاران یا میلیونها تصویر با برچسب دقیق، فرایندی پرهزینه و زمانبر است و برای بسیاری از تیمها مقیاسپذیر نیست. علاوه بر این، مدلها معمولا فقط روی همان کلاسهایی کار میکردند که در زمان آموزش دیده بودند. اگر کلاس جدیدی به مسئله اضافه میشد، اغلب لازم بود مدل دوباره آموزش ببیند.
مشکل دیگر، نیاز به retraining برای هر task جدید بود. برای مثال، مدلی که برای تشخیص حیوانات آموزش دیده بود، لزوما برای تشخیص محصولات فروشگاهی یا محتوای صنعتی مناسب نبود. این وابستگی باعث میشد توسعه مدلهای جدید زمان و منابع زیادی مصرف کند.
همچنین بسیاری از مدلهای سنتی در generalization یا تعمیمپذیری نیز محدود بودند؛ یعنی وقتی با تصاویر خارج از توزیع داده آموزشی یا سناریوهای جدید روبهرو میشدند، عملکرد آنها افت میکرد.
راهحل CLIP چه بود؟
OpenAI در CLIP رویکرد متفاوتی انتخاب کرد: بهجای تکیه بر دیتاستهای کوچک و برچسبگذاریشده، مدل از میلیونها جفت تصویر-متن (image-text pairs) موجود در اینترنت یاد میگیرد. این یعنی توضیحاتی که کاربران بهصورت طبیعی برای تصاویر نوشتهاند، بهعنوان منبع آموزشی استفاده میشود.
به این روش، supervision طبیعی زبان گفته میشود. در واقع زبان انسانی نقش برچسب را بازی میکند و به مدل کمک میکند بدون نیاز به annotation سنتی، رابطه میان مفاهیم بصری و متنی را بیاموزد.
نتیجه این رویکرد، مدلی بود که انعطافپذیرتر است، بهتر تعمیم میدهد و میتواند بدون آموزش مجدد، برای وظایف جدید هم استفاده شود.
CLIP چگونه کار میکند؟
قدرت اصلی CLIP در این است که متن و تصویر را به دو دنیای جداگانه نگاه نمیکند، بلکه تلاش میکند هر دو را در یک فضای معنایی مشترک قرار دهد. به زبان ساده، CLIP یاد میگیرد تصاویر و جملاتی که به هم مربوطند به یکدیگر نزدیک باشند و موارد نامرتبط از هم فاصله بگیرند. برای درک بهتر این فرایند، معماری مدل را مرحلهبهمرحله بررسی میکنیم.
۱. دو Encoder مجزا

CLIP از دو شبکه مستقل استفاده میکند که هرکدام مسئول پردازش یک نوع داده هستند.
🔹 Image Encoder
این بخش تصویر را دریافت میکند و آن را به نمایش عددی قابل فهم برای مدل تبدیل میکند. بسته به نسخه مدل، این encoder میتواند بر پایه معماریهای مختلف ساخته شود، از جمله:
وظیفه آن استخراج ویژگیهای مهم تصویر است.
🔹 Text Encoder
بخش دوم، متن را پردازش میکند. این قسمت معمولا مبتنی بر Transformer architecture است و جمله ورودی را به برداری معنایی تبدیل میکند.
برای مثال:
- “a photo of a cat”
- “a photo of a dog”
هر دو جمله به بردارهای عددی جداگانه تبدیل میشوند.
۲. تبدیل به Embedding Space مشترک
بعد از پردازش اولیه، خروجی هر encoder یک بردار یا embedding است.
- هر تصویر ← یک vector
- هر متن ← یک vector
هدف CLIP این است که این بردارها را در یک فضای مشترک قرار دهد؛ فضایی که در آن، تصویر گربه به متن مربوط به گربه نزدیک باشد و از متن مربوط به خودرو فاصله بگیرد.
این همان ایده کلیدی CLIP است: متن و تصویر زبان مشترک پیدا میکنند.
۳. Contrastive Learning
روش آموزش CLIP بر پایه Contrastive Learning است. یعنی مدل همزمان دو چیز را یاد میگیرد:
- تصویر صحیح به متن صحیح نزدیک شود
- تصویر به متن اشتباه دور شود
فرض کنید در یک batch چند تصویر و چند متن داریم. مدل باید تشخیص دهد کدام توضیح متعلق به کدام تصویر است. اگر تصویر سگ به متن «a dog» نزدیک شود و از «a plane» دور بماند، آموزش درست پیش رفته است.
این فرایند باعث میشود مدل روابط معنایی میان زبان و تصویر را بدون برچسبگذاری سنتی یاد بگیرد.
۴. Similarity Score
برای سنجش نزدیکی تصویر و متن، CLIP از معیارهای شباهت استفاده میکند؛ رایجترین آنها:
- Dot Product
- Cosine Similarity
هرچه امتیاز شباهت بالاتر باشد، مدل تشخیص میدهد متن و تصویر ارتباط بیشتری با هم دارند.
یعنی CLIP مستقیما نمیگوید «این گربه است»، بلکه میگوید «این تصویر به متن گربه شبیهتر است».
۵. Zero-shot Prediction
یکی از جذابترین قابلیتهای CLIP همین بخش است. بدون آموزش مجدد، میتوان کلاسهای جدید را فقط با متن تعریف کرد.
مثلاً اگر یک تصویر ناشناس داشته باشیم، این متنها را به مدل میدهیم:
- “a photo of a cat”
- “a photo of a dog”
سپس مدل بررسی میکند کدام جمله بیشترین شباهت را با تصویر دارد. اگر تصویر واقعا گربه باشد، احتمالا جمله اول امتیاز بالاتری میگیرد.
این یعنی بدون ساخت دیتاست اختصاصی و بدون retraining، میتوان classifier ساخت.
معماری CLIP

اگر بخواهید از CLIP در پروژههای واقعی استفاده کنید، شناخت اجزای پیادهسازی آن اهمیت زیادی دارد. در اکوسیستم Hugging Face بهصورت ماژولار ارائه شده است؛ یعنی هر بخش از مدل وظیفه مشخصی دارد و توسعهدهنده میتواند بسته به نیاز خود از آنها استفاده کند.
🔹 CLIPModel
این کلاس، نسخه کامل مدل CLIP است و هر دو بخش تصویر و متن را در خود دارد. زمانی که میخواهید تصویر و متن را همزمان پردازش کنید، معمولا از CLIPModel استفاده میشود.
کاربردهای رایج:
- محاسبه شباهت متن و تصویر
- Zero-shot classification
- ساخت embedding مشترک
- retrieval systems
اگر بخواهید مستقیما از قدرت اصلی CLIP استفاده کنید، این نقطه شروع مناسب است.
🔹 CLIPProcessor
CLIPProcessor وظیفه آمادهسازی ورودیها را برعهده دارد. یعنی:
- تبدیل تصویر به فرمت مناسب مدل
- resize / normalization تصویر
- tokenization متن
- ساخت tensorهای ورودی
به زبان ساده، این بخش preprocessing تصویر و متن را یکپارچه میکند تا ورودی آماده مدل شود.
برای بسیاری از پروژهها، استفاده از Processor باعث سادهتر شدن کدنویسی میشود.
🔹 CLIPTokenizer
این بخش مخصوص متن است. CLIPTokenizer جمله ورودی را به tokenهایی تبدیل میکند که مدل بتواند آنها را پردازش کند.
مثلا جمله:
a photo of a cat
به دنبالهای از tokenهای عددی تبدیل میشود.
اگر فقط با بخش متنی CLIP کار میکنید، این ماژول کاربرد زیادی دارد.
🔹 CLIPVisionModel
این کلاس فقط بخش بینایی مدل را شامل میشود. یعنی تصویر را دریافت میکند و embedding تصویری تولید میکند، بدون اینکه بخش متنی درگیر شود.
کاربردها:
- استخراج feature از تصویر
- image embedding generation
- استفاده در pipelineهای سفارشی
زمانی مفید است که فقط خروجی تصویری CLIP را نیاز دارید.
🔹 CLIPTextModel
این بخش فقط مسئول پردازش متن است. متن را دریافت میکند و embedding متنی تولید میکند.
کاربردها:
- text embedding
- semantic similarity
- سیستمهای جستجو مبتنی بر متن
مدلهای معروف CLIP
پس از معرفی CLIP، نسخهها و پیادهسازیهای مختلفی از آن منتشر شد که هرکدام برای نیازهای متفاوتی مناسب هستند. برخی از این مدلها روی تعادل میان سرعت و دقت تمرکز دارند، برخی برای پروژههای بزرگتر طراحی شدهاند و بعضی دیگر برای دامنههای تخصصی توسعه یافتهاند. در اکوسیستم Hugging Face، چند نسخه از همه شناختهشدهتر هستند.
| مدل | نوع / اندازه | مناسب برای | مزیت اصلی | نکته قابل توجه |
| clip-vit-base-patch32 | نسخه پایه | شروع کار، پروژههای عمومی، تست اولیه | تعادل خوب بین سرعت و دقت | گزینه محبوب برای اکثر توسعهدهندهها |
| clip-vit-large-patch14 | نسخه بزرگتر | پروژههایی که دقت اهمیت بیشتری دارد | کیفیت خروجی و embedding قویتر | نیازمند منابع سختافزاری بیشتر |
| OpenCLIP | نسخه متنباز | تحقیق، توسعه سفارشی، fine-tuning | تنوع زیاد مدلها و انعطاف بالا | مناسب تیمهای فنی و پروژههای حرفهای |
| Domain-Specific CLIP Models | نسخه تخصصی | پزشکی، فروشگاهی، صنعتی، اسناد | عملکرد بهتر در حوزه تخصصی | برای دادههای خاص معمولاً بهتر از مدل عمومی عمل میکند |
استفاده از CLIP در پایتون
یکی از دلایلی که CLIP برای توسعهدهندهها محبوب شده، سادگی استفاده از آن در پایتون است. به کمک کتابخانه Hugging Face و پکیج transformers میتوان تنها با چند خط کد، قابلیت Zero-shot Image Classification را به پروژه اضافه کرد؛ بدون اینکه نیاز به آموزش مجدد مدل داشته باشید.
۱. پیشنیاز نصب
ابتدا کتابخانههای لازم را نصب کنید:
|
1 |
pip install transformers torch pillow |
۲. نمونه کد رسمی
در مثال زیر، مدل بررسی میکند که تصویر ورودی بیشتر به کدام برچسب نزدیک است.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
from transformers import pipeline classifier = pipeline( task=“zero-shot-image-classification”, model=“openai/clip-vit-base-patch32” ) result = classifier( “image.jpg”, candidate_labels=[ “cat”, “dog”, “car” ] ) print(result) |
این کد چه کاری انجام میدهد؟
در این مثال:
- فایل image.jpg به مدل داده میشود
- سه برچسب متنی تعریف شدهاند:
- cat
- dog
- car
مدل هر برچسب را با تصویر مقایسه میکند و مشخص میکند کدام گزینه بیشترین شباهت را دارد.
۳. نمونه خروجی احتمالی
|
1 2 3 4 5 |
[ {‘score’: 0.97, ‘label’: ‘cat’}, {‘score’: 0.02, ‘label’: ‘dog’}, {‘score’: 0.01, ‘label’: ‘car’} ] |
یعنی مدل تشخیص داده تصویر با احتمال بالا مربوط به گربه است.
چرا این روش ارزشمند است؟
در روشهای سنتی برای چنین کاری باید:
- دیتاست مخصوص گربه، سگ و خودرو جمعآوری میکردید
- مدل را train میکردید
- ارزیابی و deploy انجام میدادید
اما CLIP این فرایند را به چند خط کد تبدیل میکند.
۴. استفاده با برچسبهای واقعیتر
برای نتایج بهتر، معمولا بهتر است از promptهای طبیعیتر استفاده شود:
|
1 2 3 4 5 6 7 8 |
result = classifier( “image.jpg”, candidate_labels=[ “a photo of a cat”, “a photo of a dog”, “a photo of a car” ] ) |
چون CLIP روی دادههای متن-تصویر آموزش دیده، جملات طبیعیتر اغلب عملکرد بهتری دارند.
کاربردهای واقعی این کد
این روش در پروژههای زیر بسیار کاربردی است:
| کاربرد | توضیح |
| دستهبندی تصاویر | تشخیص نوع محصول، حیوان، وسیله نقلیه |
| جستجوی هوشمند | پیدا کردن تصاویر با متن |
| مدیریت محتوا | تشخیص محتوای تصویری |
| فروشگاه آنلاین | برچسبگذاری خودکار کالاها |
| MVP سریع | ساخت نمونه اولیه بدون دیتاست |
نکته مهم برای دولوپرها
اگر GPU در دسترس باشد، اجرای مدل سریعتر خواهد بود. همچنین میتوانید بهجای نسخه Base از مدلهای بزرگتر CLIP استفاده کنید تا دقت بیشتری بگیرید.
کاربردهای CLIP
CLIP بهدلیل توانایی در اتصال معنایی بین متن و تصویر، در بسیاری از سیستمهای واقعی و صنعتی استفاده میشود. این مدل که بر پایه ایدههای OpenAI توسعه داده شده، عملا به یکی از ستونهای اصلی مدلهای چندوجهی تبدیل شده است.
| حوزه کاربرد | توضیح |
| Image Classification | دستهبندی تصاویر بدون نیاز به آموزش اختصاصی (Zero-shot) |
| Image Search | جستجوی تصاویر با استفاده از متن طبیعی |
| Text-to-Image Retrieval | پیدا کردن تصویر مرتبط با یک توضیح متنی |
| Content Moderation | تشخیص و فیلتر کردن محتوای نامناسب در تصاویر |
| Tagging | تولید خودکار برچسب برای تصاویر |
| Recommendation | پیشنهاد محتوا بر اساس شباهت تصویری و متنی |
| VLM Pipelineها | استفاده در مدلهای Vision-Language بهعنوان encoder مشترک |
| Prompt Ranking برای Diffusion Models | انتخاب بهترین prompt برای تولید تصویر دقیقتر |
مزایا و محدودیتهای CLIP
CLIP بهعنوان یکی از مهمترین مدلهای چندوجهی معرفیشده توسط OpenAI، توانسته نگاه به مسئله ارتباط بین تصویر و متن را تغییر دهد. یکی از بزرگترین مزیتهای این مدل، قابلیت Zero-shot classification است؛ یعنی بدون نیاز به آموزش مجدد روی دیتاستهای اختصاصی، میتواند تصاویر را بر اساس توضیحات متنی جدید دستهبندی کند. این ویژگی باعث شده وابستگی به جمعآوری دادههای برچسبخورده بهطور چشمگیری کاهش پیدا کند و توسعه سیستمهای بینایی کامپیوتری بسیار سریعتر و منعطفتر شود.
از طرف دیگر، CLIP به دلیل همین ساختار مبتنی بر یادگیری از دادههای گسترده اینترنتی، انعطافپذیری بالایی دارد و بهخوبی در سناریوهای مختلف مثل جستجوی تصویری (Search و Retrieval) یا وظایف جدیدی که قبلا برای آنها آموزش ندیده است عمل میکند. همین موضوع باعث شده بهعنوان یک foundation model قدرتمند در بسیاری از pipelineهای مدرن استفاده شود و نقش پایهای در سیستمهای Vision-Language ایفا کند.
با این حال، CLIP بدون محدودیت نیست. یکی از چالشهای مهم آن، حساسیت نسبت به نحوه نوشتن prompt است؛ یعنی تغییر کوچک در عبارت متنی میتواند روی نتیجه تاثیر بگذارد. همچنین این مدل در وظایفی مانند شمارش دقیق اشیا (counting) یا مسائل ظریف و جزئی (fine-grained tasks) عملکرد ایدئالی ندارد. از طرف دیگر، چون CLIP روی دادههای جمعآوریشده از اینترنت آموزش دیده، ممکن است برخی biasهای موجود در این دادهها را نیز به ارث ببرد. در نهایت، در برخی حوزههای تخصصی یا domainهای خاص، عملکرد آن میتواند نسبت به مدلهای تخصصیتر ضعیفتر باشد.
جمعبندی
CLIP نشان داد که میتوان ارتباط بین زبان و تصویر را بدون نیاز به فرایندهای پیچیده و آموزشهای جداگانه بهصورت یکپارچه مدلسازی کرد. این مدل با سادهسازی اتصال بین متن و تصویر، امکان ساخت سیستمهایی را فراهم کرده که بدون نیاز به آموزش اختصاصی، میتوانند برای وظایف جدید نیز مورد استفاده قرار بگیرند. به همین دلیل، CLIP امروز بهعنوان یکی از مهمترین مدلهای چندوجهی مدرن شناخته میشود و نقش پایهای در توسعه بسیاری از کاربردهای هوش مصنوعی بینایی-زبانی ایفا میکند.
منابع
openai.com | opencv.org | huggingface.co | github.com
سوالات متداول
یعنی مدل میتواند بدون اینکه قبلا برای یک وظیفه خاص آموزش دیده باشد، آن را انجام دهد. مثلا بدون آموزش جداگانه، تصاویر گربه و سگ را از هم تشخیص دهد فقط با توضیحات متنی.
مدلهای سنتی فقط روی تصاویر آموزش میبینند، اما CLIP همزمان متن و تصویر را یاد میگیرد. همین باعث میشود انعطافپذیری بیشتری داشته باشد و برای کارهای جدید قابل استفادهتر باشد.
نه بهصورت مستقیم. CLIP خودش تصویر تولید نمیکند، اما در مدلهای تولید تصویر مثل DALL·E بهعنوان یک بخش مهم برای فهم ارتباط متن و تصویر استفاده میشود.





دیدگاهتان را بنویسید