نموذج التجزئة السريع لكل شيء (FastSAM)
يُعد نموذج التجزئة السريع لكل شيء (FastSAM) حلاً مبتكراً يعتمد على الشبكات العصبية التلافيفية (CNN) لتنفيذ مهام تجزئة أي شيء في الوقت الفعلي. تم تصميم هذه المهمة لتجزئة أي كائن داخل صورة بناءً على مطالبات تفاعلية متنوعة من المستخدم. يقلل FastSAM بشكل كبير من المتطلبات الحسابية مع الحفاظ على أداء تنافسي، مما يجعله خياراً عملياً لمجموعة متنوعة من مهام الرؤية الحاسوبية.
Watch: Object Tracking using FastSAM with 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
هنا نقارن نماذج Meta SAM 2، بما في ذلك أصغر متغير SAM2-t، مع نماذج تقسيم Ultralytics بما في ذلك YOLO26n-seg:
| النموذج | الحجم (MB) | المعلمات (M) | السرعة (CPU) (ms/im) |
|---|---|---|---|
| Meta SAM-b | 375 | 93.7 | 41703 |
| Meta SAM2-b | 162 | 80.8 | 28867 |
| Meta SAM2-t | 78.1 | 38.9 | 23430 |
| MobileSAM | 40.7 | 10.1 | 23802 |
| FastSAM-s مع backbone YOLOv8 | 23.9 | 11.8 | 58.0 |
| Ultralytics YOLOv8n-seg | 7.1 (أصغر بـ 11.0 مرة) | 3.4 (أقل بـ 11.4 مرة) | 24.8 (أسرع بـ 945 مرة) |
| Ultralytics YOLO11n-seg | 6.2 (أصغر بـ 12.6 مرة) | 2.9 (أقل بـ 13.4 مرة) | 24.3 (أسرع بـ 964 مرة) |
| Ultralytics YOLO26n-seg | 6.7 (أصغر بـ 11.7 مرة) | 2.7 (أقل بـ 14.4 مرة) | 25.2 (أسرع بـ 930 مرة) |
توضح هذه المقارنة الاختلافات الجوهرية في أحجام وسرعات النماذج بين متغيرات 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 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 (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)أمثلة الاستخدام
من السهل دمج نماذج FastSAM في تطبيقات Python الخاصة بك. توفر Ultralytics واجهة برمجة تطبيقات (API) سهلة الاستخدام وأوامر CLI لتبسيط عملية التطوير.
استخدام التنبؤ (Predict)
لإجراء اكتشاف الكائنات على صورة، استخدم طريقة 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")يوضح هذا المقتطف بساطة تحميل نموذج مدرب مسبقاً وتشغيل تنبؤ على صورة.
بهذه الطريقة يمكنك تشغيل الاستدلال على الصورة والحصول على جميع 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 المعادة في الأمثلة أعلاه هي كائنات Results والتي تتيح الوصول إلى الأقنعة المتوقعة والصورة الأصلية بسهولة.
استخدام التحقق (Val)
يمكن إجراء التحقق من صحة النموذج على مجموعة بيانات كما يلي:
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")يرجى ملاحظة أن FastSAM يدعم فقط اكتشاف وتجزئة فئة واحدة من الكائنات. هذا يعني أنه سيتعرف على جميع الكائنات ويجزئها كفئة واحدة. لذلك، عند إعداد مجموعة البيانات، تحتاج إلى تحويل جميع معرفات فئات الكائنات إلى 0.
استخدام التتبع (Track)
لإجراء تتبع الكائنات على صورة، استخدم طريقة 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)الاستخدام الرسمي لـ 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
مثال على الاستخدام
-
قم بتنزيل نقطة تفتيش النموذج (model checkpoint).
-
استخدم 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" -
تجزئة الكائنات داخل مربع إحاطة (bounding box) (قدم إحداثيات المربع بتنسيق 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 من خلال العرض التوضيحي Colab الخاص بـ CASIA-IVA-Lab.
الاقتباسات والشكر
نود أن نشكر مؤلفي 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 ومرحلة الاختيار الموجه بالمطالبات. من خلال استخدام الكفاءة الحسابية للشبكات العصبية التلافيفية، يوفر 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")لمزيد من التفاصيل حول طرق الاستدلال، راجع قسم استخدام التنبؤ (Predict Usage) في التوثيق.
ما أنواع المطالبات التي يدعمها FastSAM لمهام التجزئة؟
يدعم FastSAM أنواع مطالبات متعددة لتوجيه مهام التجزئة:
- مطالبة كل شيء (Everything Prompt): تنشئ تجزئة لجميع الكائنات المرئية.
- مطالبة مربع الإحاطة (BBox Prompt): تجزئ الكائنات داخل مربع إحاطة محدد.
- مطالبة نصية (Text Prompt): تستخدم نصاً وصفياً لتجزئة الكائنات التي تطابق الوصف.
- مطالبة النقطة (Point Prompt): تجزئ الكائنات بالقرب من نقاط محددة يحددها المستخدم.
تسمح هذه المرونة لـ FastSAM بالتكيف مع مجموعة واسعة من سيناريوهات تفاعل المستخدم، مما يعزز فائدته عبر تطبيقات مختلفة. لمزيد من المعلومات حول استخدام هذه المطالبات، راجع قسم الميزات الرئيسية (Key Features).