Örnek Segmentasyonu Veri Kümelerine Genel Bakış#
Örnek segmentasyonu, görüntü içindeki nesneleri ayrı ayrı tanımlayıp sınırlarını belirlemeyi içeren bir bilgisayarlı görü görevidir. Bu kılavuzda, örnek segmentasyonu görevlerinde Ultralytics YOLO tarafından desteklenen veri kümesi biçimlerine genel bir bakışın yanı sıra modellerini eğitmek için bu veri kümelerini hazırlama, dönüştürme ve kullanma talimatları sunuluyor.
Desteklenen Veri Kümesi Biçimleri#
Ultralytics YOLO biçimi#
YOLO segmentasyon modellerini eğitmek için kullanılan veri kümesi etiket biçimi şöyledir:
- Görüntü başına bir metin dosyası: Veri kümesindeki her görüntünün, görüntü dosyasıyla aynı ada ve ".txt" uzantısına sahip bir metin dosyası vardır.
- Nesne başına bir satır: Metin dosyasındaki her satır, görüntüdeki bir nesne örneğine karşılık gelir.
- Her satırda nesne bilgileri: Her satır, nesne örneği hakkında aşağıdaki bilgileri içerir:
- Nesne sınıfı indeksi: Nesnenin sınıfını belirten bir tam sayı (ör. kişi için 0, araba için 1 vb.).
- Nesne çokgen koordinatları: Nesnenin maskesinin sınırlarını belirten, 0 ile 1 arasında normalize edilmiş
(x, y)noktaları.
Segmentasyon veri kümesi dosyasındaki tek bir satırın biçimi şöyledir:
<class-index> <x1> <y1> <x2> <y2> ... <xn> <yn>Bu biçimde <class-index>, nesnenin sınıf indeksidir; <x1> <y1> <x2> <y2> ... <xn> <yn> ise nesnenin segmentasyon maskesine ait normalize edilmiş çokgen koordinatlarıdır (değerler, görüntü genişliği ve yüksekliğine göre [0, 1] aralığındadır). Koordinatlar boşluklarla ayrılır.
İşte 3 noktalı bir segment ve 5 noktalı bir segmentten oluşan iki nesne içeren tek bir görüntü için YOLO veri kümesi biçimi örneği.
0 0.681 0.485 0.670 0.487 0.676 0.487
1 0.504 0.000 0.501 0.004 0.498 0.004 0.493 0.010 0.492 0.0104- Her satırın uzunluğunun eşit olması gerekmez.
- Her segmentasyon etiketi en az 3
(x, y)noktası içermelidir:<class-index> <x1> <y1> <x2> <y2> <x3> <y3> - Her nesne bir poligon gerektirir. Algılama biçimindeki satırlarda (
<class-index> <x_center> <y_center> <width> <height>) poligon bulunmaz ve kutu sayısı ile poligon sayısı eşleşmeyen bir segmentasyon veri kümesi, etiketleri yüklenirkenValueErrorhatasıyla reddedilir.
Veri kümesi YAML biçimi#
Ultralytics framework'ü, Segmentasyon Modellerini eğitmek için veri kümesini ve model yapılandırmasını tanımlamak üzere YAML dosya biçimini kullanır. Segmentasyon veri kümesi tanımlamak için kullanılan YAML biçimine bir örnek:
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
# COCO8-seg dataset (first 8 images from COCO train2017) by Ultralytics
# Documentation: https://docs.ultralytics.com/datasets/segment/coco8-seg
# Example usage: yolo train data=coco8-seg.yaml
# parent
# ├── ultralytics
# └── datasets
# └── coco8-seg ← downloads here (1 MB)
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: coco8-seg # dataset root dir
train: images/train # train images (relative to 'path') 4 images
val: images/val # val images (relative to 'path') 4 images
test: # test images (optional)
# Classes
names:
0: person
1: bicycle
2: car
3: motorcycle
4: airplane
5: bus
6: train
7: truck
8: boat
9: traffic light
10: fire hydrant
11: stop sign
12: parking meter
13: bench
14: bird
15: cat
16: dog
17: horse
18: sheep
19: cow
20: elephant
21: bear
22: zebra
23: giraffe
24: backpack
25: umbrella
26: handbag
27: tie
28: suitcase
29: frisbee
30: skis
31: snowboard
32: sports ball
33: kite
34: baseball bat
35: baseball glove
36: skateboard
37: surfboard
38: tennis racket
39: bottle
40: wine glass
41: cup
42: fork
43: knife
44: spoon
45: bowl
46: banana
47: apple
48: sandwich
49: orange
50: broccoli
51: carrot
52: hot dog
53: pizza
54: donut
55: cake
56: chair
57: couch
58: potted plant
59: bed
60: dining table
61: toilet
62: tv
63: laptop
64: mouse
65: remote
66: keyboard
67: cell phone
68: microwave
69: oven
70: toaster
71: sink
72: refrigerator
73: book
74: clock
75: vase
76: scissors
77: teddy bear
78: hair drier
79: toothbrush
# Download script/URL (optional)
download: https://github.com/ultralytics/assets/releases/download/v0.0.0/coco8-seg.ziptrain, val ve test alanları eğitim, doğrulama ve test görüntülerinin konumunu belirtir. Her biri bir dizin, dizin listesi veya her satırda bir görüntü yolu bulunan bir *.txt dosyası kabul eder ( ./ ile başlayan yollar *.txt dosyasına göre çözümlenir). Bir *.txt dosyası; bir dizinin alt kümesiyle eğitim yapmak, etiketsiz görüntüleri atlamak veya birden çok kaynaktaki görüntüleri tek bir bölmede birleştirmek için kullanışlıdır.
path: datasets/coco8-seg # dataset root
train: train.txt # a directory, a list e.g. [images/a, images/b], or a *.txt file
val: val.txt
names:
0: personnames, sınıf adlarından oluşan bir sözlüktür. Adların sırası, YOLO veri kümesi dosyalarındaki nesne sınıfı indekslerinin sırasıyla eşleşmelidir.
Kullanım#
from ultralytics import YOLO
# Bir model yükle
model = YOLO("yolo26n-seg.pt") # Önceden eğitilmiş bir model yükle (eğitim için önerilir)
# Modeli eğit
results = model.train(data="coco8-seg.yaml", epochs=100, imgsz=640)Desteklenen Veri Kümeleri#
Ultralytics YOLO, örnek segmentasyonu görevleri için çeşitli veri kümelerini destekler. En sık kullanılanların listesi aşağıdadır. Bu veri kümelerinin çoğu, görüntülere ve açıklamalara göz atabileceğin, veri kümesi istatistiklerini görüntüleyebileceğin ve bulut üzerinde eğitim için klonlayabileceğin Ultralytics Platform üzerinde de barındırılır.
- Carparts-seg: Otomotiv uygulamaları için ideal olan, otomobil parçalarının segmentasyonuna odaklanmış özel bir veri kümesidir. Tek tek araç bileşenlerine ilişkin ayrıntılı açıklamalarla çeşitli araçları içerir.
- COCO: Geniş bir kategori yelpazesinde 200 binden fazla etiketli görüntü içeren, nesne algılama, segmentasyon ve altyazı oluşturma için kapsamlı bir veri kümesidir.
- COCO8-seg: Segmentasyon modeli eğitimini hızlıca test etmek için tasarlanmış, COCO'nun 8 görüntülük kompakt bir alt kümesidir.
ultralyticsdeposundaki CI kontrolleri ve iş akışı doğrulaması için idealdir. - COCO128-seg: Örnek segmentasyonu görevleri için segmentasyon açıklamaları içeren 128 COCO görüntüsünden oluşan daha küçük bir veri kümesidir.
- Crack-seg: Çeşitli yüzeylerdeki çatlakların segmentasyonu için özel olarak hazırlanmış bir veri kümesidir. Altyapı bakımı ve kalite kontrol için önemli olan bu veri kümesi, yapısal zayıflıkları belirlemek üzere modelleri eğitmeye yönelik ayrıntılı görüntüler sağlar.
- Package-seg: Farklı ambalaj malzemelerinin ve şekillerinin segmentasyonuna yönelik bir veri kümesidir. Özellikle lojistik ve depo otomasyonu için kullanışlıdır; paketlerin taşınması ve sınıflandırılmasına yönelik sistemlerin geliştirilmesine yardımcı olur.
Kendi veri kümeni ekleme#
Kendi veri kümen varsa ve bunu Ultralytics YOLO biçiminde segmentasyon modellerini eğitmek için kullanmak istiyorsan, "Ultralytics YOLO biçimi" bölümünde yukarıda belirtilen biçime uyduğundan emin ol. Açıklamalarını gerekli biçime dönüştür ve YAML yapılandırma dosyasında yolları, sınıf sayısını ve sınıf adlarını belirt. images/ ile labels/ klasörlerini, aynı seviyede ve eşleşen alt klasör yapısıyla ayrı tut; .txt etiket dosyalarını görüntü klasörüne koymak, modelin etiketleri kaçırmasına neden olabilir.
Etiket Biçimlerini Taşıma veya Dönüştürme#
COCO Veri Kümesi Biçiminden YOLO Biçimine#
Aşağıdaki kod parçasını kullanarak popüler COCO veri kümesi biçimindeki etiketleri kolayca YOLO biçimine dönüştürebilirsin:
from ultralytics.data.converter import convert_coco
convert_coco(labels_dir="path/to/coco/annotations/", use_segments=True)Bu dönüştürme aracı, COCO veri kümesini veya COCO biçimindeki herhangi bir veri kümesini Ultralytics YOLO biçimine dönüştürmek için kullanılabilir.
Kullanmak istediğin veri kümesinin modelinle uyumlu olup olmadığını ve gerekli biçim kurallarına uyup uymadığını mutlaka kontrol et. Başarılı segmentasyon modelleri eğitmek için veri kümelerinin doğru biçimlendirilmesi çok önemlidir.
Otomatik etiketleme#
Otomatik etiketleme, önceden eğitilmiş bir algılama modeli kullanarak segmentasyon veri kümesi oluşturmanı sağlayan temel bir özelliktir. Elle etiketleme gerektirmeden çok sayıda görüntüyü hızlı ve doğru biçimde etiketlemene olanak tanıyarak zamandan ve emekten tasarruf sağlar.
Algılama Modeli Kullanarak Segmentasyon Veri Kümesi Oluşturma#
Ultralytics framework'ünü kullanarak veri kümeni otomatik etiketlemek için aşağıda gösterildiği gibi auto_annotate işlevini kullanabilirsin:
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 ve önceden eğitilmiş algılama modellerini (ör. YOLO26, YOLO11 veya diğer modeller) ve segmentasyon modellerini (ör. SAM, SAM 2, MobileSAM veya SAM 3) belirtmek için isteğe bağlı parametreleri, modellerin çalıştırılacağı aygıtı ve açıklamalı sonuçların kaydedileceği çıktı dizinini alır.
Önceden eğitilmiş modellerin gücünden yararlanan otomatik etiketleme, yüksek kaliteli segmentasyon veri kümeleri oluşturmak için gereken zamanı ve emeği önemli ölçüde azaltabilir. Bu özellik, özellikle büyük görüntü koleksiyonlarıyla çalışan araştırmacılar ve geliştiriciler için kullanışlıdır; elle açıklama eklemek yerine model geliştirme ve değerlendirmeye odaklanmalarını sağlar.
Veri Kümesi Açıklamalarını Görselleştir#
Modelini eğitmeden önce, doğru olduklarından emin olmak için veri kümesi açıklamalarını görselleştirmek genellikle faydalıdır. Ultralytics bu amaçla bir yardımcı işlev sunar. İşlev yalnızca algılama biçimindeki kutu etiketlerini (<class-index> <x_center> <y_center> <width> <height>) okur; segmentasyon poligonu etiket dosyalarını ayrıştıramaz:
from ultralytics.data.utils import visualize_image_annotations
label_map = { # Tüm açıklama eklenmiş sınıf etiketleriyle etiket eşlemesini tanımla.
0: "person",
1: "car",
}
# Visualize
visualize_image_annotations(
"path/to/image.jpg", # Giriş görüntüsünün yolu.
"path/to/annotations.txt", # Görüntüye ait açıklama dosyasının yolu.
label_map,
)Bu işlev sınırlayıcı kutuları çizer, nesneleri sınıf adlarıyla etiketler ve daha iyi okunabilirlik için metin rengini ayarlar; böylece eğitimden önce açıklama hatalarını belirleyip düzeltebilirsin.
Segmentasyon Maskelerini YOLO Biçimine Dönüştürme#
Her piksel değerinin sınıf indeksi + 1 olduğu gri tonlamalı maske görüntülerin varsa (0 arka planı belirtir), bunları aşağıdakini kullanarak YOLO segmentasyon biçimine dönüştürebilirsin:
from ultralytics.data.converter import convert_segment_masks_to_yolo_seg
# 80 sınıflı COCO gibi veri kümeleri için
convert_segment_masks_to_yolo_seg(masks_dir="path/to/masks_dir", output_dir="path/to/output_dir", classes=80)Bu yardımcı program, maske görüntülerini YOLO segmentasyon biçimine dönüştürür ve belirtilen çıktı dizinine kaydeder.
Sık Sorulan Sorular#
Ultralytics YOLO, örnek segmentasyonu için çeşitli veri kümesi biçimlerini destekler; temel biçim, Ultralytics YOLO'nun kendi biçimidir. Veri kümesindeki her görüntü için nesne bilgilerini içeren ve birden çok satıra bölünmüş (her nesne için bir satır) karşılık gelen bir metin dosyası gerekir. Bu dosyada sınıf indeksi ve normalize edilmiş poligon koordinatları listelenir. YOLO veri kümesi biçimiyle ilgili ayrıntılı yönergeler için Örnek Segmentasyonu Veri Kümelerine Genel Bakış sayfasını ziyaret et.
Ultralytics araçlarını kullanarak COCO biçimindeki açıklamaları YOLO biçimine dönüştürmek kolaydır.
ultralytics.data.convertermodülündekiconvert_cocoişlevini kullanabilirsin:from ultralytics.data.converter import convert_coco convert_coco(labels_dir="path/to/coco/annotations/", use_segments=True)Bu betik, COCO veri kümesi açıklamalarını gerekli YOLO biçimine dönüştürerek YOLO modellerini eğitmeye uygun hâle getirir. Daha fazla bilgi için Etiket Biçimlerini Taşıma veya Dönüştürme sayfasına bak.
Ultralytics ile YOLO modellerini eğitmek için YAML dosyası hazırlarken veri kümesi yollarını ve sınıf adlarını tanımlaman gerekir. YAML yapılandırmasına bir örnek:
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license # COCO8-seg dataset (first 8 images from COCO train2017) by Ultralytics # Documentation: https://docs.ultralytics.com/datasets/segment/coco8-seg # Example usage: yolo train data=coco8-seg.yaml # parent # ├── ultralytics # └── datasets # └── coco8-seg ← downloads here (1 MB) # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..] path: coco8-seg # dataset root dir train: images/train # train images (relative to 'path') 4 images val: images/val # val images (relative to 'path') 4 images test: # test images (optional) # Classes names: 0: person 1: bicycle 2: car 3: motorcycle 4: airplane 5: bus 6: train 7: truck 8: boat 9: traffic light 10: fire hydrant 11: stop sign 12: parking meter 13: bench 14: bird 15: cat 16: dog 17: horse 18: sheep 19: cow 20: elephant 21: bear 22: zebra 23: giraffe 24: backpack 25: umbrella 26: handbag 27: tie 28: suitcase 29: frisbee 30: skis 31: snowboard 32: sports ball 33: kite 34: baseball bat 35: baseball glove 36: skateboard 37: surfboard 38: tennis racket 39: bottle 40: wine glass 41: cup 42: fork 43: knife 44: spoon 45: bowl 46: banana 47: apple 48: sandwich 49: orange 50: broccoli 51: carrot 52: hot dog 53: pizza 54: donut 55: cake 56: chair 57: couch 58: potted plant 59: bed 60: dining table 61: toilet 62: tv 63: laptop 64: mouse 65: remote 66: keyboard 67: cell phone 68: microwave 69: oven 70: toaster 71: sink 72: refrigerator 73: book 74: clock 75: vase 76: scissors 77: teddy bear 78: hair drier 79: toothbrush # Download script/URL (optional) download: https://github.com/ultralytics/assets/releases/download/v0.0.0/coco8-seg.zipYolları ve sınıf adlarını veri kümenle eşleşecek şekilde güncellediğinden emin ol. Daha fazla bilgi için Veri Kümesi YAML Biçimi bölümüne bak.
Ultralytics YOLO'daki otomatik etiketleme, önceden eğitilmiş bir algılama modeli kullanarak veri kümen için segmentasyon açıklamaları oluşturmanı sağlar. Bu özellik, elle etiketleme ihtiyacını önemli ölçüde azaltır.
auto_annotateişlevini şu şekilde kullanabilirsin:from ultralytics.data.annotator import auto_annotate auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="sam_b.pt") # veya sam_model="mobile_sam.pt"Bu işlev, açıklama ekleme sürecini otomatikleştirerek daha hızlı ve verimli hâle getirir. Daha fazla bilgi için Otomatik Etiketleme Referansı sayfasını incele.