İçeriğe geç

Segment Anything Modeli (SAM)

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 hızlı görüntü segmentasyonu sunarak oyunu değiştirdi ve bu alanda yeni standartlar belirledi.

SAM adresine giriş: Segment Anything Modeli

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

SAM'nin gelişmiş tasarımı, sıfır çekim aktarımı olarak bilinen bir özellik olan yeni görüntü dağılımlarına ve görevlere önceden bilgi sahibi olmadan uyum sağlamasına olanak tanır. Özenle seçilmiş 11 milyon 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ı geride bırakarak etkileyici bir sıfır çekim performansı sergilemiştir.

Veri kümesi örnek görüntüsü SA-1B Örnek görüntüler. Veri kümesi görüntüleri, yeni tanıtılan SA-1B veri kümesinden maskeleri üst üste bindirmiştir. SA-1B 11 milyon farklı, yüksek çözünürlüklü, lisanslı ve gizliliği koruyan görüntü ve 1,1 milyar yüksek kaliteli segmentasyon maskesi içermektedir. Bu maskeler SAM tarafından tamamen otomatik olarak eklenmiştir ve insan değerlendirmeleri ve çok sayıda deneyle doğrulandığı üzere 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 (görüntü başına ortalama ∼100 maske vardır).

Segment Anything Modelinin Temel Özellikleri (SAM)

  • İstenebilir Segmentasyon Görevi: SAM , bir nesneyi tanımlayan uzamsal veya metin ipuçları gibi herhangi bir istemden geçerli segmentasyon maskeleri oluşturmasına olanak tanıyan, istenebilir bir segmentasyon görevi düşünülerek tasarlanmıştır.
  • Gelişmiş Mimari: Segment Anything Model 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 komut istemi, gerçek zamanlı maske hesaplama ve belirsizlik farkındalığı 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çermektedir. Bugüne kadarki en büyük segmentasyon veri seti olan bu veri seti, SAM adresine çeşitli ve büyük ölçekli bir eğitim veri kaynağı sağlamaktadır.
  • Sıfır Çekim Performansı: SAM , çeşitli segmentasyon görevlerinde olağanüstü sıfır çekim performansı sergileyerek , hızlı mühendisliğe minimum ihtiyaç duyan çeşitli uygulamalar için kullanıma hazır bir araç haline getirir.

Segment Anything Modeli ve SA-1B veri setine 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, önceden eğitilmiş belirli ağırlıklarıyla birlikte mevcut modelleri, destekledikleri görevleri ve desteklenen modlar için ✅ emojisi ve desteklenmeyen modlar için ❌ emojisi ile gösterilen Çıkarım, Doğrulama, Eğitim ve Dışa Aktarma gibi farklı çalışma modlarıyla uyumluluklarını sunar.

Model Tipi Önceden Eğitilmiş Ağırlıklar Desteklenen Görevler Çıkarım Doğrulama Eğitim İhracat
SAM taban sam_b.pt Örnek Segmentasyonu
SAM büyük sam_l.pt Örnek Segmentasyonu

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

Segment Anything Modeli, eğitim verilerinin ötesine geçen çok sayıda alt görev için kullanılabilir. Buna kenar algılama, nesne önerisi oluşturma, örnek segmentasyonu ve ön metin-maske tahmini dahildir. Hızlı mühendislik sayesinde SAM yeni görevlere ve veri dağılımlarına hızlı bir şekilde adapte olabilir ve tüm görüntü segmentasyon ihtiyaçlarınız için çok yönlü ve güçlü bir araç haline gelir.

SAM Tahmin örneği

Yönlendirmeler içeren segment

Görüntüyü verilen komutlarla 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 bölümlere ayırın

Tüm görüntüyü segmentlere 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) geçmezseniz 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 istemleri 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()

Her şeyi ek argümanlarla bölümlere ayırın.

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

İade edilen tüm results yukarıdaki örneklerde Sonuçlar nesnesi, öngörülen maskelere ve kaynak görüntüye kolayca erişilmesini sağlar.

SAM karşılaştırma vs YOLOv8

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

Model Boyut
(MB)
Parametreler
(M)
Hız (CPU)
(ms/im)
Meta SAM-b 358 94.7 51096
MobileSAM 40.7 10.1 46122
FastSAM YOLOv8 omurgalı -s 23.7 11.8 115
Ultralytics YOLOv8n-seg 6,7 (53,4x daha küçük) 3,4 (27,9 kat daha az) 59 (866x daha hızlı)

Bu karşılaştırma, modeller arasındaki model boyutları ve hızlarındaki büyüklük sırası farklarını göstermektedir. SAM otomatik segmentasyon için benzersiz yetenekler sunarken, daha küçük, daha hızlı ve daha verimli olan YOLOv8 segment modellerine doğrudan rakip değildir.

Testler, 16 GB RAM'e sahip 2023 Apple M2 Macbook üzerinde gerçekleştirilmiştir. Bu testi yeniden oluşturmak için:

Örnek

from ultralytics import ASSETS, SAM, YOLO, FastSAM

