Ultralytics YOLO27: Bekleme listesine katıl.
Get Started
Ultralytics Platform ile geliştirmeye başla·Veri Kümesini Oluştur·Ders 4/10
Dersorta düzey

Düzenle, Yinelenenleri Kaldır ve Böl

İki kısa betikle bölümler arası yinelenenleri ve sınıf eksiklerini bul, önemli olan birime göre böl ve denetlenmiş bir veri kümesi sürümünü dondur.

Bir doğrulama puanının güvenilirliği, veri kümesinin bölünme biçimi kadar iyidir. Popüler bir demo veri kümesi olan COCO128, tasarım gereği aynı 128 görüntüyü eğitim ve doğrulama için kullanır. Kendi verilerinde bunun yanlışlıkla tekrarlanması, sonraki kamerada başarısız olan 'harika' bir model ortaya çıkarır. Bu derste gerçek veriler üzerinde iki denetim yapılır: yinelenen görüntü denetimi ve bölüm başına sınıf denetimi. Ardından kamera bazında bölünür ve her iki denetimden geçen bir sürüm dondurulur.

Sonuç

Bir veri kümesi sürümünde bölümler arasında paylaşılan görüntü olmadığını, hiçbir kamera veya oturumun iki bölüme birden dağılmadığını ve doğrulama kümesinde her sınıfı ölçmeye yetecek örnek bulunduğunu kanıtlayabilir, ardından sürümü numaralandırarak dondurabilirsin.

Hızlı Başlangıç
Nasıl ilerleyeceğini zaten biliyorsan, işte kısa sürüm.
  1. Görüntüleri bölüm başına karma değerleriyle denetle: iki bölümde bulunan her karma bir sızıntıdır.

  2. NDJSON dışa aktarımını denetle: her sınıfın eğitim örnekleri ve ölçüm yapmaya yetecek kadar doğrulama örneği olması gerekir.

  3. Karma değerlerinin yakalayamadığı yakın kopyaları bulmak için bölüme göre renklendirilmiş Clustering'i çalıştır.

  4. Bölümleri kamera, konum veya oturuma göre ata; video karelerini asla rastgele yeniden dağıtma.

  5. Açıklama içeren numaralı bir sürüm oluştur ve yalnızca denetimlerden geçen sürümlerle eğitim yap.

Uygulamalı

Uygulamalı Örnek: Bölümler Arasında Paylaşılan Görüntüleri Bulma#

Platform, her bölümde bir görüntünün tek kopyasını tutar ve yükleme sırasında çakışmaların nasıl ele alınacağını sorar; ancak aynı görüntünün veya sahnenin hem eğitim hem de doğrulama bölümüne düşmesini engelleyen hiçbir şey yoktur. Yüklemeden önce ve veri kümelerini birleştirdikten sonra yeniden denetle:

import hashlib
from pathlib import Path

from ultralytics.data.utils import check_det_dataset

data = check_det_dataset("coco128.yaml")  # any local YOLO dataset YAML before you upload it

def hashes(split_dir):
    return {hashlib.md5(p.read_bytes()).hexdigest(): p.name for p in Path(split_dir).rglob("*.jpg")}

train, val = hashes(data["train"]), hashes(data["val"])
shared = train.keys() & val.keys()
print(f"train {len(train)} images, val {len(val)} images, identical in both: {len(shared)}")
print("examples:", sorted(val[h] for h in shared)[:3])
train 128 images, val 128 images, identical in both: 128
examples: ['000000000009.jpg', '000000000025.jpg', '000000000030.jpg']

COCO128 doğrulama görüntülerinin tümü aynı zamanda eğitim görüntüsüdür. Bu, duman testi veri kümesi için bilinçli bir tercihtir ve doğrulama mAP değerinin genelleme hakkında hiçbir şey söylememesinin tam da nedenidir. Kendi verilerinde sıfırdan büyük herhangi bir sayı sızıntı demektir: eğitimden önce her görüntünün kopyalarından birini taşı veya sil.

