Ultralytics YOLO27:
Get Started

نموذج Fast Segment Anything (FastSAM)#

يُعد Fast Segment Anything (FastSAM) حلًا جديدًا قائمًا على CNN وفي الوقت الفعلي لمهمة Segment Anything. صُممت هذه المهمة لتجزئة أي كائن داخل صورة استنادًا إلى مجموعة متنوعة من مطالبات تفاعل المستخدم الممكنة. ويقلل FastSAM المتطلبات الحاسوبية بدرجة كبيرة مع الحفاظ على أداء تنافسي، ما يجعله خيارًا عمليًا لمجموعة متنوعة من مهام الرؤية.



شاهد: تتبع الكائنات باستخدام FastSAM مع Ultralytics

بنية النموذج#

نظرة عامة على بنية Fast Segment Anything (FastSAM)

نظرة عامة#

صُمم FastSAM لمعالجة قيود نموذج تجزئة أي شيء (SAM)، وهو نموذج Transformer ثقيل يتطلب موارد حاسوبية كبيرة. يفصل FastSAM مهمة تجزئة أي شيء إلى مرحلتين متتاليتين: تجزئة المثيلات جميعها، ثم الاختيار المستند إلى الموجّه. تستخدم المرحلة الأولى YOLOv8-seg لإنتاج أقنعة التجزئة لجميع المثيلات في الصورة. وفي المرحلة الثانية، يُخرج منطقة الاهتمام المطابقة للموجّه.

الميزات الرئيسية#

  1. حل في الوقت الفعلي: بالاستفادة من الكفاءة الحاسوبية لشبكات CNN، يوفر FastSAM حلًا لمهمة تجزئة كل شيء في الوقت الفعلي، ما يجعله مفيدًا للتطبيقات الصناعية التي تتطلب نتائج سريعة.

  2. الكفاءة والأداء: يقلل FastSAM المتطلبات الحاسوبية ومتطلبات الموارد بدرجة كبيرة دون المساس بجودة الأداء. ويحقق أداءً مماثلًا لـ SAM مع موارد حاسوبية أقل بكثير، ما يتيح استخدامه في التطبيقات الآنية.

  3. التجزئة الموجّهة بالمطالبات: يستطيع FastSAM تجزئة أي كائن داخل صورة بالاستناد إلى مجموعة متنوعة من مطالبات تفاعل المستخدم الممكنة، ما يوفر المرونة والقدرة على التكيف في مختلف السيناريوهات.

  4. مبني على YOLOv8-seg: يستند FastSAM إلى YOLOv8-seg، وهو كاشف كائنات مزوّد بفرع لتجزئة المثيلات. وهذا يمكّنه من إنتاج أقنعة التجزئة لجميع المثيلات في الصورة بفاعلية.

  5. نتائج تنافسية على المعايير المرجعية: في مهمة اقتراح الكائنات على MS COCO، يحقق FastSAM درجات مرتفعة بسرعة أكبر بكثير من SAM على وحدة NVIDIA RTX 3090 واحدة، ما يبرهن على كفاءته وقدراته.

  6. تطبيقات عملية: يقدم النهج المقترح حلًا عمليًا جديدًا لعدد كبير من مهام الرؤية بسرعة عالية جدًا، إذ تفوق سرعته الأساليب الحالية بعشرات أو مئات المرات.

  7. إمكانية ضغط النماذج: يبرهن FastSAM على إمكانية اتباع نهج يقلل الجهد الحاسوبي بدرجة كبيرة عبر إدخال انحياز مسبق اصطناعي إلى البنية، ما يفتح آفاقًا جديدة لبنى النماذج الكبيرة لمهام الرؤية العامة.

النماذج المتاحة والمهام المدعومة وأوضاع التشغيل#

يعرض هذا الجدول النماذج المتاحة وأوزانها المحددة المدربة مسبقًا والمهام التي تدعمها، ومدى توافقها مع أوضاع التشغيل المختلفة مثل الاستدلال والتحقق والتدريب والتصدير، ويُشار إلى الأوضاع المدعومة بالرمز ✅ وغير المدعومة بالرمز ❌.

نوع النموذجالأوزان المدرّبة مسبقاًالمهام المدعومةالتدريبالتحققالاستدلالالتصدير
FastSAM-sFastSAM-s.ptتجزئة الكائنات❌✅✅✅
FastSAM-xFastSAM-x.ptتجزئة الكائنات❌✅✅✅

مقارنة FastSAM بنماذج YOLO#

نقارن هنا FastSAM-s بإصدارات SAM من Meta ونماذج التجزئة من Ultralytics، بما فيها YOLO26n-seg:

