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

Veri Kümesinin Ne Zaman Hazır Olduğunu Bil

İlk eğitim çalıştırmasını sekiz geçer/kalır kontrolüne bağla, bir betiğin doğrulayabileceği üçünü otomatikleştir ve her başarısızlığın hangi düzeltmeyi gerektirdiğini bil.

Her projede ekibin eğitim yapmak istediği bir an gelir. Bazen veri kümesi hazırdır; bazen de hâlâ bir bölme sızıntısı veya eksik etiketlenmiş bir sınıf vardır. Bunlar bir haftalık GPU süresini boşa harcayıp kimsenin güvenmemesi gereken bir sonuç üretebilir. Her biri evet, hayır veya belgelenmiş istisna olarak puanlanan sekiz kontrol, bu kararı ruh hâline bağlı olmaktan çıkarıp nesnel hâle getirir.

Sonuç

Veri kümeni sekiz maddelik hazır olma kontrolüne göre puanla; sayılabilir üç kontrolü bir betikle doğrula ve ya eğitime geçme kararı ya da öncelik sırasına konmuş bir düzeltme listesi oluştur.

Hızlı Başlangıç
Nasıl ilerleyeceğini zaten biliyorsan, işte kısa sürüm.
  1. Sekiz kontrolün tamamını evet, hayır veya belgelenmiş istisna olarak puanla.

  2. Hacim, sızıntı, bölme kapsamı ve arka plan oranını readiness.py ile puanla.

  3. Her hayır yanıtını hiperparametrelerle değil, veride düzelt.

  4. Bilinen bir eksikliğe rağmen yalnızca beklenen etkisi yazılıysa teslim et.

Uygulamalı

Sekiz kontrol#

#KontrolGeçme ölçütleriBaşarısız olursa geri dönülecek yer
1Net hedefHedef, görev, sınıflar ve kabul testi yazılı ve üzerinde uzlaşılmışİş Hedefiyle Başla
2Tanımlanmış sınıflarHer sınıfın bir tanımı ve kapsam dışında bıraktığı, benzer görünen bir örnek vardırHedef ve etiketleme kılavuzu
3Temsili görüntülerHer teknik özellik senaryosu kotasını karşılıyor; görüntülerin çoğu üretim kaynaklarından geliyorYüksek Kaliteli ve Temsili Veri Topla
4Yeterli hacimSınıf başına ≥ 1.500 görüntü ve ≥ 10.000 örnek ya da belgelenmiş bir istisnaTeknik özellikler ve veri toplama
5Tutarlı etiketlerKılavuz yazılmış, kalibrasyon turu tamamlanmış, uyum ≥ %90Etiketleme İçin En İyi Uygulamalar
6Kalite kontrolü tamamlandıDenetim betiğinde sorun yok, şüpheli örnekler incelenmiş, kalite kontrol notları yazılmışVeri Kümesi Kalite Kontrolü
7Temiz veri bölmeleriGruplara göre bölünmüş, hiçbir grup iki bölmede yer almıyor, her sınıf her bölmede bulunuyorVeri Kümesini Doğru Şekilde Böl
8Arka plan görüntüleriGörüntülerin %0–10'u etiket içermeyen karelerden oluşuyorTeknik özellikler ve veri toplama

Kontrol listesi, veri toplama ve etiketleme kılavuzunun tek tek ele aldığı kararların aynısını bir araya getirerek tek bir devam et/devam etme kararına dönüştürür.

Sayılabilir kontrolleri otomatikleştir#

4, 7 ve 8 numaralı kontroller aritmetik işlemlerden ibarettir; bu nedenle bir betik bunları her seferinde aynı şekilde puanlar. Bu betik, alıştırma kümesini ve önceki derste group_split.py tarafından yazılan bölme listelerini okur:

from collections import Counter
from pathlib import Path

root = Path("datasets/practice")  # images/, labels/, and the train/val/test.txt lists from group_split.py
splits = {s: [Path(p).stem for p in (root / f"{s}.txt").read_text().split()] for s in ("train", "val", "test")}

def classes(stem):
    label = root / "labels" / f"{stem}.txt"
    return [int(r.split()[0]) for r in label.read_text().splitlines() if r.strip()] if label.exists() else []

