رؤية YOLO 2026:

نموذج تقسيم أي شيء (SAM)#

تطور SAM

هذا هو نموذج SAM الأصلي من Meta. للاطلاع على قدرات محسنة، انظر SAM 2 لتجزئة الفيديو أو SAM 3 لتجزئة المفاهيم القابلة للتوجيه باستخدام مطالبات الأمثلة النصية والصورية.

How to use Segment Anything In Colab

مرحبًا بك في حدود تجزئة الصور مع نموذج Segment Anything Model، أو SAM. لقد غير هذا النموذج الثوري قواعد اللعبة من خلال تقديم تجزئة الصور القابلة للتوجيه بأداء في الوقت الفعلي، مما وضع معايير جديدة في هذا المجال.

مقدمة إلى SAM: نموذج Segment Anything#

يعد نموذج Segment Anything، أو SAM، نموذجاً متطوراً لتقسيم الصور يتيح التقسيم القابل للتوجيه، مما يوفر تنوعاً لا مثيل له في مهام تحليل الصور. يشكل SAM قلب مبادرة Segment Anything، وهو مشروع رائد يقدم نموذجاً ومهمة ومجموعة بيانات جديدة لتقسيم الصور.

يتيح تصميم SAM المتقدم له التكيف مع توزيعات الصور والمهام الجديدة دون معرفة سابقة، وهي ميزة تُعرف بالتعلم الصفري (zero-shot transfer). تم تدريب SAM على مجموعة بيانات SA-1B الواسعة، والتي تحتوي على أكثر من مليار قناع موزعة على 11 مليون صورة منتقاة بعناية، وقد أظهر أداءً مذهلاً في النقل الصفري، متجاوزًا النتائج السابقة المشرفة بالكامل في العديد من الحالات.

SA-1B dataset sample with automatic segmentation masks أمثلة صور SA-1B. صور مجموعة البيانات مع أقنعة متراكبة من مجموعة بيانات SA-1B المُقدَّمة حديثًا. تحتوي مجموعة بيانات SA-1B على 11 مليون صورة متنوعة وعالية الدقة ومحمية بحقوق الملكية والخصوصية و1.1 مليار قناع تجزئة عالي الجودة. تم توضيح هذه الأقنعة تلقائيًا بالكامل بواسطة SAM، وكما تم التحقق منه من خلال تقييمات البشر والعديد من التجارب، فهي ذات جودة وتنوع عاليين. يتم تجميع الصور حسب عدد الأقنعة لكل صورة لأغراض التوضيح (هناك حوالي 100 قناع لكل صورة في المتوسط).

الميزات الرئيسية لنموذج Segment Anything (SAM)#

  • مهمة التقسيم القابل للتوجيه: تم تصميم SAM مع وضع مهمة التقسيم القابل للتوجيه في الاعتبار، مما يسمح له بإنشاء أقنعة تقسيم صالحة من أي مطالبة معطاة، مثل الإشارات المكانية أو النصية التي تحدد كائناً ما.
  • بنية متقدمة: يستخدم نموذج Segment Anything مشفر صور قوياً، ومشفر مطالبات، ومفكك أقنعة خفيف الوزن. تتيح هذه البنية الفريدة توجيهاً مرناً، وحساب أقنعة في الوقت الفعلي، والوعي بالغموض في مهام التقسيم.
  • مجموعة بيانات SA-1B: التي قدمها مشروع Segment Anything، تتميز مجموعة بيانات SA-1B بأكثر من مليار قناع على 11 مليون صورة. وبصفتها أكبر مجموعة بيانات للتقسيم حتى الآن، فهي توفر لـ SAM مصدراً متنوعاً وكبير النطاق لبيانات التدريب.
  • الأداء الصفري (Zero-Shot Performance): يُظهر SAM أداءً متميزًا في النقل الصفري عبر مختلف مهام التجزئة، مما يجعله أداة جاهزة للاستخدام لتطبيقات متنوعة مع الحاجة الأدنى إلى هندسة التوجيه (prompt engineering).

للحصول على نظرة متعمقة حول نموذج Segment Anything Model ومجموعة بيانات SA-1B، يرجى زيارة صفحة GitHub الخاصة بـ Segment Anything والاطلاع على ورقة البحث Segment Anything.

SAM على منصة Ultralytics

يدعم SAM ميزة التوضيح الذكي على منصة Ultralytics Platform، مما يتيح إجراء التخفاء الذكي القائم على النقر لتسمية مجموعة البيانات بسرعة. راجع دليل التوضيح للحصول على التفاصيل.

النماذج المتاحة، والمهام المدعومة، وأوضاع التشغيل#

