Hızlı Segment Her Şeyi Segmentleme Modeli (FastSAM)

Hızlı Segment Her Şeyi Segmentleme Modeli (FastSAM), Segment Anything (Her Şeyi Segmentleme) görevi için yeni, gerçek zamanlı, CNN tabanlı bir çözümdür. Bu görev, çeşitli kullanıcı etkileşim istemlerine dayalı olarak bir görüntü içindeki herhangi bir nesneyi segmentlemek üzere tasarlanmıştır. FastSAM, rekabetçi performansı korurken hesaplama gereksinimlerini önemli ölçüde azaltarak onu çeşitli görüntü işleme görevleri için pratik bir seçenek haline getirir.



Watch: Object Tracking using FastSAM with Ultralytics

Model Mimarisi

Hızlı Segment Her Şeyi Segmentleme Modeli (FastSAM) mimarisine genel bakış

Genel Bakış

FastSAM is designed to address the limitations of the Segment Anything Model (SAM), a heavy Transformer model with substantial computational resource requirements. The FastSAM decouples the segment anything task into two sequential stages: all-instance segmentation and prompt-guided selection. The first stage uses YOLOv8-seg to produce the segmentation masks of all instances in the image. In the second stage, it outputs the region-of-interest corresponding to the prompt.

Temel Özellikler

  1. Gerçek Zamanlı Çözüm: CNN'lerin hesaplama verimliliğinden yararlanan FastSAM, segment anything görevi için gerçek zamanlı bir çözüm sunar ve bu da onu hızlı sonuç gerektiren endüstriyel uygulamalar için değerli kılar.

  2. Verimlilik ve Performans: FastSAM, performans kalitesinden ödün vermeden hesaplama ve kaynak taleplerinde önemli bir azalma sunar. SAM ile karşılaştırılabilir bir performans elde eder ancak çok daha düşük hesaplama kaynaklarıyla gerçek zamanlı uygulamayı mümkün kılar.

  3. İstem Yönlendirmeli Segmentasyon: FastSAM, çeşitli kullanıcı etkileşim istemleri tarafından yönlendirilerek bir görüntü içindeki herhangi bir nesneyi segmentleyebilir ve farklı senaryolarda esneklik ve uyarlanabilirlik sağlar.

  4. YOLOv8-seg Tabanlı: FastSAM, bir örnek segmentasyonu dalı ile donatılmış bir nesne dedektörü olan YOLOv8-seg tabanlıdır. Bu, görüntüdeki tüm örneklerin segmentasyon maskelerini etkili bir şekilde üretmesini sağlar.

  5. Benchmarklarda Rekabetçi Sonuçlar: MS COCO üzerindeki nesne önerisi görevinde FastSAM, tek bir NVIDIA RTX 3090 üzerinde SAM modelinden önemli ölçüde daha hızlı yüksek puanlar elde ederek verimliliğini ve kapasitesini kanıtlar.

  6. Pratik Uygulamalar: Önerilen yaklaşım, çok sayıda görüntü işleme görevi için güncel yöntemlerden on veya yüzlerce kat daha yüksek hızda yeni ve pratik bir çözüm sunar.

  7. Model Sıkıştırma Fizibilitesi: FastSAM, yapıya yapay bir ön bilgi ekleyerek hesaplama çabasını önemli ölçüde azaltabilecek bir yolun fizibilitesini gösterir ve böylece genel görüntü işleme görevlerine yönelik büyük model mimarileri için yeni olanaklar açar.

Mevcut Modeller, Desteklenen Görevler ve Çalışma Modları

Bu tablo, belirli önceden eğitilmiş ağırlıklarıyla mevcut modelleri, destekledikleri görevleri ve Çıkarım, Doğrulama, Eğitim ve Dışa Aktarma gibi farklı çalışma modlarıyla uyumluluklarını sunar; desteklenen modlar ✅ emojileriyle, desteklenmeyenler ise ❌ emojileriyle belirtilmiştir.

Model TipiÖnceden Eğitilmiş AğırlıklarDesteklenen GörevlerÇıkarımDoğrulamaEğitimDışa Aktar (Export)
FastSAM-sFastSAM-s.ptInstance Segmentasyon
FastSAM-xFastSAM-x.ptInstance Segmentasyon

YOLO ile FastSAM Karşılaştırması

Burada, en küçük SAM2-t varyantı da dahil olmak üzere Meta'nın SAM 2 modellerini, YOLO26n-seg dahil olmak üzere Ultralytics segmentasyon modelleriyle karşılaştırıyoruz:

ModelBoyut
(MB)
Parametreler
(M)
Hız (CPU)
(ms/im)
Meta SAM-b37593.741703
Meta SAM2-b16280.828867
Meta SAM2-t78.138.923430
MobileSAM40.710.123802
FastSAM-s with YOLOv8 backbone23.911.858.0
Ultralytics YOLOv8n-seg7.1 (11.0 kat daha küçük)3.4 (11.4 kat daha az)24.8 (945 kat daha hızlı)
Ultralytics YOLO11n-seg6.2 (12.6 kat daha küçük)2.9 (13.4 kat daha az)24.3 (964 kat daha hızlı)
Ultralytics YOLO26n-seg6.7 (11.7 kat daha küçük)2.7 (14.4 kat daha az)25.2 (930 kat daha hızlı)

Bu karşılaştırma, SAM varyantları ile YOLO segmentasyon modelleri arasındaki model boyutları ve hızlarındaki önemli farkları göstermektedir. SAM benzersiz otomatik segmentasyon yetenekleri sunarken, YOLO modelleri, özellikle YOLOv8n-seg, YOLO11n-seg ve YOLO26n-seg, önemli ölçüde daha küçük, daha hızlı ve hesaplama açısından daha verimlidir.

SAM hızları PyTorch ile, YOLO hızları ONNX Runtime ile ölçülmüştür. Testler, torch==2.10.0, ultralytics==8.4.31 ve onnxruntime==1.24.4 kullanılarak 16 GB RAM'li 2025 Apple M4 Air üzerinde çalıştırılmıştır. Bu testi yeniden oluşturmak için:

Örnek
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)

Kullanım Örnekleri

FastSAM modellerinin Python uygulamalarına entegre edilmesi kolaydır. Ultralytics, geliştirmeyi kolaylaştırmak için kullanıcı dostu Python API ve CLI komutları sağlar.

Tahmin (Predict) Kullanımı

Bir görüntü üzerinde object detection gerçekleştirmek için aşağıda gösterildiği gibi predict yöntemini kullan:

Örnek
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")

Bu kod parçası, önceden eğitilmiş bir modeli yüklemenin ve bir görüntü üzerinde tahmin çalıştırmanın basitliğini gösterir.

FastSAMPredictor örneği

Bu şekilde görüntü üzerinde çıkarım çalıştırabilir ve tüm segment results sonuçlarını bir kez alabilirsin; ardından tekrar tekrar çıkarım çalıştırmadan istem çıkarımlarını birden çok kez yapabilirsin.

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")
Not

Yukarıdaki örneklerde döndürülen tüm results, tahmin edilen maskelere ve kaynak görüntüye kolayca erişim sağlayan Results nesneleridir.

Doğrulama (Val) Kullanımı

Modelin bir veri seti üzerinde doğrulanması şu şekilde yapılabilir:

Örnek
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")

Lütfen FastSAM'in yalnızca tek bir nesne sınıfının tespiti ve segmentasyonunu desteklediğini unutma. Bu, tüm nesneleri aynı sınıf olarak tanıyacağı ve segmentleyeceği anlamına gelir. Bu nedenle, veri setini hazırlarken tüm nesne kategori kimliklerini 0'a dönüştürmen gerekir.

Takip (Track) Kullanımı

Bir görüntü üzerinde nesne takibi gerçekleştirmek için aşağıda gösterildiği gibi track yöntemini kullan:

Örnek
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 resmi Kullanımı

FastSAM'e doğrudan https://github.com/CASIA-IVA-Lab/FastSAM deposundan da ulaşabilirsin. FastSAM'i kullanmak için atabileceğin tipik adımlara kısa bir bakış:

Kurulum

  1. FastSAM deposunu klonla:

    git clone https://github.com/CASIA-IVA-Lab/FastSAM.git
  2. Python 3.9 ile bir Conda ortamı oluştur ve etkinleştir:

    conda create -n FastSAM python=3.9
    conda activate FastSAM
  3. Klonlanan depoya git ve gerekli paketleri yükle:

    cd FastSAM
    pip install -r requirements.txt
  4. CLIP modelini yükle:

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

