Segment Anything Modeli (SAM)
Welcome to the frontier of image segmentation with the Segment Anything Model, or SAM. This revolutionary model has changed the game by introducing promptable image segmentation with real-time performance, setting new standards in the field.
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.
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.
- Zero-Shot Performance: SAM displays outstanding zero-shot performance across various segmentation tasks, making it a ready-to-use tool for diverse applications with minimal need for prompt engineering.
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üç
The Segment Anything Model can be employed for a multitude of downstream tasks that go beyond its training data. This includes edge detection, object proposal generation, instance segmentation, and preliminary text-to-mask prediction. With prompt engineering, SAM can swiftly adapt to new tasks and data distributions in a zero-shot manner, establishing it as a versatile and potent tool for all your image segmentation needs.
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 = predictor(points=[900, 370], labels=[1])
# Run inference with multiple points
results = predictor(points=[[400, 370], [900, 370]], labels=[1, 1])
# Run inference with multiple points prompt per object
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]])
Her şeyi bölümlere ayırın
Tüm görüntüyü segmentlere ayırın.
- 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.
- için daha fazla ek argüman
Segment everything
bkz.Predictor/generate
Referans.
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 | Size (MB) |
Parameters (M) |
Speed (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 smaller) | 3.4 (27.9x less) | 59 (866x faster) |
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
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 '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' |
device |
str , isteğe bağlı |
Modellerin çalıştırılacağı cihaz. Varsayılan olarak boş bir dizedir (CPU veya GPU, varsa). | |
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}
}
We would like to express our gratitude to Meta AI for creating and maintaining this valuable resource for the computer vision community.
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:
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 is trained on the extensive SA-1B dataset which comprises over 1 billion masks across 11 million images. SA-1B is the largest segmentation dataset to date, providing high-quality and diverse training data, ensuring impressive zero-shot performance in varied segmentation tasks. For more details, visit the Dataset section.