# Profile SAM-b, MobileSAM
for file in ["sam_b.pt", "mobile_sam.pt"]:
    model = SAM(file)
    model.info()
    model(ASSETS)

# Profile FastSAM-s
model = FastSAM("FastSAM-s.pt")
model.info()
model(ASSETS)

# Profile YOLOv8n-seg
model = YOLO("yolov8n-seg.pt")
model.info()
model(ASSETS)

Otomatik Notasyon: Segmentasyon Veri Kümelerine Giden Hızlı Bir Yol

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

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

Veri kümenizi Ultralytics çerçevesi ile otomatik olarak notlandırmak için auto_annotate fonksiyonu aşağıda gösterildiği gibi:

Örnek

from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolo11x.pt", sam_model="sam_b.pt")
Tartışma Tip Açıklama Varsayılan
data str Açıklama eklenecek görüntüleri içeren bir klasörün yolu.
det_model str, isteğe bağlı Önceden eğitilmiş YOLO algılama modeli. Varsayılan değer 'yolo11x.pt'. 'yolo11x.pt'
sam_model str, isteğe bağlı Önceden eğitilmiş SAM segmentasyon modeli. Varsayılan değer 'sam_b.pt'. 'sam_b.pt'
device str, isteğe bağlı Modellerin çalıştırılacağı cihaz. Varsayılan olarak boş bir dizedir (CPU veya GPU, varsa).
conf float, isteğe bağlı Algılama modeli için güven eşiği; varsayılan değer 0,25'tir. 0.25
iou float, isteğe bağlı Algılama sonuçlarında çakışan kutuları filtrelemek için IoU eşiği; varsayılan değer 0,45'tir. 0.45
imgsz int, isteğe bağlı Girdi görüntü yeniden boyutlandırma boyutu; varsayılan 640'tır. 640
max_det int, isteğe bağlı Yoğun sahnelerde çıktıları kontrol etmek için görüntü başına algılamaları sınırlar. 300
classes list, isteğe bağlı Tahminleri belirtilen sınıf kimliklerine göre filtreleyerek yalnızca ilgili algılamaları döndürür. None
output_dir str, Yok, isteğe bağlı Açıklamalı sonuçların kaydedileceği dizin. Varsayılan olarak 'data' ile aynı dizindeki 'labels' klasörüdür. None

Bu auto_annotate fonksiyonu, önceden eğitilmiş algılama ve SAM segmentasyon modellerini, modellerin çalıştırılacağı cihazı ve açıklamalı sonuçların kaydedileceği çıktı dizinini belirtmek için isteğe bağlı bağımsız değişkenlerle birlikte resimlerinizin yolunu alır.

Ö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.

Atıflar ve Teşekkür

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

@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}
}

Bilgisayarla görme topluluğu için bu değerli kaynağı yarattığı ve sürdürdüğü için Meta AI'ya şükranlarımızı sunarız.

SSS

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

Ultralytics tarafından geliştirilen Segment Anything Model (SAM), istenebilir segmentasyon görevleri için tasarlanmış devrim niteliğinde bir görüntü segmentasyon modelidir. Uzamsal veya metin ipuçları gibi çeşitli ipuçlarından yüksek kaliteli segmentasyon maskeleri üretmek için hafif bir maske kod çözücü ile birleştirilmiş görüntü ve istem kodlayıcıları da dahil olmak üzere gelişmiş mimariden yararlanır. Kapsamlı SA-1B veri kümesi üzerinde eğitilen SAM , sıfır çekim performansında üstündür ve önceden bilgi sahibi olmadan yeni görüntü dağılımlarına ve görevlere uyum sağlar. Daha fazlasını buradan öğrenin.

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

Segment Anything Model'i (SAM), sınırlayıcı kutular veya noktalar gibi çeşitli istemlerle çıkarım yaparak görüntü segmentasyonu için kullanabilirsiniz. İşte Python adresini 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 YOLOv8 performans açısından nasıl karşılaştırılır?

YOLOv8 ile karşılaştırıldığında, SAM-b ve FastSAM-s gibi SAM modelleri daha büyük ve yavaştır, ancak otomatik segmentasyon için benzersiz yetenekler sunar. Örneğin, Ultralytics YOLOv8n -seg, SAM-b'den 53,4 kat daha küçük ve 866 kat daha hızlıdır. Bununla birlikte, SAM'un sıfır atış performansı, onu çeşitli, eğitimsiz görevlerde oldukça esnek ve verimli kılar. SAM ve YOLOv8 arasındaki performans karşılaştırmaları hakkında daha fazla bilgiyiburadan edinebilirsiniz.

Veri kümemi SAM kullanarak nasıl otomatik olarak notlandırabilirim?

Ultralytics' SAM , önceden eğitilmiş bir algılama modeli kullanarak segmentasyon veri kümeleri oluşturmaya olanak tanıyan bir otomatik açıklama özelliği sunar. İşte Python adresinde 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ı bağımsız değişkenlerin yanı sıra cihaz ve çıktı dizini özelliklerini alır. Tam bir kılavuz için Otomatik Notasyon bölümüne bakın.

Segment Anything Modelini (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 ✏️ 19 gün önce güncellendi

Yorumlar