نموذج قطاع أي شيء (SAM)
مرحبًا بك في حدود تجزئة الصور مع نموذج Segment Anything Model، أو SAM. لقد غيّر هذا النموذج الثوري اللعبة من خلال تقديم تجزئة الصور القابلة للتجزئة الفورية بأداء في الوقت الفعلي، ووضع معايير جديدة في هذا المجال.
مقدمة إلى SAM: نموذج قطاع أي شيء
نموذج Segment Anything Model، أو SAM ، هو نموذج متطور لتجزئة الصور يسمح بالتجزئة القابلة للتجزئة الفورية، مما يوفر تنوعًا لا مثيل له في مهام تحليل الصور. SAM يشكل قلب مبادرة Segment Anything، وهو مشروع رائد يقدم نموذجًا جديدًا ومهمة ومجموعة بيانات جديدة لتجزئة الصور.
SAMيسمح التصميم المتطور للبرنامج بالتكيف مع توزيعات الصور والمهام الجديدة دون معرفة مسبقة، وهي ميزة تُعرف باسم النقل بدون لقطات. تم تدريبها على مجموعة بيانات SA-1B الموسعة التي تحتوي على أكثر من مليار قناع موزعة على 11 مليون صورة منسقة بعناية، وقد أظهر SAM أداءً مذهلاً بدون لقطة، متجاوزاً النتائج السابقة الخاضعة للإشراف الكامل في العديد من الحالات.
مثال على الصور SA-1B. صور مجموعة البيانات أقنعة متراكبة من مجموعة بيانات SA-1B التي تم تقديمها حديثاً. تحتوي مجموعة بيانات SA-1B على 11 مليون صورة متنوعة وعالية الدقة ومرخصة ومرخصة وتحمي الخصوصية و1.1 مليار قناع تجزئة عالي الجودة. تم تصنيف هذه الأقنعة تلقائيًا بشكل كامل من خلال SAM ، وكما تم التحقق منها من خلال التقييمات البشرية والعديد من التجارب، فهي ذات جودة وتنوع كبيرين. يتم تجميع الصور حسب عدد الأقنعة لكل صورة من أجل التصور (يوجد ∼100 قناع لكل صورة في المتوسط).
الميزات الرئيسية لنموذج أي شيء قطاعي (SAM)
- مهمة التجزئة القابلة للتجزئة القابلة للتوجيه: تم تصميم SAM مع وضع مهمة التجزئة القابلة للتوجيه في الاعتبار، مما يسمح لها بإنشاء أقنعة تجزئة صالحة من أي توجيه معين، مثل القرائن المكانية أو النصية التي تحدد كائنًا ما.
- بنية متقدمة: يستخدم نموذج تجزئة أي شيء أداة تشفير قوية للصور، وأداة تشفير موجهة، وأداة فك تشفير قناع خفيفة الوزن. تتيح هذه البنية الفريدة من نوعها إمكانية المطالبة المرنة، وحساب القناع في الوقت الحقيقي، والوعي بالغموض في مهام التجزئة.
- مجموعة بيانات SA-1B: تتميز مجموعة بيانات SA-1B، التي قدمها مشروع Segment Anything، بأكثر من مليار قناع على 11 مليون صورة. وباعتبارها أكبر مجموعة بيانات تجزئة حتى الآن، فإنها توفر SAM مصدر بيانات تدريب متنوع وواسع النطاق.
- أداء اللقطة الصفرية: SAM يُظهر أداءً متميزًا في اللقطة الصفرية في مختلف مهام التجزئة، مما يجعله أداة جاهزة للاستخدام في تطبيقات متنوعة بأقل قدر من الحاجة إلى هندسة سريعة.
للاطلاع على نظرة متعمقة على نموذج Segment Anything ومجموعة بيانات SA-1B، يُرجى زيارة موقع Segment Anything الإلكتروني والاطلاع على الورقة البحثية Segment Anything.
النماذج المتوفرة والمهام المدعومة وأوضاع التشغيل
يعرض هذا الجدول النماذج المتاحة مع أوزانها المحددة المدربة مسبقًا والمهام التي تدعمها وتوافقها مع أوضاع التشغيل المختلفة مثل الاستدلال والتحقق من الصحة والتدريب والتصدير، ويُشار إليها بـ ✅ رموز تعبيرية للأوضاع المدعومة و❌ رموز تعبيرية للأوضاع غير المدعومة.
نوع الموديل | الأوزان المدربة مسبقاً | المهام المدعومة | الاستدلال | التحقق من الصحة | التدريب | التصدير |
---|---|---|---|---|---|---|
SAM القاعدة | sam_b.pt | تجزئة المثيل | ✅ | ❌ | ❌ | ❌ |
SAM كبير | sam_l.pt | تجزئة المثيل | ✅ | ❌ | ❌ | ❌ |
كيفية الاستخدام SAM: تعدد الاستخدامات والقوة في تجزئة الصور
يمكن استخدام نموذج Segment Anything Model في العديد من المهام النهائية التي تتجاوز بيانات التدريب الخاصة به. ويشمل ذلك اكتشاف الحواف وتوليد مقترحات الكائنات وتجزئة النماذج والتنبؤ الأولي للنص إلى قناع. وبفضل الهندسة السريعة، يمكن لـ 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]])
تقسيم كل شيء
قم بتجزئة الصورة بأكملها.
- المنطق هنا هو تجزئة الصورة بأكملها إذا لم تمرر أي مطالبات (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 المقارنة مقابل YOLOv8
نقارن هنا بين نموذج ميتا الأصغر SAM ، SAM-b، ونموذج التجزئة الأصغر Ultralytics YOLOv8n -seg:
الطراز | الحجم (ميغابايت) |
المعلمات (م) |
السرعة (CPU) (م/م) (م/م) |
---|---|---|---|
ميتا SAM-ب | 358 | 94.7 | 51096 |
MobileSAM | 40.7 | 10.1 | 46122 |
FastSAM-s مع YOLOv8 العمود الفقري | 23.7 | 11.8 | 115 |
Ultralytics YOLOv8n-سيج | 6.7 (أصغر ب 6.7 (53.4 مرة) | 3.4 (27.9 مرة أقل) | 59 (866 ضعفًا أسرع) |
توضح هذه المقارنة الفروق الكبيرة في أحجام النماذج والسرعات بين النماذج. في حين أن SAM يقدم قدرات فريدة للتجزئة التلقائية، فإنه ليس منافسًا مباشرًا لنماذج التجزئة YOLOv8 ، التي هي أصغر وأسرع وأكثر كفاءة.
أُجريت الاختبارات على جهاز Apple M2 Macbook 2023 مزود بذاكرة وصول عشوائي سعتها 16 جيجابايت. لإعادة إنتاج هذا الاختبار
مثال على ذلك
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 YOLOv8n-seg
model = YOLO("yolov8n-seg.pt")
model.info()
model(ASSETS)
التعليق التلقائي: مسار سريع لمجموعات بيانات التجزئة
يعد التعليق التلقائي ميزة رئيسية في SAM ، مما يسمح للمستخدمين بإنشاء مجموعة بيانات تجزئة باستخدام نموذج كشف مدرب مسبقًا. تتيح هذه الميزة إمكانية وضع تعليقات توضيحية سريعة ودقيقة لعدد كبير من الصور، متجاوزةً بذلك الحاجة إلى وضع العلامات اليدوية التي تستغرق وقتًا طويلاً.
إنشاء مجموعة بيانات التجزئة الخاصة بك باستخدام نموذج الكشف
للتعليل التلقائي لمجموعة البيانات الخاصة بك باستخدام إطار عمل Ultralytics ، استخدم auto_annotate
كما هو موضح أدناه:
مثال على ذلك
الجدال | النوع | الوصف | افتراضي |
---|---|---|---|
data |
str |
المسار إلى مجلد يحتوي على الصور المراد وضع تعليقات توضيحية عليها. | |
det_model |
str ، اختياري |
نموذج الكشف YOLO المدرب مسبقًا . افتراضي إلى 'yolo11x.pt'. | 'yolo11x.pt' |
sam_model |
str ، اختياري |
نموذج التجزئة SAM المدرّب مسبقًا. الافتراضي إلى 'sam_b.pt'. | 'sam_b.pt' |
device |
str ، اختياري |
جهاز لتشغيل النماذج عليه. يُفترض أن يكون افتراضيًا إلى سلسلة فارغة (CPU أو GPU ، إذا كان متاحًا). | |
conf |
float ، اختياري |
عتبة الثقة لنموذج الكشف؛ الافتراضي هو 0.25. | 0.25 |
iou |
float ، اختياري |
عتبة IoU لتصفية المربعات المتداخلة في نتائج الكشف؛ الافتراضي هو 0.45. | 0.45 |
imgsz |
int ، اختياري |
إدخال بُعد تغيير حجم الصورة؛ الافتراضي هو 640. | 640 |
max_det |
int ، اختياري |
يحد من عمليات الكشف لكل صورة للتحكم في المخرجات في المشاهد الكثيفة. | 300 |
classes |
list ، اختياري |
تصفية التوقعات إلى معرّفات الفئات المحددة، وإرجاع الاكتشافات ذات الصلة فقط. | None |
output_dir |
str ، لا شيء، اختياري |
دليل لحفظ النتائج المشروحة. يتم تعيينه افتراضيًا إلى مجلد "التسميات" في نفس دليل "البيانات". | None |
إن 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):
لمزيد من إرشادات الاستخدام التفصيلية، قم بزيارة قسم التقسيم.
كيف يمكن المقارنة بين SAM و YOLOv8 من حيث الأداء؟
بالمقارنة مع YOLOv8 ، فإن نماذج SAM مثل SAM-b و FastSAM-s أكبر وأبطأ ولكنها توفر قدرات فريدة للتجزئة التلقائية. على سبيل المثال، Ultralytics YOLOv8n -seg أصغر بـ 53.4 مرة وأسرع بـ 866 مرة من SAM-b. ومع ذلك، فإن أداء SAM' ' الذي لا يحتوي على أي لقطات يجعله مرنًا وفعالًا للغاية في المهام المتنوعة وغير المدربة. تعرف على المزيد حول مقارنات الأداء بين SAM و YOLOv8 هنا.
كيف يمكنني التعليل التلقائي لمجموعة بياناتي باستخدام SAM ؟
Ultralytics' SAM يوفر ميزة التعليل التلقائي التي تسمح بإنشاء مجموعات بيانات التجزئة باستخدام نموذج كشف مدرب مسبقًا. إليك مثال على ذلك في 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 هي أكبر مجموعة بيانات تجزئة حتى الآن، حيث توفر بيانات تدريب عالية الجودة ومتنوعة، مما يضمن أداءً مذهلاً بدون أي لقطات في مهام التجزئة المتنوعة. لمزيد من التفاصيل، قم بزيارة قسم مجموعة البيانات.