يعرض هذا الجدول النماذج المتاحة مع أوزانها المدربة مسبقًا المحددة، والمهام التي تدعمها، وتوافقها مع أوضاع التشغيل المختلفة مثل Inference، وValidation، وTraining، وExport، والتي يُشار إليها برموز تعبيرية ✅ للأوضاع المدعومة و❌ للأوضاع غير المدعومة.

نوع النموذجالأوزان المدربة مسبقاًالمهام المدعومةالتدريبالتحققالاستنتاجالتصدير
SAM basesam_b.ptتجزئة الحالات الفردية
SAM largesam_l.ptتجزئة الحالات الفردية

كيفية استخدام SAM: التنوع والقوة في تقسيم الصور#

يمكن توظيف SegmentAnything Model للعديد من المهام اللاحقة التي تتجاوز بيانات تدريبه. ويشمل ذلك اكتشاف الحواف، وتوليد مقترحات الكائنات، والتجزئة المثيلية (instance segmentation)، والتنبؤ الأولي من النص إلى القناع. باستخدام هندسة التوجيه، يمكن لـ SAM التكيف بسرعة مع المهام الجديدة وتوزيعات البيانات بطريقة الصفر (zero-shot)، مما يجعله أداة متعددة الاستخدامات وقوية لجميع احتياجات تجزئة الصور الخاصة بك.

مثال على تنبؤ SAM#

التقسيم باستخدام المطالبات

تقسيم الصورة باستخدام مطالبات معينة.

from ultralytics import SAM

# Load a model
model = SAM("sam_b.pt")

# Display model information (optional)
model.info()

# Run inference with bboxes prompt
results = model("ultralytics/assets/zidane.jpg", bboxes=[439, 437, 524, 709])

# Run inference with single point
results = model(points=[900, 370], labels=[1])

# Run inference with multiple points
results = model(points=[[400, 370], [900, 370]], labels=[1, 1])

# Run inference with multiple points prompt per object
results = model(points=[[[400, 370], [900, 370]]], labels=[[1, 1]])

# Run inference with negative points prompt
results = model(points=[[[400, 370], [900, 370]]], labels=[[1, 0]])
تقسيم كل شيء

تقسيم الصورة بأكملها.

from ultralytics import SAM

# Load a model
model = SAM("sam_b.pt")

# Display model information (optional)
model.info()

# Run inference
model("path/to/image.jpg")
  • المنطق هنا هو تقسيم الصورة بأكملها إذا لم تقم بتمرير أي مطالبات (bboxes/points/masks).
مثال SAMPredictor

بهذه الطريقة يمكنك تعيين الصورة مرة واحدة وتشغيل استدلال المطالبات عدة مرات دون تشغيل مشفر الصور عدة مرات.

import cv2

from ultralytics.models.sam import Predictor as SAMPredictor

# Create SAMPredictor
overrides = {"conf": 0.25, "task": "segment", "mode": "predict", "imgsz": 1024, "model": "mobile_sam.pt"}
predictor = SAMPredictor(overrides=overrides)

# Set image
predictor.set_image("ultralytics/assets/zidane.jpg")  # set with image file
predictor.set_image(cv2.imread("ultralytics/assets/zidane.jpg"))  # set with np.ndarray
results = predictor(bboxes=[439, 437, 524, 709])

# Run inference with single point prompt
results = predictor(points=[900, 370], labels=[1])

# Run inference with multiple points prompt
results = predictor(points=[[400, 370], [900, 370]], labels=[1, 1])

# Run inference with negative points prompt
results = predictor(points=[[[400, 370], [900, 370]]], labels=[[1, 0]])

# Reset image
predictor.reset_image()

تقسيم كل شيء مع وسائط إضافية.

from ultralytics.models.sam import Predictor as SAMPredictor

# Create SAMPredictor
overrides = {"conf": 0.25, "task": "segment", "mode": "predict", "imgsz": 1024, "model": "mobile_sam.pt"}
predictor = SAMPredictor(overrides=overrides)

# Segment with additional args
results = predictor(source="ultralytics/assets/zidane.jpg", crop_n_layers=1, points_stride=64)
ملاحظة

جميع كائنات results المُرجعة في الأمثلة الواردة أعلاه هي كائنات Results التي تتيح الوصول إلى الأقنعة المتوقعة والصورة المصدر بسهولة.

مقارنة SAM مقابل YOLO#

نقارن هنا نموذج SAM-b من Meta مع نماذج التجزئة من Ultralytics بما في ذلك YOLO26n-seg:

