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

Yüksek Kaliteli, Temsili Veriler Topla

Görüntüleri gerçek dağıtım koşullarından al, çekim meta verilerini her dosya adında tut, kapsamı spesifikasyona göre izle ve veri kümesini gereksiz yere büyütmeden videodan örnek seç.

Veri kümelerindeki sorunların çoğu veri toplama aşamasındaki hatalardan kaynaklanır. Bir ekip, bir hafta boyunca tek kameradan temiz örnekler toplar; doğrulama sonuçları harika görünür, ancak model ikinci sahada başarısız olur. Veri toplama, başarının üst sınırını belirler: Etiket kalitesi, veri artırma veya hiperparametreler, veri kümesinde hiç bulunmayan bir sahneyi modele öğretemez.

Sonuç

Dosya adlarında kamera, gün ve kare bilgisi bulunan bir veri kümesi oluştur; kapsamını spesifikasyonundaki kotalara göre raporla ve videoyu farklı karelerden oluşan bir seçkiye indir.

Hızlı Başlangıç
Nasıl ilerleyeceğini zaten biliyorsan, işte kısa sürüm.
  1. Modelin çalışacağı üretim kameralarından görüntü al.

  2. Daha sonraki adımlarda gruplandırıp denetleyebilmek için her dosyayı camera_day_frame olarak adlandır.

  3. Kamera, gün ve senaryo başına görüntü sayılarını spesifikasyondaki kotalarla karşılaştır ve eksikleri topla.

  4. Yalnızca sahnenin değiştiği kareleri tutacak şekilde videodan örnek seç.

  5. Kamuya açık, sahnelenmiş veya sentetik görüntüleri yalnızca belirli eksikleri gidermek için kullan.

Uygulamalı

Çeşitlilik hacimden önemlidir#

Aynı dağıtım hedefi için hazırlanmış iki veri kümesini karşılaştır:

Veri kümesiDoğrulama sonucuÜretimde
Bir kameradan yalnızca öğle vakti alınmış, neredeyse birbirinin aynısı 10.000 kareYüksek: Doğrulama kareleri eğitim karelerine benziyorFarklı bir kamerada ve alacakaranlıkta performans düşer
Spesifikasyondaki 12 senaryoya dağıtılmış 1.500 kareDaha sınırlıÜretim verilerdekine benzediğinden performansını korur

İlk veri kümesinin doğrulama puanı, doğrulamanın yalnızca kapsadığı tek koşulu ölçmesi nedeniyle yüksektir. Üretimde model, karşılaştığı senaryolar arasında kapsamı en zayıf olan kadar iyidir. Önce spesifikasyonun kapsamını, sonra veri hacmini artırmaya odaklan.

Kaynakları doğru sırayla seç#

Veri kümesinin çoğu gerçek üretim kurulumundan gelmelidir. Veri toplama ve etiketleme kılavuzu her kaynağı daha ayrıntılı ele alır:

KaynakNe zaman yararlı olurNe zaman sakıncalı olur
Canlı üretim kameralarıDağıtım ortamına en yakın seçenekYavaştır; veri anlaşmaları gerekebilir
Arşivlenmiş üretim kamerası görüntüleriKısa sürede çok çeşitli veri sağlarEski görüntüler mevcut kurulumla uyuşmayabilir
Kamuya açık veri kümeleri (COCO, Open Images, VOC)Yaygın sınıflar için başlangıç verisi oluşturmaSahnelerinle aranda alan kayması olabilir
Sahnelenmiş çekimlerBelirli uç durumları isteğe göre sağlamaFazla temizdir; aşırı güvenmeye yol açabilir
Sentetik veya üretilmiş görüntülerBekleyemeyeceğin nadir tehlikeler ve arızalarModel, üreticinin tarzını öğrenebilir
Web'den veri kazımaDüşük maliyetle çeşitlilik sağlarKalite tutarsızdır ve lisans riski taşır

Spesifikasyondaki belirli ve adı konmuş eksikleri gidermek için sahnelenmiş, kamuya açık ve sentetik görüntüler kullan; işe yarayıp yaramadıklarını ölçebilmek için veri kümesindeki paylarını izle. Ultralytics Platform üzerindeki Benzer görüntüler oluştur özelliği, mevcut bir görüntünün etiketlenmemiş ve etiketlemeye hazır türevlerini veri kümesine ekler.

Meta verileri dosya adına ekle#

Her görüntüde en azından kamera kimliği, çekim günü ve kare veya klip numarası bulunmalıdır. Bunlar olmadan daha sonra gruplara göre ayırma yapamaz, gerilemenin kaynağını izleyemez veya yeterince temsil edilmeyen bir senaryodan daha fazla veri toplayamazsın. En kalıcı taşıyıcı dosya adıdır: cam2_2026-05-01_000124.jpg tüm araçlarda, dışa aktarımlarda ve yüklemelerde korunur. Ultralytics Platform veri kümesi araması dosya adlarıyla özel meta verilerde eşleşme bulur; böylece yüklemeden sonra da bu anahtarlar aranabilir kalır.