النموذجالحجم
(MB)
المعلمات
(M)
السرعة (CPU)
(مللي ثانية/صورة)
Meta SAM-b37593.741703
Meta SAM2-b16280.828867
Meta SAM2-t78.138.923430
MobileSAM40.710.123802
FastSAM-s مع البنية الأساسية لـ YOLOv823.911.858.0
Ultralytics YOLOv8n-seg7.1 (أصغر 11.0 مرة)3.4 (أقل 11.4 مرة)24.8 (أسرع 945 مرة)
Ultralytics YOLO11n-seg6.2 (أصغر 12.6 مرة)2.9 (أقل 13.4 مرة)24.3 (أسرع 964 مرة)
Ultralytics YOLO26n-seg6.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 بذاكرة RAM سعتها 16GB باستخدام torch==2.10.0 وultralytics==8.4.31 وonnxruntime==1.24.4. لإعادة إجراء هذا الاختبار:

مثال
from ultralytics import ASSETS, SAM, YOLO, FastSAM

# ⁨تحليل أداء 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)

# ⁨أنشئ ملفًا تعريفيًا لـ 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)

أمثلة الاستخدام#

يسهل دمج نماذج FastSAM في تطبيقات Python. وتوفر Ultralytics واجهة Python API سهلة الاستخدام وأوامر CLI لتبسيط عملية التطوير.

الاستخدام للتنبؤ#

لتجزئة صورة، استخدم الطريقة predict كما هو موضح أدناه:

مثال
from ultralytics import FastSAM

# ⁨تحديد مصدر الاستدلال⁩
source = "path/to/bus.jpg"

# ⁨إنشاء نموذج FastSAM⁩
model = FastSAM("FastSAM-s.pt")  # ⁨أو FastSAM-x.pt⁩

# ⁨تشغيل الاستدلال على صورة⁩
everything_results = model(source, device="cpu", retina_masks=True, imgsz=1024, conf=0.4, iou=0.9)

# ⁨تنفيذ الاستدلال باستخدام مطالبة المربعات المحيطة⁩
results = model(source, bboxes=[439, 437, 524, 709])

# ⁨تشغيل الاستدلال باستخدام مطالبة نقاط⁩
results = model(source, points=[[200, 200]], labels=[1])

# ⁨تشغيل الاستدلال باستخدام مطالبة نصية⁩
results = model(source, texts="a photo of a dog")

# ⁨تشغيل الاستدلال باستخدام مطالبات مربعات الإحاطة والنقاط والنصوص في الوقت نفسه⁩
results = model(source, bboxes=[439, 437, 524, 709], points=[[200, 200]], labels=[1], texts="a photo of a dog")

يوضح هذا المقتطف سهولة تحميل نموذج مدرّب مسبقًا وإجراء تنبؤ على صورة.

مثال على FastSAMPredictor

بهذه الطريقة، يمكنك إجراء الاستدلال على الصورة والحصول على جميع عمليات التجزئة results مرة واحدة، ثم إجراء استدلال المطالبات عدة مرات من دون تكرار الاستدلال عليها.

from ultralytics.models.fastsam import FastSAMPredictor

# ⁨إنشاء FastSAMPredictor⁩
overrides = {"conf": 0.25, "task": "segment", "mode": "predict", "model": "FastSAM-s.pt", "save": False, "imgsz": 1024}
predictor = FastSAMPredictor(overrides=overrides)

# ⁨تجزئة كل شيء⁩
everything_results = predictor("ultralytics/assets/bus.jpg")

# ⁨استدلال المطالبات⁩
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، وتتيح الوصول بسهولة إلى الأقنعة المتنبأ بها والصورة المصدر.

الاستخدام للتحقق#

يُرجى ملاحظة أن FastSAM لا يدعم سوى كشف فئة واحدة من الكائنات وتجزئتها. وهذا يعني أنه سيتعرف على جميع الكائنات ويجزئها على أنها تنتمي إلى الفئة نفسها. لذلك، عند إعداد مجموعة البيانات، عليك تحويل جميع معرّفات فئات الكائنات إلى 0.

يمكن إجراء التحقق من صحة النموذج على مجموعة بيانات كما يلي:

مثال
from ultralytics import FastSAM

# ⁨إنشاء نموذج FastSAM⁩
model = FastSAM("FastSAM-s.pt")  # ⁨أو FastSAM-x.pt⁩

# ⁨تحقّق من النموذج⁩
results = model.val(data="coco8-seg.yaml")

تتبُّع الاستخدام#

لإجراء تتبُّع الكائنات في صورة، استخدم طريقة track كما هو موضح أدناه:

مثال
from ultralytics import FastSAM

# ⁨إنشاء نموذج FastSAM⁩
model = FastSAM("FastSAM-s.pt")  # ⁨أو FastSAM-x.pt⁩

# ⁨تتبُّع باستخدام نموذج FastSAM على مقطع فيديو⁩
results = model.track(source="path/to/video.mp4", imgsz=640)

الاستخدام الرسمي لـ FastSAM#

يتوفر FastSAM أيضًا مباشرةً من مستودع CASIA-LMC-Lab/FastSAM. إليك لمحة موجزة عن الخطوات المعتادة التي يمكنك اتباعها لاستخدام FastSAM:

