Ultralytics YOLO27:

نموذج تجزئة أي شيء (SAM)#

تطور SAM

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

How to use Segment Anything In Colab

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

مقدمة إلى SAM: نموذج تجزئة أي شيء#

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

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

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

الميزات الرئيسية لنموذج تجزئة أي شيء (SAM)#

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

للاطلاع المتعمق على نموذج تجزئة أي شيء ومجموعة بيانات SA-1B، يُرجى زيارة GitHub لمشروع تجزئة أي شيء والاطلاع على الورقة البحثية تجزئة أي شيء.

SAM على منصة Ultralytics

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

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

يعرض هذا الجدول النماذج المتاحة مع أوزانها المدرّبة مسبقًا، والمهام التي تدعمها، وتوافقها مع أنماط التشغيل المختلفة مثل الاستدلال والتحقق والتدريب والتصدير، مع الإشارة إلى الأنماط المدعومة بالرموز التعبيرية ✅ وإلى الأنماط غير المدعومة بالرموز التعبيرية ❌.

نوع النموذجالأوزان المدرّبة مسبقًاالمهام المدعومةالتدريبالتحققالاستدلالالتصدير
SAM الأساسيsam_b.ptتقسيم الكائنات
SAM الكبيرsam_l.ptتقسيم الكائنات

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

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

مثال على التنبؤ باستخدام 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, min_mask_region_area=100)
ملاحظة

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

  • للاطلاع على المزيد من الوسائط الإضافية لـ Segment everything، راجع مرجع Predictor/generate.

مقارنة SAM مع YOLO#

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

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

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

قيسَت سرعات SAM باستخدام PyTorch، وقيسَت سرعات YOLO باستخدام ONNX Runtime. أُجريت الاختبارات على جهاز Apple M4 Air لعام 2025 مزود بذاكرة RAM سعتها 16GB، باستخدام 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, nms=False)  # YOLO26 NMS-free head; no-op for YOLOv8/YOLO11
    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) المقدم من Meta نموذج تجزئة صور ثورياً مصمماً لمهام التجزئة القابلة للتوجيه. وهو يستفيد من بنية متقدمة، بما في ذلك مشفرات الصور والتوجيه المدمجة مع فك تشفير أقنعة خفيف الوزن، لتوليد أقنعة تجزئة عالية الجودة من إشارات مختلفة مثل الإشارات المكانية أو النصية. وبفضل تدريبه على مجموعة بيانات SA-1B، يتفوق نموذج Segment Anything Model (SAM) في الأداء الفوري (zero-shot)، حيث يتكيف مع توزيعات الصور والمهام الجديدة دون معرفة سابقة.

  • يمكنك استخدام نموذج تجزئة أي شيء (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 أكبر مجموعة بيانات للتجزئة حتى الآن، إذ توفر بيانات تدريب عالية الجودة ومتنوعة، مما يضمن أداءً صفريًا مثيرًا للإعجاب في مهام التجزئة المتنوعة. لمزيد من التفاصيل، تفضل بزيارة قسم مجموعات البيانات.

التعليقات