Ultralytics YOLO27:
Get Started

Hızlı Segment Anything Modeli (FastSAM)#

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



İzle: Ultralytics ile FastSAM Kullanarak Nesne Takibi

Model Mimarisi#

Hızlı Segment Anything Modeli (FastSAM) mimarisine genel bakış

Genel Bakış#

FastSAM, yüksek hesaplama kaynağı gereksinimlerine sahip, ağır bir Transformer modeli olan Segment Anything Model'in (SAM) sınırlamalarını gidermek için tasarlanmıştır. FastSAM, segment anything görevini iki ardışık aşamaya ayırır: tüm örneklerin segmentasyonu 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, segment anything görevi için gerçek zamanlı bir çözüm sunar ve hızlı sonuç gerektiren endüstriyel uygulamalarda değer kazanır.

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

  3. İstem Kılavuzlu Segmentasyon: FastSAM, çeşitli kullanıcı etkileşimi istemleriyle yönlendirilerek görüntüdeki herhangi bir nesneyi segmentlere ayırabilir; bu da farklı senaryolarda esneklik ve uyarlanabilirlik sağlar.

  4. YOLOv8-seg Tabanlı: FastSAM, örnek segmentasyon dalına sahip 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: FastSAM, MS COCO'daki nesne önerisi görevinde tek bir NVIDIA RTX 3090 üzerinde SAM'den çok daha hızlı çalışırken yüksek puanlar elde ederek verimliliğini ve kapasitesini ortaya koyar.

  6. Pratik Uygulamalar: Önerilen yaklaşım, çok sayıda görüntü işleme görevi için mevcut yöntemlerden onlarca, hatta 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 öncül ekleyerek hesaplama yükünü önemli ölçüde azaltabilecek bir yaklaşımın uygulanabilirliğini gösterir. Böylece genel görüntü işleme görevleri için büyük model mimarilerinde yeni olanakların önünü açar.

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

Bu tabloda, kullanılabilir modeller ve ilgili önceden eğitilmiş ağırlıklar, 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 aktar
FastSAM-sFastSAM-s.ptÖrnek Segmentasyonu❌✅✅✅
FastSAM-xFastSAM-x.ptÖrnek Segmentasyonu❌✅✅✅

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

Burada FastSAM-s'yi 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/görüntü)
Meta SAM-b37593.741703
Meta SAM2-b16280.828867
Meta SAM2-t78.138.923430
MobileSAM40.710.123802
FastSAM-s ve YOLOv8 omurgası23.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 boyutu ve hız farklarının ne kadar büyük olduğunu gösteriyor. SAM, kendine özgü 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, 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 tekrarlamak için:

Örnek
from ultralytics import ASSETS, SAM, YOLO, FastSAM

# SAM2-t, SAM2-b, SAM-b, MobileSAM profillerini çıkar
for file in ["sam_b.pt", "sam2_b.pt", "sam2_t.pt", "mobile_sam.pt"]:
    model = SAM(file)
    model.info()
    model(ASSETS)

# FastSAM-s profili oluştur
model = FastSAM("FastSAM-s.pt")
model.info()
model(ASSETS)

# YOLO modellerinin profilini çıkar (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 içermeyen başlık; YOLOv8/YOLO11 için işlem yapmaz
    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'si ve CLI komutları sunar.

Tahmin Kullanımı#

Bir görüntüyü segmentlere ayırmak için aşağıda gösterildiği gibi predict yöntemini kullan:

Örnek
from ultralytics import FastSAM

# Çıkarım kaynağını tanımla
source = "path/to/bus.jpg"

# Bir FastSAM modeli oluştur
model = FastSAM("FastSAM-s.pt")  # veya FastSAM-x.pt

# Bir görüntü üzerinde çıkarım yap
everything_results = model(source, device="cpu", retina_masks=True, imgsz=1024, conf=0.4, iou=0.9)

# bbox istemiyle çıkarım çalıştır
results = model(source, bboxes=[439, 437, 524, 709])

# Nokta istemiyle çıkarım yap
results = model(source, points=[[200, 200]], labels=[1])

# Metin istemleriyle çıkarım yap
results = model(source, texts="a photo of a dog")

# bbox'lar, noktalar ve metin istemlerini aynı anda kullanarak çıkarım yap
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 yürütmenin ne kadar kolay olduğunu gösterir.

FastSAMPredictor örneği

Bu şekilde, görüntü üzerinde çıkarımı çalıştırıp tüm segment results sonuçlarını bir kez alabilir ve çıkarımı tekrar çalıştırmadan istemlerle birden çok kez çıkarım yapabilirsin.

from ultralytics.models.fastsam import FastSAMPredictor

# FastSAMPredictor oluştur
overrides = {"conf": 0.25, "task": "segment", "mode": "predict", "model": "FastSAM-s.pt", "save": False, "imgsz": 1024}
predictor = FastSAMPredictor(overrides=overrides)

# Her şeyi segmente ayır
everything_results = predictor("ultralytics/assets/bus.jpg")

# İstem çıkarımı
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 öğeleri, tahmin edilen maskelere ve kaynak görüntüye kolayca erişmeni sağlayan Results nesneleridir.

Doğrulama Kullanımı#