Örnek Kullanım

  1. Bir model kontrol noktası indir.

  2. Çıkarım için FastSAM'i kullan. Örnek komutlar:

    • Bir görüntüdeki her şeyi segmentle:

      python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg
    • Metin istemi kullanarak belirli nesneleri segmentle:

      python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --text_prompt "the yellow dog"
    • Bir bounding box içindeki nesneleri segmentle (kutu koordinatlarını xywh formatında sağla):

      python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --box_prompt "[570,200,230,400]"
    • Belirli noktaların yakınındaki nesneleri segmentle:

      python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --point_prompt "[[520,360],[620,300]]" --point_label "[1,0]"

Ayrıca, FastSAM'i CASIA-IVA-Lab Colab demosu aracılığıyla deneyebilirsin.

Alıntılar ve Teşekkür

Gerçek zamanlı örnek segmentasyonu alanındaki önemli katkılarından dolayı FastSAM yazarlarına teşekkür etmek isteriz:

Alıntı
  @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}
  }

Orijinal FastSAM makalesi arXiv üzerinde bulunabilir. Yazarlar çalışmalarını herkese açık hale getirmişlerdir ve kod tabanına GitHub üzerinden erişilebilir. Alanı ilerlettikleri ve çalışmalarını daha geniş topluluğun erişimine sundukları için çabalarını takdir ediyoruz.

SSS

FastSAM nedir ve SAM'den farkı nedir?

FastSAM, yani Hızlı Segment Her Şeyi Segmentleme Modeli, nesne segmentasyonu görevlerinde yüksek performansı korurken hesaplama taleplerini azaltmak için tasarlanmış gerçek zamanlı bir convolutional neural network (CNN) tabanlı çözümdür. Daha ağır bir Transformer tabanlı mimari kullanan Segment Anything Model (SAM) modelinin aksine, FastSAM verimli örnek segmentasyonu için iki aşamada Ultralytics YOLOv8-seg modelinden yararlanır: tüm örneklerin segmentasyonu ve ardından istem yönlendirmeli seçim.

FastSAM gerçek zamanlı segmentasyon performansını nasıl elde eder?

FastSAM, segmentasyon görevini YOLOv8-seg ile tüm örneklerin segmentasyonu ve istem yönlendirmeli seçim aşamalarına ayırarak gerçek zamanlı segmentasyon gerçekleştirir. CNN'lerin hesaplama verimliliğinden yararlanan FastSAM, rekabetçi performansı korurken hesaplama ve kaynak taleplerinde önemli azalmalar sunar. Bu iki aşamalı yaklaşım, FastSAM'in hızlı sonuç gerektiren uygulamalar için uygun, hızlı ve verimli segmentasyon sağlamasına olanak tanır.

FastSAM'in pratik uygulamaları nelerdir?

FastSAM, gerçek zamanlı segmentasyon performansı gerektiren çeşitli computer vision görevleri için pratiktir. Uygulamalar şunları içerir:

  • Kalite kontrol ve güvence için endüstriyel otomasyon
  • Güvenlik ve gözetim için gerçek zamanlı video analizi
  • Nesne tespiti ve segmentasyonu için Autonomous vehicles
  • Hassas ve hızlı segmentasyon görevleri için tıbbi görüntüleme

Çeşitli kullanıcı etkileşim istemlerini işleme yeteneği, FastSAM'i farklı senaryolar için uyarlanabilir ve esnek kılar.

Python'da çıkarım için FastSAM modelini nasıl kullanırım?

Python'da çıkarım için FastSAM'i kullanmak istersen aşağıdaki örneği takip edebilirsin:

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")

Çıkarım yöntemleri hakkında daha fazla ayrıntı için dokümantasyonun Predict Usage bölümüne göz at.

FastSAM, segmentasyon görevleri için ne tür istemleri destekler?

FastSAM, segmentasyon görevlerini yönlendirmek için birden çok istem türünü destekler:

  • Everything Prompt (Her Şey İstem): Görünür tüm nesneler için segmentasyon üretir.
  • Bounding Box (BBox) Prompt (Sınırlayıcı Kutu İstemi): Belirtilen bir sınırlayıcı kutu içindeki nesneleri segmentler.
  • Text Prompt (Metin İstemi): Açıklamayla eşleşen nesneleri segmentlemek için tanımlayıcı bir metin kullanır.
  • Point Prompt (Nokta İstemi): Belirli kullanıcı tanımlı noktaların yakınındaki nesneleri segmentler.

Bu esneklik, FastSAM'in geniş bir kullanıcı etkileşim senaryosu yelpazesine uyum sağlamasına olanak tanıyarak farklı uygulamalarda kullanım kolaylığını artırır. Bu istemlerin kullanımı hakkında daha fazla bilgi için Key Features bölümüne bak.

Yorumlar