Clustering ile Yakın Kopyaları Yakala#

Karma değerleri yalnızca bayt düzeyinde aynı olan dosyaları yakalar. Ardışık video kareleri, seri çekim fotoğrafları ve yeniden kodlanmış kopyalar birkaç piksel farklılık gösterir. Galeri araç çubuğundaki dağılım grafiği simgesini aç ve Analyze Dataset seçeneğine tıkla (20 ila 200.000 görüntü; yalnızca yüklenen veri kümeleri):

Clustering paneli açık olan Ultralytics Platform medical-pills galerisi; görsel olarak benzer görüntülerin birbirine yakın konumlandığı 2B dağılım grafiğinde her görüntü bir nokta olarak gösteriliyor

  • Bölümlere göre renklendir: eğitim ve doğrulama noktalarının karıştığı sıkı bir küme, yakın kopya sızıntısına işaret eder.
  • Kümelere veya sınıflara göre renklendir: tek bir sınıftan oluşan dev bir küme, veri kümesinde hangi öğenin fazla temsil edildiğini gösterir; yalıtılmış noktalar aykırı değerlerdir (yanlış kamera, bozuk kare, yanlış etiketlenmiş görüntü).
  • Görüntüleri filtrelemek için bir bölgeyi kementle seç veya tıkla (en fazla 1.000 görüntü); ardından görüntüleri sil, taşı veya yeniden etiketle.

Aynı gömmeler, görüntü bağlam menüsündeki Benzer görüntüleri bul özelliğinde de kullanılır. Bu özellik, herkese açık ve ekip veri kümelerindeki benzer görüntüleri etiketsiz olarak train veri kümesine ekler: aşağıdaki denetimde bulunan bir eksikliği gidermenin en hızlı yolu.

Uygulamalı Örnek: Bölüm Başına Sınıfları Denetleme#

NDJSON dışa aktarımını veri kümesi başlığından veya Versions sekmesinden indir. Başlık satırından sonraki her satır, bölümü ve etiketleriyle birlikte bir görüntüyü temsil eder; böylece birkaç satır Python koduyla her bölümdeki her sınıf sayılabilir. Bu örnekte herkese açık COCO8 dışa aktarımı kullanılıyor:

import json
from collections import Counter, defaultdict

counts = defaultdict(Counter)  # split -> class name -> instances
images = Counter()
with open("coco8.ndjson") as f:  # the NDJSON export from the dataset header or Versions tab
    header = json.loads(f.readline())
    names = header["class_names"]
    for line in f:
        record = json.loads(line)
        images[record["split"]] += 1
        for box in (record.get("annotations") or {}).get("boxes", []):
            counts[record["split"]][names[str(box[0])]] += 1

print("images per split:", dict(images))
for name in sorted(set(counts["train"]) | set(counts["val"])):
    train, val = counts["train"][name], counts["val"][name]
    flag = "missing in train" if not train else "too few in val" if val < 10 else ""
    print(f"{name:<14} train {train:>3}  val {val:>3}  {flag}")
images per split: {'train': 4, 'val': 4}
bowl           train   3  val   0  too few in val
broccoli       train   1  val   0  too few in val
dog            train   0  val   1  missing in train
elephant       train   0  val   2  missing in train
giraffe        train   2  val   0  too few in val
horse          train   0  val   2  missing in train
orange         train   4  val   0  too few in val
person         train   0  val  10  missing in train
potted plant   train   1  val   1  too few in val
umbrella       train   0  val   1  missing in train
vase           train   1  val   0  too few in val
zebra          train   1  val   0  too few in val

