İç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
model('ultralytics/assets/zidane.jpg', bboxes=[439, 437, 524, 709])

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

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])
results = predictor(points=[900, 370], labels=[1])

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

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 Parametreler Hız (CPU)
Meta'nın SAM-b 358 MB 94.7 M 51096 ms/im
MobileSAM 40,7 MB 10.1 M 46122 ms/im
FastSAM YOLOv8 omurgalı -s 23,7 MB 11.8 M 115 ms/im
Ultralytics YOLOv8n-seg 6,7 MB (53,4 kat daha küçük) 3,4 M (27,9 kat daha az) 59 ms/im (866 kat 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 FastSAM, SAM, YOLO

# Profile SAM-b
model = SAM('sam_b.pt')
model.info()
model('ultralytics/assets')

# Profile MobileSAM
model = SAM('mobile_sam.pt')
model.info()
model('ultralytics/assets')

# Profile FastSAM-s
model = FastSAM('FastSAM-s.pt')
model.info()
model('ultralytics/assets')

# Profile YOLOv8n-seg
model = YOLO('yolov8n-seg.pt')
model.info()
model('ultralytics/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="yolov8x.pt", sam_model='sam_b.pt')
Tartışma Tip Açıklama Varsayılan
Veri 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 'yolov8x.pt'. 'yolov8x.pt'
sam_model str, isteğe bağlı Önceden eğitilmiş SAM segmentasyon modeli. Varsayılan değer 'sam_b.pt'. 'sam_b.pt'
cihaz str, isteğe bağlı Modellerin çalıştırılacağı cihaz. Varsayılan olarak boş bir dizedir (varsa CPU veya GPU).
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. Hiçbiri

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.

Anahtar kelimeler: Segment Anything, Segment Anything Model, SAM, Meta SAM, görüntü segmentasyonu, hızlı segmentasyon, sıfır çekim performansı, SA-1B veri seti, gelişmiş mimari, otomatik açıklama, Ultralytics, önceden eğitilmiş modeller, SAM base, SAM large, örnek segmentasyonu, bilgisayarla görme, AI, yapay zeka, makine öğrenimi, veri açıklaması, segmentasyon maskeleri, algılama modeli, YOLO algılama modeli, bibtex, Meta AI.



Oluşturuldu 2023-11-12, Güncellendi 2024-04-17
Yazarlar: glenn-jocher (10), ChaoningZhang (1), Laughing-q (1)

Yorumlar