Bu betik, kursun geri kalanında kullanılacak alıştırma veri kümesini oluşturur. COCO128'in etiketli görüntülerini kopyalar ve sanki dört kamera bunları dört gün boyunca çekmiş gibi yeniden adlandırır; ayrıca, elverişli bir kamerada genellikle olduğu gibi cam1 fazla örneklenir:

import shutil
from pathlib import Path

from ultralytics.data.utils import check_det_dataset, img2label_paths

data = check_det_dataset("coco128.yaml")  # 128 COCO images stand in for your camera captures
out = Path("datasets/practice")
(out / "images").mkdir(parents=True, exist_ok=True)
(out / "labels").mkdir(parents=True, exist_ok=True)

for i, image in enumerate(sorted(Path(data["train"]).glob("*.jpg"))):
    camera = ("cam1", "cam1", "cam2", "cam3", "cam4")[i % 5]  # cam1 over-collected, like a real site
    name = f"{camera}_2026-05-0{i // 32 + 1}_{i:06d}"  # camera, capture day, frame number
    shutil.copy(image, out / "images" / f"{name}.jpg")
    label = Path(img2label_paths([str(image)])[0])
    if label.exists():
        shutil.copy(label, out / "labels" / f"{name}.txt")

print(len(list((out / "images").glob("*.jpg"))), "images written to", out)
128 images written to datasets/practice

Ultralytics Platform Yeni Veri Kümesi iletişim kutusu: YOLO, COCO veya NDJSON biçimindeki görüntüleri, videoları ya da veri kümelerini sürükle; ardından veri kümesi adını, URL'yi, açıklamayı, görev türünü, lisansı, yüz bulanıklaştırmayı ve görünürlüğü ayarla

Ultralytics Platform'a yükleme, bu dosya adlarını korur. Yükleme iletişim kutusu videoları ve tüm veri kümelerini de kabul eder; ayarlar arasında gizlilik için yüz bulanıklaştırma seçeneği de bulunur.

Kapsamı spesifikasyona göre izle#

Meta veriler dosya adlarında olduğunda kapsamı saymak yeterlidir. Kotaları spesifikasyonuna göre belirle ve betiğin sırada ne toplanması gerektiğini belirtmesini sağla:

from collections import Counter
from pathlib import Path

QUOTA = {"cam1": 30, "cam2": 30, "cam3": 30, "cam4": 30}  # images per camera, from your spec

images = sorted(Path("datasets/practice/images").glob("*.jpg"))
cameras = Counter(p.stem.split("_")[0] for p in images)
days = Counter(p.stem.split("_")[1] for p in images)

for camera, quota in QUOTA.items():
    gap = quota - cameras[camera]
    print(f"{camera}: {cameras[camera]:3d} / {quota}  {'ok' if gap <= 0 else f'collect {gap} more'}")
print("days:", dict(sorted(days.items())))
cam1:  52 / 30  ok
cam2:  26 / 30  collect 4 more
cam3:  25 / 30  collect 5 more
cam4:  25 / 30  collect 5 more
days: {'2026-05-01': 32, '2026-05-02': 32, '2026-05-03': 32, '2026-05-04': 32}

Karar kuralı: Kotayı aşan kaynaklardan veri toplamayı durdur ve çabayı eksiklere yönelt. Burada cam1 zaten görüntülerin %40'ını oluşturuyor. Bu kaynaktan bir hafta daha görüntü almak hacmi artırır, ancak kapsama yeni bir katkı sağlamaz.

Veri kümesini şişirmeden videodan örnek seç#

Video, en ucuz kaynak ve yanlış kullanımı en kolay olanıdır. Saniyede 30 kare hızında bir dakika, neredeyse birbirinin aynısı 1.800 kare üretir; aynı anı iki kez etiketlemek hem maliyetlidir hem de metrikleri şişirir. Yalnızca sahne, tuttuğun son kareden bu yana değiştiğinde yeni bir kareyi sakla:

from pathlib import Path

import cv2

from ultralytics.utils.downloads import safe_download

video = "solutions_ci_demo.mp4"  # a short public demo clip; swap in your own footage
safe_download(f"https://github.com/ultralytics/assets/releases/download/v0.0.0/{video}")
Path("frames").mkdir(exist_ok=True)

cap = cv2.VideoCapture(video)
fps = cap.get(cv2.CAP_PROP_FPS)
read = kept = 0
last = None
while True:
    ok, frame = cap.read()
    if not ok:
        break
    thumb = cv2.cvtColor(cv2.resize(frame, (64, 64)), cv2.COLOR_BGR2GRAY).astype(float)
    if last is None or abs(thumb - last).mean() > 10:  # keep a frame only when the scene has changed
        cv2.imwrite(f"frames/clip01_{read:06d}.jpg", frame)  # the clip ID stays in the filename
        kept, last = kept + 1, thumb
    read += 1

print(f"{read} frames at {fps:.0f} FPS -> {kept} kept")
62 frames at 30 FPS -> 6 kept