FastSAM'in yalnızca tek bir nesne sınıfının algılanmasını ve segmentlere ayrılmasını desteklediğini lütfen unutma. Yani tüm nesneleri aynı sınıfa aitmiş gibi tanır ve segmentlere ayırır. Bu nedenle veri kümesini hazırlarken tüm nesne kategorisi kimliklerini 0'a dönüştürmen gerekir.

Bir modelin veri kümesi üzerinde doğrulanması şu şekilde yapılabilir:

Örnek
from ultralytics import FastSAM

# Bir FastSAM modeli oluştur
model = FastSAM("FastSAM-s.pt")  # veya FastSAM-x.pt

# Modeli doğrula
results = model.val(data="coco8-seg.yaml")

Takip Kullanımı#

Bir görüntüde nesne takibi yapmak için aşağıda gösterildiği gibi track yöntemini kullan:

Örnek
from ultralytics import FastSAM

# Bir FastSAM modeli oluştur
model = FastSAM("FastSAM-s.pt")  # veya FastSAM-x.pt

# Bir FastSAM modeliyle videoda takip yap
results = model.track(source="path/to/video.mp4", imgsz=640)

FastSAM Resmî Kullanımı#

FastSAM, CASIA-LMC-Lab/FastSAM deposundan doğrudan da kullanılabilir. FastSAM'ı kullanırken izleyebileceğin tipik adımlara kısaca göz atalım:

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. Klonladığın 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

Kullanım Örneği#

  1. Bir model kontrol noktası indir.

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

    • Bir görüntüdeki her şeyi bölütle:

      python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg
    • Metin istemi kullanarak belirli nesneleri bölütle:

      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 bölütle (kutu koordinatlarını xywh biçiminde ver):

      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 bölütle:

      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'ı CASIA-LMC-Lab Colab demosu üzerinden deneyebilirsin.

Atıflar ve Teşekkürler#

Gerçek zamanlı örnek bölütleme alanındaki önemli katkılarından dolayı FastSAM yazarlarına teşekkür ederiz:

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 hâle getirdi ve kod tabanına GitHub üzerinden erişilebilir. Alandaki ilerlemeye katkı sağlama ve çalışmalarını daha geniş topluluğun erişimine açma çabalarını takdir ediyoruz.

Sık Sorulan Sorular#

  • FastSAM, Fast Segment Anything Model'in kısaltmasıdır; nesne bölütleme görevlerinde yüksek performansı korurken hesaplama gereksinimlerini azaltmak için tasarlanmış, gerçek zamanlı bir evrişimli sinir ağı (CNN) tabanlı çözümdür. Daha ağır bir Transformer tabanlı mimari kullanan Segment Anything Model'den (SAM) farklı olarak FastSAM, iki aşamada verimli örnek bölütleme yapmak için Ultralytics YOLOv8-seg kullanır: tüm örneklerin bölütlenmesi ve ardından istemle yönlendirilen seçim.

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

  • FastSAM, gerçek zamanlı bölütleme performansı gerektiren çeşitli bilgisayarlı görü görevlerinde kullanışlıdır. Uygulama alanları şunlardır:

    • 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 bölütleme için otonom araçlar
    • Hassas ve hızlı bölütleme görevleri için tıbbi görüntüleme

    Farklı kullanıcı etkileşimi istemlerini işleyebilmesi, FastSAM'ı çeşitli senaryolara uyarlanabilir ve esnek hâle getirir.

  • Python'da çıkarım için FastSAM'ı aşağıdaki örneği izleyerek kullanabilirsin:

    from ultralytics import FastSAM
    
    # Çıkarım kaynağını tanımla
    source = "path/to/bus.jpg"
    
    # Bir FastSAM modeli oluştur
    model = FastSAM("FastSAM-s.pt")  # veya FastSAM-x.pt
    
    # Bir görüntü üzerinde çıkarım yap
    everything_results = model(source, device="cpu", retina_masks=True, imgsz=1024, conf=0.4, iou=0.9)
    
    # bbox istemiyle çıkarım çalıştır
    results = model(source, bboxes=[439, 437, 524, 709])
    
    # Nokta istemiyle çıkarım yap
    results = model(source, points=[[200, 200]], labels=[1])
    
    # Metin istemleriyle çıkarım yap
    results = model(source, texts="a photo of a dog")
    
    # bbox'lar, noktalar ve metin istemlerini aynı anda kullanarak çıkarım yap
    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 belgelendirmedeki Tahmin Kullanımı bölümüne göz at.

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

    • Her Şey İstemi: Görüntüde görünen tüm nesneler için bölütleme üretir.
    • Sınırlayıcı Kutu (BBox) İstemi: Belirtilen sınırlayıcı kutu içindeki nesneleri bölütler.
    • Metin İstemi: Açıklamayla eşleşen nesneleri bölütlemek için tanımlayıcı bir metin kullanır.
    • Nokta İstemi: Kullanıcı tarafından tanımlanan belirli noktaların yakınındaki nesneleri bölütler.

    Bu esneklik, FastSAM'ın çok çeşitli kullanıcı etkileşimi senaryolarına uyum sağlamasına ve farklı uygulamalardaki kullanışlılığını artırmasına olanak tanır. Bu istemleri kullanma hakkında daha fazla bilgi için Temel Özellikler bölümüne bak.

Yorumlar