نموذج تقطيع أي شيء (SAM)
مرحباً بك في طليعة تقطيع الصور مع نموذج تقطيع أي شيء، أو SAM. لقد غير هذا النموذج الثوري قواعد اللعبة من خلال تقديم تقطيع صور قابل للتوجيه بأداء فوري، مما يضع معايير جديدة في هذا المجال.
مقدمة إلى SAM: نموذج تقطيع أي شيء
يعد نموذج تقطيع أي شيء، أو SAM، نموذجاً متطوراً لتقطيع الصور يسمح بالتقطيع القابل للتوجيه، مما يوفر تنوعاً لا مثيل له في مهام تحليل الصور. يشكل SAM جوهر مبادرة Segment Anything، وهو مشروع رائد يقدم نموذجاً ومهمة ومجموعة بيانات جديدة لتقطيع الصور.
يسمح تصميم SAM المتقدم له بالتكيف مع توزيعات الصور والمهام الجديدة دون معرفة مسبقة، وهي ميزة تعرف باسم النقل بدون تدريب مسبق (zero-shot transfer). تم تدريب SAM على مجموعة البيانات الضخمة SA-1B، والتي تحتوي على أكثر من مليار قناع موزعة على 11 مليون صورة مصنفة بعناية، وقد أظهر SAM أداءً مبهراً في مهام zero-shot، متجاوزاً النتائج السابقة التي تعتمد على الإشراف الكامل في العديد من الحالات.
صور مثال SA-1B. صور مجموعة البيانات مع أقنعة متراكبة من مجموعة بيانات SA-1B التي تم طرحها حديثاً. تحتوي SA-1B على 11 مليون صورة متنوعة وعالية الدقة ومرخصة ومحمية للخصوصية و1.1 مليار قناع تقطيع عالي الجودة. تم توثيق هذه الأقنعة تلقائياً بالكامل بواسطة SAM، وكما تم التحقق منه من خلال تقييمات بشرية وتجارب عديدة، فهي ذات جودة وتنوع عاليين. تم تجميع الصور حسب عدد الأقنعة لكل صورة من أجل التصور (هناك حوالي 100 قناع لكل صورة في المتوسط).
الميزات الرئيسية لنموذج تقطيع أي شيء (SAM)
- مهمة التقطيع القابلة للتوجيه: تم تصميم SAM مع وضع مهمة التقطيع القابلة للتوجيه في الاعتبار، مما يسمح له بإنشاء أقنعة تقطيع صالحة من أي مطالبة معينة، مثل التلميحات المكانية أو النصية التي تحدد كائناً ما.
- بنية متطورة: يستخدم نموذج تقطيع أي شيء مشفراً قوياً للصور، ومشفراً للمطالبات، وفك تشفير قناع خفيف الوزن. تمكن هذه البنية الفريدة من التوجيه المرن، وحساب الأقنعة في الوقت الفعلي، والوعي بالغموض في مهام التقطيع.
- مجموعة بيانات SA-1B: تم تقديمها بواسطة مشروع Segment Anything، وتتميز مجموعة بيانات SA-1B بأكثر من مليار قناع على 11 مليون صورة. باعتبارها أكبر مجموعة بيانات تقطيع حتى الآن، فهي توفر لـ SAM مصدراً متنوعاً وضخماً لبيانات التدريب.
- أداء Zero-Shot: يظهر SAM أداءً متميزاً في مهام zero-shot عبر مهام التقطيع المختلفة، مما يجعله أداة جاهزة للاستخدام للتطبيقات المتنوعة مع الحد الأدنى من الحاجة إلى هندسة المطالبات.
للحصول على نظرة متعمقة على نموذج تقطيع أي شيء ومجموعة بيانات SA-1B، يرجى زيارة Segment Anything على GitHub والاطلاع على الورقة البحثية Segment Anything.
يدعم SAM ميزة التوثيق الذكي على منصة Ultralytics، مما يتيح التغطية الذكية القائمة على النقرات لترميز مجموعة البيانات بسرعة. راجع دليل التوثيق للحصول على التفاصيل.
النماذج المتاحة والمهام المدعومة وأنماط التشغيل
يعرض هذا الجدول النماذج المتاحة مع أوزانها المدربة مسبقاً، والمهام التي تدعمها، وتوافقها مع أنماط التشغيل المختلفة مثل الاستنتاج، والتحقق، والتدريب، والتصدير، والتي يشار إليها برمز ✅ للأنماط المدعومة ورمز ❌ للأنماط غير المدعومة.
| نوع النموذج | الأوزان المدربة مسبقاً | المهام المدعومة | الاستدلال | التحقق | التدريب | تصدير |
|---|---|---|---|---|---|---|
| SAM base | sam_b.pt | تجزئة المثيلات | ✅ | ❌ | ❌ | ❌ |
| SAM large | sam_l.pt | تجزئة المثيلات | ✅ | ❌ | ❌ | ❌ |
كيفية استخدام SAM: التنوع والقوة في تقطيع الصور
يمكن استخدام نموذج تقطيع أي شيء للعديد من المهام النهائية التي تتجاوز بيانات تدريبه. يتضمن ذلك كشف الحواف، وتوليد مقترحات الكائنات، وتقطيع المثيلات، والتنبؤ الأولي من النص إلى القناع. باستخدام هندسة المطالبات، يمكن لـ 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")- المنطق هنا هو تقطيع الصورة بأكملها إذا لم تقم بتمرير أي مطالبات (صناديق إحاطة/نقاط/أقنعة).
بهذه الطريقة يمكنك تعيين الصورة مرة واحدة وتشغيل استنتاج المطالبات عدة مرات دون تشغيل مشفر الصور عدة مرات.
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 المعادة في الأمثلة أعلاه هي كائنات Results والتي تتيح الوصول إلى الأقنعة المتوقعة والصورة الأصلية بسهولة.
- لمزيد من الوسائط الإضافية لـ
Segment everythingراجع مرجعPredictor/generate.
مقارنة SAM مقابل YOLO
هنا نقارن نموذج SAM-b الخاص بـ Meta مع نماذج تقطيع Ultralytics بما في ذلك YOLO26n-seg:
| النموذج | الحجم (MB) | المعلمات (M) | السرعة (CPU) (ms/im) |
|---|---|---|---|
| Meta SAM-b | 375 | 93.7 | 41703 |
| MobileSAM | 40.7 | 10.1 | 23802 |
| FastSAM-s مع backbone 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-seg وYOLO11n-seg وYOLO26n-seg، أصغر بكثير وأسرع وأكثر كفاءة من الناحية الحسابية.
تم قياس سرعات SAM باستخدام PyTorch، وسرعات YOLO باستخدام ONNX Runtime. أجريت الاختبارات على جهاز Apple M4 Air لعام 2025 بذاكرة وصول عشوائي 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")| المعامل | النوع | الافتراضي | الوصف |
|---|---|---|---|
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 المسار إلى صورك، مع وسائط اختيارية لتحديد نماذج الكشف المدربة مسبقاً وتقطيع 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، ويتفوق في أداء zero-shot، حيث يتكيف مع توزيعات الصور والمهام الجديدة دون معرفة مسبقة.
كيف يمكنني استخدام نموذج تقطيع أي شيء (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 وMobileSAM وFastSAM-s عادةً أكبر وأبطأ ولكنها توفر قدرات تقطيع zero-shot فريدة. على سبيل المثال، يعد YOLO26n-seg أصغر بـ 56 مرة وأسرع بأكثر من 1650 مرة من نموذج SAM-b الأصلي الخاص بـ Meta على CPU. هذا يجعل نماذج YOLO مثالية للتطبيقات التي تتطلب تقطيعاً سريعاً وخفيف الوزن وفعالاً حسابياً، بينما تتفوق نماذج SAM في مهام التقطيع المرنة والقابلة للتوجيه وzero-shot.
كيف يمكنني ترميز مجموعة البيانات الخاصة بي تلقائياً باستخدام 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، إلى جانب مواصفات الجهاز ودليل المخرجات. للحصول على دليل كامل، راجع Auto-Annotation.
ما هي مجموعات البيانات المستخدمة لتدريب Segment Anything Model (SAM)؟
تم تدريب SAM على مجموعة بيانات SA-1B dataset الضخمة التي تتضمن أكثر من مليار قناع عبر 11 مليون صورة. تُعد SA-1B أكبر مجموعة بيانات للتجزئة حتى الآن، حيث توفر بيانات تدريب عالية الجودة ومتنوعة، مما يضمن أداءً مذهلاً في مهام التجزئة المتنوعة عبر التعلم بدون أمثلة (zero-shot). لمزيد من التفاصيل، تفضل بزيارة قسم مجموعة البيانات.