النموذجالحجم
(ميغابايت)
المعلمات
(مليون)
السرعة (وحدة المعالجة المركزية)
(ميلي ثانية/صورة)
Meta SAM-b37593.741703
MobileSAM40.710.123802
FastSAM-s مع backbone لـ YOLOv823.911.858.0
Ultralytics YOLOv8n-seg7.1 (52.8x أصغر)3.4 (27.6x أقل)24.8 (1682x أسرع)
Ultralytics YOLO11n-seg6.2 (60.5x أصغر)2.9 (32.3x أقل)24.3 (1716x أسرع)
Ultralytics YOLO26n-seg6.7 (56.0x أصغر)2.7 (34.7x أقل)25.2 (1655x أسرع)

توضح هذه المقارنة الاختلافات الجوهرية في أحجام النماذج وسرعاتها بين متغيرات SAM ونماذج تقسيم YOLO. في حين يوفر SAM قدرات تقسيم تلقائية فريدة، فإن نماذج YOLO، وخاصة YOLOv8n-seg وYOLO11n-seg وYOLO26n-seg، أصغر حجماً وأسرع بكثير وأكثر كفاءة من الناحية الحسابية.

تم قياس سرعات SAM باستخدام PyTorch، وسرعات YOLO باستخدام ONNX Runtime. أجريت الاختبارات على جهاز Apple M4 Air لعام 2025 بذاكرة وصول عشوائي (RAM) سعة 16 جيجابايت باستخدام torch==2.10.0، وultralytics==8.4.31، وonnxruntime==1.24.4. لإعادة إنتاج هذا الاختبار:

مثال
from ultralytics import ASSETS, SAM, YOLO, FastSAM

# Profile SAM-b, MobileSAM
for file in ["sam_b.pt", "mobile_sam.pt"]:
    model = SAM(file)
    model.info()
    model(ASSETS)

# Profile FastSAM-s
model = FastSAM("FastSAM-s.pt")
model.info()
model(ASSETS)

# Profile YOLO models (ONNX)
for file_name in ["yolov8n-seg.pt", "yolo11n-seg.pt", "yolo26n-seg.pt"]:
    model = YOLO(file_name)
    model.info()
    onnx_path = model.export(format="onnx", dynamic=True)
    model = YOLO(onnx_path)
    model(ASSETS)

التعليق التلقائي: مسار سريع لمجموعات بيانات التقسيم#

التوضيح التلقائي هو ميزة رئيسية في SAM، تتيح للمستخدمين إنشاء مجموعة بيانات التجزئة باستخدام نموذج اكتشاف مُدرب مسبقًا. تتيح هذه الميزة التوضيح السريع والدقيق لعدد كبير من الصور، مما يتجنب الحاجة إلى التسمية اليدوية المستهلكة للوقت.

قم بإنشاء مجموعة بيانات التقسيم الخاصة بك باستخدام نموذج اكتشاف#

لتوضيح مجموعة البيانات تلقائيًا باستخدام إطار عمل Ultralytics، استخدم وظيفة auto_annotate كما هو موضح أدناه:

مثال
from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="sam_b.pt")
الوسيطالنوعالافتراضيالوصف
datastrمطلوبمسار إلى الدليل الذي يحتوي على الصور المستهدفة للتعليق أو التقسيم.
det_modelstr'yolo26x.pt'مسار نموذج اكتشاف YOLO للاكتشاف الأولي للكائنات.
sam_modelstr'sam_b.pt'مسار نموذج SAM للتقسيم (يدعم أوزان SAM وSAM 2 وMobileSAM وSAM 3).
devicestr''جهاز الحوسبة (مثلاً 'cuda:0' أو 'cpu' أو '' للاكتشاف التلقائي للجهاز).
conffloat0.25عتبة ثقة كشف YOLO لتصفية الاكتشافات الضعيفة.
ioufloat0.45عتبة IoU لـ Non-Maximum Suppression لتصفية المربعات المتداخلة.
imgszint640حجم الإدخال لتغيير حجم الصور (يجب أن يكون من مضاعفات 32).
max_detint300الحد الأقصى لعدد الاكتشافات لكل صورة لتحسين كفاءة الذاكرة.
classeslist[int]Noneقائمة مؤشرات الفئات المراد اكتشافها (على سبيل المثال، [0, 1] للشخص والدراجة).
output_dirstrNoneحفظ دليل التعليقات التوضيحية (افتراضي: <data>_auto_annotate_labels الشقيق).

تأخذ وظيفة auto_annotate المسار إلى صورك، مع وسائط اختيارية لتحديد نماذج الكشف المُدربة مسبقًا وتجزئة SAM، والجهاز الذي يتم تشغيل النماذج عليه، ومجلد الإخراج لحفظ النتائج الموضحة.

يمكن للتعليق التلقائي باستخدام النماذج المدربة مسبقًا تقليل الوقت والجهد اللازمين لإنشاء مجموعات بيانات تجزئة عالية الجودة بشكل كبير. هذه الميزة مفيدة بشكل خاص للباحثين والمطورين الذين يتعاملون مع مجموعات صور كبيرة، حيث تسمح لهم بالتركيز على تطوير النموذج وتقييمه بدلاً من التعليق اليدوي.

