Segment Anything Model (SAM)
Segment Anything Model veya SAM ile görüntü segmentasyonu dünyasının sınırlarına hoş geldin. Bu devrim niteliğindeki model, gerçek zamanlı performansla komut tabanlı görüntü segmentasyonunu tanıtarak oyunun kurallarını değiştirdi ve alanda yeni standartlar belirledi.
SAM'e Giriş: Segment Anything Model
Segment Anything Model veya SAM, görüntü analizi görevlerinde benzersiz bir esneklik sağlayan ve komut tabanlı segmentasyona izin veren en gelişmiş görüntü segmentasyon modelidir. SAM, görüntü segmentasyonu için yeni bir model, görev ve veri kümesi sunan çığır açıcı Segment Anything girişiminin kalbini oluşturur.
SAM'in gelişmiş tasarımı, önceden bilgi sahibi olmadan yeni görüntü dağılımlarına ve görevlerine uyum sağlamasına olanak tanır; bu özellik sıfır atışlı (zero-shot) transfer olarak bilinir. 11 milyon özenle seçilmiş görüntü üzerinde 1 milyardan fazla maske içeren kapsamlı SA-1B veri kümesi üzerinde eğitilen SAM, birçok durumda daha önceki tam denetimli sonuçları geride bırakarak etkileyici bir sıfır atışlı performans sergilemiştir.
SA-1B Örnek görüntüler. Yeni tanıtılan SA-1B veri kümesinden maskelerle kaplanmış veri kümesi görüntüleri. SA-1B, 11 milyon çeşitlilik gösteren, 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 SAM tarafından tamamen otomatik olarak açıklanmış olup insan değerlendirmeleri ve sayısız 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 Model'in (SAM) Temel Özellikleri
- Komut Tabanlı Segmentasyon Görevi: SAM, bir nesneyi tanımlayan konumsal veya metinsel ipuçları gibi herhangi bir komuttan geçerli segmentasyon maskeleri oluşturmasına olanak tanıyan komut tabanlı 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 komut kodlayıcı ve hafif bir maske kod çözücü kullanır. Bu benzersiz mimari, segmentasyon görevlerinde esnek komutlandırma, 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üde 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 verisi kaynağı sağlar.
- Sıfır Atışlı (Zero-Shot) Performans: SAM, çeşitli segmentasyon görevlerinde olağanüstü sıfır atışlı performans sergileyerek komut mühendisliğine en az ihtiyaç duyarak çeşitli uygulamalar için kullanıma hazır bir araç haline gelir.
Segment Anything Model ve SA-1B veri kümesine derinlemesine bir bakış için lütfen Segment Anything GitHub sayfasını ziyaret et ve Segment Anything araştırma makalesine göz at.
SAM powers the smart annotation feature on Ultralytics Platform, enabling click-based intelligent masking for fast dataset labeling. See the annotation guide for details.
Mevcut Modeller, Desteklenen Görevler ve Çalışma Modları
Bu tablo, belirli önceden eğitilmiş ağırlıklarıyla mevcut modelleri, destekledikleri görevleri ve Çıkarım, Doğrulama, Eğitim ve Dışa Aktarma gibi farklı çalışma modlarıyla uyumluluklarını sunar; desteklenen modlar ✅ emojileriyle, desteklenmeyenler ise ❌ emojileriyle belirtilmiştir.
| Model Tipi | Önceden Eğitilmiş Ağırlıklar | Desteklenen Görevler | Çıkarım | Doğrulama | Eğitim | Dışa Aktar (Export) |
|---|---|---|---|---|---|---|
| SAM taban | sam_b.pt | Instance Segmentasyon | ✅ | ❌ | ❌ | ❌ |
| SAM büyük | sam_l.pt | Instance Segmentasyon | ✅ | ❌ | ❌ | ❌ |
SAM Nasıl Kullanılır: Görüntü Segmentasyonunda Çok Yönlülük ve Güç
Segment Anything Model, eğitim verilerinin ötesine geçen çok sayıda alt görev için kullanılabilir. Bunlar arasında kenar algılama, nesne önerisi oluşturma, örnek segmentasyonu ve ön metinden maskeye tahmin yer alır. Komut mühendisliği ile SAM, yeni görevlere ve veri dağılımlarına sıfır atışlı bir şekilde hızla uyum sağlayarak tüm görüntü segmentasyonu ihtiyaçların için çok yönlü ve güçlü bir araç olduğunu kanıtlar.
SAM tahmin örneği
Verilen komutlarla görüntüyü segmente et.
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]])Tüm görüntüyü segmente et.
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")- Buradaki mantık, herhangi bir komut (bbox/nokta/maske) girmediğin takdirde tüm görüntüyü segmente etmektir.
Bu sayede görüntüyü bir kez ayarlayabilir ve görüntü kodlayıcıyı birden çok kez çalıştırmadan komut çıkarımını defalarca yapabilirsin.
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 segmente et.
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)Yukarıdaki örneklerde döndürülen tüm results, tahmin edilen maskelere ve kaynak görüntüye kolayca erişim sağlayan Results nesneleridir.
- More additional args for
Segment everythingseePredictor/generateReference.
SAM ve YOLO Karşılaştırması
Burada Meta'nın SAM-b modelini, YOLO26n-seg dahil olmak üzere Ultralytics segmentasyon modelleriyle karşılaştırıyoruz:
| Model | Boyut (MB) | Parametreler (M) | Hız (CPU) (ms/im) |
|---|---|---|---|
| Meta SAM-b | 375 | 93.7 | 41703 |
| MobileSAM | 40.7 | 10.1 | 23802 |
| FastSAM-s with YOLOv8 backbone | 23.9 | 11.8 | 58.0 |
| Ultralytics YOLOv8n-seg | 7.1 (52.8 kat daha küçük) | 3.4 (27.6 kat daha az) | 24.8 (1682 kat daha hızlı) |
| Ultralytics YOLO11n-seg | 6.2 (60.5 kat daha küçük) | 2.9 (32.3 kat daha az) | 24.3 (1716 kat daha hızlı) |
| Ultralytics YOLO26n-seg | 6.7 (56.0 kat daha küçük) | 2.7 (34.7 kat daha az) | 25.2 (1655 kat daha hızlı) |
Bu karşılaştırma, SAM varyantları ile YOLO segmentasyon modelleri arasındaki model boyutları ve hızlarındaki önemli farkları göstermektedir. SAM benzersiz 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 ile, YOLO hızları ONNX Runtime ile ölçülmüştür. Testler, torch==2.10.0, ultralytics==8.4.31 ve onnxruntime==1.24.4 kullanılarak 16 GB RAM'li 2025 Apple M4 Air üzerinde çalıştırılmıştır. Bu testi yeniden oluşturmak için:
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 YOLO models (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)
model = YOLO(onnx_path)
model(ASSETS)Otomatik Açıklama: Segmentasyon Veri Kümelerine Hızlı Bir Yol
Otomatik açıklama, SAM'in önemli bir özelliğidir ve kullanıcıların önceden eğitilmiş bir tespit modeli kullanarak bir segmentasyon veri kümesi oluşturmasına olanak tanır. Bu özellik, zaman alıcı manuel etiketlemeye gerek kalmadan çok sayıda görüntünün hızlı ve doğru bir şekilde açıklanmasını sağlar.
Tespit Modeli Kullanarak Segmentasyon Veri Kümeni Oluştur
Veri kümeni Ultralytics çerçevesiyle otomatik olarak açıklamak için aşağıda gösterilen auto_annotate işlevini kullan:
from ultralytics.data.annotator import auto_annotate
auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="sam_b.pt")| Argüman | Tür | Varsayılan | Açıklama |
|---|---|---|---|
data | str | gerekli | Açıklama veya segmentasyon için hedef görüntüleri içeren dizinin yolu. |
det_model | str | 'yolo26x.pt' | İlk nesne tespiti için YOLO tespit modeli yolu. |
sam_model | str | 'sam_b.pt' | Segmentasyon için SAM model yolu (SAM, SAM2 varyantları ve MobileSAM modellerini destekler). |
device | str | '' | Hesaplama cihazı (ör. 'cuda:0', 'cpu' veya otomatik cihaz tespiti için boş bırak). |
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 NMS (Non-Maximum Suppression) 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 | Tespit edilecek sınıf indeksleri listesi (ör. kişi ve bisiklet için [0, 1]). |
output_dir | str | None | Açıklamalar için kaydetme dizini (veri yoluna göre varsayılan olarak './labels'). |
auto_annotate işlevi, görüntülerin yolunu alır; önceden eğitilmiş tespit ve SAM segmentasyon modellerini, modelleri çalıştıracak cihazı ve açıklanan 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ı büyük ö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ür
SAM'i araştırma veya geliştirme çalışmalarında yararlı bulursan lütfen makalemize atıfta bulunmayı düşü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}
}bilgisayarlı görü topluluğu için bu değerli kaynağı oluşturup sürdürdüğü için Meta AI'ya minnettarız.
SSS
Ultralytics tarafından Segment Anything Model (SAM) nedir?
Ultralytics tarafından Segment Anything Model (SAM), komut tabanlı segmentasyon görevleri için tasarlanmış devrim niteliğinde bir görüntü segmentasyon modelidir. Konumsal veya metinsel ipuçları gibi çeşitli komutlardan yüksek kaliteli segmentasyon maskeleri oluşturmak için hafif bir maske kod çözücüyle birleştirilmiş görüntü ve komut kodlayıcıları içeren gelişmiş bir mimariden yararlanır. Kapsamlı SA-1B veri kümesi üzerinde eğitilen SAM, önceden bilgi sahibi olmadan yeni görüntü dağılımlarına ve görevlerine uyum sağlayarak sıfır atışlı performansta mükemmeldir.
Görüntü segmentasyonu için Segment Anything Model'i (SAM) nasıl kullanabilirim?
Segment Anything Model'i (SAM) görüntü segmentasyonu için, sınırlayıcı kutular veya noktalar gibi çeşitli komutlarla çıkarım çalıştırarak kullanabilirsin. İş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, SAM ile komut satırı arayüzünde (CLI) çıkarım çalıştırabilirsin:
yolo predict model=sam_b.pt source=path/to/image.jpgDaha ayrıntılı kullanım talimatları için Segmentasyon bölümünü ziyaret et.
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, MobileSAM ve FastSAM-s gibi SAM varyantları genellikle daha büyük ve daha yavaştır ancak benzersiz sıfır atışlı segmentasyon yetenekleri sunar. Örneğin, YOLO26n-seg, Meta'nın orijinal SAM-b modelinden CPU üzerinde 56 kat daha küçük ve 1650 kat daha hızlıdır. Bu, YOLO modellerini hızlı, hafif ve hesaplama açısından verimli segmentasyon gerektiren uygulamalar için ideal hale getirirken, SAM modelleri esnek, komut tabanlı ve sıfır atışlı segmentasyon görevlerinde üstündür.
Veri kümemi SAM kullanarak nasıl otomatik olarak açıklayabilirim?
Ultralytics SAM, önceden eğitilmiş bir tespit modeli kullanarak segmentasyon veri kümeleri oluşturmaya olanak tanıyan bir otomatik açıklama özelliği sunar. İşte Python'da bir örnek:
from ultralytics.data.annotator import auto_annotate
auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="sam_b.pt")Bu fonksiyon, görüntülerinin yolunu ve önceden eğitilmiş detection ve SAM segmentasyon modelleri için isteğe bağlı argümanların yanı sıra cihaz ve çıktı dizini belirtimlerini alır. Eksiksiz bir kılavuz için Auto-Annotation bölümüne bak.
Segment Anything Model (SAM) eğitmek için hangi veri kümeleri kullanılır?
SAM, 11 milyon görüntü genelinde 1 milyardan fazla maske içeren kapsamlı SA-1B dataset üzerinde eğitilmiştir. SA-1B, bugüne kadarki en büyük segmentasyon veri kümesidir; yüksek kaliteli ve çeşitli training data sağlayarak çeşitli segmentasyon görevlerinde etkileyici zero-shot performansı garantiler. Daha fazla ayrıntı için Dataset section bölümünü ziyaret et.