Nasıl okunur: Başlık satırı class_names içerir; her algılama kutusu ise [class, x, y, w, h] biçimindedir. Eğitimde eksik, modelin sınıfı hiç öğrenemeyeceği ve sınıfın doğrulama AP değerinin sıfır olacağı anlamına gelir. Doğrulamada çok az, AP değerinin çalıştırmalar arasında büyük ölçüde değişeceği anlamına gelir: doğrulamada 7 palet varken bir paletin kaçırılması, palet AP değerini yaklaşık 14 puan değiştirir. COCO8, 8 görüntülü bir duman testidir; bu yüzden her sınıf denetimden kalır. Üretim sürümünde hiçbir uyarı olmamalıdır. Eksikleri ayarları değiştirerek değil, daha fazla örnek toplayarak gider.

Tıbbi haplar veri kümesinin Ultralytics Platform Classes sekmesi; açıklama ve görüntü sayılarını listeleyen sınıf tablosuyla sınıf dağılımı histogramı gösteriliyor

Classes sekmesi, dengesiz veriler için logaritmik ölçek seçeneğiyle canlı veri kümesindeki aynı sayıları gösterir. Tek sınıfta birleştir, car, automobile ve vehicle gibi yinelenen sınıfları açıklamaları kaybetmeden tek sınıfta toplar; Sil ise bir sınıfı ve tüm açıklamalarını kaldırır.

Genelleme Yapacağın Birime Göre Böl#

Aynı kamera, oturum veya güne ait kareler birbiriyle ilişkilidir. Hem eğitim hem doğrulama bölümünde yer alırlarsa model, daha önce gördüğü sahneler üzerinden değerlendirilir. Üretimde değişen her şeyin bütün birimlerini dışarıda tut: yeni kameralar varsa kameraları, aynı kameralar yeni günlerde kullanılıyorsa günleri dışarıda bırak.

Platform'un bölme araçları tam da şu açıdan farklılık gösterir:

AraçAtama yöntemiKullanım amacı
Yüklemedeki train/, val/, test/ klasörleriAtamanı korurÇevrimdışı hazırlanan grup bölümleri
Yüklemeden önce ayarlanan bölüm filtresiYüklemedeki her dosya seçilen bölüme giderHer bölüm için bir kamera yükleme
Tablo görünümünde Bölüme taşıSeçilen görüntüleri taşırBelirli görüntüleri düzeltme
Bölüm çubuğu, Bölümleri yeniden dağıtTüm görüntüleri rastgele yeniden atarYalnızca bağımsız fotoğraflar

Tıbbi haplar veri kümesinde Ultralytics Platform Bölümleri yeniden dağıt iletişim kutusu; %80 eğitim, %20 doğrulama ve %0 test olarak ayarlanmış bölüm çubuğu ve yüzde alanları gösteriliyor

Veri Kümesini Doğru Bölme dersi birimi seçmeyi anlatır; çok küçük veri kümelerinde k-katlı çapraz doğrulama daha fazla bilgi elde etmeye yardımcı olur. Yüklemeden sonra grupları denetlemek için sınıf denetimine bir grup anahtarı ekle (örneğin cam07_000123.jpg adlı dosyalar için record["file"].split("_")[0] veya görüntü meta verilerindeki camera alanı) ve iki bölümde de bulunan grupları raporla.

Denetimlerden Geçen Bir Sürümü Dondur#

Eğitim için sabit bir anlık görüntü gerekir. Versions sekmesinde bir açıklama gir ("v5: cam07 ayrıldı, +80 palet görüntüsü") ve New Version'a tıkla. Her sürüm, indirebileceğin, karşılaştırabileceğin veya geri yükleyebileceğin, değiştirilemez ve numaralandırılmış bir NDJSON anlık görüntüsüdür. Eğitim iletişim kutusundaki Save Dataset Version da başlatma sırasında aynı işlemi yapar ve hiçbir şey değişmediyse eşleşen bir sürümü yeniden kullanır. Bağlı bulut veya On Premise veri kümelerinde sürümler kullanılamaz.

Yaygın Hatalar#

Video karelerinde bölümleri yeniden dağıtma

