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.
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:
| Senaryo | Kameralar | Konumlar | Günün saati | Koşul | Kota | Notlar |
|---|---|---|---|---|---|---|
| rıhtım-gündüz | cam-1 ile cam-4 arası | A–C bölmeleri | 08:00–17:00 | herhangi bir saat | 1,200 | en yoğun saatler |
| rıhtım-gece | cam-1 ile cam-4 arası | A–C bölmeleri | 22:00–04:00 | herhangi bir saat | 400 | sodyum aydınlatma, daha az insan |
| yükleme-yağmur | cam-2, cam-3 | B bölmesi | herhangi bir saat | yalnızca yağmur | 200 | nadir ama kritik |
| istiflenmiş | herhangi bir saat | herhangi bir saat | herhangi bir saat | 2'den fazla yükseklikte palet | 150 | arkalarındaki insanları gizler |
| arka plan | herhangi bir saat | herhangi bir saat | herhangi bir saat | boş rıhtım | 150 | nesne 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şitlilik | Farklı 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
personbile ü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ı
namesdosyasından kaldır veya eğitimden önce bu sınıflar için veri topla.
Çeşitlilik boyutlarını kapsa#

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 |
|---|---|
| Zaman | Gündüz, gece, şafak, alacakaranlık |
| Hava durumu | Güneşli, kapalı, yağmurlu, sisli, karlı |
| Aydınlatma | Parlak, loş, kamaşma, sert gölgeler, karma ışık kaynakları |
| Kamera | Model, lens, montaj yüksekliği, görüş alanı |
| Coğrafya | Sahalar, şehirler, ülkeler |
| İnsanlar ve operatörler | Vardiyalar, ekipler, üniformalar, koruyucu donanım |
| Ürün çeşitleri | SKU'lar, ambalaj revizyonları, renkler |
| Nesne boyutu | Yakın ve büyük, orta mesafede, uzak ve küçük |
| Örtülme | Net, kısmen örtülü, yoğun biçimde örtülü, camın arkasında |
| Ekipman durumu | Kirli 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.
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.
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ı.
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.
Çö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ıf | Gö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 |
|---|---|---|---|---|
car | 3.0 | ≈ 3,300 | 1,500 | 3.300 görüntü |
truck | 0.5 | ≈ 20,000 | 1,500 | Kamyonları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.