التثبيت#

  1. استنسخ مستودع FastSAM:

    git clone https://github.com/CASIA-LMC-Lab/FastSAM.git
  2. أنشئ بيئة Conda باستخدام Python 3.9 ونشّطها:

    conda create -n FastSAM python=3.9
    conda activate FastSAM
  3. انتقل إلى المستودع المستنسخ وثبّت الحزم المطلوبة:

    cd FastSAM
    pip install -r requirements.txt
  4. ثبّت نموذج CLIP:

    pip install git+https://github.com/ultralytics/CLIP.git

مثال على الاستخدام#

  1. نزّل نقطة تحقق النموذج.

  2. استخدم 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 من خلال عرض Colab التوضيحي الخاص بـ CASIA-LMC-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، اختصارًا لـ«نموذج تجزئة أي شيء السريع»، هو حل قائم على شبكة عصبية التفافية (CNN) ومصمم للعمل في الوقت الفعلي، ويهدف إلى تقليل المتطلبات الحاسوبية مع الحفاظ على أداء عالٍ في مهام تجزئة الكائنات. وعلى عكس نموذج تجزئة أي شيء (SAM)، الذي يستخدم بنية Transformer أثقل، يستفيد FastSAM من Ultralytics YOLOv8-seg لإجراء تجزئة المثيلات بكفاءة على مرحلتين: تجزئة جميع المثيلات، ثم اختيارها بتوجيه من المطالبات.

  • يحقق FastSAM التجزئة في الوقت الفعلي من خلال فصل مهمة التجزئة إلى مرحلتين: تجزئة جميع المثيلات باستخدام YOLOv8-seg، ثم اختيارها بتوجيه من المطالبات. وبفضل الاستفادة من الكفاءة الحاسوبية لشبكات CNN، يقلل FastSAM بدرجة كبيرة المتطلبات الحاسوبية واستهلاك الموارد، مع الحفاظ على أداء تنافسي. ويتيح هذا النهج ذو المرحلتين لـ FastSAM تقديم تجزئة سريعة وفعالة تناسب التطبيقات التي تتطلب نتائج سريعة.

  • يُعد FastSAM عمليًا لمجموعة متنوعة من مهام الرؤية الحاسوبية التي تتطلب أداء تجزئة في الوقت الفعلي. وتشمل التطبيقات:

    • الأتمتة الصناعية لمراقبة الجودة وضمانها
    • تحليل الفيديو في الوقت الفعلي للأمن والمراقبة
    • المركبات ذاتية القيادة لاكتشاف الكائنات وتجزيئها
    • التصوير الطبي لمهام التجزئة الدقيقة والسريعة

    تجعل قدرته على التعامل مع مطالبات التفاعل المختلفة من المستخدم FastSAM قابلًا للتكيّف ومرنًا في مختلف السيناريوهات.

  • لاستخدام FastSAM للاستدلال في Python، يمكنك اتباع المثال أدناه:

    from ultralytics import FastSAM
    
    # ⁨تحديد مصدر الاستدلال⁩
    source = "path/to/bus.jpg"
    
    # ⁨إنشاء نموذج FastSAM⁩
    model = FastSAM("FastSAM-s.pt")  # ⁨أو FastSAM-x.pt⁩
    
    # ⁨تشغيل الاستدلال على صورة⁩
    everything_results = model(source, device="cpu", retina_masks=True, imgsz=1024, conf=0.4, iou=0.9)
    
    # ⁨تنفيذ الاستدلال باستخدام مطالبة المربعات المحيطة⁩
    results = model(source, bboxes=[439, 437, 524, 709])
    
    # ⁨تشغيل الاستدلال باستخدام مطالبة نقاط⁩
    results = model(source, points=[[200, 200]], labels=[1])
    
    # ⁨تشغيل الاستدلال باستخدام مطالبة نصية⁩
    results = model(source, texts="a photo of a dog")
    
    # ⁨تشغيل الاستدلال باستخدام مطالبات مربعات الإحاطة والنقاط والنصوص في الوقت نفسه⁩
    results = model(source, bboxes=[439, 437, 524, 709], points=[[200, 200]], labels=[1], texts="a photo of a dog")

    لمزيد من التفاصيل حول أساليب الاستدلال، راجع قسم استخدام التنبؤ في الوثائق.

  • يدعم FastSAM أنواعًا متعددة من المطالبات لتوجيه مهام التجزئة:

    • مطالبة «الكل»: تُنشئ تجزئة لجميع الكائنات الظاهرة.
    • مطالبة مربع الإحاطة (BBox): تقسّم الكائنات داخل مربع إحاطة محدد.
    • المطالبة النصية: تستخدم نصًا وصفيًا لتقسيم الكائنات المطابقة للوصف.
    • مطالبة النقطة: تقسّم الكائنات القريبة من نقاط يحددها المستخدم.

    تتيح هذه المرونة لـ FastSAM التكيّف مع مجموعة واسعة من سيناريوهات تفاعل المستخدم، مما يعزز فائدته في مختلف التطبيقات. لمزيد من المعلومات حول استخدام هذه المطالبات، راجع قسم الميزات الرئيسية.

التعليقات