BASCORRO
LearningComputer Vision

Dataset & Labeling

Panduan pengumpulan data, labeling, QA, dan split dataset untuk model vision RoboCup

Computer Vision Fundamentals
0 dari 11 halaman selesai
In Progress
Scroll sampai 80% untuk menandai halaman selesai.

Dataset & Labeling

Kualitas model vision sangat ditentukan data. Model bagus tidak akan stabil jika dataset sempit, label tidak konsisten, atau split bocor.


Taxonomy Kelas

Mulai dari label sederhana yang benar-benar dipakai di pertandingan:

ClassDefinisiCatatan
ballBola oranye yang terlihat sebagian/utuhTetap label saat partial occlusion
goalTiang/area gawang yang relevanHindari label ambigu di background
robotRobot lawan/teammateTidak perlu bedakan tim di awal
lineGaris putih lapanganOpsional jika pakai semantic segm

Definisi kelas harus ditulis sejak awal agar annotator berbeda tetap menghasilkan label yang konsisten.


Data Collection Protocol

Checklist minimal saat ambil data:

  1. Variasi jarak (dekat, sedang, jauh).
  2. Variasi angle kamera (tilt/pan berbeda).
  3. Variasi lighting (indoor terang, indoor redup, shadow).
  4. Variasi blur (robot diam vs walking).
  5. Variasi occlusion (bola tertutup sebagian).

Target awal yang realistis:

  • 2,000-3,000 images total untuk baseline YOLO.
  • Minimal 400+ instance per kelas utama.

Labeling Rules (Bounding Box)

Aturan praktis:

  1. Bounding box mengikuti objek seketat mungkin.
  2. Objek < 30% terlihat tetap boleh dilabel jika masih identifiable.
  3. Jangan label objek yang benar-benar ambiguous.
  4. Konsisten antara annotator (gunakan guideline tertulis + contoh).

Contoh struktur dataset:

dataset/
├── images/
│   ├── train/
│   ├── val/
│   └── test/
└── labels/
    ├── train/
    ├── val/
    └── test/

dataset.yaml Example

Purpose: Menjelaskan struktur file konfigurasi dataset untuk training YOLO. Inputs: lokasi dataset dan daftar kelas. Outputs: file YAML yang dipakai saat training. Steps:

  1. Set path ke root dataset.
  2. Isi train, val, test relatif terhadap path.
  3. Pastikan nc sama dengan jumlah names. Pitfalls: train atau val salah path membuat training gagal. Validation: training membaca dataset tanpa warning kelas.
path: /data/robocup_vision_dataset
train: images/train
val: images/val
test: images/test

nc: 4
names: ["ball", "goal", "robot", "line"]

Split Policy dan Leakage Prevention

Default split:

  • 70% train
  • 20% val
  • 10% test

Rules:

  1. Jangan campur frame berurutan dari video yang sama ke train dan test.
  2. Pisahkan sesi perekaman berdasarkan waktu/lokasi jika memungkinkan.
  3. Simpan test set tetap (frozen) untuk komparasi eksperimen.

QA Checklist

Sebelum training:

  • Tidak ada file gambar tanpa label (kecuali memang negative sample).
  • Tidak ada label di luar image boundary.
  • Tidak ada kelas typo (bal, goals, dst).
  • Distribusi kelas tidak timpang ekstrem.

Distribusi cepat bisa dicek dengan skrip sederhana:

from collections import Counter
from pathlib import Path

counter = Counter()
for p in Path("dataset/labels/train").glob("*.txt"):
    for line in p.read_text().splitlines():
        cls = int(line.split()[0])
        counter[cls] += 1

print(counter)

Imbalance Mitigation

Jika kelas minor terlalu sedikit:

  1. Tambah data khusus kelas minor.
  2. Gunakan augmentation terarah (brightness, blur, scale).
  3. Oversample image yang berisi kelas minor.

Setelah dataset rapi, lanjut ke training pipeline:


Acceptance Criteria

  • Dataset policy tertulis dan dipahami tim.
  • Label audit acak 100 sampel, error < 5%.
  • Split train/val/test sudah fixed dan reproducible.

On this page