İçeriğe geç

Segment Anything Model (SAM)

Colab'de Herhangi Bir Şeyi Bölümlere Ayırma Nasıl Kullanılır

Segment Anything Model veya SAM ile görüntü segmentasyonunun sınırlarına hoş geldiniz. Bu devrim niteliğindeki model, gerçek zamanlı performansla istemlenebilir görüntü segmentasyonunu tanıtarak oyunu değiştirdi ve alanda yeni standartlar belirledi.

SAM'e Giriş: Her Şeyi Segmentle Modeli

Segment Anything Model veya SAM, istemlenebilir segmentasyona izin veren ve görüntü analizi görevlerinde benzersiz çok yönlülük sağlayan son teknoloji bir görüntü segmentasyon modelidir. SAM, görüntü segmentasyonu için yeni bir model, görev ve veri kümesi sunan çığır açan bir proje olan Segment Anything girişiminin kalbini oluşturur.

SAM'in gelişmiş tasarımı, ön bilgiye ihtiyaç duymadan yeni görüntü dağılımlarına ve görevlere uyum sağlamasına olanak tanır; bu özellik sıfır atış transferi olarak bilinir. 11 milyon özenle seçilmiş görüntüye yayılmış 1 milyardan fazla maske içeren geniş SA-1B veri kümesi üzerinde eğitilen SAM, birçok durumda önceki tam denetimli sonuçları aşarak etkileyici sıfır atış performansı sergilemiştir.

Veri kümesi örnek görüntüsü SA-1B Örnek resimleri. Yeni tanıtılan SA-1B veri kümesinden maskelerle kaplanmış veri kümesi görüntüleri. SA-1B, 11 milyon çeşitli, yüksek çözünürlüklü, lisanslı ve gizliliği koruyan görüntü ve 1,1 milyar yüksek kaliteli segmentasyon maskesi içerir. Bu maskeler tamamen SAM tarafından otomatik olarak açıklanmıştır ve insan derecelendirmeleri ve çok sayıda deneyle doğrulandığı gibi, yüksek kalite ve çeşitliliğe sahiptir. Görüntüler, görselleştirme için görüntü başına maske sayısına göre gruplandırılmıştır (ortalama olarak görüntü başına ∼100 maske vardır).

Her Şeyi Segmentleme Modelinin (SAM) Temel Özellikleri

  • İstemlenebilir Bölütleme Görevi: SAM, akılda istemlenebilir bir bölütleme görevi ile tasarlanmıştır ve bir nesneyi tanımlayan uzamsal veya metinsel ipuçları gibi herhangi bir istemden geçerli bölütleme maskeleri oluşturmasına olanak tanır.
  • Gelişmiş Mimari: Segment Anything Modeli, güçlü bir görüntü kodlayıcı, bir istem kodlayıcı ve hafif bir maske kod çözücü kullanır. Bu benzersiz mimari, segmentasyon görevlerinde esnek istemeyi, gerçek zamanlı maske hesaplamayı ve belirsizlik farkındalığını sağlar.
  • SA-1B Veri Kümesi: Segment Anything projesi tarafından tanıtılan SA-1B veri kümesi, 11 milyon görüntü üzerinde 1 milyardan fazla maske içerir. Bugüne kadarki en büyük segmentasyon veri kümesi olarak, SAM'e çeşitli ve büyük ölçekli bir eğitim veri kaynağı sağlar.
  • Sıfır Atış Performansı: SAM, çeşitli segmentasyon görevlerinde olağanüstü sıfır atış performansı sergileyerek, prompt mühendisliğine minimum ihtiyaç duyarak çeşitli uygulamalar için kullanıma hazır bir araçtır.

Segment Anything Modeli ve SA-1B veri kümesine derinlemesine bir bakış için lütfen Segment Anything web sitesini ziyaret edin ve Segment Anything araştırma makalesine göz atın.

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

Bu tablo, mevcut modelleri, belirli önceden eğitilmiş ağırlıkları, destekledikleri görevleri ve desteklenen modlar için ✅ emojileri ve desteklenmeyen modlar için ❌ emojileri ile belirtilen Çıkarım, Doğrulama, Eğitim ve Dışa Aktarma gibi farklı çalışma modlarıyla uyumluluklarını sunar.

