نموذج التجزئة السريع لكل شيء (FastSAM)
نموذج التجزئة السريع لأي شيء (FastSAM) هو حل جديد قائم على CNN في الوقت الفعلي لمهمة تجزئة أي شيء. تم تصميم هذه المهمة لتقسيم أي كائن داخل الصورة بناءً على مطالبات تفاعل المستخدم المحتملة المختلفة. يقلل FastSAM بشكل كبير من المتطلبات الحسابية مع الحفاظ على الأداء التنافسي، مما يجعله خيارًا عمليًا لمجموعة متنوعة من مهام الرؤية.
شاهد: تتبع الأجسام باستخدام FastSAM مع Ultralytics
بنية النموذج
نظرة عامة
تم تصميم FastSAM لمعالجة القيود المفروضة على نموذج التجزئة لكل شيء (SAM) ، وهو نموذج Transformer ثقيل مع متطلبات كبيرة للموارد الحسابية. يفصل FastSAM مهمة تجزئة أي شيء إلى مرحلتين متتاليتين: تجزئة جميع الحالات والاختيار الموجه بالإشارات. تستخدم المرحلة الأولى YOLOv8-seg لإنتاج أقنعة التجزئة لجميع الحالات في الصورة. في المرحلة الثانية، فإنه يخرج المنطقة التي تهمك المقابلة للإشارة.
الميزات الرئيسية
-
حل في الوقت الفعلي: من خلال الاستفادة من الكفاءة الحسابية للشبكات العصبية التلافيفية (CNNs)، يوفر FastSAM حلاً في الوقت الفعلي لمهمة تقسيم أي شيء، مما يجعله ذا قيمة للتطبيقات الصناعية التي تتطلب نتائج سريعة.
-
الكفاءة والأداء: يوفر FastSAM انخفاضًا كبيرًا في المتطلبات الحسابية ومتطلبات الموارد دون المساس بجودة الأداء. إنه يحقق أداءً مشابهًا لـ SAM ولكن بموارد حسابية مخفضة بشكل كبير، مما يتيح التطبيق في الوقت الفعلي.
-
التجزئة الموجهة بالموجهات: يمكن لـ FastSAM تجزئة أي كائن داخل الصورة بتوجيه من خلال مطالبات تفاعل المستخدم المحتملة المختلفة، مما يوفر المرونة والقدرة على التكيف في سيناريوهات مختلفة.
-
استنادًا إلى YOLOv8-seg: يعتمد FastSAM على YOLOv8-seg، وهو كاشف كائنات مزود بفرع تجزئة مثيل. يتيح له ذلك إنتاج أقنعة التجزئة لجميع المثيلات في الصورة بشكل فعال.
-
نتائج تنافسية في المعايير: في مهمة اقتراح الكائنات على MS COCO، تحقق FastSAM درجات عالية بسرعة أكبر بكثير من SAM على NVIDIA RTX 3090 واحد، مما يدل على كفاءتها وقدرتها.
-
تطبيقات عملية: يقدم النهج المقترح حلاً عمليًا جديدًا لعدد كبير من مهام الرؤية بسرعة عالية حقًا، أسرع بعشرات أو مئات المرات من الطرق الحالية.
-
جدوى ضغط النموذج: يوضح FastSAM جدوى مسار يمكن أن يقلل بشكل كبير من الجهد الحسابي عن طريق إدخال أولوية اصطناعية للهيكل، وبالتالي فتح إمكانيات جديدة لهيكلة النماذج الكبيرة لمهام الرؤية العامة.
النماذج المتاحة والمهام المدعومة وأنماط التشغيل
يقدم هذا الجدول النماذج المتاحة مع الأوزان المدربة مسبقًا الخاصة بها، والمهام التي تدعمها، وتوافقها مع أوضاع التشغيل المختلفة مثل الاستدلال و التحقق من الصحة و التدريب و التصدير، ويشار إليها برموز ✅ للأوضاع المدعومة ورموز ❌ للأوضاع غير المدعومة.
نوع النموذج | الأوزان المدربة مسبقًا | المهام المدعومة | الاستدلال | التحقق | التدريب | تصدير |
---|---|---|---|---|---|---|
FastSAM-s | FastSAM-s.pt | تجزئة المثيل | ✅ | ❌ | ❌ | ✅ |
FastSAM-x | FastSAM-x.pt | تجزئة المثيل | ✅ | ❌ | ❌ | ✅ |
مقارنة FastSAM مقابل YOLO
نقارن هنا نماذج SAM2 الخاصة بـ Meta، بما في ذلك أصغر متغير SAM2-t، مع أصغر نموذج تجزئة لـ Ultralytics، YOLO11n-seg:
النموذج | الحجم (ميجابايت) |
المعلمات (M) |
السرعة (وحدة المعالجة المركزية (CPU)) (بالمللي ثانية/صورة) |
---|---|---|---|
Meta SAM-b | 375 | 93.7 | 49401 |
Meta SAM2-b | 162 | 80.8 | 31901 |
Meta SAM2-t | 78.1 | 38.9 | 25997 |
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)
أمثلة الاستخدام
من السهل دمج نماذج FastSAM في تطبيقات Python الخاصة بك. توفر Ultralytics واجهة برمجة تطبيقات Python سهلة الاستخدام وأوامر CLI لتبسيط التطوير.
استخدام التوقع
لتنفيذ اكتشاف الكائنات على صورة، استخدم predict
الطريقة كما هو موضح أدناه:
مثال
from ultralytics import FastSAM
# Define an inference source
source = "path/to/bus.jpg"
# Create a FastSAM model
model = FastSAM("FastSAM-s.pt") # or FastSAM-x.pt
# Run inference on an image
everything_results = model(source, device="cpu", retina_masks=True, imgsz=1024, conf=0.4, iou=0.9)
# Run inference with bboxes prompt
results = model(source, bboxes=[439, 437, 524, 709])
# Run inference with points prompt
results = model(source, points=[[200, 200]], labels=[1])
# Run inference with texts prompt
results = model(source, texts="a photo of a dog")
# Run inference with bboxes and points and texts prompt at the same time
results = model(source, bboxes=[439, 437, 524, 709], points=[[200, 200]], labels=[1], texts="a photo of a dog")
# Load a FastSAM model and segment everything with it
yolo segment predict model=FastSAM-s.pt source=path/to/bus.jpg imgsz=640
يوضح هذا المقتطف بساطة تحميل نموذج مدرب مسبقًا وتشغيل تنبؤ على صورة.
مثال FastSAMPredictor
بهذه الطريقة يمكنك تشغيل الاستدلال على الصورة والحصول على كل جزء results
تقوم المطالبة بتشغيل الاستدلال مرة واحدة بتشغيل الاستدلال عدة مرات دون تشغيل الاستدلال عدة مرات.
from ultralytics.models.fastsam import FastSAMPredictor
# Create FastSAMPredictor
overrides = dict(conf=0.25, task="segment", mode="predict", model="FastSAM-s.pt", save=False, imgsz=1024)
predictor = FastSAMPredictor(overrides=overrides)
# Segment everything
everything_results = predictor("ultralytics/assets/bus.jpg")
# Prompt inference
bbox_results = predictor.prompt(everything_results, bboxes=[[200, 200, 300, 300]])
point_results = predictor.prompt(everything_results, points=[200, 200])
text_results = predictor.prompt(everything_results, texts="a photo of a dog")
ملاحظة
كل ما تم إرجاعه results
في الأمثلة أعلاه هي النتائج كائن يتيح الوصول بسهولة إلى الأقنعة المتوقعة والصورة المصدر.
استخدام التحقق
يمكن إجراء التحقق من صحة النموذج على مجموعة بيانات على النحو التالي:
مثال
from ultralytics import FastSAM
# Create a FastSAM model
model = FastSAM("FastSAM-s.pt") # or FastSAM-x.pt
# Validate the model
results = model.val(data="coco8-seg.yaml")
# Load a FastSAM model and validate it on the COCO8 example dataset at image size 640
yolo segment val model=FastSAM-s.pt data=coco8.yaml imgsz=640
يرجى ملاحظة أن FastSAM يدعم فقط الكشف عن فئة واحدة من الكائنات وتقسيمها. هذا يعني أنه سيتعرف على جميع الكائنات ويقسمها على أنها من نفس الفئة. لذلك، عند إعداد مجموعة البيانات، تحتاج إلى تحويل جميع معرّفات فئة الكائن إلى 0.
تتبع الاستخدام
لتنفيذ تتبع الكائنات على صورة، استخدم track
الطريقة كما هو موضح أدناه:
مثال
from ultralytics import FastSAM
# Create a FastSAM model
model = FastSAM("FastSAM-s.pt") # or FastSAM-x.pt
# Track with a FastSAM model on a video
results = model.track(source="path/to/video.mp4", imgsz=640)
yolo segment track model=FastSAM-s.pt source="path/to/video.mp4" imgsz=640
الاستخدام الرسمي لـ FastSAM
يتوفر FastSAM أيضًا مباشرةً من مستودع https://github.com/CASIA-IVA-Lab/FastSAM. إليك نظرة عامة موجزة عن الخطوات النموذجية التي قد تتخذها لاستخدام FastSAM:
التثبيت
-
استنساخ مستودع FastSAM:
git clone https://github.com/CASIA-IVA-Lab/FastSAM.git
-
إنشاء وتفعيل بيئة Conda باستخدام Python 3.9:
conda create -n FastSAM python=3.9 conda activate FastSAM
-
انتقل إلى المستودع المستنسخ وقم بتثبيت الحزم المطلوبة:
cd FastSAM pip install -r requirements.txt
-
تثبيت نموذج CLIP:
pip install git+https://github.com/ultralytics/CLIP.git
مثال على الاستخدام
-
قم بتنزيل نقطة تفتيش النموذج.
-
استخدم FastSAM للاستدلال. أمثلة على الأوامر:
-
تقسيم كل شيء في الصورة:
python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg
-
تقسيم كائنات معينة باستخدام مطالبة نصية:
python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --text_prompt "the yellow dog"
-
تقسيم الكائنات داخل مربع محيط (توفير إحداثيات المربع بتنسيق xywh):
python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --box_prompt "[570,200,230,400]"
-
تقسيم الكائنات القريبة من نقاط محددة:
python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --point_prompt "[[520,360],[620,300]]" --point_label "[1,0]"
-
بالإضافة إلى ذلك، يمكنك تجربة FastSAM من خلال CASIA-IVA-Lab عرض Colab التوضيحي.
الاقتباسات والشكر والتقدير
نود أن نعرب عن تقديرنا لمؤلفي FastSAM لمساهماتهم الكبيرة في مجال تجزئة المثيلات في الوقت الفعلي:
@misc{zhao2023fast,
title={Fast Segment Anything},
author={Xu Zhao and Wenchao Ding and Yongqi An and Yinglong Du and Tao Yu and Min Li and Ming Tang and Jinqiao Wang},
year={2023},
eprint={2306.12156},
archivePrefix={arXiv},
primaryClass={cs.CV}
}
يمكن العثور على ورقة FastSAM الأصلية على arXiv. وقد أتاح المؤلفون أعمالهم للجمهور، ويمكن الوصول إلى قاعدة التعليمات البرمجية على GitHub. نحن نقدر جهودهم في تطوير هذا المجال وإتاحة أعمالهم للمجتمع الأوسع.
الأسئلة الشائعة
ما هو FastSAM وكيف يختلف عن SAM؟
FastSAM، اختصارًا لـ Fast Segment Anything Model (نموذج التجزئة السريع لكل شيء)، هو حل قائم على شبكة عصبية التفافية (CNN) في الوقت الفعلي مصمم لتقليل المتطلبات الحسابية مع الحفاظ على الأداء العالي في مهام تجزئة الكائنات. على عكس نموذج التجزئة لكل شيء (SAM)، الذي يستخدم بنية أثقل تعتمد على Transformer، يستفيد FastSAM من Ultralytics YOLOv8-seg لتجزئة الحالات بكفاءة على مرحلتين: تجزئة جميع الحالات متبوعة بالاختيار الموجه بالإشارات.
كيف يحقق FastSAM أداء تجزئة في الوقت الفعلي؟
يحقق FastSAM تجزئة في الوقت الفعلي عن طريق فصل مهمة التجزئة إلى تجزئة لجميع الحالات باستخدام YOLOv8-seg ومراحل الاختيار الموجهة بالإشارات. من خلال الاستفادة من الكفاءة الحسابية لشبكات CNN، يوفر FastSAM تخفيضات كبيرة في المتطلبات الحسابية ومتطلبات الموارد مع الحفاظ على أداء تنافسي. يُمكّن هذا النهج المزدوج المراحل FastSAM من تقديم تجزئة سريعة وفعالة مناسبة للتطبيقات التي تتطلب نتائج سريعة.
ما هي التطبيقات العملية لـ FastSAM؟
يعتبر FastSAM عمليًا لمجموعة متنوعة من مهام رؤية الكمبيوتر التي تتطلب أداء تجزئة في الوقت الفعلي. تشمل التطبيقات:
- الأتمتة الصناعية لمراقبة الجودة وضمانها
- تحليل الفيديو في الوقت الحقيقي للأمن والمراقبة
- المركبات ذاتية القيادة للكشف عن الكائنات وتجزئتها
- التصوير الطبي لمهام التقسيم الدقيقة والسريعة
إن قدرة FastSAM على التعامل مع مطالبات تفاعل المستخدم المتنوعة تجعل FastSAM قابلة للتكيف ومرنة للسيناريوهات المختلفة.
كيف يمكنني استخدام نموذج FastSAM للاستدلال في Python؟
لاستخدام FastSAM للاستدلال في Python، يمكنك اتباع المثال أدناه:
from ultralytics import FastSAM
# Define an inference source
source = "path/to/bus.jpg"
# Create a FastSAM model
model = FastSAM("FastSAM-s.pt") # or FastSAM-x.pt
# Run inference on an image
everything_results = model(source, device="cpu", retina_masks=True, imgsz=1024, conf=0.4, iou=0.9)
# Run inference with bboxes prompt
results = model(source, bboxes=[439, 437, 524, 709])
# Run inference with points prompt
results = model(source, points=[[200, 200]], labels=[1])
# Run inference with texts prompt
results = model(source, texts="a photo of a dog")
# Run inference with bboxes and points and texts prompt at the same time
results = model(source, bboxes=[439, 437, 524, 709], points=[[200, 200]], labels=[1], texts="a photo of a dog")
لمزيد من التفاصيل حول طرق الاستدلال، تحقق من استخدام التنبؤ في الوثائق.
ما أنواع المطالبات التي يدعمها FastSAM لمهام التجزئة؟
يدعم FastSAM أنواع مطالبات متعددة لتوجيه مهام التجزئة:
- كل شيء موجه: يقوم بإنشاء تجزئة لجميع الكائنات المرئية.
- مربع إحاطة (BBox) موجه: يجزئ الكائنات داخل مربع إحاطة محدد.
- موجه نصي: يستخدم نصًا وصفيًا لتقسيم الكائنات المطابقة للوصف.
- موجه النقطة: يجزئ الكائنات القريبة من نقاط محددة يحددها المستخدم.
تسمح هذه المرونة لـ FastSAM بالتكيف مع مجموعة واسعة من سيناريوهات تفاعل المستخدم، مما يعزز فائدتها عبر التطبيقات المختلفة. لمزيد من المعلومات حول استخدام هذه المطالبات، راجع قسم الميزات الرئيسية.