Ultralytics YOLO27: Bekleme listesine katıl.
Get Started
Dersbaşlangıç düzeyi

Veri Kümesi Tanımını Oluştur

Toplama başlamadan önce senaryoları, kotaları, çeşitliliği, uç durumları ve arka plan görüntülerini planla; planın boyutunu Ultralytics'in hacim hedeflerine göre belirle.

Tanım hazırlamayan ekipler, tek bir kameradan alınmış, iyi aydınlatılmış 5.000 gündüz fotoğrafıyla ve üretimdeki ilk gününde alacakaranlıkta başarısız olan bir modelle baş başa kalır. Veri kümesi tanımı, görüntüler için bir alışveriş listesidir: modelin ele alması gereken her senaryo, her biri için gereken görüntü sayısı ve hangi nadir durumların fazla örneklenmesi gerektiği. Bunu yazmak bir saat sürer ve veri toplama çalışmalarının nereye yönlendirileceğini belirler.

Sonuç

Çeşitlilik boyutlarını ve uç durumları kapsayan, kotalı bir senaryo tablosu oluştur; etiketlenmiş mevcut veri kümelerinin üretim hacmi hedeflerinden ne kadar uzakta olduğunu ölç.

Hızlı Başlangıç
Nasıl ilerleyeceğini zaten biliyorsan, işte kısa sürüm.
  1. Senaryoları satırlar hâlinde yaz: kamera, konum, zaman ve koşul; her birine kota ekle.

  2. Kotaları, üretim için sınıf başına ≥1.500 görüntü ve ≥10.000 etiketlenmiş örneği hedef alacak şekilde belirle.

  3. Bilinen her uç duruma ayrı bir satır ayır ve bu durumu fazla örnekle.

  4. Görüntülerin %0–10'unu nesne içermeyen arka plan görüntüleri olarak ayır.

Uygulamalı

Tanımın yeri#

Tanım, hedef ile kamera arasındaki köprüdür. Veri toplamaya yön verir ve ilk model hedefini tutturamadığında başvuracağın sayfadır:

Döngü eğitim ayarlarına değil, tanıma geri döner: hedefin tutmaması genellikle tanımda yer almayan bir senaryoya işaret eder. Bir CV projesinin adımları kılavuzu da aynı yaşam döngüsünü açıklar.

Senaryoları satırlar hâlinde yaz#

Senaryo, modelin ele alması gereken yakalama koşullarının tek bir birleşimidir. Kotalı satırlar, herhangi biri kamerayı eline almadan önce boşlukları görünür kılar:

SenaryoKameralarKonumlarGünün saatiKoşulKotaNotlar
rıhtım-gündüzcam-1 ile cam-4 arasıA–C bölmeleri08:00–17:00herhangi bir saat1,200en yoğun saatler
rıhtım-gececam-1 ile cam-4 arasıA–C bölmeleri22:00–04:00herhangi bir saat400sodyum aydınlatma, daha az insan
yükleme-yağmurcam-2, cam-3B bölmesiherhangi bir saatyalnızca yağmur200nadir ama kritik
istiflenmişherhangi bir saatherhangi bir saatherhangi bir saat2'den fazla yükseklikte palet150arkalarındaki insanları gizler
arka planherhangi bir saatherhangi bir saatherhangi bir saatboş rıhtım150nesne yok, etiket yok

Yazıya dökemediğin bir senaryo, modelin eğitimde görmeyeceği bir senaryodur ve üretimde başarısız olacağı senaryo da bu olacaktır.

Tanımı hacim hedeflerine göre boyutlandır#

Ultralytics en iyi eğitim sonuçları için ipuçları, üretimde kullanabileceğin pratik kurallar sunar:

HedefÖneri
Sınıf başına görüntü sayısı≥ 1,500
Sınıf başına etiketlenmiş örnek sayısı≥ 10,000
Arka plan görüntüleri (etiket yok)Veri kümesinin %0–10'u; COCO'da yaklaşık %1
ÇeşitlilikFarklı zamanlar, mevsimler, hava koşulları, aydınlatmalar, açılar, kaynaklar ve kameralar

Bunlar üretim modeli için asgari eşiktir. Sınıf başına birkaç yüz etiketlenmiş nesne, denemelere başlamak için yeterlidir ve ilk model, hangi senaryoların daha fazla veriye ihtiyaç duyduğunu öğrenmenin en hızlı yoludur. Bir veri kümesinin bu eşiğe ne kadar uzak olduğunu görmek için sayım yap. Bu betik, otomatik indirilen 128 görüntülük bir COCO kesiti olan COCO128 üzerinde çalışır:

from collections import Counter
from pathlib import Path

from ultralytics.data.utils import IMG_FORMATS, check_det_dataset, img2label_paths

IMAGES_PER_CLASS, INSTANCES_PER_CLASS = 1500, 10_000  # Ultralytics production targets

data = check_det_dataset("coco128.yaml")  # downloads COCO128 (~7 MB) on first run; swap in your data YAML
images = [p for p in Path(data["train"]).rglob("*.*") if p.suffix[1:].lower() in IMG_FORMATS]
image_count, instance_count, background = Counter(), Counter(), 0
for label in map(Path, img2label_paths([str(p) for p in images])):
    classes = [int(r.split()[0]) for r in label.read_text().splitlines() if r.strip()] if label.exists() else []
    instance_count.update(classes)
    image_count.update(set(classes))
    background += not classes

print(f"{len(images)} images, {background} background ({background / len(images):.0%}, target 0-10%)")
print(f"{'class':>12} {'images':>7} {'instances':>10} {'of target':>10}")
ranked = instance_count.most_common()
for cls, n in ranked[:3] + ranked[-3:]:  # best and worst covered classes
    coverage = min(image_count[cls] / IMAGES_PER_CLASS, n / INSTANCES_PER_CLASS)
    print(f"{data['names'][cls]:>12} {image_count[cls]:>7} {n:>10} {coverage:>10.1%}")

never_labeled = [name for i, name in data["names"].items() if i not in instance_count]
print(f"{len(never_labeled)} classes in names with zero labels: {never_labeled[:4]} ...")
128 images, 2 background (2%, target 0-10%)
       class  images  instances  of target
      person      61        254       2.5%
         car      12         46       0.5%
         cup      10         36       0.4%
        bear       1          1       0.0%
      banana       1          1       0.0%
        skis       1          1       0.0%
9 classes in names with zero labels: ['fire hydrant', 'parking meter', 'sheep', 'cow'] ...

Nasıl okunur:

  • Kapsama, görüntü oranı ile örnek oranından küçük olanıdır; çünkü bir sınıfın ikisine de ihtiyacı vardır. En iyi kapsanan sınıf olan person bile üretim eşiğinin yalnızca %2,5'ine ulaşır.
  • Tek örneği olan sınıflar (bear, banana, skis) öğrenilemez veya ölçülemez. Kendi veri kümen için bu sınıflara ya veri topla ya da v1'den çıkar.
  • Etiketi olmayan sınıflar YAML'da listelenmiştir ancak hiç çizilmemiştir. Model yine de kapasitesini bu sınıfları tahmin etmeye harcar. Bunları names dosyasından kaldır veya eğitimden önce bu sınıflar için veri topla.

Çeşitlilik boyutlarını kapsa#

Bir sahil yürüyüş yolunda Ultralytics YOLO tespiti: kameraya yakın insanlar ve bisikletliler, bir köpek ve farklı uzaklıklardaki arabalar; her biri etiketlenmiş bir kutu ve güven skoru ile gösteriliyor

Tek bir karede bile yakındaki ve uzaktaki insanlar, bisikletler, bir köpek ve arabalar bir aradadır. Gerçek bir tanımın bu çeşitliliği bilerek planlaması gerekir. Her boyut için tanımın bu durumu kapsayıp kapsamadığını veya neden geçerli olmadığını yaz; boş satırlar, üretimde karşılaşacağın senaryolardır:

BoyutÖrnekler
ZamanGündüz, gece, şafak, alacakaranlık
Hava durumuGüneşli, kapalı, yağmurlu, sisli, karlı
AydınlatmaParlak, loş, kamaşma, sert gölgeler, karma ışık kaynakları
KameraModel, lens, montaj yüksekliği, görüş alanı
CoğrafyaSahalar, şehirler, ülkeler
İnsanlar ve operatörlerVardiyalar, ekipler, üniformalar, koruyucu donanım
Ürün çeşitleriSKU'lar, ambalaj revizyonları, renkler
Nesne boyutuYakın ve büyük, orta mesafede, uzak ve küçük
ÖrtülmeNet, kısmen örtülü, yoğun biçimde örtülü, camın arkasında
Ekipman durumuKirli veya buğulanmış lensler, hasarlı paletler, aşınmış zemin işaretleri