Belirti: Otomatik 80/20'ye tıkladıktan sonra doğrulama mAP'i yükseliyor, ancak üretim doğruluğu yükselmiyor. Çözüm: Bölümleri Yeniden Dağıt, her görüntüyü rastgele yeniden atar (bu sırada tam kopyaları da kaldırır) ve komşu kareleri eğitim ve doğrulama kümelerine dağıtır. Gruplandırılmış veriler için yükleme klasörlerini veya Bölüme taşı seçeneğini kullan.

Bir sınıfı birleştirmek veya silmek tüm sınıf kimliklerini kaydırır

Belirti: Eski bir dışa aktarım veya modelin tahminleri birden yanlış sınıf adlarını taşıyor. Çözüm: Sınıf kimlikleri konuma bağlıdır; bu nedenle bir sınıfı birleştirmek veya silmek, daha yüksek tüm dizinleri bir basamak aşağı kaydırır. Sınıflarda herhangi bir değişiklik yapmadan önce bir sürüm oluştur ve eski etiket dosyalarını yeniden kullanmak yerine modeli yeniden eğit.

Proje ortasında veri bölümünü değiştirme

Belirti: Yeni bir çalıştırmanın puanı 5 puan düşük ve başka hiçbir şey değişmedi. Çözüm: Metrikler yalnızca aynı veri bölümü üzerinde karşılaştırılabilir. Veri bölümünü değiştirdiğinde bunu sürüm açıklamasına not et ve herhangi bir karşılaştırma yapmadan önce yeni sürümde başlangıç ölçümünü yeniden çalıştır.

Dene

Yerel veri kümenizde cross_split_dupes.py komutunu, Platform NDJSON dışa aktarımınızda ise kamera veya oturum adlandırma düzenine ait bir grup anahtarıyla class_audit.py komutunu çalıştır. Bildirilen tüm sızıntıları ve eksikleri gider (Bölüme taşı, Benzer görüntüleri bul, daha fazla veri), sonuçlar temiz çıkana kadar iki denetimi de yeniden çalıştır, bölüm renkleriyle Clustering'i kontrol et ve açıklama içeren bir sürüm oluştur.

Tamamlanma ölçütü
Aşağıdakilerin tümü doğru olduğunda dersi tamamlamış olursun.
  • Yinelenenleri denetleme işlemi identical in both: 0 değerini raporluyor; hiçbir kamera veya oturum grubu iki bölüme birden dağılmıyor.

  • Sınıf denetimi hiçbir missing in train uyarısı vermiyor ve her too few in val için ne yapacağına karar verdin.

  • Bölme kuralını ve yapılan değişiklikleri açıklamasında belirten numaralı bir sürüm mevcut.

Çözümü göster

8 kameralı forklift veri kümesi için örnek çözüm. Yinelenenleri denetleme işlemi, tümü yeniden yüklenmiş bir klasörden gelen, eğitim ve doğrulama arasında yinelenen 41 görüntü buluyor; doğrulama kopyalarını sil. group = record['file'].split('_')[0] ile genişletilen denetim, cam02'nin hem eğitim hem doğrulama bölümünde olduğunu gösteriyor; bu nedenle Tablo görünümünde doğrulama görüntülerini seç ve Bölüme taşı > Eğitim'i seç. Denetim ayrıca pallet: train 63, val 7, too few in val değerini işaretliyor: iki palet görüntüsünde Benzer görüntüleri bul özelliğini kullanarak benzer 40 etiketsiz görüntü ekle, bunları etiketle ve cam07'nin tümünü aynı bölümde tutmak için cam07'ye ait 15 palet görüntüsünü doğrulamaya taşı. Yeniden çalıştır: 0 yinelenen görüntü, 0 sızan grup, doğrulamada 22 palet. Bölüm renkleriyle Clustering, karışık küme olmadığını gösteriyor. v5: cam07 val, cam08 test, +40 pallets sürümünü kaydet.

Sırada ne var

Temiz ve sürümlenmiş veriler hazır. Sırada bu verilerle eğitim yapmak, çalıştırma sonuçlarını okumak ve doğru şekilde ince ayar yapmak var.

İlerlemeni kaydetmek için giriş yap