Model Türü Önceden Eğitilmiş Ağırlıklar Desteklenen Görevler Çıkarım Doğrulama Eğitim Dışa aktar
SAM temel sam_b.pt Örnek Segmentasyonu
SAM large sam_l.pt Örnek Segmentasyonu

SAM Nasıl Kullanılır: Görüntü Bölütlemede Çok Yönlülük ve Güç

Segment Anything Model, eğitim verilerinin ötesine geçen çok sayıda aşağı yönlü görev için kullanılabilir. Bu, kenar algılama, nesne teklifi oluşturma, örnek segmentasyonu ve ön metinden maskeye tahmini içerir. İstek mühendisliği ile SAM, sıfır atış şeklinde yeni görevlere ve veri dağılımlarına hızla uyum sağlayarak, onu tüm görüntü segmentasyon ihtiyaçlarınız için çok yönlü ve güçlü bir araç haline getirir.

SAM tahmin örneği

İstemlerle bölümlere ayır

Belirli istemlerle görüntüyü bölümlere ayırın.

from ultralytics import SAM

# Load a model
model = SAM("sam_b.pt")

# Display model information (optional)
model.info()

# Run inference with bboxes prompt
results = model("ultralytics/assets/zidane.jpg", bboxes=[439, 437, 524, 709])

# Run inference with single point
results = model(points=[900, 370], labels=[1])

# Run inference with multiple points
results = model(points=[[400, 370], [900, 370]], labels=[1, 1])

# Run inference with multiple points prompt per object
results = model(points=[[[400, 370], [900, 370]]], labels=[[1, 1]])

# Run inference with negative points prompt
results = model(points=[[[400, 370], [900, 370]]], labels=[[1, 0]])

Her şeyi segmentlere ayır

Görüntünün tamamını bölümlere ayırın.

from ultralytics import SAM

# Load a model
model = SAM("sam_b.pt")

# Display model information (optional)
model.info()

# Run inference
model("path/to/image.jpg")
# Run inference with a SAM model
yolo predict model=sam_b.pt source=path/to/image.jpg
  • Buradaki mantık, herhangi bir istem (bboxes/points/masks) iletmezseniz tüm görüntüyü bölümlere ayırmaktır.

SAMPredictor örneği

Bu şekilde görüntüyü bir kez ayarlayabilir ve görüntü kodlayıcıyı birden çok kez çalıştırmadan, istem çıkarımlarını birden çok kez çalıştırabilirsiniz.

from ultralytics.models.sam import Predictor as SAMPredictor

# Create SAMPredictor
overrides = dict(conf=0.25, task="segment", mode="predict", imgsz=1024, model="mobile_sam.pt")
predictor = SAMPredictor(overrides=overrides)

# Set image
predictor.set_image("ultralytics/assets/zidane.jpg")  # set with image file
predictor.set_image(cv2.imread("ultralytics/assets/zidane.jpg"))  # set with np.ndarray
results = predictor(bboxes=[439, 437, 524, 709])

# Run inference with single point prompt
results = predictor(points=[900, 370], labels=[1])

# Run inference with multiple points prompt
results = predictor(points=[[400, 370], [900, 370]], labels=[[1, 1]])

# Run inference with negative points prompt
results = predictor(points=[[[400, 370], [900, 370]]], labels=[[1, 0]])

# Reset image
predictor.reset_image()

Ek argümanlarla her şeyi segmentlere ayır.

from ultralytics.models.sam import Predictor as SAMPredictor

# Create SAMPredictor
overrides = dict(conf=0.25, task="segment", mode="predict", imgsz=1024, model="mobile_sam.pt")
predictor = SAMPredictor(overrides=overrides)

# Segment with additional args
results = predictor(source="ultralytics/assets/zidane.jpg", crop_n_layers=1, points_stride=64)

Not

Geri dönenlerin hepsi results yukarıdaki örneklerde Sonuçlar tahmin edilen maskelere ve kaynak görüntüye kolayca erişim sağlayan nesne.

SAM'in YOLO ile Karşılaştırılması

Burada Meta'nın SAM-b modelini, Ultralytics'in en küçük segmentasyon modeli olan YOLO11n-seg ile karşılaştırıyoruz:

Model Boyut
(MB)
Parametreler
(M)
Hız (CPU)
(ms/resim)
Meta SAM-b 375 93.7 49401
MobileSAM 40.7 10.1 25381
YOLOv8 backbone ile FastSAM-s 23.7 11.8 55.9
Ultralytics YOLOv8n-seg 6.7 (11.7 kat daha küçük) 3.4 (11.4 kat daha az) 24.5 (1061 kat daha hızlı)
Ultralytics YOLO11n-seg 5.9 (13.2 kat daha küçük) 2.9 (13.4 kat daha az) 30.1 (864 kat daha hızlı)

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

