Ultralytics YOLO27:

Her Şeyi Hızlı Segmentasyon Modeli (FastSAM)#

Her Şeyi Hızlı Segmentasyon Modeli (FastSAM), Her Şeyi Segmentasyon görevi için geliştirilmiş yeni, gerçek zamanlı, CNN tabanlı bir çözümdür. Bu görev, çeşitli olası kullanıcı etkileşimi istemlerine göre bir görüntüdeki herhangi bir nesneyi segmentlere ayırmak üzere tasarlanmıştır. FastSAM, rekabetçi performansı korurken hesaplama gereksinimlerini önemli ölçüde azaltır ve bu sayede çeşitli görüntü işleme görevleri için pratik bir seçenek sunar.



Watch: Object Tracking using FastSAM with Ultralytics

Model Mimarisi#

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

Genel Bakış#

FastSAM, yoğun hesaplama kaynakları gerektiren ağır bir Transformer modeli olan Her Şeyi Segmentasyon Modeli (SAM)'nin sınırlamalarını gidermek üzere tasarlanmıştır. FastSAM, her şeyi segmentasyon görevini iki ardışık aşamaya ayırır: tüm-instance segmentation ve istem kılavuzlu seçim. İlk aşamada, görüntüdeki tüm örneklerin segmentasyon maskelerini üretmek için YOLOv8-seg kullanılır. İkinci aşamada ise isteme karşılık gelen ilgi bölgesi çıktılanır.

Temel Özellikler#

  1. Gerçek Zamanlı Çözüm: CNN'lerin hesaplama verimliliğinden yararlanan FastSAM, her şeyi segmentasyon görevi için gerçek zamanlı bir çözüm sunar ve hızlı sonuç gerektiren endüstriyel uygulamalar için değerli hale gelir.

  2. Verimlilik ve Performans: FastSAM, performans kalitesinden ödün vermeden hesaplama ve kaynak gereksinimlerinde önemli bir azalma sağlar. SAM ile karşılaştırılabilir bir performansa, çok daha az hesaplama kaynağıyla ulaşarak gerçek zamanlı uygulamayı mümkün kılar.

  3. İstem Kılavuzlu Segmentasyon: FastSAM, çeşitli olası kullanıcı etkileşimi istemlerinin yönlendirmesiyle bir görüntüdeki herhangi bir nesneyi segmente edebilir ve farklı senaryolarda esneklik ve uyarlanabilirlik sunar.

  4. YOLOv8-seg Tabanlı: FastSAM, instance segmentation dalıyla donatılmış bir nesne algılayıcı olan YOLOv8-seg tabanlıdır. Bu sayede bir görüntüdeki tüm örneklerin segmentasyon maskelerini etkili biçimde üretebilir.

  5. Kıyaslamalarda Rekabetçi Sonuçlar: MS COCO üzerindeki nesne önerisi görevinde FastSAM, tek bir NVIDIA RTX 3090 üzerinde SAM'den önemli ölçüde daha yüksek hızda yüksek skorlar elde ederek verimliliğini ve yeteneğini gösterir.

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

  7. Model Sıkıştırmanın Uygulanabilirliği: FastSAM, yapıya yapay bir önsel ekleyerek hesaplama çabasını önemli ölçüde azaltabilecek bir yolun uygulanabilirliğini gösterir ve böylece genel görüntü işleme görevleri için büyük model mimarilerine yeni olanaklar sunar.

Kullanılabilir Modeller, Desteklenen Görevler ve Çalışma Modları#

Bu tabloda, belirli önceden eğitilmiş ağırlıklarıyla kullanılabilir modeller, destekledikleri görevler ve Çıkarım, Doğrulama, Eğitim ve Dışa Aktarma gibi farklı çalışma modlarıyla uyumlulukları gösterilir; desteklenen modlar ✅, desteklenmeyen modlar ise ❌ emojileriyle belirtilir.

Model TürüÖnceden Eğitilmiş AğırlıklarDesteklenen GörevlerEğitimDoğrulamaÇıkarımDışa aktarma
FastSAM-sFastSAM-s.ptÖrnek Segmentasyonu
FastSAM-xFastSAM-x.ptÖrnek Segmentasyonu

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

Burada FastSAM-s modelini Meta'nın SAM varyantları ve YOLO26n-seg dahil 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
YOLOv8 omurgası ile FastSAM-s23.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ızlardaki önemli farkları ortaya koyar. SAM benzersiz otomatik segmentasyon yetenekleri sunarken, özellikle YOLOv8n-seg, YOLO11n-seg ve YOLO26n-seg olmak üzere YOLO modelleri önemli ölçüde daha küçük, daha hızlı ve hesaplama açısından daha verimlidir.

SAM hızları PyTorch, YOLO hızları ise ONNX Runtime kullanılarak ölçülmüştür. Testler, 16 GB RAM'e sahip 2025 Apple M4 Air üzerinde torch==2.10.0, ultralytics==8.4.31 ve onnxruntime==1.24.4 kullanılarak gerçekleştirilmiştir. 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, nms=False)  # YOLO26 NMS-free head; no-op for YOLOv8/YOLO11
    model = YOLO(onnx_path)
    model(ASSETS)

Kullanım Örnekleri#

FastSAM modellerini Python uygulamalarına entegre etmek kolaydır. Ultralytics, geliştirme sürecini kolaylaştırmak için kullanıcı dostu Python API ve CLI komutları sunar.

