Her Şeyi Segmentleme Modeli (SAM)#
Her Şeyi Segmentleme Modeli veya SAM ile görüntü segmentasyonunun sınırlarına hoş geldin. Bu devrim niteliğindeki model, gerçek zamanlı performansla istemlenebilir görüntü segmentasyonunu kullanıma sunarak oyunun kurallarını değiştirdi ve alanda yeni standartlar belirledi.
SAM'a Giriş: Her Şeyi Segmentleme Modeli#
Her Şeyi Segmentleme Modeli veya SAM, görüntü analizi görevlerinde eşsiz bir çok yönlülük sunan ve istemlerle yönlendirilebilen, son teknoloji ürünü bir görüntü segmentasyonu modelidir. SAM, görüntü segmentasyonu için yeni bir model, görev ve veri kümesi sunan çığır açıcı Her Şeyi Segmentleme girişiminin merkezinde yer alır.
SAM'ın gelişmiş tasarımı, önceden bilgi sahibi olmadan yeni görüntü dağılımlarına ve görevlere uyum sağlamasına olanak tanır; bu özellik sıfır atışlı aktarım olarak bilinir. 11 milyon özenle seçilmiş görüntüye dağıtılmış 1 milyardan fazla maske içeren kapsamlı 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 atışlı performans sergiledi.
SA-1B örnek görüntüleri. Yeni kullanıma sunulan SA-1B veri kümesindeki görüntülerin üzerine bindirilmiş maskeler. SA-1B; çeşitli, yüksek çözünürlüklü, lisanslı ve gizliliği koruyan 11 milyon görüntü ile 1,1 milyar yüksek kaliteli segmentasyon maskesi içerir. Bu maskeler SAM tarafından tamamen otomatik olarak etiketlendi ve insan değerlendirmeleri ile çok sayıda deneyde doğrulandığı üzere yüksek kaliteli ve çeşitlidir. Görselleştirme amacıyla görüntüler, 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).
Her Şeyi Segmentleme Modelinin (SAM) Temel Özellikleri#
- İstemlenebilir Segmentasyon Görevi: SAM, istemlenebilir bir segmentasyon görevi için tasarlandı ve nesneyi belirten uzamsal veya metinsel ipuçları gibi verilen herhangi bir istemden geçerli segmentasyon maskeleri oluşturabilir.
- Gelişmiş Mimari: Her Şeyi Segmentleme 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 istemleri, gerçek zamanlı maske hesaplamasını ve belirsizlik farkındalığını mümkün kılar.
- SA-1B Veri Kümesi: Her Şeyi Segmentleme 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 olan SA-1B, SAM'e çeşitli ve büyük ölçekli bir eğitim verisi kaynağı sağlar.
- Sıfır Atışlı Performans: SAM, çeşitli segmentasyon görevlerinde üstün sıfır atışlı performans sergiler ve istem mühendisliğine çok az ihtiyaç duyarak çeşitli uygulamalarda hemen kullanılabilir.
Her Şeyi Segmentleme Modeli ve SA-1B veri kümesi hakkında ayrıntılı bilgi için Segment Anything GitHub sayfasını ziyaret et ve Segment Anything araştırma makalesine göz at.
SAM, Ultralytics Platform üzerindeki akıllı etiketleme özelliğine güç vererek hızlı veri kümesi etiketleme için tıklamayla çalışan akıllı maskeleme sağlar. Ayrıntılar için etiketleme kılavuzuna göz at.
Kullanılabilir Modeller, Desteklenen Görevler ve Çalışma Modları#
Bu tabloda, kullanılabilir modeller ve ilgili önceden eğitilmiş ağırlıklar, destekledikleri görevler ve Çıkarım, Doğrulama, Eğitim ve Dışa Aktarma gibi farklı çalışma modlarıyla uyumlulukları gösterilir; desteklenen modlar ✅, desteklenmeyen modlar ise ❌ emojileriyle belirtilir.
| Model Türü | Önceden Eğitilmiş Ağırlıklar | Desteklenen Görevler | Eğitim | Doğrulama | Çıkarım | Dışa aktar |
|---|---|---|---|---|---|---|
| SAM temel | 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üç#
Her Şeyi Segmentleme Modeli, eğitim verilerinin ötesine geçen çok sayıda aşağı akış görevinde kullanılabilir. Bu görevler arasında kenar algılama, nesne önerisi oluşturma, örnek segmentasyonu ve ön metinden maskeye tahmini yer alır. İstem mühendisliği sayesinde SAM, yeni görevlere ve veri dağılımlarına sıfır atışlı biçimde hızla uyum sağlayabilir ve böylece tüm görüntü segmentasyonu ihtiyaçların için çok yönlü ve güçlü bir araç hâline gelir.
SAM tahmin örneği#
Verilen istemlerle görüntüyü segmentlere ayır.
from ultralytics import SAM
# Bir model yükle
model = SAM("sam_b.pt")
# Model bilgilerini görüntüle (isteğe bağlı)
model.info()
# bbox istemiyle çıkarım çalıştır
results = model("ultralytics/assets/zidane.jpg", bboxes=[439, 437, 524, 709])
# tek noktayla çıkarım çalıştır
results = model(points=[900, 370], labels=[1])
# birden çok noktayla çıkarım çalıştır
results = model(points=[[400, 370], [900, 370]], labels=[1, 1])
# her nesne için birden çok nokta istemiyle çıkarım çalıştır
results = model(points=[[[400, 370], [900, 370]]], labels=[[1, 1]])
# negatif nokta istemiyle çıkarım çalıştır
results = model(points=[[[400, 370], [900, 370]]], labels=[[1, 0]])Görüntünün tamamını segmentlere ayır.
from ultralytics import SAM
# Bir model yükle
model = SAM("sam_b.pt")
# Model bilgilerini görüntüle (isteğe bağlı)
model.info()
# Çıkarımı çalıştır
model("path/to/image.jpg")- Buradaki mantık, herhangi bir istem (bboxes/points/masks) iletmediğinde görüntünün tamamını segmentlere ayırmaktır.
Bu yöntemle görüntüyü bir kez ayarlayabilir ve görüntü kodlayıcısını tekrar tekrar çalıştırmadan istemlerle birden fazla çıkarım yapabilirsin.
import cv2
from ultralytics.models.sam import Predictor as SAMPredictor
# SAMPredictor oluştur
overrides = {"conf": 0.25, "task": "segment", "mode": "predict", "imgsz": 1024, "model": "mobile_sam.pt"}
predictor = SAMPredictor(overrides=overrides)
# Görüntüyü ayarla
predictor.set_image("ultralytics/assets/zidane.jpg") # Görüntü dosyasıyla ayarla
predictor.set_image(cv2.imread("ultralytics/assets/zidane.jpg")) # np.ndarray ile ayarla
results = predictor(bboxes=[439, 437, 524, 709])
# Tek nokta istemiyle çıkarım yap
results = predictor(points=[900, 370], labels=[1])
# Birden fazla nokta istemiyle çıkarım yap
results = predictor(points=[[400, 370], [900, 370]], labels=[1, 1])
# negatif nokta istemiyle çıkarım çalıştır
results = predictor(points=[[[400, 370], [900, 370]]], labels=[[1, 0]])
# Görüntüyü sıfırla
predictor.reset_image()Ek bağımsız değişkenlerle her şeyi segmentlere ayır.
from ultralytics.models.sam import Predictor as SAMPredictor
# SAMPredictor oluştur
overrides = {"conf": 0.25, "task": "segment", "mode": "predict", "imgsz": 1024, "model": "mobile_sam.pt"}
predictor = SAMPredictor(overrides=overrides)
# Ek bağımsız değişkenlerle segmentlere ayır
results = predictor(source="ultralytics/assets/zidane.jpg", crop_n_layers=1, points_stride=64, min_mask_region_area=100)Yukarıdaki örneklerde döndürülen tüm results öğeleri, tahmin edilen maskelere ve kaynak görüntüye kolayca erişmeni sağlayan Results nesneleridir.
- Daha fazla
Segment everythingbağımsız değişkeni içinPredictor/generatebaşvuru belgesine göz at.
SAM ve YOLO Karşılaştırması#
Burada Meta'nın SAM-b modelini, YOLO26n-seg dâhil Ultralytics segmentasyon modelleriyle karşılaştırıyoruz:
| Model | Boyut (MB) | Parametreler (M) | Hız (CPU) (ms/görüntü) |
|---|---|---|---|
| Meta SAM-b | 375 | 93.7 | 41703 |
| MobileSAM | 40.7 | 10.1 | 23802 |
| FastSAM-s ve YOLOv8 omurgası | 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 boyutu ve hız farklarının ne kadar büyük olduğunu gösteriyor. SAM, kendine özgü 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, YOLO hızları ise ONNX Runtime kullanılarak ölçülmüştür. Testler, 16 GB RAM'e sahip 2025 Apple M4 Air üzerinde torch==2.10.0, ultralytics==8.4.31 ve onnxruntime==1.24.4 kullanılarak gerçekleştirilmiştir. Bu testi tekrarlamak için:
from ultralytics import ASSETS, SAM, YOLO, FastSAM
# SAM-b, MobileSAM profillerini çıkar
for file in ["sam_b.pt", "mobile_sam.pt"]:
model = SAM(file)
model.info()
model(ASSETS)
# FastSAM-s profili oluştur
model = FastSAM("FastSAM-s.pt")
model.info()
model(ASSETS)
# YOLO modellerinin profilini çıkar (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, nms=False) # YOLO26 NMS içermeyen başlık; YOLOv8/YOLO11 için işlem yapmaz
model = YOLO(onnx_path)
model(ASSETS)Otomatik Etiketleme: Segmentasyon Veri Kümelerine Hızlı Bir Yol#
Otomatik etiketleme, kullanıcıların önceden eğitilmiş bir algılama modeliyle segmentasyon veri kümesi oluşturmasını sağlayan, SAM'in temel bir özelliğidir. Bu özellik, zaman alan manuel etiketleme ihtiyacını ortadan kaldırarak çok sayıda görüntünün hızlı ve doğru biçimde etiketlenmesini sağlar.
Algılama Modeliyle Segmentasyon Veri Kümeni Oluştur#
Veri kümeni Ultralytics çerçevesiyle otomatik olarak etiketlemek için aşağıda gösterildiği gibi 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")| Bağımsız değişken | Tür | Varsayılan | Açıklama |
|---|---|---|---|
data | str | gerekli | Etiketleme veya bölümleme için hedef görüntüleri içeren dizinin yolu. |
det_model | str | 'yolo26x.pt' | İlk nesne algılama için YOLO algılama modelinin yolu. |
sam_model | str | 'sam_b.pt' | Bölümleme için SAM modelinin yolu (SAM, SAM 2, MobileSAM ve SAM 3 ağırlıklarını destekler). |
device | str | '' | Hesaplama aygıtı (ör. 'cuda:0', 'cpu' veya aygıtın otomatik algılanması için ''). |
conf | float | 0.25 | Zayıf algılamaları filtrelemek için YOLO algılama güven eşiği. |
iou | float | 0.45 | Çakışan kutuları filtrelemek için Maksimum Olmayan Bastırma IoU eşiği. |
imgsz | int | 640 | Görüntüleri yeniden boyutlandırmak için giriş boyutu (gerekirse 32'nin bir üst katına yuvarlanır). |
max_det | int | 300 | Bellek verimliliği için görüntü başına maksimum algılama sayısı. |
classes | list[int] | None | Algılanacak sınıf indekslerinin listesi (ör. kişi ve bisiklet için [0, 1]). |
output_dir | str | None | Etiketler için kayıt dizini (varsayılan: kardeş dizin <data>_auto_annotate_labels). |
auto_annotate işlevi, görüntülerinin yolunu alır. Ayrıca önceden eğitilmiş algılama ve SAM segmentasyon modellerini, modellerin çalıştırılacağı cihazı ve etiketlenmiş sonuçların kaydedileceği çıktı dizinini belirten isteğe bağlı bağımsız değişkenler de alır.
Önceden eğitilmiş modellerle otomatik etiketleme, yüksek kaliteli segmentasyon veri kümeleri oluşturmak için gereken zamanı ve çabayı önemli ölçüde azaltabilir. Bu özellik, manuel etiketleme yerine model geliştirme ve değerlendirmeye odaklanmalarını sağladığından özellikle büyük görüntü koleksiyonlarıyla çalışan araştırmacılar ve geliştiriciler için faydalıdır.
Atıflar ve Teşekkürler#
SAM'i araştırma veya geliştirme çalışmalarında yararlı buluyorsan makaleye atıfta bulunmanı öneririz:
@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ükleri için Meta AI'a teşekkür ederiz.
Sık Sorulan Sorular#
Meta'nın Her Şeyi Segmentleme Modeli (SAM), istemlenebilir segmentasyon görevleri için tasarlanmış, devrim niteliğinde bir görüntü segmentasyonu modelidir. Görüntü ve istem kodlayıcılarını hafif bir maske kod çözücüyle birleştiren gelişmiş mimarisi sayesinde uzamsal veya metinsel ipuçları gibi çeşitli istemlerden yüksek kaliteli segmentasyon maskeleri oluşturur. Kapsamlı SA-1B veri kümesi üzerinde eğitilen SAM, önceden bilgi sahibi olmadan yeni görüntü dağılımlarına ve görevlere uyum sağlayarak sıfır atışlı performansta öne çıkar.
Her Şeyi Segmentleme Modeli (SAM) ile sınırlayıcı kutular veya noktalar gibi çeşitli istemleri kullanarak çıkarım yapabilir ve görüntü segmentasyonu gerçekleştirebilirsin. Python kullanarak bir örnek:
from ultralytics import SAM # Bir model yükle model = SAM("sam_b.pt") # Sınırlayıcı kutu istemiyle bölümle model("ultralytics/assets/zidane.jpg", bboxes=[439, 437, 524, 709]) # Nokta istemiyle segmentlere ayır model("ultralytics/assets/zidane.jpg", points=[900, 370], labels=[1]) # Birden fazla nokta istemiyle segmentlere ayır model("ultralytics/assets/zidane.jpg", points=[[400, 370], [900, 370]], labels=[1, 1]) # Nesne başına birden fazla nokta istemiyle segmentlere ayır model("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 1]]) # Negatif nokta istemiyle segmentlere ayır. 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 yapabilirsin:
yolo predict model=sam_b.pt source=path/to/image.jpgAyrıntılı kullanım talimatları için Segmentasyon bölümünü ziyaret et.
YOLO modelleriyle karşılaştırıldığında SAM-b, MobileSAM ve FastSAM-s gibi SAM çeşitleri genellikle daha büyük ve yavaştır; ancak benzersiz sıfır atışlı segmentasyon özellikleri sunar. Örneğin YOLO26n-seg, CPU üzerinde Meta'nın orijinal SAM-b modelinden 56 kat daha küçüktür ve 1650 kattan fazla daha hızlıdır. Bu nedenle YOLO modelleri hızlı, hafif ve hesaplama açısından verimli segmentasyon gerektiren uygulamalar için idealdir; SAM modelleri ise esnek, istemlenebilir ve sıfır atışlı segmentasyon görevlerinde öne çıkar.
Ultralytics SAM, önceden eğitilmiş bir algılama modeliyle segmentasyon veri kümeleri oluşturmanı sağlayan bir otomatik etiketleme özelliği sunar. Python ile 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 işlev, görüntülerinin yolunu ve önceden eğitilmiş algılama ile SAM segmentasyon modelleri için isteğe bağlı bağımsız değişkenleri; ayrıca cihaz ve çıktı dizini ayarlarını alır. Eksiksiz bir kılavuz için Otomatik Etiketleme sayfasına göz at.
SAM, 11 milyon görüntüde 1 milyardan fazla maske içeren kapsamlı SA-1B veri kümesi üzerinde eğitilir. Bugüne kadarki en büyük segmentasyon veri kümesi olan SA-1B, yüksek kaliteli ve çeşitli eğitim verileri sunarak farklı segmentasyon görevlerinde etkileyici sıfır atışlı performans sağlar. Daha fazla bilgi için Veri Kümesi bölümünü ziyaret et.