Testler, 24 GB RAM'e sahip 2025 Apple M4 Pro üzerinde kullanılarak çalıştırılır torch==2.6.0 ve ultralytics==8.3.90. 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
for file_name in ["yolov8n-seg.pt", "yolo11n-seg.pt"]:
    model = YOLO(file_name)
    model.info()
    model(ASSETS)

Otomatik Açıklama: Segmentasyon Veri Kümelerine Hızlı Bir Yol

Otomatik açıklama, kullanıcıların önceden eğitilmiş bir tespit modeli kullanarak bir segmentasyon veri kümesi oluşturmasına olanak tanıyan SAM'in temel bir özelliğidir. Bu özellik, çok sayıda görüntünün hızlı ve doğru bir şekilde açıklanmasını sağlayarak, zaman alan manuel etiketleme ihtiyacını ortadan kaldırır.

Bir Algılama Modeli Kullanarak Segmentasyon Veri Kümenizi Oluşturun

Ultralytics çerçevesiyle veri kümenizi otomatik olarak etiketlemek için şunu kullanın: auto_annotate aşağıda gösterildiği gibi işlev görür:

Örnek

from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolo11x.pt", sam_model="sam_b.pt")
Argüman Tür Varsayılan Açıklama
data str gerekli Açıklama veya segmentasyon için hedef resimleri içeren dizine giden yol.
det_model str 'yolo11x.pt' İlk nesne tespiti için YOLO tespit model yolu.
sam_model str 'sam_b.pt' Segmentasyon için SAM model yolu (SAM, SAM2 varyantlarını ve mobile_sam modellerini destekler).
device str '' Hesaplama cihazı (örneğin, 'cuda:0', 'cpu' veya otomatik cihaz algılama için '').
conf float 0.25 Zayıf tespitleri filtrelemek için YOLO tespit güven eşiği.
iou float 0.45 Çakışan kutuları filtrelemek için Non-Maximum Suppression için IoU eşiği.
imgsz int 640 Görüntüleri yeniden boyutlandırmak için giriş boyutu (32'nin katı olmalıdır).
max_det int 300 Bellek verimliliği için görüntü başına maksimum tespit sayısı.
classes list[int] None Algılanacak sınıf indekslerinin listesi (örn., [0, 1] kişi ve bisiklet için).
output_dir str None Açıklamalar için kaydetme dizini (veri yoluna göre varsayılan olarak './labels' olur).

auto_annotate fonksiyonu, resimlerinizin yolunu alır ve önceden eğitilmiş tespit ve SAM segmentasyon modellerini, modellerin üzerinde çalıştırılacağı cihazı ve açıklamalı sonuçları kaydetmek için çıktı dizinini belirtmek için isteğe bağlı argümanlar içerir.

Önceden eğitilmiş modellerle otomatik açıklama, yüksek kaliteli segmentasyon veri kümeleri oluşturmak için gereken zamanı ve çabayı önemli ölçüde azaltabilir. Bu özellik, özellikle büyük görüntü koleksiyonlarıyla uğraşan araştırmacılar ve geliştiriciler için faydalıdır, çünkü manuel açıklama yerine model geliştirme ve değerlendirmeye odaklanmalarını sağlar.

Alıntılar ve Teşekkürler

Araştırma veya geliştirme çalışmalarınızda SAM'i faydalı bulursanız, lütfen makalemize atıfta bulunun:

@misc{kirillov2023segment,
      title={Segment Anything},
      author={Alexander Kirillov and Eric Mintun and Nikhila Ravi and Hanzi Mao and Chloe Rolland and Laura Gustafson and Tete Xiao and Spencer Whitehead and Alexander C. Berg and Wan-Yen Lo and Piotr Dollár and Ross Girshick},
      year={2023},
      eprint={2304.02643},
      archivePrefix={arXiv},
      primaryClass={cs.CV}
}

Bilgisayar görüşü topluluğu için bu değerli kaynağı oluşturup sürdürdükleri için Meta AI'ya minnettarlığımızı ifade etmek isteriz.

SSS

Ultralytics tarafından geliştirilen Segment Anything Model (SAM) nedir?

Ultralytics tarafından geliştirilen Segment Anything Model (SAM), istem tabanlı segmentasyon görevleri için tasarlanmış devrim niteliğinde bir görüntü segmentasyon modelidir. Uzamsal veya metinsel ipuçları gibi çeşitli istemlerden yüksek kaliteli segmentasyon maskeleri oluşturmak için görüntü ve istem kodlayıcıları ile hafif bir maske kod çözücüyü birleştiren gelişmiş bir mimariden yararlanır. Kapsamlı SA-1B veri seti üzerinde eğitilen SAM, ön bilgi olmadan yeni görüntü dağılımlarına ve görevlere uyum sağlayarak sıfır atış performansında mükemmeldir.

Görüntü segmentasyonu için Segment Anything Modelini (SAM) nasıl kullanabilirim?

Çeşitli istemlerle (sınırlayıcı kutular veya noktalar gibi) çıkarım yaparak görüntü segmentasyonu için Segment Anything Modelini (SAM) kullanabilirsiniz. İşte Python kullanan bir örnek:

from ultralytics import SAM

# Load a model
model = SAM("sam_b.pt")

# Segment with bounding box prompt
model("ultralytics/assets/zidane.jpg", bboxes=[439, 437, 524, 709])

# Segment with points prompt
model("ultralytics/assets/zidane.jpg", points=[900, 370], labels=[1])

# Segment with multiple points prompt
model("ultralytics/assets/zidane.jpg", points=[[400, 370], [900, 370]], labels=[[1, 1]])

# Segment with multiple points prompt per object
model("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 1]])

# Segment with negative points prompt.
model("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 0]])

Alternatif olarak, komut satırı arayüzünde (CLI) SAM ile çıkarım çalıştırabilirsiniz:

yolo predict model=sam_b.pt source=path/to/image.jpg

Daha ayrıntılı kullanım talimatları için Segmentasyon bölümünü ziyaret edin.

SAM ve YOLO modelleri performans açısından nasıl karşılaştırılır?

YOLO modelleriyle karşılaştırıldığında, SAM-b, SAM2-t, MobileSAM ve FastSAM-s gibi SAM varyantları genellikle daha büyük ve daha yavaştır, ancak benzersiz sıfır atış segmentasyon yetenekleri sunar. Örneğin, Ultralytics YOLOv8n-seg, Meta'nın orijinal SAM-b modelinden 11.7 kat daha küçük ve 1069 kat daha hızlıdır ve bu da YOLO'nun hız ve verimlilikteki önemli avantajını vurgular. Benzer şekilde, daha yeni YOLO11n-seg daha da küçük boyut sağlar ve etkileyici çıkarım hızını korur. Bu, YOLO modellerini hızlı, hafif ve hesaplama açısından verimli segmentasyon gerektiren uygulamalar için ideal hale getirirken, SAM modelleri esnek, istemlenebilir ve sıfır atış segmentasyon görevlerinde öne çıkar.

SAM kullanarak veri kümemi otomatik olarak nasıl etiketleyebilirim?

Ultralytics'in SAM'i, önceden eğitilmiş bir algılama modeli kullanarak segmentasyon veri kümeleri oluşturmayı sağlayan bir otomatik etiketleme özelliği sunar. İşte Python'da bir örnek:

from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolov8x.pt", sam_model="sam_b.pt")

Bu fonksiyon, resimlerinizin yolunu ve önceden eğitilmiş algılama ve SAM segmentasyon modelleri için isteğe bağlı argümanları, cihaz ve çıktı dizini belirtimleriyle birlikte alır. Eksiksiz bir kılavuz için Otomatik Etiketleme bölümüne bakın.

Segment Anything Model'ini (SAM) eğitmek için hangi veri kümeleri kullanılır?

SAM, 11 milyon görüntüde 1 milyardan fazla maske içeren kapsamlı SA-1B veri kümesi üzerinde eğitilmiştir. SA-1B, bugüne kadarki en büyük segmentasyon veri kümesidir ve çeşitli segmentasyon görevlerinde etkileyici sıfır atış performansı sağlayan yüksek kaliteli ve çeşitli eğitim verileri sağlar. Daha fazla ayrıntı için Veri Kümesi bölümünü ziyaret edin.



📅 1 yıl önce oluşturuldu ✏️ 3 ay önce güncellendi

Yorumlar