Tahmin Kullanımı#

Bir görseli segmentlere ayırmak 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çacığı, önceden eğitilmiş bir modeli yüklemenin ve bir görüntü üzerinde tahmin çalıştırmanın ne kadar kolay olduğunu gösterir.

FastSAMPredictor örneği

Bu şekilde görüntü üzerinde çıkarımı bir kez çalıştırabilir, tüm segment results öğelerini alabilir ve çıkarımı tekrar tekrar çalıştırmadan istemler için birden çok kez çıkarım yapabilirsin.

from ultralytics.models.fastsam import FastSAMPredictor

# Create FastSAMPredictor
overrides = {"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 değerleri, tahmin edilen maskelere ve kaynak görüntüye kolayca erişmeyi sağlayan Results nesneleridir.

Doğrulama Kullanımı#

FastSAM'in yalnızca tek bir nesne sınıfının algılanmasını ve segmentasyonunu desteklediğini unutma. Bu, tüm nesneleri aynı sınıfa ait olarak tanıyıp segmente edeceği anlamına gelir. Bu nedenle veri kümesini hazırlarken tüm nesne kategorisi kimliklerini 0'a dönüştürmen gerekir.

Modelin bir veri kümesi üzerindeki doğrulaması ş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")

İzleme Kullanımı#

Bir görüntü üzerinde nesne izleme 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 Resmî Kullanımı#

FastSAM ayrıca doğrudan CASIA-LMC-Lab/FastSAM deposundan da edinilebilir. İşte FastSAM modelini kullanırken atabileceğin tipik adımlara kısa bir genel bakış:

Kurulum#

  1. FastSAM deposunu klonla:

    git clone https://github.com/CASIA-LMC-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. FastSAM'i çıkarım için kullan. Örnek komutlar:

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

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

      python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --text_prompt "the yellow dog"
    • Bir sınırlayıcı kutu içindeki nesneleri segmente et (kutu koordinatlarını xywh biçiminde 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 segmente et:

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

Ek olarak, CASIA-LMC-Lab Colab demo aracılığıyla FastSAM modelini deneyebilirsin.

Atıflar ve Teşekkürler#

Gerçek zamanlı instance segmentation alanına yaptıkları önemli katkılar için FastSAM yazarlarını anmak 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}
}

Özgün FastSAM makalesine arXiv üzerinden ulaşabilirsin. Yazarlar çalışmalarını herkese açık hale getirmiştir ve kod tabanına GitHub üzerinden erişilebilir. Alanın ilerlemesine ve çalışmalarını daha geniş topluluğun erişimine sunmalarına yönelik çabalarını takdir ediyoruz.

SSS#

  • FastSAM, Fast Segment Anything Model'in kısaltmasıdır ve nesne segmentasyonu görevlerinde hesaplama gereksinimlerini azaltırken yüksek performansı korumak üzere tasarlanmış, gerçek zamanlı evrişimli sinir ağı (CNN) tabanlı bir çözümdür. Daha ağır Transformer tabanlı bir mimari kullanan Her Şeyi Segmentasyon Modeli (SAM)'nin aksine FastSAM, verimli instance segmentation için Ultralytics YOLOv8-seg kullanır ve bunu iki aşamada gerçekleştirir: tüm örneklerin segmentasyonu ve ardından istem kılavuzlu seçim.

  • FastSAM, segmentasyon görevini YOLOv8-seg ile tüm örneklerin segmentasyonu ve istem kılavuzlu seçim aşamalarına ayırarak gerçek zamanlı segmentasyon sağlar. CNN'lerin hesaplama verimliliğinden yararlanan FastSAM, rekabetçi performansı korurken hesaplama ve kaynak gereksinimlerini önemli ölçüde azaltır. Bu iki aşamalı yaklaşım, FastSAM'in hızlı sonuç gerektiren uygulamalara uygun, hızlı ve verimli segmentasyon sunmasını sağlar.

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

    • Kalite kontrolü ve güvencesi için endüstriyel otomasyon
    • Güvenlik ve gözetim için gerçek zamanlı video analizi
    • Nesne algılama ve segmentasyonu için otonom araçlar
    • Kesin ve hızlı segmentasyon görevleri için tıbbi görüntüleme

    Çeşitli kullanıcı etkileşimi istemlerini işleyebilmesi, FastSAM'i farklı senaryolara uyarlanabilir ve esnek hale getirir.

  • FastSAM'i Python'da çıkarım için kullanmak üzere aşağıdaki örneği izleyebilirsin:

    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 bilgi için belgelerin Tahmin Kullanımı bölümüne göz at.

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

    • Her Şey İstemi: Görünür tüm nesneler için segmentasyon üretir.
    • Sınırlayıcı Kutu (BBox) İstemi: Belirtilen sınırlayıcı kutu içindeki nesneleri segmente eder.
    • Metin İstemi: Açıklamayla eşleşen nesneleri segmente etmek için açıklayıcı bir metin kullanır.
    • Nokta İstemi: Kullanıcı tarafından tanımlanan belirli noktaların yakınındaki nesneleri segmente eder.

    Bu esneklik, FastSAM'in çok çeşitli kullanıcı etkileşimi senaryolarına uyum sağlamasını ve farklı uygulamalardaki faydasını artırmasını mümkün kılar. Bu istemlerin kullanımı hakkında daha fazla bilgi için Temel Özellikler bölümüne başvur.

Yorumlar