Örnek Bölümleme (Instance Segmentation) Veri Kümelerine Genel Bakış

Örnek bölümleme, bir görüntü içindeki nesneleri tanımlamayı ve sınırlarını belirlemeyi içeren bir bilgisayarlı görü görevidir. Bu kılavuz, Ultralytics YOLO tarafından örnek bölümleme görevleri için desteklenen veri kümesi biçimlerine genel bir bakış sunar ve bu veri kümelerini modellerini eğitmek için nasıl hazırlayacağın, dönüştüreceğin ve kullanacağın konusunda talimatlar verir.

Desteklenen Veri Kümesi Formatları

Ultralytics YOLO formatı

YOLO bölümleme modellerini eğitmek için kullanılan veri kümesi etiket biçimi şu şekildedir:

  1. Görüntü başına bir metin dosyası: Veri kümesindeki her görüntünün, görüntü dosyasıyla aynı isme ve ".txt" uzantısına sahip karşılık gelen bir metin dosyası vardır.
  2. Nesne başına bir satır: Metin dosyasındaki her satır, görüntüdeki bir nesne örneğine karşılık gelir.
  3. Satır başına nesne bilgisi: Her satır, nesne örneği hakkında şu bilgileri içerir:
    • Nesne sınıfı indeksi: Nesnenin sınıfını temsil eden bir tamsayı (örneğin, kişi için 0, araba için 1 vb.).
    • Nesne sınırlayıcı koordinatları: Maske alanı etrafındaki, 0 ile 1 arasında olacak şekilde normalize edilmiş sınırlayıcı koordinatlar.

Bölümleme veri kümesi dosyasındaki tek bir satırın biçimi şu şekildedir:

<class-index> <x1> <y1> <x2> <y2> ... <xn> <yn>

Bu biçimde, <class-index> nesnenin sınıf indeksidir ve <x1> <y1> <x2> <y2> ... <xn> <yn> nesnenin bölümleme maskesinin normalize edilmiş çokgen koordinatlarıdır (değerler görüntü genişliğine ve yüksekliğine göre [0, 1] aralığındadır). Koordinatlar boşluklarla ayrılmıştır.

İşte 3 noktalı bir segment ve 5 noktalı bir segmentten oluşan iki nesneli tek bir görüntü için YOLO veri kümesi biçimine bir örnek.

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
İpucu
  • Her satırın uzunluğunun eşit olması gerekmez.
  • Her bölümleme etiketinin en az 3 (x, y) noktası olmalıdır: <class-index> <x1> <y1> <x2> <y2> <x3> <y3>

Veri kümesi YAML biçimi

Ultralytics çerçevesi, Bölümleme Modellerini eğitmek için veri kümesi ve model yapılandırmasını tanımlamak amacıyla bir YAML dosya biçimi kullanır. İşte bir bölümleme veri kümesini tanımlamak için kullanılan YAML biçimine bir örnek:

ultralytics/cfg/datasets/coco8-seg.yaml
# 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.zip

train ve val alanları, sırasıyla eğitim ve doğrulama görüntülerini içeren dizinlerin yollarını belirtir.

names sınıf isimlerinin bir sözlüğüdür. İsimlerin sırası, YOLO veri kümesi dosyalarındaki nesne sınıfı indekslerinin sırasıyla eşleşmelidir.

Kullanım

Örnek
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-seg.pt")  # load a pretrained model (recommended for training)

# Train the model
results = model.train(data="coco8-seg.yaml", epochs=100, imgsz=640)

Desteklenen Veri Kümeleri