stems = [s for split in splits.values() for s in split]
instances = Counter(c for s in stems for c in classes(s))
images = Counter(c for s in stems for c in set(classes(s)))
background = sum(not classes(s) for s in stems) / len(stems)
groups = {split: {s.rsplit("_", 1)[0] for s in names} for split, names in splits.items()}
per_split = {split: {c for s in names for c in classes(s)} for split, names in splits.items()}
shared = (groups["train"] & groups["val"]) | (groups["train"] & groups["test"]) | (groups["val"] & groups["test"])
weakest = min(instances, key=lambda c: (images[c], instances[c]))

checks = {
    "4 volume": (images[weakest] >= 1500 and instances[weakest] >= 10_000,
                 f"weakest class {weakest}: {images[weakest]} images, {instances[weakest]} instances"),
    "7 no shared groups": (not shared, f"{len(shared)} groups appear in more than one split"),
    "7 every class in every split": (all(per_split[s] == set(instances) for s in splits),
                                     ", ".join(f"{s} misses {len(set(instances) - per_split[s])}" for s in splits)),
    "8 background 0-10%": (background <= 0.10, f"{background:.1%} background images"),
}
for name, (ok, detail) in checks.items():
    print(f"{'PASS' if ok else 'FAIL'}  {name:<29} {detail}")
FAIL  4 volume                      weakest class 30: 1 images, 1 instances
PASS  7 no shared groups            0 groups appear in more than one split
FAIL  7 every class in every split  train misses 5, val misses 36, test misses 41
PASS  8 background 0-10%            1.6% background images

Gruplu bölme sızıntıyı giderdi, ancak alıştırma kümesi hazır olmaktan çok uzak: en zayıf sınıfında (30, skis) yalnızca tek bir etiketli örnek var ve val, sınıfların yarısını puanlayamıyor. 128 demo görüntüsü için beklenen sonuç budur; bu kontrolün bir haftalık eğitimden önce vermek üzere tasarlandığı sonuç da tam olarak budur.

Temiz bir betik, eksiksiz bir kontrol listesi demek değildir

Betik sayılabilen şeyleri kapsar. 1, 2, 3, 5 ve 6 numaralı kontroller insan gerektirir: üzerinde uzlaşılmış bir hedef, yazılı tanımlar, spesifikasyon kapsamı, ölçülmüş bir uyum puanı ve kalite kontrol notları. Bunları elle, her biri için tek satır kanıtla puanla.

Karar ver: eğit, eksikle birlikte teslim et veya düzelt#

Bir kontrol başarısız olduğunda, cazip gelen sonraki adım neredeyse her zaman veriyi düzeltmekten başka bir şeydir:

Cazip kestirme yolNeden işe yaramaz
"Daha büyük bir model dene."Daha büyük bir model de etiket gürültüsünü aynı ölçüde öğrenir.
"Öğrenme oranını ayarla."Hiçbir optimizer ayarı eksik bir sınıfı veya senaryoyu ekleyemez.
"Daha fazla epoch eğit."Dar kapsamlı verilerle daha fazla epoch, aşırı öğrenmeye daha hızlı yol açar.
"Daha fazla artırma ekle."Artırım, veride hiç bulunmayan senaryoları oluşturamaz.

Neredeyse hazır olan üç örüntü#

ÖrüntüBaşarısız kontrolNasıl görünürÇözüm
Çeşitlilik olmadan hacim35.000 görüntü, tek kamera, hiç uç durum yokEğitimden önce daha fazla kamera, konum ve zamandan görüntü topla
Tutarlılık olmadan çeşitlilik5Etiketleyiciler kutu sınırları ve örtülme konusunda anlaşamıyorKılavuzu tamamla, kalibrasyon yap ve etkilenen örnekleri yeniden etiketle
Fark edilmesi güç sızıntı7Video karelerini görüntü başına rastgele bölmeKlip, kamera veya güne göre yeniden böl; val mAP'nin düşmesini bekle, çünkü bu düşüş gerçeği yansıtır.

Bilinen bir eksikle yayına al#

Her kontrol yeşile dönmeden önce odaklanmış bir ilk modelle başlamak çoğu zaman doğru karardır: bir pilot, prototip veya kameraların bir alt kümesinde çalışan bir v1. Üretimdeki bir model, karanlıkta veri kümesini cilalamaktan daha hızlı biçimde gerçekte neyin yanlış olduğunu gösterir. Bir modeli eksikle yayına alırken şu üç şeyi not et:

  • Hangi kontrol başarısız oldu.
  • Beklenen etki; örneğin "gece verisi yok; hava karardıktan sonra geri çağırmanın düşmesi bekleniyor".
  • v1 çalışırken bu eksiği giderecek veri toplama planı.
