Veri Ekle ve Hazırla
Yüklemeden önce veri kümesini yerel olarak denetle, videodan bilinçli örnekleme yap ve Platform veri kümesini ilk denemede Ready durumuna getir.
Yüklemeden önce yakaladığın veri kümesi hatası en az maliyetli hatadır. Pascal VOC etiketleri sessizce atlanır, 28 pikselden küçük görüntüler reddedilir ve 30 dakikalık bir video yalnızca 100 kareye dönüşür; bunların çoğunda boş bir sahne görünür. Bu derste yükleme öncesi iki dakikalık bir denetim yapacak, videodan bilinçli örnekleme alacak ve eğitim verilerinin eksiksiz ulaşması için Platform'un işleme sinyallerini okuyacaksın.
Uygulamalı
Veri Kümesini Oluştur#

Kenar çubuğunda Annotate öğesini aç ve New Dataset öğesine tıkla. İletişim kutusu bir kaynak, ad, görev türü, isteğe bağlı lisans, yüz bulanıklaştırma seçeneği ve görünürlük sorar:

| Kaynak | Ne zaman kullanılır | Plan |
|---|---|---|
| Yükleme | Dosyalar bilgisayarında: görüntüler, videolar, arşivler veya NDJSON dışa aktarımları | Tümü |
| URL | Herkese açık bir .zip, .tar, .tar.gz, .tgz veya .ndjson bağlantısı var; Platform dosyayı sunucu tarafında indirir | Tümü |
| Bulut | Veriler zaten Google Cloud Storage, Amazon S3 veya Azure Blob Storage'da bulunuyor ve orada kalmalı | Pro, Enterprise |
| Şirket İçi | Pikseller makinelerinden asla çıkmamalı | Enterprise |
Karar kuralı: bu kurs için bir kopya yükle. Bulut ve Şirket İçi veri kümelerinde pikseller Platform dışında kalır; bu nedenle akıllı etiketleme, Kümeleme, klonlama ve sürüm anlık görüntüleri kullanılamaz.
Görev türü, hangi araçların ve modellerin görüneceğini belirler. Platform, Ultralytics YOLO'nun yedi görevinin tümünü destekler:
| Görev | Nasıl etiketlenir |
|---|---|
| Tespit | Dikdörtgen veya SAM ve YOLO akıllı etiketleme |
| Segmentasyon | Çokgen veya SAM ve YOLO akıllı etiketleme |
| Anlamsal | Çokgen veya SAM ve YOLO akıllı etiketleme; PNG maskeleri doğrudan içe aktarılır |
| Poz | Yerleşik ya da özel iskeletlerde anahtar noktalar; akıllı etiketleme için YOLO poz modelleri |
| OBB | Yönlendirilmiş kutu veya SAM ve YOLO akıllı etiketleme |
| Sınıflandırma | Kenar çubuğundaki sınıf seçici |
| Derinlik | Çizim yok: eşleştirilmiş derinlik haritaları olan görüntüleri yükle (yalnızca Yükle veya URL) |
Çözümlü Örnek: Yüklemeden Önce Veri Kümesini Kontrol Et#
Platform, 50 MB'a kadar ve kısa kenarı en az 28 px olan JPEG, PNG, WebP, BMP, TIFF, HEIC, AVIF, JP2, DNG ve MPO görüntülerini kabul eder; YOLO, COCO, LabelMe, Ultralytics veya Labelbox NDJSON biçimlerini ve anlamsal PNG maske etiketlerini okur. Pascal VOC XML algılanır ancak içe aktarılmaz. Bu betik, yerel bir YOLO veri kümesini bu kurallara göre denetler; burada herkese açık medical pills veri kümesini kullanıyor:
from collections import Counter
from pathlib import Path
from PIL import Image
from ultralytics.data.utils import check_det_dataset
ACCEPTED = {".jpg", ".jpeg", ".png", ".webp", ".bmp", ".tif", ".tiff", ".heic", ".avif", ".jp2", ".dng", ".mpo"}
data = check_det_dataset("medical-pills.yaml") # your local dataset YAML
root = Path(data["path"])
problems = Counter()
for split in ("train", "val", "test"):
if not data.get(split):
continue
files = [p for p in Path(data[split]).rglob("*") if p.is_file()]
images = [p for p in files if p.suffix.lower() in ACCEPTED]
labeled = 0
for img in images:
label = Path(str(img).replace("images", "labels")).with_suffix(".txt")
labeled += label.exists() and label.stat().st_size > 0
if min(Image.open(img).size) < 28:
problems["under 28 px (rejected)"] += 1
if img.stat().st_size > 50 * 1024**2:
problems["over 50 MB (rejected)"] += 1
problems["unsupported files (skipped)"] += len(files) - len(images)
print(f"{split:<5} {len(images):>4} images, {labeled:>4} labeled, {len(images) - labeled:>3} background")
problems["Pascal VOC .xml labels (not imported)"] += len(list(root.rglob("*.xml")))
print("classes:", data["names"])
print("problems:", {k: v for k, v in problems.items() if v} or "none")train 92 images, 92 labeled, 0 background
val 23 images, 23 labeled, 0 background
classes: {0: 'pill'}
problems: noneÇıktının anlattıkları:
- Bölüm başına sayılar.
train/,val/vetest/klasörlerindeki görüntüler, yükleme sırasında bulundukları bölümü korur; dolayısıyla Platform bu sayıları gösterir.valsatırının olmaması, Platform'un senin için rastgele bir doğrulama bölümü oluşturacağı anlamına gelir (aşağıdaki tuzağa bak). - Arka plan görüntüleri (etiket dosyası olmayanlar) ölçülü kullanıldığında sorun olmaz; modele “burada hiçbir şey yok” durumunun nasıl göründüğünü öğretirler. Yüzlerce arka plan görüntüsü genellikle etiketlerin dışa aktarılamadığı anlamına gelir.
problems: none, her görüntünün işleneceği anlamına gelir. Buradaki her sayı,Errorssekmesine düşecek ya da hiç ulaşmayacak bir dosyadır.
Veri kümesi klasörünü data.yaml ile birlikte ZIP'le ve arşivi galeriye sürükle. Platform biçimi otomatik algılar, aynı görüntüleri yalnızca bir kez depolar ve yüklenen bir dosya veri kümesindeki mevcut görüntülerle çakıştığında Atla, İkisini de tut veya Değiştir seçeneklerinden hangisini istediğini sorar.
Çözümlü Örnek: Platform İşlemeden Önce Videoyu Örnekle#
Platform her videodan saniyede 1 kare örnekler ve en fazla 100 kare tutar; 100 saniyeden uzun kliplerde aralığı genişletir:
| Klip süresi | Tutulan kareler | Aralık |
|---|---|---|
| 60 saniye | 60 | 1 saniye |
| 100 saniye | 100 | 1 saniye |
| 30 dakika (30 fps'de 54.000 kare) | 100 | 18 saniye |
Bu yöntem hızlıca göz atmaya uygundur, ancak gerçek projelerin çoğunda işe yaramaz: 30 dakikalık bir vardiya kaydı, çoğu boş bir koridordan alınmış 100 kareye dönüşür. Uzun görüntüleri kendin örnekle ve kareleri yükle:
Düzenli aralıklarla örnekleme için FFmpeg yeterlidir:
mkdir -p frames
ffmpeg -i source.mp4 -vf fps=1 frames/%06d.jpgOlay odaklı örnekleme için, nesnenin bulunduğu kareleri tutması amacıyla önceden eğitilmiş bir Ultralytics YOLO modeli kullan:
from pathlib import Path
import cv2
from ultralytics import YOLO
model = YOLO("yolo26n.pt") # or your latest fine-tune
out = Path("frames")
out.mkdir(exist_ok=True)
source = "https://github.com/ultralytics/assets/releases/download/v0.0.0/solutions_ci_demo.mp4"
seen = kept = 0
for i, result in enumerate(model.predict(source, stream=True, vid_stride=5, classes=[0], conf=0.5, verbose=False)):
seen += 1
if len(result.boxes): # keep only frames where a person was detected
cv2.imwrite(str(out / f"frame_{i:05d}.jpg"), result.orig_img)
kept += 1
print(f"Kept {kept} of {seen} sampled frames")Kept 12 of 12 sampled framesvid_stride=5 her beş kareden birine bakar, classes=[0] algılamayı kişilerle sınırlar ve conf=0.5 güven düzeyi düşük tahminleri yok sayar. Bu hareketli demo klibinde örneklenen her karede insanlar var; çoğunlukla boş bir sahnenin kaydında tutulan karelerin oranı ve dolayısıyla etiketleme maliyetin keskin biçimde düşer. Yan yana tutulan kareler artık birbirinin aynısı görünmeyene kadar vid_stride değerini artır.
Platform'un İşleme Sinyallerini Oku#
Yüklemeden sonra Platform doğrulama yapar, normalleştirir (4.096 px üzerindeki görüntüleri yeniden boyutlandırır), küçük resimler oluşturur, etiketleri ayrıştırır ve istatistikleri hesaplar. Üç yeri kontrol et:

Errorssekmesi yalnızca dosyalar işlenemediğinde görünür: bozuk dosyalar, desteklenmeyen biçimler, 28 px'den küçük görüntüler veya CMYK ve dizinlenmiş renk modları; her biri için bir düzeltme ipucu gösterilir. Bu dosyaları yeniden dışa aktar veya yükle.Chartssekmesi bölüm dağılımını, en sık görülen sınıfları, görüntü boyutlarını, dosya boyutlarını, anotasyonların konumlarını, kutu boyutlarını ve görüntü başına nesne sayılarını gösterir. Nadir görülen bir sınıf, küçük görüntüler veya tek bir köşede kümelenmiş kutular olup olmadığına bak.- Veri kümesi başlığındaki rozet, işleme tamamlandığında ve veri kümesinde en az bir
traingörüntüsü, birvalveyatestgörüntüsü ve etiketlenmiş bir görüntü bulunduğundaReadyyazar. Hangi koşulun eksik olduğunu görmek içinNot Readyöğesine tıkla.

Herkese Açık Bir Veri Kümesiyle Başla#

Henüz verin yok mu? Keşfet sayfasında resmî ve topluluk veri kümeleri listelenir. Veri Kümesini Klonla, görüntüleri, anotasyonları ve sınıfları çalışma alanına kopyalar, depolama alanından düşer ve varsayılan olarak kaynak veri kümesinin herkese açık görünürlüğünü korur; bu nedenle hassas bir şey ekleyeceksen iletişim kutusundaki anahtarı değiştir.
Yaygın Hatalar#
Belirti: Yükleme başarılı oluyor ama tüm görüntüler etiketsiz geliyor. Çözüm: Platform, Pascal VOC XML dosyalarını algılar ve içe aktarmaz. Önce YOLO .txt etiketlerine veya COCO JSON'a dönüştür; yükleme öncesi kontrol .xml dosyalarını sayarak yüklemeden önce bunu fark etmeni sağlar.
Belirti: Doğrulama mAP değeri mükemmel, ancak dağıtılan model öyle değil. Çözüm: Bölme seçilmeden yapılan yüklemede val boş kalırsa Platform, eğitim görüntülerinin yaklaşık %20'sini rastgele val içine taşır. Video karelerinde bu işlem birbirine çok benzeyen komşu kareleri her iki bölmeye de koyar. Bunun yerine, videoya veya kameraya göre bölünmüş train/ ve val/ klasörleriyle yükle (ders 4).
Belirti: Çokgen aracını veya kilit noktaları bulamıyorsun. Çözüm: Kullanılacak araçları görev türü belirler. Veri kümesi başlığından görev türünü değiştir; her görüntü tüm görevlerin etiketlerini saklar, bu nedenle görev türünü değiştirmek diğer görevlerin etiketlerini silmek yerine gizler.
Çözümü göster
medical pills veri kümesi ve 4 dakikalık hat kamerası videosu için çözümlü yanıt. Yükleme öncesi kontrol: 92 eğitim ve 23 doğrulama görüntüsü; tümü etiketli ve sorunsuz. Video: 240 saniye 100 saniyeyi aştığından aralık ceil(240 / 100) = 3 saniyeye genişler ve Platform 80 kare tutar (0 sn, 3 sn, …, 237 sn'de bir kare). Beklenen galeri sayısı: 92 + 23 + 80 = 195 görüntü. Video kareleri etiketsiz olarak, galeri filtresinde seçili bölüme gelir; bu nedenle doğrulama bölümüne düşmelerini önlemek için videoyu bırakmadan önce Eğitim'i seç. Eğitim, doğrulama ve etiketli görüntüler bulunduğu için rozet Ready yazar. Yalnızca videoyu yüklemiş olsaydın rozet Not Ready yazardı: henüz etiketli görüntü yok.