نموذج تقسيم أي شيء (SAM)#
مرحبًا بكم في طليعة تقسيم الصور باستخدام نموذج تقسيم أي شيء، أو SAM. غيّر هذا النموذج الثوري قواعد اللعبة من خلال تقديم تقسيم الصور القابل للتوجيه في الوقت الفعلي، واضعًا معايير جديدة في هذا المجال.
مقدمة إلى SAM: نموذج تقسيم أي شيء#
نموذج تقسيم أي شيء، أو SAM، هو نموذج متطور لتقسيم الصور يتيح التقسيم القابل للتوجيه، ويوفر مرونة لا مثيل لها في مهام تحليل الصور. ويشكّل SAM جوهر مبادرة تقسيم أي شيء، وهي مشروع رائد يقدم نموذجًا ومهمة ومجموعة بيانات مبتكرة لتقسيم الصور.
يتيح التصميم المتقدم لـ SAM التكيّف مع توزيعات صور ومهام جديدة دون معرفة مسبقة، وهي ميزة تُعرف باسم النقل دون تدريب مسبق. وقد دُرّب SAM على مجموعة بيانات SA-1B الواسعة، التي تضم أكثر من مليار قناع موزعة على 11 مليون صورة منتقاة بعناية، وأظهر أداءً مذهلًا دون تدريب مسبق، متجاوزًا النتائج السابقة للتدريب المُراقب بالكامل في حالات كثيرة.
صور نموذجية من SA-1B. أقنعة متراكبة على صور مجموعة البيانات المستحدثة SA-1B. تضم SA-1B عدد 11M من الصور المتنوعة وعالية الدقة والمرخّصة والحافظة للخصوصية، و1.1B من أقنعة التقسيم عالية الجودة. أُنشئت هذه الأقنعة تلقائيًا بالكامل بواسطة SAM، وتتميز بجودة عالية وتنوع كبير، وفقًا لما أكدته تقييمات بشرية وتجارب عديدة. جُمّعت الصور حسب عدد الأقنعة في كل صورة لتسهيل العرض (يبلغ المتوسط نحو 100 قناع لكل صورة).
الميزات الرئيسية لنموذج تقسيم أي شيء (SAM)#
- مهمة التقسيم القابل للتوجيه: صُمم SAM مع وضع مهمة التقسيم القابل للتوجيه في الاعتبار، ما يتيح له إنشاء أقنعة تقسيم صالحة انطلاقًا من أي مطالبة، مثل الإشارات المكانية أو النصية التي تحدد كائنًا.
- بنية متقدمة: يستخدم نموذج تقسيم أي شيء مُرمّزًا قويًا للصور، ومُرمّزًا للمطالبات، وفكّاك أقنعة خفيفًا. تتيح هذه البنية الفريدة تقديم مطالبات مرنة، وحساب الأقنعة في الوقت الفعلي، ومراعاة الالتباس في مهام التقسيم.
- مجموعة بيانات SA-1B: قدّمها مشروع تقسيم أي شيء، وتضم مجموعة بيانات SA-1B أكثر من مليار قناع ضمن 11 مليون صورة. وبصفتها أكبر مجموعة بيانات للتقسيم حتى الآن، فإنها توفر لـ SAM مصدرًا متنوعًا واسع النطاق لبيانات التدريب.
- الأداء دون تدريب مسبق: يُظهر SAM أداءً متميزًا دون تدريب مسبق عبر مهام تقسيم متنوعة، ما يجعله أداة جاهزة للاستخدام في تطبيقات متعددة مع حاجة محدودة إلى هندسة المطالبات.
للاطلاع المتعمق على نموذج تقسيم أي شيء ومجموعة بيانات SA-1B، يُرجى زيارة مستودع Segment Anything على GitHub والاطلاع على الورقة البحثية Segment Anything.
يشغّل SAM ميزة التعليق التوضيحي الذكي على منصة Ultralytics، ما يتيح إنشاء أقنعة ذكية بالنقر لتسريع وسم مجموعات البيانات. راجع دليل التعليق التوضيحي للاطلاع على التفاصيل.
النماذج المتاحة والمهام المدعومة وأوضاع التشغيل#
يعرض هذا الجدول النماذج المتاحة وأوزانها المحددة المدربة مسبقًا والمهام التي تدعمها، ومدى توافقها مع أوضاع التشغيل المختلفة مثل الاستدلال والتحقق والتدريب والتصدير، ويُشار إلى الأوضاع المدعومة بالرمز ✅ وغير المدعومة بالرمز ❌.
| نوع النموذج | الأوزان المدرّبة مسبقاً | المهام المدعومة | التدريب | التحقق | الاستدلال | التصدير |
|---|---|---|---|---|---|---|
| SAM الأساسي | sam_b.pt | تجزئة الكائنات | ❌ | ❌ | ✅ | ❌ |
| SAM كبير | sam_l.pt | تجزئة الكائنات | ❌ | ❌ | ✅ | ❌ |
كيفية استخدام SAM: المرونة والقوة في تقسيم الصور#
يمكن استخدام نموذج تقسيم أي شيء في العديد من المهام اللاحقة التي تتجاوز بيانات التدريب الخاصة به. وتشمل هذه المهام اكتشاف الحواف، وإنشاء مقترحات الكائنات، وتقسيم المثيلات، والتنبؤ الأولي بالأقنعة انطلاقًا من النصوص. وباستخدام هندسة المطالبات، يستطيع SAM التكيّف بسرعة مع المهام وتوزيعات البيانات الجديدة دون تدريب مسبق، ما يجعله أداة مرنة وقوية تلبي جميع احتياجاتك في تقسيم الصور.
مثال على التنبؤ باستخدام SAM#
قسّم الصورة باستخدام المطالبات المعطاة.
from ultralytics import SAM
# تحميل نموذج
model = SAM("sam_b.pt")
# عرض معلومات النموذج (اختياري)
model.info()
# تنفيذ الاستدلال باستخدام مطالبة المربعات المحيطة
results = model("ultralytics/assets/zidane.jpg", bboxes=[439, 437, 524, 709])
# تنفيذ الاستدلال باستخدام نقطة واحدة
results = model(points=[900, 370], labels=[1])
# تنفيذ الاستدلال باستخدام نقاط متعددة
results = model(points=[[400, 370], [900, 370]], labels=[1, 1])
# تنفيذ الاستدلال باستخدام مطالبة نقاط متعددة لكل كائن
results = model(points=[[[400, 370], [900, 370]]], labels=[[1, 1]])
# تنفيذ الاستدلال باستخدام مطالبة نقاط سلبية
results = model(points=[[[400, 370], [900, 370]]], labels=[[1, 0]])قسّم الصورة بالكامل.
from ultralytics import SAM
# تحميل نموذج
model = SAM("sam_b.pt")
# عرض معلومات النموذج (اختياري)
model.info()
# تنفيذ الاستدلال
model("path/to/image.jpg")- المنطق هنا هو تقسيم الصورة بالكامل إذا لم تمرر أي مطالبات (مربعات إحاطة/نقاط/أقنعة).
بهذه الطريقة، يمكنك تعيين الصورة مرة واحدة وتشغيل الاستدلال باستخدام المطالبات عدة مرات دون تشغيل مُرمّز الصور في كل مرة.
import cv2
from ultralytics.models.sam import Predictor as SAMPredictor
# إنشاء SAMPredictor
overrides = {"conf": 0.25, "task": "segment", "mode": "predict", "imgsz": 1024, "model": "mobile_sam.pt"}
predictor = SAMPredictor(overrides=overrides)
# تعيين الصورة
predictor.set_image("ultralytics/assets/zidane.jpg") # التعيين باستخدام ملف صورة
predictor.set_image(cv2.imread("ultralytics/assets/zidane.jpg")) # التعيين باستخدام np.ndarray
results = predictor(bboxes=[439, 437, 524, 709])
# تشغيل الاستدلال باستخدام مطالبة نقطة واحدة
results = predictor(points=[900, 370], labels=[1])
# تشغيل الاستدلال باستخدام مطالبة نقاط متعددة
results = predictor(points=[[400, 370], [900, 370]], labels=[1, 1])
# تنفيذ الاستدلال باستخدام مطالبة نقاط سلبية
results = predictor(points=[[[400, 370], [900, 370]]], labels=[[1, 0]])
# إعادة تعيين الصورة
predictor.reset_image()قسّم كل شيء باستخدام وسيطات إضافية.
from ultralytics.models.sam import Predictor as SAMPredictor
# إنشاء SAMPredictor
overrides = {"conf": 0.25, "task": "segment", "mode": "predict", "imgsz": 1024, "model": "mobile_sam.pt"}
predictor = SAMPredictor(overrides=overrides)
# التقسيم باستخدام وسيطات إضافية
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:
| النموذج | الحجم (MB) | المعلمات (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.8x) | 3.4 (أقل بمقدار 27.6x) | 24.8 (أسرع بمقدار 1682x) |
| Ultralytics YOLO11n-seg | 6.2 (أصغر بمقدار 60.5x) | 2.9 (أقل بمقدار 32.3x) | 24.3 (أسرع بمقدار 1716x) |
| Ultralytics YOLO26n-seg | 6.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 سعتها 16GB باستخدام torch==2.10.0 وultralytics==8.4.31 وonnxruntime==1.24.4. لإعادة إجراء هذا الاختبار:
from ultralytics import ASSETS, SAM, YOLO, FastSAM
# تحليل أداء SAM-b وMobileSAM
for file in ["sam_b.pt", "mobile_sam.pt"]:
model = SAM(file)
model.info()
model(ASSETS)
# أنشئ ملفًا تعريفيًا لـ FastSAM-s
model = FastSAM("FastSAM-s.pt")
model.info()
model(ASSETS)
# تحليل أداء نماذج YOLO (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) # رأس NMS-free في YOLO26؛ لا إجراء لـ 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")| المعامل | النوع | الافتراضي | الوصف |
|---|---|---|---|
data | str | مطلوب | مسار الدليل الذي يحتوي على الصور المستهدفة المراد وسمها أو تجزئتها. |
det_model | str | 'yolo26x.pt' | مسار نموذج كشف YOLO لإجراء الكشف الأولي عن الكائنات. |
sam_model | str | 'sam_b.pt' | مسار نموذج SAM لإجراء التجزئة (يدعم أوزان SAM وSAM 2 وMobileSAM وSAM 3). |
device | str | '' | جهاز الحوسبة (مثل 'cuda:0' أو 'cpu' أو '' للكشف التلقائي عن الجهاز). |
conf | float | 0.25 | عتبة الثقة لكشف YOLO لتصفية الكشوفات ضعيفة الثقة. |
iou | float | 0.45 | عتبة IoU لكبت غير الأقصى لتصفية المربعات المتداخلة. |
imgsz | int | 640 | حجم الإدخال لتغيير أبعاد الصور (يُقرّب إلى أقرب مضاعف للعدد 32 عند الحاجة). |
max_det | int | 300 | الحد الأقصى لعدد الكشوفات لكل صورة لترشيد استخدام الذاكرة. |
classes | list[int] | None | قائمة بمؤشرات الفئات المراد كشفها (مثل [0, 1] للشخص والدراجة). |
output_dir | str | None | دليل حفظ الوسوم (الافتراضي: الدليل الشقيق <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 لإنشاء هذا المورد القيّم والحفاظ عليه لصالح مجتمع الرؤية الحاسوبية.
الأسئلة الشائعة#
نموذج تقسيم أي شيء (SAM) من Meta هو نموذج ثوري لتقسيم الصور، صُمم لمهام التقسيم القابل للتوجيه. ويستفيد من بنية متقدمة تضم مُرمّزات للصور والمطالبات، إلى جانب فكّاك أقنعة خفيف، لإنشاء أقنعة تقسيم عالية الجودة استنادًا إلى مطالبات متنوعة مثل الإشارات المكانية أو النصية. وقد دُرّب SAM على مجموعة بيانات SA-1B الواسعة، ويتفوق في الأداء دون تدريب مسبق، إذ يتكيّف مع توزيعات الصور والمهام الجديدة دون معرفة مسبقة.
يمكنك استخدام نموذج تقسيم أي شيء (SAM) لتقسيم الصور عن طريق تشغيل الاستدلال باستخدام مطالبات متنوعة، مثل مربعات الإحاطة أو النقاط. إليك مثالًا باستخدام Python:
from ultralytics import SAM # تحميل نموذج model = SAM("sam_b.pt") # التجزئة باستخدام مطالبة مربع إحاطة model("ultralytics/assets/zidane.jpg", bboxes=[439, 437, 524, 709]) # التقسيم باستخدام مطالبة نقاط model("ultralytics/assets/zidane.jpg", points=[900, 370], labels=[1]) # التقسيم باستخدام مطالبة نقاط متعددة model("ultralytics/assets/zidane.jpg", points=[[400, 370], [900, 370]], labels=[1, 1]) # التقسيم باستخدام مطالبة نقاط متعددة لكل كائن model("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 1]]) # التقسيم باستخدام مطالبة نقاط سلبية. 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 أصغر بمقدار 56x وأسرع بأكثر من 1650x من نموذج 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 أكبر مجموعة بيانات للتقسيم حتى الآن، إذ توفر بيانات تدريب عالية الجودة ومتنوعة، ما يضمن أداءً مذهلًا دون تدريب مسبق في مهام التقسيم المتنوعة. لمزيد من التفاصيل، تفضل بزيارة قسم مجموعات البيانات.