نموذج تقسيم أي شيء (SAM)
مرحبًا بك في طليعة تجزئة الصور مع نموذج تجزئة أي شيء، أو 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 على الويب والاطلاع على ورقة البحث 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
- المنطق هنا هو تقسيم الصورة بأكملها إذا لم تمرر أي مطالبات (مربعات محيطة/نقاط/أقنعة).
مثال 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-b الخاص بـ Meta مع أصغر نموذج تجزئة لـ Ultralytics، YOLO11n-seg:
النموذج | الحجم (ميجابايت) |
المعلمات (M) |
السرعة (وحدة المعالجة المركزية (CPU)) (بالمللي ثانية/صورة) |
---|---|---|---|
Meta SAM-b | 375 | 93.7 | 49401 |
MobileSAM | 40.7 | 10.1 | 25381 |
FastSAM-s مع العمود الفقري لـ YOLOv8 | 23.7 | 11.8 | 55.9 |
Ultralytics YOLOv8n-seg | 6.7 (أصغر بـ 11.7 مرة) | 3.4 (أقل بـ 11.4 مرة) | 24.5 (أسرع بـ 1061 مرة) |
Ultralytics YOLO11n-seg | 5.9 (أصغر بـ 13.2 مرة) | 2.9 (أقل بـ 13.4 مرة) | 30.1 (أسرع بـ 864 مرة) |
توضح هذه المقارنة الاختلافات الكبيرة في أحجام النماذج وسرعاتها بين متغيرات SAM ونماذج تجزئة YOLO. بينما يوفر SAM قدرات تجزئة تلقائية فريدة، فإن نماذج YOLO، وخاصة YOLOv8n-seg و YOLO11n-seg، أصغر وأسرع وأكثر كفاءة من الناحية الحسابية.
يتم تشغيل الاختبارات على جهاز 2025 Apple M4 Pro بذاكرة وصول عشوائي (RAM) سعة 24 جيجابايت باستخدام torch==2.6.0
و ultralytics==8.3.90
. لإعادة إنتاج هذا الاختبار:
مثال
from ultralytics import ASSETS, SAM, YOLO, FastSAM
# Profile SAM2-t, SAM2-b, SAM-b, MobileSAM
for file in ["sam_b.pt", "sam2_b.pt", "sam2_t.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
for file_name in ["yolov8n-seg.pt", "yolo11n-seg.pt"]:
model = YOLO(file_name)
model.info()
model(ASSETS)
الترميز التلقائي: طريق سريع إلى مجموعات بيانات التجزئة
الترميز التلقائي هو ميزة رئيسية في SAM، مما يسمح للمستخدمين بإنشاء مجموعة بيانات تجزئة باستخدام نموذج كشف مدرب مسبقًا. تتيح هذه الميزة ترميزًا سريعًا ودقيقًا لعدد كبير من الصور، متجاوزةً الحاجة إلى الترميز اليدوي الذي يستغرق وقتًا طويلاً.
إنشاء مجموعة بيانات التجزئة الخاصة بك باستخدام نموذج كشف
لترميز البيانات تلقائيًا باستخدام إطار عمل Ultralytics، استخدم auto_annotate
الدالة كما هو موضح أدناه:
مثال
from ultralytics.data.annotator import auto_annotate
auto_annotate(data="path/to/images", det_model="yolo11x.pt", sam_model="sam_b.pt")
الوسيطة | النوع | افتراضي | الوصف |
---|---|---|---|
data |
str |
مطلوب | مسار الدليل الذي يحتوي على الصور المستهدفة للشرح أو التجزئة. |
det_model |
str |
'yolo11x.pt' |
مسار نموذج الكشف عن YOLO للكشف الأولي عن الكائنات. |
sam_model |
str |
'sam_b.pt' |
مسار نموذج SAM للتجزئة (يدعم متغيرات SAM و SAM2 ونماذج mobile_sam). |
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
تأخذ الدالة المسار إلى صورك، مع وسيطات اختيارية لتحديد نماذج الكشف والتجزئة 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 لإنشاء وصيانة هذا المورد القيم لمجتمع رؤية الكمبيوتر.
الأسئلة الشائعة
ما هو نموذج تجزئة أي شيء (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-b و SAM2-t و MobileSAM و FastSAM-s تكون عادةً أكبر وأبطأ ولكنها توفر إمكانات تجزئة فريدة من نوعها بدون تدريب مسبق. على سبيل المثال، Ultralytics YOLOv8n-seg أصغر بمقدار 11.7 مرة وأسرع بمقدار 1069 مرة من نموذج SAM-b الأصلي من Meta، مما يسلط الضوء على الميزة الكبيرة التي تتمتع بها YOLO في السرعة والكفاءة. وبالمثل، يوفر YOLO11n-seg الأحدث حجمًا أصغر ويحافظ على سرعة استدلال رائعة. وهذا يجعل نماذج YOLO مثالية للتطبيقات التي تتطلب تجزئة سريعة وخفيفة الوزن وفعالة من حيث الحوسبة، في حين تتفوق نماذج SAM في مهام التجزئة المرنة والقابلة للتوجيه والتي لا تتطلب تدريبًا مسبقًا.
كيف يمكنني إضافة تعليقات توضيحية تلقائية إلى مجموعة البيانات الخاصة بي باستخدام SAM؟
توفر أداة SAM من Ultralytics ميزة التعليق التلقائي التي تتيح إنشاء مجموعات بيانات تجزئة باستخدام نموذج كشف مدرب مسبقًا. إليك مثال في Python:
from ultralytics.data.annotator import auto_annotate
auto_annotate(data="path/to/images", det_model="yolov8x.pt", sam_model="sam_b.pt")
تأخذ هذه الوظيفة المسار إلى صورك والوسائط الاختيارية لنماذج الكشف والتقسيم المدربة مسبقًا SAM، جنبًا إلى جنب مع مواصفات الجهاز ودليل الإخراج. للحصول على دليل كامل، راجع التعليق التلقائي.
ما هي مجموعات البيانات المستخدمة لتدريب نموذج تقسيم كل شيء (SAM)؟
تم تدريب SAM على مجموعة بيانات SA-1B الشاملة التي تتكون من أكثر من مليار قناع عبر 11 مليون صورة. SA-1B هي أكبر مجموعة بيانات تجزئة حتى الآن، حيث توفر بيانات تدريب عالية الجودة ومتنوعة، مما يضمن أداءً رائعًا بدون تدريب في مهام التجزئة المتنوعة. لمزيد من التفاصيل، قم بزيارة قسم مجموعة البيانات.