İki saniyelik klipte 62 kare bulunmasına rağmen görsel olarak farklı yalnızca 6 an var. Betik, küçük gri tonlamalı küçük resimleri karşılaştırır; bu nedenle saatlerce süren görüntülerde bile hızlı çalışır. Sabit kameralardan daha az kare tutmak için 10 eşiğini yükselt; hızlı hareket eden sahnelerde düşür. Bütçeyi klipler arasında da dağıt: 50 klipten 20'şer kare almak, tek klipten 1.000 kare almaktan daha iyidir.

Tek bir klipten alınan kareler çok sayıda değil, tek bir örnektir

Aralarında bir saniye olan iki kare aynı aydınlatmayı, arka planı ve genellikle aynı nesneleri paylaşır. Hem eğitim hem doğrulama kümesine düşerlerse modelin etkili biçimde gördüğü görüntüler üzerinden puanlanırsın. Klipleri bir arada tutabilmesi için her dosya adında klip kimliğini sakla; böylece Veri Kümesini Doğru Böl bunu yapabilir.

Veri toplarken yapılan hatalardan kaçın#

HataBelirtiÇözüm
Tek haftada veri toplamamAP değeri yüksek olur, ancak diğer mevsimlerde veya vardiyalarda nesneler kaçırılırVeri toplamayı haftalara veya aylara yayın
Tek kameraİkinci kamerada başarısız olurKullanıma alacağın her kamera türünden görüntü topla
Yalnızca kontrollü koşullarda çekilmiş verilerGerçek dünyadaki karmaşık sahnelerde başarısız olurKontrollü koşullarda çekilen görüntüleri azınlıkta tut ve sayılarını takip et
Yinelenen karelerŞişirilmiş metrikler, boşa harcanan etiketleme emeğiSahne değişimine göre örnekle; Ultralytics Platform yükleme sırasında birebir kopyaları da atlar
Tek operatör veya vardiyaPlanlanmamış görünüm çeşitliliği ve sınıf dengesizliğiVardiyalardan, sahalardan ve kişilerden örnekler al
Nadir durumların eksikliğiEn önemli güvenlik olaylarını kaçırırHedefli veri toplama, kontrollü çekim veya sentetik veriyle tamamlama

Önyargı bir modelleme sorunu değil, veri toplama sorunudur: veride hiç yer almayan bir grubu hiçbir hiperparametre telafi edemez. Veri toplama kılavuzu dört yöntem sıralar: çeşitli kaynaklar, dengeli temsil, kapsama alanının düzenli olarak yeniden denetlenmesi ve yeterince temsil edilmeyen grupların fazla örneklenmesi gibi azaltma yöntemleri.

Görüntüler yüz, plaka veya başka kişisel veriler içeriyorsa, veri toplamaya başlamadan önce rıza alman ve bir saklama politikası belirlemen gerekir. Veri gizliliği sözlük maddesi iyi bir başlangıç noktasıdır; dataRegion ile verileri doğru yargı bölgesinde tutmayı Gizlilik, Bölgeler ve Uyumluluk açıklar.

Dene

make_practice_set.py komutunu çalıştır, ardından kotaları kendi gereksinimlerine uyacak şekilde düzenlemek (veya alıştırma kotalarını olduğu gibi bırakmak) için coverage.py dosyasını düzenle ve komutu çalıştır. Gerçek projen için son 50 görüntüyü camera_day_frame düzenine göre yeniden adlandır ve aynı kapsama sayımını bu görüntülerde çalıştır. Teslimat: kota aşımındaki her kaynağı ve boyutuyla birlikte her açığı listeleyen bir kapsama raporu ve veri toplama planı.

Tamamlanma ölçütü
Aşağıdakilerin tümü doğru olduğunda dersi tamamlamış olursun.
  • Her görüntü dosyasının adı bir kamera (veya kaynak), çekim günü ve kare ya da klip numarası içerir.

  • Kapsama raporu, kamera, gün veya senaryo başına görüntü sayılarını gereksinimlerdeki kotalarla karşılaştırır.

  • Videodan sahne değişimine göre örnek alınır ve tutulan karelerde klip kimliği korunur.

Çözümü göster

Alıştırma veri kümesi için kapsama raporu doğrudan bir plan sunar:

KaynakSayı / kotaEylem
cam152 / 30Veri toplamayı durdur; tüm görüntülerin şimdiden %40'ı
cam226 / 304 tane daha topla
cam325 / 305 tane daha topla
cam425 / 305 tane daha topla

Her kamera dört günün tamamını kapsadığından, açıklar gün başına değil kamera başınadır. Yeni 14 görüntüyü en az iki yeni güne yay; böylece aynı öğleden sonradan daha fazla görüntü yerine yeni bir koşul eklemiş olursun. Açığı karşılayamayan bir kamera için (yalnızca geceleri görüntü alan bir kamera gibi), eksik koşul için gereksinimlere bir satır ekle ve bu açığı kontrollü koşullarda çekilmiş görüntülerin mi yoksa üretilmiş görüntülerin mi kapattığını kaydet; böylece etkisi daha sonra ölçülebilir.

Sırada ne var

Görüntüler toplandığında, bir sonraki derste bunları ilk seferde tutarlı etiketlere dönüştüreceksin.

İlerlemeni kaydetmek için giriş yap