Çeşitlilik, hacimden daha önemlidir: Bu satırlara dağıtılmış 1.500 görüntü, öğle vakti tek bir kameradan alınan 5.000 görüntüden daha değerlidir.

Arka plan görüntülerini ve uç durumları planla#

Arka plan görüntüleri, boş bir yükleme alanı gibi etiketlenmiş nesne içermeyen karelerdir. Modele orada hiçbir şey olmadığını öğretir ve yanlış pozitifleri azaltır.

Bir arka plan görüntüsü nasıl saklanır

Ultralytics YOLO biçiminde arka plan görüntüsü, boş bir etiket dosyası olan veya hiç etiket dosyası bulunmayan bir görüntüdür. Eğitim, tarama satırında (… 1200 images, 90 backgrounds, 0 corrupt) ikisini de sayar. İlk epoch başlamadan önce bu sayıyı %0–10 hedefinle karşılaştır.

Uç durumlar; yoğun örtülme, kare kenarında kesilmiş nesneler, alışılmadık yönelimler, üst üste yığılmış nesneler ve forklift direğiyle çelik kolon gibi birbirine benzeyen nesnelerdir. Her birine kendi kota satırını ayır.

Doğal sıklık uç durumları yetersiz bırakır

200 kareden biri istiflenmiş paletlerin arkasında bir kişiyi gösteriyorsa doğal sıklıkta toplanmış bir veri kümesi, 1.500 karede yaklaşık 7 böyle kare içerir; bu, öğrenme için çok azdır. Uç durumları bilerek fazla örnekle: bu durumlara ayrılan kota satırları, gerçek görüntülerdeki paylarından çok daha büyük olmalı.

Spesifikasyonun eksiksiz olması gerekmez

Her senaryoyu kâğıt üzerinde düşünemezsin. Spesifikasyonu büyük ölçüde doğru hâle getir, ilk modeli hızla eğit ve kaçırdığın senaryoları hatalarının ortaya çıkarmasına izin ver.

Dene

Projen için her biri sayısal kotaya sahip 5–10 satırlı bir senaryo tablosu taslağı hazırla; ayrıca bir arka plan satırı ve bilinen her uç durum için bir satır ekle. Tabloyu dağıtım sahasında çalışan biriyle gözden geçir ve belirttiği her senaryoyu ekle. Ardından, hâlihazırda etiketlenmiş verilerinde (veya COCO128'de) volume_gap.py çalıştır ve kapsamı en iyi ve en kötü olan sınıfları not et. Teslimat: tabloyu ve kapsama sayılarını içeren spec.md.

Tamamlanma ölçütü
Aşağıdakilerin tümü doğru olduğunda dersi tamamlamış olursun.
  • Senaryo tablosunda en az 5 satır bulunur; her satırın sayısal kotası vardır. Ayrıca arka plan ve uç durum satırları da yer alır.

  • Çeşitliliğin 10 boyutundan en az 5'i kapsanır veya kapsam dışında bırakıldığı açıkça belirtilir.

  • Kotaların toplamı, sınıf başına görüntü ve örnek hedeflerine en azından ulaşır veya aradaki fark v1 istisnası olarak belgelenir.

Çözümü göster

Kotalar yalnızca görüntü hedefinden değil, örnek hedefinden hesaplanır. Bir otopark sayacının iki sınıfı olduğunu ve pilot görüntülerde görüntü başına ortalama 3 otomobil ve 0,5 kamyon bulunduğunu varsayalım:

SınıfGörüntü başına örnek sayısı10.000 örnek için gereken görüntü sayısı1.500 görüntülük taban hedef için gereken görüntü sayısıPlan
car3.0≈ 3,3001,5003.300 görüntü
truck0.5≈ 20,0001,500Kamyonların 10 kat daha sık görüldüğü yükleme girişinde hedefli görüntü toplama

Otomobiller sıradan görüntülerle kapsanır. Kamyonlar için rastgele 20.000 görüntü gerekir; bu nedenle spesifikasyona her şeyden altı kat fazla toplamak yerine özel bir senaryo satırı (yükleme girişi, hafta içi 06:00–10:00) eklenir. Yaklaşık %5 oranında bir arka plan satırı (gece boş otopark) ve kar örtüsüyle kısmen kare dışında kalan kamyonlar için uç durum satırları ekle.

Sırada ne var

Spesifikasyon hazır olduğuna göre, sonraki derste bu gereksinimleri gerçekten karşılayan görüntüler toplanıyor.

İlerlemeni kaydetmek için giriş yap