نموذج تقسيم أي شيء (SAM)
تطور SAM
هذا هو نموذج SAM الأصلي من ميتا. للحصول على قدرات محسنة، راجع SAM 2 لتجزئة الفيديو أو SAM 3 لتجزئة المفاهيم القابلة للمطالبة باستخدام المطالبات النصية ومطالبات أمثلة الصور.
مرحبًا بك في طليعة تجزئة الصور مع نموذج تجزئة أي شيء، أو SAM. لقد غيّر هذا النموذج الثوري قواعد اللعبة من خلال تقديم تجزئة الصور القابلة للتوجيه مع أداء في الوقت الفعلي، مما يضع معايير جديدة في هذا المجال.
مقدمة إلى SAM: نموذج تقسيم أي شيء (Segment Anything Model)
إن نموذج تقسيم أي شيء، أو SAM، هو نموذج متطور لتقسيم الصور يسمح بالتقسيم السريع، مما يوفر تنوعًا لا مثيل له في مهام تحليل الصور. يشكل SAM جوهر مبادرة تقسيم أي شيء، وهو مشروع رائد يقدم نموذجًا ومهمة ومجموعة بيانات جديدة لتقسيم الصور.
يتيح تصميم SAM المتقدم له التكيف مع توزيعات ومهام الصور الجديدة دون معرفة مسبقة، وهي ميزة تُعرف باسم النقل الصفري. بعد التدريب على مجموعة البيانات الواسعة SA-1B dataset، التي تحتوي على أكثر من مليار قناع موزعة على 11 مليون صورة منسقة بعناية، أظهر SAM أداءً صفريًا مثيرًا للإعجاب، متجاوزًا النتائج الخاضعة للإشراف الكامل السابقة في كثير من الحالات.
صور أمثلة لمجموعة البيانات SA-1B. صور مجموعة البيانات مع أقنعة متراكبة من مجموعة بيانات SA-1B التي تم تقديمها حديثًا. تحتوي SA-1B على 11 مليون صورة متنوعة وعالية الدقة ومرخصة وتحمي الخصوصية و 1.1 مليار قناع تجزئة عالي الجودة. تم وضع علامات توضيحية على هذه الأقنعة تلقائيًا بالكامل بواسطة SAM، وكما تم التحقق من خلال تقييمات بشرية والعديد من التجارب، فهي ذات جودة وتنوع عاليين. يتم تجميع الصور حسب عدد الأقنعة لكل صورة للعرض المرئي (هناك ∼100 قناع لكل صورة في المتوسط).
الميزات الرئيسية لنموذج تقسيم أي شيء (SAM)
- مهمة التجزئة القابلة للتوجيه: تم تصميم SAM مع وضع مهمة التجزئة القابلة للتوجيه في الاعتبار، مما يسمح له بإنشاء أقنعة تجزئة صالحة من أي موجه معين، مثل الأدلة المكانية أو النصية التي تحدد كائنًا.
- هندسة متقدمة: يستخدم نموذج Segment Anything أداة ترميز صور قوية، وأداة ترميز للمطالبات، وأداة فك ترميز أقنعة خفيفة الوزن. تتيح هذه الهندسة الفريدة مطالبات مرنة وحسابًا للأقنعة في الوقت الفعلي والوعي بالغموض في مهام التجزئة.
- مجموعة بيانات SA-1B: قدمها مشروع Segment Anything، وتتميز مجموعة بيانات SA-1B بأكثر من مليار قناع على 11 مليون صورة. باعتبارها أكبر مجموعة بيانات تجزئة حتى الآن، فإنها تزود SAM بمصدر بيانات تدريب متنوع وواسع النطاق.
- أداء بدون تدريب: يُظهر SAM أداءً متميزًا بدون تدريب عبر مهام تجزئة متنوعة، مما يجعله أداة جاهزة للاستخدام في تطبيقات متنوعة مع الحد الأدنى من الحاجة إلى هندسة المطالبات.
لإلقاء نظرة متعمقة على نموذج Segment Anything ومجموعة بيانات SA-1B، يرجى زيارة Segment Anything GitHub والتحقق من الورقة البحثية Segment Anything.
النماذج المتاحة والمهام المدعومة وأنماط التشغيل
يعرض هذا الجدول النماذج المتاحة مع أوزانها المدربة مسبقًا المحددة، والمهام التي تدعمها، وتوافقها مع أوضاع التشغيل المختلفة مثل الاستدلال، التحقق، التدريب، والتصدير، المشار إليها برموز ✅ للأوضاع المدعومة ورموز ❌ للأوضاع غير المدعومة.
| نوع النموذج | الأوزان المدربة مسبقًا | المهام المدعومة | الاستدلال | التحقق | التدريب | تصدير |
|---|---|---|---|---|---|---|
| SAM أساسي | sam_b.pt | تجزئة المثيل | ✅ | ❌ | ❌ | ❌ |
| SAM كبير | sam_l.pt | تجزئة المثيل | ✅ | ❌ | ❌ | ❌ |
كيفية استخدام SAM: تعدد الاستخدامات والقوة في تجزئة الصور
يمكن استخدام نموذج تقسيم أي شيء 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")
# Run inference with a SAM model
yolo predict model=sam_b.pt source=path/to/image.jpg
- المنطق هنا هو segment الصورة بأكملها إذا لم تمرر أي مطالبات (bboxes/نقاط/أقنعة).
مثال SAMPredictor
بهذه الطريقة يمكنك تعيين الصورة مرة واحدة وتشغيل استدلال المطالبات عدة مرات دون تشغيل ترميز الصور عدة مرات.
from ultralytics.models.sam import Predictor as SAMPredictor
# Create SAMPredictor
overrides = dict(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 = dict(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 في الأمثلة أعلاه هي النتائج كائنات تسمح بالوصول بسهولة إلى الأقنعة المتوقعة والصورة المصدر.
- المزيد من الوسائط الإضافية لـ
Segment everythingانظرPredictor/generateمرجع.
مقارنة SAM مقابل YOLO
نقارن هنا نموذج SAM من Meta بنماذج Ultralytics ، بما في ذلك YOLO26n-seg:
| النموذج | الحجم (ميجابايت) | المعلمات (M) | السرعة (وحدة المعالجة المركزية (CPU)) (بالمللي ثانية/صورة) |
|---|---|---|---|
| Meta SAM-b | 375 | 93.7 | 41703 |
| MobileSAM | 40.7 | 10.1 | 23802 |
| FastSAM-s مع العمود الفقري لـ YOLOv8 | 23.9 | 11.8 | 58.0 |
| Ultralytics YOLOv8n-seg | 7.1 (أصغر بمقدار 52.8 مرة) | 3.4 (أقل بـ 27.6 مرة) | 24.8 (أسرع بـ 1682 مرة) |
| Ultralytics YOLO11n-seg | 6.2 (أصغر بمقدار 60.5 مرة) | 2.9 (أقل بـ 32.3 مرة) | 24.3 (أسرع بـ 1716 مرة) |
| Ultralytics YOLO26n-seg | 6.7 (أصغر بـ 56.0 مرة) | 2.7 (أقل بـ 34.7 مرة) | 25.2 (أسرع بـ 1655 مرة) |
توضح هذه المقارنة الاختلافات الجوهرية في أحجام النماذج وسرعاتها بين SAM ونماذج YOLO . في حين SAM إمكانات تقسيم تلقائية فريدة، فإن YOLO ولا سيما YOLOv8n و YOLO11n-seg و YOLO26n-seg، أصغر حجماً بكثير وأسرع وأكثر كفاءة من الناحية الحسابية.
تم قياس SAM باستخدام PyTorch بينما تم قياس YOLO باستخدام ONNX . أُجريت الاختبارات على جهاز 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، تسمح للمستخدمين بإنشاء مجموعة بيانات تجزئة باستخدام نموذج detect مدرب مسبقًا. تمكن هذه الميزة من التعليق التوضيحي السريع والدقيق لعدد كبير من الصور، متجاوزة الحاجة إلى التسمية اليدوية المستهلكة للوقت.
إنشاء مجموعة بيانات التجزئة الخاصة بك باستخدام نموذج كشف
لترميز البيانات تلقائيًا باستخدام إطار عمل 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")
| الوسيطة | النوع | افتراضي | الوصف |
|---|---|---|---|
data | str | مطلوب | مسار الدليل الذي يحتوي على الصور المستهدفة للشرح أو التجزئة. |
det_model | str | 'yolo26x.pt' | مسار نموذج الكشف عن YOLO للكشف الأولي عن الكائنات. |
sam_model | str | 'sam_b.pt' | مسار نموذج SAM للتجزئة (يدعم نماذج SAM و SAM2 و MobileSAM). |
device | str | '' | جهاز الحساب (مثل، 'cuda:0'، 'cpu'، أو '' للكشف التلقائي عن الجهاز). |
conf | float | 0.25 | عتبة الثقة للكشف عن YOLO لتصفية الاكتشافات الضعيفة. |
iou | float | 0.45 | عتبة IoU لـ Non-Maximum Suppression لتصفية الصناديق المتداخلة. |
imgsz | int | 640 | حجم الإدخال لتغيير حجم الصور (يجب أن يكون من مضاعفات 32). |
max_det | int | 300 | الحد الأقصى لعدد الاكتشافات لكل صورة لتحقيق كفاءة الذاكرة. |
classes | list[int] | None | قائمة بمؤشرات الفئات المراد اكتشافها (على سبيل المثال، [0, 1] (للأشخاص والدراجات) . |
output_dir | str | None | حفظ الدليل التلقائي للتعليقات التوضيحية (افتراضيا './labels' بالنسبة لمسار البيانات). |
في auto_annotate تأخذ الدالة مسار صورك، مع وسائط اختيارية لتحديد نماذج detect و SAM segmentation المدربة مسبقًا، والجهاز الذي سيتم تشغيل النماذج عليه، ودليل الإخراج لحفظ النتائج المعنونة.
يمكن للتعليق التوضيحي التلقائي باستخدام النماذج المدربة مسبقًا أن يقلل بشكل كبير من الوقت والجهد المطلوبين لإنشاء مجموعات بيانات تجزئة عالية الجودة. هذه الميزة مفيدة بشكل خاص للباحثين والمطورين الذين يتعاملون مع مجموعات كبيرة من الصور، حيث تسمح لهم بالتركيز على تطوير النموذج وتقييمه بدلاً من التعليق التوضيحي اليدوي.
الاقتباسات والإقرارات
إذا وجدت 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 لإنشاء وصيانة هذا المورد القيم لمجتمع رؤية الكمبيوتر.
الأسئلة الشائعة
ما هو نموذج تجزئة أي شيء (SAM) من Ultralytics؟
إن نموذج تقسيم أي شيء (SAM) من Ultralytics هو نموذج تقسيم صور ثوري مصمم لمهام التقسيم القابلة للإرشاد. إنه يستفيد من بنية متقدمة، بما في ذلك ترميز الصور والمطالبات جنبًا إلى جنب مع وحدة فك ترميز قناع خفيفة الوزن، لإنشاء أقنعة تقسيم عالية الجودة من المطالبات المختلفة مثل الإشارات المكانية أو النصية. تم تدريب SAM على مجموعة بيانات SA-1B الواسعة، وهو يتفوق في أداء التصوير الصفري، ويتكيف مع توزيعات ومهام الصور الجديدة دون معرفة مسبقة.
كيف يمكنني استخدام نموذج تجزئة كل شيء (SAM) لتجزئة الصور؟
يمكنك استخدام نموذج تقسيم أي شيء (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
للحصول على إرشادات استخدام أكثر تفصيلاً، قم بزيارة قسم التجزئة.
كيف تتم مقارنة نماذج SAM و YOLO من حيث الأداء؟
بالمقارنة مع YOLO فإن SAM مثل SAM MobileSAM FastSAM عادةً ما تكون أكبر حجماً وأبطأ في الأداء، لكنها توفر قدرات فريدة للتجزئة بدون تدريب مسبق. على سبيل المثال، يعد YOLO26n-seg أصغر بـ 56 مرة وأسرع بأكثر من 1650 مرة من نموذج SAM الأصلي من Meta على CPU. وهذا يجعل YOLO مثالية للتطبيقات التي تتطلب تجزئة سريعة وخفيفة الوزن وفعالة حسابيًا، بينما تتفوق SAM في مهام التجزئة المرنة والسريعة والتي لا تتطلب تدريبًا مسبقًا.
كيف يمكنني إضافة تعليقات توضيحية تلقائية إلى مجموعة البيانات الخاصة بي باستخدام SAM؟
تقدم SAM من Ultralytics ميزة التعليق التوضيحي التلقائي التي تسمح بإنشاء مجموعات بيانات تجزئة باستخدام نموذج detect مدرب مسبقًا. إليك مثال في python:
from ultralytics.data.annotator import auto_annotate
auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="sam_b.pt")
تأخذ هذه الدالة مسار صورك والوسائط الاختيارية لنماذج detect و SAM segmentation المدربة مسبقًا، بالإضافة إلى مواصفات الجهاز ودليل الإخراج. للحصول على دليل كامل، راجع التعليق التوضيحي التلقائي.
ما هي مجموعات البيانات المستخدمة لتدريب نموذج تقسيم كل شيء (SAM)؟
تم تدريب SAM على مجموعة بيانات SA-1B الشاملة التي تتكون من أكثر من مليار قناع عبر 11 مليون صورة. SA-1B هي أكبر مجموعة بيانات تجزئة حتى الآن، حيث توفر بيانات تدريب عالية الجودة ومتنوعة، مما يضمن أداءً رائعًا بدون تدريب في مهام التجزئة المتنوعة. لمزيد من التفاصيل، قم بزيارة قسم مجموعة البيانات.