تا پیش از معرفی SAM 3، اگر میخواستید تصویری را بر اساس متن بخشبندی کنید، چارهای جز اتصال زنجیرهای چند مدل نداشتید: ابتدا یک آشکارساز کادرهای دور شیء را مییافت و سپس SAM ماسک دقیق را تولید میکرد. این رویکرد خطاهای انباشته داشت و تاخیر زمانی پردازش را در خطوط لولهی عملیاتی بالا میبرد. مدل SAM 3 این زنجیره را در قالب یک گذر رو به جلو یکپارچه کرده و به شما امکان میدهد با دادن یک پرامپت متنی کوتاه، ماسک تمام اشیای منطبق را همزمان دریافت کنید.
در این درس معماری SAM 3، تفاوتهای آن با نسلهای پیشین مثل Grounded SAM 2 و YOLO-World و نحوهی فراخوانی آن با کتابخانهی `transformers` را بررسی میکنیم. همچنین با راهکار Object Multiplex در SAM 3.1 برای ردیابی پرسرعت چند شیء در ویدیو آشنا میشوید تا بتوانید با توجه به بودجهی پردازشی و نیاز پروژه، مناسبترین معماری را انتخاب کنید.
از نظر زیرساخت اجرایی، دریافت وزنهای مدل از مخزن Hugging Face در ایران گاهی با کندی یا ناپایداری شبکه روبهرو میشود؛ همچنین استفاده از این مدل سنگین برای آموزش یا پردازش ویدیو در مقیاس بالا به کارتهای گرافیک قدرتمند نیاز دارد که تهیهی آنها چالشهای خاص خود را به همراه دارد. با این حال، میتوانید بخشهای استنتاجی سبک و تستهای اولیهی درس را بهراحتی روی پردازندههای معمولی یا تراشههای محلی اجرا کنید.
یک پرامپت متنی و یک تصویر به مدل بدهید و ماسک تمام اشیاء منطبق را تحویل بگیرید. مدل SAM 3 این کار را در یک گذر رو به جلو (forward pass) انجام میدهد.
اهداف یادگیری
- تشخیص تفاوت بین SAM (فقط پرامپتهای بصری)، Grounded SAM / SAM 2 (آشکارساز + SAM) و SAM 3 (پرامپتهای متنی بومی از طریق بخشبندی مفهومی پرامپتپذیر یا PCS)
- تشریح معماری SAM 3: ستونفقرات (backbone) مشترک + آشکارساز تصویر + ردیاب ویدیویی مبتنی بر حافظه + سرِ حضور (presence head) + طراحی تفکیکشدهی آشکارساز-ردیاب
- استفاده از پیادهسازی SAM 3 در کتابخانهی
transformersهاگینگفیس برای آشکارسازی با پرامپت متنی، بخشبندی (segmentation) و ردیابی ویدیو - انتخاب آگاهانه بین SAM 3، Grounded SAM 2، YOLO-World و SAM-MI بر اساس تاخیر زمانی (latency)، پیچیدگی مفهوم و محیط استقرار نهایی
صورت مسئله
مدل SAM در سال 2023 فقط از پرامپتهای بصری پشتیبانی میکرد: نقطهای را کلیک میکردید یا کادری میکشیدید و مدل یک ماسک تحویل میداد. برای درخواستی مثل «همهی پرتقالهای این عکس را تحویل بده»، ابتدا به یک آشکارساز (مثل Grounding DINO) نیاز داشتید تا کادرها را تولید کند و سپس SAM ماسک هر کدام را جداگانه بسازد. پروژهی Grounded SAM این فرایند را در قالب یک پایپلاین پیاده کرد، اما حاصل کار، زنجیرهای از دو مدل با وزنهای منجمد (frozen) بود که خطاهای هر مرحله ناگزیر روی هم انباشته میشد.
مدل SAM 3 (معرفیشده توسط متا در نوامبر 2025، ICLR 2026) این زنجیره را در یک مدل خلاصه کرد. این نسخه یک عبارت اسمی کوتاه یا یک نمونهی تصویری را بهعنوان پرامپت میگیرد و تمام ماسکهای منطبق و شناسههای هر شیء (instance IDs) را در یک گذر رو به جلو برمیگرداند. این همان بخشبندی مفهومی پرامپتپذیر (Promptable Concept Segmentation یا PCS) است. با تلفیق این سازوکار و بهروزرسانی مارس 2026 یعنی Object Multiplex (در مدل SAM 3.1)، حالا میتوان چندین نمونه از یک مفهوم مشابه را در ویدیو نیز با بازدهی بسیار بالا ردیابی کرد.
تمرکز این درس روی همین تحول ساختاری است. بخشبندی دوبعدی، آشکارسازی و تطبیق متن-تصویر (text-image grounding) درون یک مدل یکپارچه merge شدهاند. در محیط پروداکشن، دیگر مسئله این نیست که «کدام پایپلاینها را به هم زنجیر کنیم»، بلکه باید بدانیم «کدام مدل پرامپتپذیر میتواند کل نیاز ما را سرتاسری (end-to-end) پوشش دهد».
مفهوم اصلی
سه نسل مدلهای SAM
بخشبندی مفهومی پرامپتپذیر
یک «پرامپت مفهومی» (concept prompt) در واقع یک عبارت اسمی کوتاه ("yellow school bus"، "striped red umbrella"، "hand holding a mug") یا یک تصویر نمونه است. مدل در پاسخ، ماسکهای بخشبندی تکتک اشیای موجود در تصویر را که با این مفهوم همخوانی دارند، همراه با یک شناسهی مجزا برای هر شیء بازمیگرداند.
این سازوکار از سه جهت با SAM کلاسیک مبتنی بر پرامپت بصری تفاوت دارد:
- نیازی به پرامپتگذاری جداگانه برای هر شیء نیست؛ یک پرامپت متنی واحد همهی نمونههای منطبق را برمیگرداند.
- دایرهی لغات باز (open-vocabulary) است؛ هر مفهومی را که بتوان با زبان طبیعی توصیف کرد، پوشش میدهد.
- بهجای بازگرداندن یک ماسک به ازای هر پرامپت، همهی نمونههای موجود را همزمان تحویل میدهد.
بخشهای کلیدی معماری
- ستونفقرات مشترک؛ یک ترنسفورمر بینایی (ViT) واحد تصویر را پردازش میکند. سرِ آشکارساز و ردیاب مبتنی بر حافظه هر دو از همین لایه خروجی میگیرند.
- سرِ حضور؛ تشخیص میدهد که آیا مفهوم مورد نظر اصلاً در تصویر وجود دارد یا خیر. این لایه پاسخ به «آیا اینجا هست؟» را از «کجای تصویر است؟» جدا میکند و آمار خطاهای مثبت کاذب (false positives) را روی مفاهیمی که در تصویر نیستند کاهش میدهد.
- طراحی تفکیکشدهی آشکارساز-ردیاب؛ آشکارسازی در سطح تصویر و ردیابی در سطح ویدیو سرهای مجزایی دارند تا عملکردشان تداخلی با هم پیدا نکند.
- بانک حافظه (Memory bank)؛ ویژگیهای مربوط به هر شیء را در میان فریمها ذخیره میکند تا ردیابی ویدیویی انجام شود (همان سازوکاری که در SAM 2 هم به کار رفته بود).
آموزش در مقیاس وسیع
مدل SAM 3 روی 4 میلیون مفهوم منحصربهفرد آموزش دیده است. این دادهها را یک موتور داده (data engine) از طریق نشانهگذاری تکرارشونده و تصحیح مداوم با کمک هوش مصنوعی و نظارت انسانی تولید کرده است. معیار ارزیابی جدید یعنی SA-CO شامل 270 هزار مفهوم اختصاصی است؛ یعنی 50 برابر بزرگتر از بنچمارکهای پیشین (prior). این مدل در آزمون SA-CO به 75 تا 80 درصد کارایی انسان میرسد و دقت آن در ارزیابی PCS تصویر و ویدیو دو برابر سیستمهای موجود است.
قابلیت Object Multiplex در SAM 3.1
در بهروزرسانی مارس 2026، قابلیت Object Multiplex معرفی شد؛ سازوکاری مبتنی بر حافظهی مشترک برای ردیابی همزمان نمونههای متعدد از یک مفهوم یکسان. پیش از این، ردیابی N نمونه به معنای N بانک حافظهی جداگانه بود. سازوکار Multiplex همهی آنها را در یک حافظهی اشتراکی با پرسوجوهای اختصاصی برای هر نمونه ادغام میکند. نتیجه: ردیابی همزمان چندین شیء با سرعتی چشمگیر بدون افت دقت.
کاربرد Grounded SAM در سال 2026
- زمانی که بخواهید یک آشکارساز دایرهلغاتباز خاص (مثل DINO-X یا Florence-2) را جایگزین کنید.
- زمانی که لایسنس SAM 3 (نیازمند تایید دسترسی در HF) مانع استفادهی مستقیم باشد.
- زمانی که بخواهید کنترلی دقیقتر از آستانهی (threshold) پیشفرض SAM 3 روی آشکارساز اعمال کنید.
- برای کارهای پژوهشی و سنجش اثر مؤلفهها (ablation) روی بخش آشکارساز.
پایپلاینهای ماژولار هنوز جایگاه خود را دارند؛ اما برای اغلب کاربردهای پروداکشن، SAM 3 راهکار سادهتری است.
مقایسهی YOLO-World و SAM 3
- YOLO-World؛ فقط آشکارساز دایرهلغاتباز (بدون ارائهی ماسک). بلادرنگ (real-time). گزینهای ایدئال برای دریافت کادرها با نرخ فریم بالا.
- SAM 3؛ بخشبندی کامل همراه با ردیابی. سرعت کمتر، خروجی غنیتر.
تفکیک در پروداکشن: YOLO-World برای پایپلاینهای سریع و مبتنی بر آشکارسازی محض (مسیریابی رباتیک، داشبوردهای سرعتی)، و SAM 3 برای هر سناریویی که به ماسک یا ردیابی نیاز دارد.
بازدهی در SAM-MI
مدل SAM-MI (محصول 2025-2026) گلوگاه دکودر SAM را هدف میگیرد. ایدههای کلیدی آن عبارتاند از:
- پرامپتگذاری نقطهای تنک (Sparse point prompting)؛ استفاده از چند نقطهی منتخب بهجای پرامپتهای پرتراکم؛ فراخوانیهای دکودر را تا 96 درصد کاهش میدهد.
- تجمیع سطحی ماسکها (Shallow mask aggregation)؛ ترکیب پیشبینیهای تقریبی ماسک در یک ماسک نهایی و دقیقتر.
- تزریق تفکیکشدهی ماسک (Decoupled mask injection)؛ دکودر ویژگیهای ازپیشمحاسبهشدهی ماسک را دریافت میکند، بنابراین نیازی به اجرای مجدد پردازشها نیست.
نتیجه: تقریباً 1.6 برابر سریعتر از Grounded-SAM در بنچمارکهای با دایرهلغاتباز.
قالب خروجی سه مدل
خروجی هر سه مدل ساختار کلی یکسانی دارد (کادرها + برچسبها + امتیازها + ماسکها + شناسهها). این موضوع بسیار مفید است؛ بخشهای پایینی پایپلاین شما نیازی ندارند بر اساس مدل اجراشده branch شوند.
پیادهسازی
گام 1: ساخت پرامپت
یک تابع کمکی مینویسیم که جملهی کاربر را به فهرستی از پرامپتهای مفهومی مناسب برای SAM 3 تبدیل کند. این بخش همان نقطهی مرزی است که «متن تایپشدهی کاربر» به «ورودی قابلفهم برای مدل» میرسد.
def split_concepts(sentence):
"""
Heuristic splitter for multi-concept prompts.
Returns list of short noun phrases.
"""
for sep in [",", ";", "and", "or", "&"]:
if sep in sentence:
parts = [p.strip() for p in sentence.replace("and ", ",").split(",")]
return [p for p in parts if p]
return [sentence.strip()]
print(split_concepts("cats, dogs and balloons"))
مدل SAM 3 در هر گذر رو به جلو یک مفهوم را میپذیرد؛ برای درخواستهای چندمفهومی، آنها را در حلقه یا بهشکل دستهای (batch) اجرا کنید.
گام 2: توابع کمکی پسپردازش
خروجیهای خام SAM 3 را به فهرستی مرتب از آشکارسازیها تبدیل میکنیم تا با قرارداد پایپلاین ما در درس 16 فاز 4 هماهنگ باشد.
from dataclasses import dataclass
from typing import List
@dataclass
class ConceptDetection:
concept: str
instance_id: int
box: tuple # (x1, y1, x2, y2)
score: float
mask_rle: str # run-length encoded
def rle_encode(binary_mask):
flat = binary_mask.flatten().astype("uint8")
runs = []
prev, count = flat[0], 0
for v in flat:
if v == prev:
count += 1
else:
runs.append((int(prev), count))
prev, count = v, 1
runs.append((int(prev), count))
return ";".join(f"{v}x{c}" for v, c in runs)
فرمت RLE باعث میشود حتی در صورت وجود ماسکهای متعدد و با وضوح بالا، حجم دادههای ارسالی سبک بماند. همین قالب بهخوبی روی SAM 2، SAM 3 و Grounded SAM 2 جواب میدهد.
گام 3: یک واسط یکپارچه برای بخشبندی با دایرهلغاتباز
هر نوع بکاندی را که در اختیار دارید (SAM 3، Grounded SAM 2 یا YOLO-World + SAM 2) پشت یک متد واحد قرار دهید. با این کار، اگر بکاند را عوض کنید، کدهای پاییندستی شما تغییر نمیکنند.
from abc import ABC, abstractmethod
import numpy as np
class OpenVocabSeg(ABC):
@abstractmethod
def detect(self, image: np.ndarray, concept: str) -> List[ConceptDetection]:
...
class StubOpenVocabSeg(OpenVocabSeg):
"""
Deterministic stub used for pipeline testing when real models are not loaded.
"""
def detect(self, image, concept):
h, w = image.shape[:2]
return [
ConceptDetection(
concept=concept,
instance_id=0,
box=(w * 0.2, h * 0.3, w * 0.5, h * 0.8),
score=0.89,
mask_rle="0x100;1x50;0x200",
),
ConceptDetection(
concept=concept,
instance_id=1,
box=(w * 0.55, h * 0.25, w * 0.85, h * 0.75),
score=0.74,
mask_rle="0x80;1x40;0x220",
),
]
زیرکلاس واقعی SAM3OpenVocabSeg ماژولهای transformers.Sam3Model و Sam3Processor را درون خود کپسوله میکند.
گام 4: نحوهی استفاده از SAM 3 در Hugging Face (مرجع)
برای اجرای مدل واقعی، از پیادهسازی رسمی در کتابخانهی transformers استفاده کنید:
from transformers import Sam3Processor, Sam3Model
import torch
processor = Sam3Processor.from_pretrained("facebook/sam3")
model = Sam3Model.from_pretrained("facebook/sam3").eval()
inputs = processor(images=pil_image, return_tensors="pt")
inputs = processor.set_text_prompt(inputs, "yellow school bus")
with torch.no_grad():
outputs = model(**inputs)
masks = processor.post_process_masks(
outputs.masks, inputs.original_sizes, inputs.reshaped_input_sizes
)
boxes = outputs.boxes
scores = outputs.scores
یک پرامپت ارسال میشود و تمام نتایج منطبق در یک فراخوانی واحد برمیگردند.
گام 5: بسنجید که Grounded SAM 2 چه دستاوردهایی داشت
یک بنچمارک منصفانه: وقتی Grounded SAM 2 را در یک پایپلاین واقعی با SAM 3 جایگزین میکنید، چه اتفاقی میافتد؟
- تاخیر زمانی (Latency): مدل SAM 3 نیاز به اجرای آشکارساز مجزا را برطرف میکند و یک گذر رو به جلو صرفهجویی میشود، اما خود مدل سنگینتر است؛ در نتیجه برآیند نهایی معمولاً تفاوتی ندارد یا اندکی سریعتر است.
- دقت: مدل SAM 3 در مفاهیم ترکیبی یا کمیاب ("striped red umbrella") عملکرد بسیار بهتری نشان میدهد. در مفاهیم تککلمهای رایج، دقت هر دو تقریباً در یک سطح است.
- انعطافپذیری: در Grounded SAM 2 دستتان برای تغییر آشکارساز باز است (مثلاً DINO-X، Florence-2 یا Grounding DINO 1.5)، در حالی که SAM 3 ساختاری یکپارچه دارد.
نتیجه: برای پروژههای بخشبندی با دایرهلغاتباز در سال 2026، گزینهی پیشفرض SAM 3 است. اما اگر آزادی عمل در انتخاب آشکارساز یا شرایط لایسنس متفاوتی مد نظرتان باشد، همچنان Grounded SAM 2 گزینهی مناسبی خواهد بود.
کاربرد در محیط عملیاتی
الگوهای استقرار در پروداکشن:
- نشانهگذاری بلادرنگ؛ تلفیق SAM 3 با قابلیت «برچسب در قالب پرامپت متنی» در CVAT. کارشناس نشانهگذاری نام یک برچسب را انتخاب میکند؛ SAM 3 همهی موارد منطبق را پیشبرچسب میزند تا کاربر فقط آن را بازبینی و اصلاح کند.
- تحلیل ویدیویی؛ بهرهگیری از SAM 3.1 Object Multiplex برای ردیابی چندین شیء بهطور همزمان از طریق ارسال فریمها به ردیاب حافظهمحور.
- رباتیک؛ کاربرد SAM 3 برای دستکاری اشیاء با دایرهلغاتباز («لیوان قرمز را بردار»)؛ بهعنوان یک دستور پایهای در برنامهریزی حرکتی.
- تصویربرداری پزشکی؛ تنظیم دقیق (fine-tuning) مدل SAM 3 روی مفاهیم پزشکی؛ نیازمند ثبت درخواست دسترسی در HF.
کتابخانهی Ultralytics نیز SAM 3 را در پکیج پایتون خود قرار داده است:
from ultralytics import SAM
model = SAM("sam3.pt")
results = model(image_path, prompts="yellow school bus")
همان واسط برنامهنویسی آشنای YOLO و SAM 2.
خروجیهای این درس
این درس موارد زیر را ارائه میدهد:
outputs/prompt-open-vocab-stack-picker.md؛ یک پرامپت برای انتخاب بین SAM 3 / Grounded SAM 2 / YOLO-World / SAM-MI بر اساس تاخیر زمانی، پیچیدگی مفهوم و محدودیتهای لایسنس.outputs/skill-concept-prompt-designer.md؛ یک اسکیل برای تبدیل جملات کاربر به پرامپتهای مفهومی استاندارد SAM 3 (شامل جداسازی، ابهامزدایی و راهکارهای بازگشتی).
تمرینها
- (ساده) مدل SAM 3 را روی 10 تصویر با پرامپتهای مفهومی انتخابی خودتان اجرا کنید. همان تصاویر را با ترکیب SAM 2 + Grounding DINO 1.5 تست کنید و گزارش دهید که هر مدل کدام مفاهیم را جا انداخته است.
- (متوسط) یک رابط کاربری برای «کلیک جهت تایید / کلیک جهت حذف» روی خروجیهای SAM 3 بسازید: یک پرامپت متنی نمونههای کاندید را برمیگرداند؛ با کلیک کاربر مشخص میشود کدام موارد مثبت در نظر گرفته شوند. خروجی نهایی را در قالب JSON تحویل دهید.
- (سخت) مدل SAM 3 را روی مجموعهای از مفاهیم سفارشی (مثلاً 5 نوع قطعهی الکترونیکی) با 20 تصویر برچسبخورده برای هر کدام، fine-tune کنید. نتایج آن را با نسخهی بدون آموزش (zero-shot) مدل SAM 3 روی همان دادههای آزمون مقایسه کنید و میزان بهبود IoU ماسکها را بسنجید.
اصطلاحات کلیدی
| اصطلاح | معنای عامیانه | معنای دقیق فنی |
|---|---|---|
| بخشبندی با دایرهلغاتباز (Open-vocabulary segmentation) | «بخشبندی بر اساس متن» | تولید ماسک برای اشیایی که در قالب زبان طبیعی توصیف شدهاند، نه بر اساس یک مجموعهبرچسب ثابت |
| PCS | «بخشبندی مفهومی پرامپتپذیر» | وظیفهی اصلی SAM 3؛ تولید ماسک برای تمام نمونههای منطبق بر اساس یک عبارت اسمی یا تصویر نمونه |
| پرامپت مفهومی (Concept prompt) | «ورودی متنی» | یک عبارت اسمی کوتاه یا تصویر نمونه؛ نه یک جملهی کامل |
| سرِ حضور (Presence head) | «آیا اینجا هست؟» | ماژولی در SAM 3 که قبل از مکانیابی، وجود مفهوم در تصویر را ارزیابی میکند |
| SA-CO | «بنچمارک SAM 3» | بنچمارک بخشبندی با دایرهلغاتباز با 270 هزار مفهوم؛ 50 برابر بزرگتر از بنچمارکهای پیشین |
| Object Multiplex | «بهروزرسانی SAM 3.1» | ردیابی چند شیء با حافظهی مشترک؛ ردیابی همزمان و بسیار سریع نمونههای متعدد |
| Grounded SAM 2 | «پایپلاین ماژولار» | زنجیرهای از آشکارساز و SAM 2؛ زمانی کاربرد دارد که امکان تغییر آشکارساز مهم باشد |
| SAM-MI | «نسخهی بهینهی SAM» | استفاده از Mask Injection برای افزایش 1.6 برابری سرعت نسبت به Grounded-SAM |