الاقتباسات والشكر#

إذا وجدت SAM مفيدًا في بحثك أو عملك التطويري، يرجى التفكير في الاستشهاد بورقتنا البحثية:

اقتباس
@misc{kirillov2023segment,
      title={Segment Anything},
      author={Alexander Kirillov and Eric Mintun and Nikhila Ravi and Hanzi Mao and Chloe Rolland and Laura Gustafson and Tete Xiao and Spencer Whitehead and Alexander C. Berg and Wan-Yen Lo and Piotr Dollár and Ross Girshick},
      year={2023},
      eprint={2304.02643},
      archivePrefix={arXiv},
      primaryClass={cs.CV}
}

نود أن نعرب عن امتناننا لـ Meta AI لإنشاء والحفاظ على هذا المورد القيم لمجتمع الرؤية الحاسوبية.

الأسئلة الشائعة#

  • نموذج Segment Anything Model (SAM) من Ultralytics هو نموذج تجزئة صور ثوري مصمم لمهام التجزئة القابلة للتوجيه. يستفيد من هندسة متقدمة، بما في ذلك مشفرات الصور والتوجيه مجتمعة مع فك تشفير قناع خفيف الوزن، لإنشاء أقنعة تجزئة عالية الجودة من مطالبات مختلفة مثل الإشارات المكانية أو النصية. تم التدريب على مجموعة بيانات SA-1B الواسعة، ويتفوق SAM في الأداء الصفري، متكيفًا مع توزيعات الصور والمهام الجديدة دون معرفة سابقة.

  • يمكنك استخدام Segment Anything Model (SAM) لتجزئة الصور عن طريق إجراء الاستدلال بمطالبات مختلفة مثل مربعات الإحاطة أو النقاط. إليك مثال باستخدام Python:

    from ultralytics import SAM
    
    # Load a model
    model = SAM("sam_b.pt")
    
    # Segment with bounding box prompt
    model("ultralytics/assets/zidane.jpg", bboxes=[439, 437, 524, 709])
    
    # Segment with points prompt
    model("ultralytics/assets/zidane.jpg", points=[900, 370], labels=[1])
    
    # Segment with multiple points prompt
    model("ultralytics/assets/zidane.jpg", points=[[400, 370], [900, 370]], labels=[1, 1])
    
    # Segment with multiple points prompt per object
    model("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 1]])
    
    # Segment with negative points prompt.
    model("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 0]])

    بدلاً من ذلك، يمكنك إجراء الاستدلال باستخدام SAM في واجهة سطر الأوامر (CLI):

    yolo predict model=sam_b.pt source=path/to/image.jpg

    لمزيد من تعليمات الاستخدام المفصلة، قم بزيارة قسم التجزئة.

  • مقارنة بنماذج YOLO، فإن متغيرات SAM مثل SAM-b وMobileSAM وFastSAM-s تكون عادة أكبر حجمًا وأبطأ ولكنها توفر إمكانات فريدة للتجزئة الصفرية. على سبيل المثال، YOLO26n-seg أصغر بمقدار 56 مرة وأسرع بأكثر من 1650 مرة من نموذج SAM-b الأصلي من Meta على وحدة المعالجة المركزية (CPU). هذا يجعل نماذج YOLO مثالية للتطبيقات التي تتطلب تجزئة سريعة وخفيفة الوزن وفعالة من حيث الحوسبة، بينما تتفوق نماذج SAM في مهام التجزئة المرنة القابلة للتوجيه والصفرية.

  • يوفر SAM من Ultralytics ميزة التعليق التلقائي التي تسمح بإنشاء مجموعات بيانات تجزئة باستخدام نموذج كشف مدرب مسبقًا. إليك مثال في Python:

    from ultralytics.data.annotator import auto_annotate
    
    auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="sam_b.pt")

    تأخذ هذه الوظيفة مسار صورك والوسائط الاختيارية لنماذج الكشف المُدربة مسبقًا ونماذج تجزئة SAM، إلى جانب مواصفات الجهاز ومجلد الإخراج. للحصول على دليل كامل، راجع التوضيح التلقائي.

  • تم تدريب SAM على مجموعة بيانات SA-1B الشاملة التي تضم أكثر من مليار قناع عبر 11 مليون صورة. تُعد SA-1B أكبر مجموعة بيانات تجزئة حتى الآن، حيث توفر بيانات تدريب عالية الجودة ومتنوعة، مما يضمن أداءً صفريًا مبهرًا في مهام التجزئة المتنوعة. لمزيد من التفاصيل، قم بزيارة قسم مجموعات البيانات.

التعليقات