Ultralytics YOLO, örnek bölümleme görevleri için çeşitli veri kümelerini destekler. İşte en yaygın kullanılanların bir listesi:

  • Carparts-seg: Otomotiv uygulamaları için ideal, araba parçalarının bölümlenmesine odaklanan özel bir veri kümesi. Bireysel araba bileşenlerinin ayrıntılı açıklamalarını içeren çeşitli araçları içerir.
  • COCO: Nesne algılama, bölümleme ve altyazı oluşturma için kapsamlı bir veri kümesi; çok çeşitli kategorilerde 200 binden fazla etiketli görüntü içerir.
  • COCO8-seg: Bölümleme modeli eğitiminin hızlı testi için tasarlanmış, CI kontrolleri ve ultralytics deposundaki iş akışı doğrulaması için ideal, 8 görüntülük kompakt bir COCO alt kümesi.
  • COCO128-seg: Örnek bölümleme görevleri için daha küçük bir veri kümesi; bölümleme açıklamaları içeren 128 COCO görüntüsünden oluşan bir alt küme.
  • Crack-seg: Çeşitli yüzeylerdeki çatlakların bölümlenmesi için tasarlanmış bir veri kümesi. Altyapı bakımı ve kalite kontrol için gereklidir, modelleri yapısal zayıflıkları tanımlamak üzere eğitmek için ayrıntılı görüntüler sağlar.
  • Package-seg: Farklı ambalaj malzemeleri ve şekillerinin bölümlenmesine adanmış bir veri kümesi. Lojistik ve depo otomasyonu için özellikle yararlıdır, paket taşıma ve sıralama sistemlerinin geliştirilmesine yardımcı olur.

Kendi veri kümeni ekleme

Kendi veri kümen varsa ve onu Ultralytics YOLO biçimiyle bölümleme modellerini eğitmek için kullanmak istiyorsan, "Ultralytics YOLO biçimi" başlığı altında 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 isimlerini belirt. images/ ve labels/ klasörlerini aynı seviyede, eşleşen alt klasör yapısıyla ayrı tut; etiket .txt dosyalarını görüntü klasörüne yerleştirmek modelin etiketleri kaçırmasına neden olabilir.

Etiket Formatlarını Taşıma veya Dönüştürme

COCO Veri Kümesi Formatından YOLO Formatına

Aşağıdaki kod parçacığını kullanarak popüler COCO veri kümesi biçimindeki etiketleri kolayca YOLO biçimine dönüştürebilirsin:

Örnek
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ı tekrar kontrol etmeyi unutma. Düzgün biçimlendirilmiş veri kümeleri, başarılı bölümleme modellerini eğitmek için çok önemlidir.

Otomatik Etiketleme (Auto-Annotation)

Otomatik etiketleme, önceden eğitilmiş bir algılama modeli kullanarak bir bölümleme veri kümesi oluşturmanı sağlayan önemli bir özelliktir. Çok sayıda görüntüyü manuel etiketlemeye gerek kalmadan hızlı ve doğru bir şekilde etiketlemeni sağlar, böylece zamandan ve emekten tasarruf edersin.

Algılama Modeli Kullanarak Bölümleme Veri Kümesi Oluşturma

Ultralytics çerçevesini kullanarak veri kümeni otomatik etiketlemek için aşağıda gösterildiği gibi auto_annotate işlevini kullanabilirsin:

Örnek
from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="sam_b.pt")
ArgümanTürVarsayılanAçıklama
datastrgerekliAçıklama veya segmentasyon için hedef görüntüleri içeren dizinin yolu.
det_modelstr'yolo26x.pt'İlk nesne tespiti için YOLO tespit modeli yolu.
sam_modelstr'sam_b.pt'Segmentasyon için SAM model yolu (SAM, SAM2 varyantları ve MobileSAM modellerini destekler).
devicestr''Hesaplama cihazı (ör. 'cuda:0', 'cpu' veya otomatik cihaz tespiti için boş bırak).
conffloat0.25Zayıf tespitleri filtrelemek için YOLO tespit güven eşiği.
ioufloat0.45Çakışan kutuları filtrelemek için NMS (Non-Maximum Suppression) IoU eşiği.
imgszint640Görüntüleri yeniden boyutlandırmak için giriş boyutu (32'nin katı olmalıdır).
max_detint300Bellek verimliliği için görüntü başına maksimum tespit sayısı.
classeslist[int]NoneTespit edilecek sınıf indeksleri listesi (ör. kişi ve bisiklet için [0, 1]).
output_dirstrNoneAçıklamalar için kaydetme dizini (veri yoluna göre varsayılan olarak './labels').

auto_annotate işlevi, görüntülerinin yolunu ve ayrıca önceden eğitilmiş algılama modellerini, yani YOLO26, YOLO11 veya diğer modelleri, bölümleme modellerini, yani SAM, SAM2 veya MobileSAM, modellerin üzerinde çalıştırılacağı cihazı ve etiketlenmiş sonuçları kaydetmek için çıktı dizinini belirtmek üzere isteğe bağlı bağımsız değişkenleri alır.

Önceden eğitilmiş modellerin gücünden yararlanarak, otomatik etiketleme, yüksek kaliteli bölümleme veri kümeleri oluşturmak için gereken süreyi ve çabayı ö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 yararlıdır, çünkü manuel etiketleme yerine model geliştirme ve değerlendirmeye odaklanmalarını sağlar.

Veri Kümesi Açıklamalarını Görselleştir

Modelini eğitmeden önce, veri kümesi açıklamalarının doğru olduğundan emin olmak için bunları görselleştirmek genellikle yararlıdır. Ultralytics bu amaçla bir yardımcı işlev sağlar:

from ultralytics.data.utils import visualize_image_annotations

label_map = {  # Define the label map with all annotated class labels.
    0: "person",
    1: "car",
}

# Visualize
visualize_image_annotations(
    "path/to/image.jpg",  # Input image path.
    "path/to/annotations.txt",  # Annotation file path for the image.
    label_map,
)

Bu işlev, sınırlayıcı kutular çizer, nesneleri sınıf isimleriyle etiketler ve metin rengini daha iyi okunabilirlik için ayarlar; böylece eğitimden önce herhangi bir etiketleme hatasını belirlemene ve düzeltmene yardımcı olur.

Bölümleme Maskelerini YOLO Biçimine Dönüştürme

Eğer ikili (binary) biçimde bölümleme maskelerin varsa, bunları şunları kullanarak YOLO bölümleme biçimine dönüştürebilirsin:

from ultralytics.data.converter import convert_segment_masks_to_yolo_seg

# For datasets like COCO with 80 classes
convert_segment_masks_to_yolo_seg(masks_dir="path/to/masks_dir", output_dir="path/to/output_dir", classes=80)

Bu yardımcı araç, ikili maske görüntülerini YOLO bölümleme biçimine dönüştürür ve bunları belirtilen çıktı dizinine kaydeder.

SSS

Ultralytics YOLO örnek bölümleme için hangi veri kümesi biçimlerini destekler?

Ultralytics YOLO, örnek bölümleme için birkaç veri kümesi biçimini destekler; birincil biçim kendi Ultralytics YOLO biçimidir. Veri kümendeki her görüntünün, sınıf indeksini ve normalize edilmiş sınırlayıcı koordinatları listeleyen, birden fazla satıra (nesne başına bir satır) ayrılmış nesne bilgilerini içeren bir metin dosyasına ihtiyacı vardır. YOLO veri kümesi biçimi hakkında daha ayrıntılı talimatlar için Örnek Bölümleme Veri Kümelerine Genel Bakış sayfasını ziyaret et.

COCO veri kümesi açıklamalarını YOLO biçimine nasıl dönüştürebilirim?

Converting COCO format annotations to YOLO format is straightforward using Ultralytics tools. You can use the convert_coco function from the ultralytics.data.converter module:

from ultralytics.data.converter import convert_coco

convert_coco(labels_dir="path/to/coco/annotations/", use_segments=True)

Bu komut dosyası, COCO veri kümesi açıklamalarını gerekli YOLO biçimine dönüştürür ve onları YOLO modellerini eğitmek için uygun hale getirir. Daha fazla ayrıntı için Etiket Biçimlerini Taşı veya Dönüştür bölümüne başvur.

Ultralytics YOLO modellerini eğitmek için nasıl YAML dosyası hazırlayabilirim?

Ultralytics ile YOLO modellerini eğitmek için bir YAML dosyası hazırlamak üzere veri kümesi yollarını ve sınıf isimlerini tanımlaman gerekir. İşte örnek bir YAML yapılandırması:

# 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.zip

Yolları ve sınıf isimlerini veri kümene göre güncellediğinden emin ol. Daha fazla bilgi için Veri Kümesi YAML Biçimi bölümüne göz at.

Ultralytics YOLO'daki otomatik etiketleme özelliği nedir?

Ultralytics YOLO'daki otomatik etiketleme, önceden eğitilmiş bir algılama modeli kullanarak veri kümen için bölümleme açıklamaları oluşturmanı sağlar. Bu, manuel etiketleme ihtiyacını önemli ölçüde azaltır. auto_annotate iş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")  # or sam_model="mobile_sam.pt"

Bu işlev, etiketleme sürecini otomatikleştirerek daha hızlı ve daha verimli hale getirir. Daha fazla ayrıntı için Otomatik Etiketleme Referansı bölümünü incele.

Yorumlar