Etkisi belirtilmeyen bir istisna, atlanmış bir kontrolden ibarettir

"Hacim: istisna" ifadesi bir sonraki kişiye hiçbir şey anlatmaz. "Hacim: 700 örnek içeren pallet; kalabalık bölmelerde palet geri çağırımı daha düşük bekleniyor; hazirana kadar 2.000 ek etiket" ise yönetilen bir risktir. Her istisna için kabul testi üzerindeki beklenen etkiyi belirt.

Her yeniden eğitimden önce tekrar çalıştır#

Zaman içindeki model kalitesi: Yeni etiketli veriler geldikçe kalite korunur, ardından beklenen düşüş noktasından sonra azalarak şimdi mi yeniden eğitim yapılması yoksa beklenmesi mi gerektiği sorusunu gündeme getirir

v1 için hazır olan bir veri kümesi, v3 için otomatik olarak hazır değildir. Yeni sınıflar, yeni kaynaklar ve yeni etiketleyiciler, daha önce geçen bir kontrolü başarısız hâle getirebilir; yeni etiketler birikirken üretim verileri de dağılım kaymasına uğrar. Her yeniden eğitimden önce readiness.py komutunu tekrar çalıştır ve manuel kontrolleri yeniden puanla; bu birkaç dakika sürer, atlamaksa bozuk bir veri kümesi üzerinde bir haftalık eğitime mal olabilir.

Dene

Bölünmüş veri kümenizde (veya alıştırma kümesinde) readiness.py komutunu çalıştır, ardından beş manuel kontrolü her biri için tek satır kanıtla elle puanla. Başarısız olan her kontrolü, kabul testinin ne kadarını riske attığına göre sırala. Teslim edilecek çıktı: QC notlarının yanına kaydedilmiş, puanlanmış sekiz satırlı bir kontrol listesi ve geçiş kararı ya da önem sırasına göre düzeltme listesi.

Tamamlanma ölçütü
Aşağıdakilerin tümü doğru olduğunda dersi tamamlamış olursun.
  • Sekiz kontrolün hepsinin bir puanı ve tek satırlık kanıtı var; sayılabilir üç kontrolün sonuçları betikten geliyor.

  • Her istisna, kabul testi üzerindeki beklenen etkisini ve bu etkiyi giderecek bir planı belirtiyor.

  • Karar (eğit, belgelenmiş bir eksikle yayına al veya önce düzelt) kontrol listesiyle birlikte kaydedilmiş.

Çözümü göster

Alıştırma kümesi için puanlanmış bir kontrol listesi:

#KontrolPuanKanıt
1Amaç netevet1. dersteki objective.md ve acceptance_test.py
2Sınıflar tanımlıhayırCOCO'nun 80 sınıf adı için yazılı tanımlar veya kapsam dışı benzer örnekler yok
3Görüntüler temsilihayırcoverage.py: cam2–cam4 kota altında
4Hacim yeterlihayırreadiness.py: en zayıf sınıfta 1 görüntü var
5Etiketler tutarlıhayırKalibrasyon turunda uyum %47
6QC tamamlandıkısmenDenetim yapıldı; 000000000438.jpg içindeki şüpheli örnekler hâlâ çözümlenmedi
7Veri bölümleri temizhayırPaylaşılan grup yok, ancak val'de 71 sınıfın 36'sı eksik
8Arka plan görüntülerievet1.6%

Karar: önce düzelt. Kabul testine yönelik riske göre sıralama: (1) sınıf listesini amacın gerektirdiği sınıflara indir; böylece 2, 4 ve 7. kontrollerin kapsamı aynı anda daralır; (2) bu sınıflar için daha fazla grup topla; (3) kılavuzdaki uzaktaki kişilerle ilgili kuralı tamamla ve etiketleri yeniden düzenle. Demo kümesi bu kontrolden geçemez ve geçmemesi gerekir.

Sırada ne var

Kontrol listesi geçtikten sonra, sonraki derste bir temel model ince ayarı yapılır ve sonuçlar bir sonraki veri kümesi düzeltmesine dönüştürülür.

İlerlemeni kaydetmek için giriş yap