KLP2 / README.md
firgiawann's picture
Update 39 show latest training artifacts from artifact repo
bde5ebe verified
|
Raw History Blame Contribute Delete
10.3 kB
---
title: Klasifikasi Kehadiran Mahasiswa YOLOv8
emoji: 🎓
colorFrom: blue
colorTo: green
sdk: gradio
python_version: "3.10"
app_file: app.py
---
# Pengecekan dan Klasifikasi Person Berbasis YOLOv8
Versi ini difokuskan untuk tahap awal:
- pengecekan gambar kelas,
- deteksi objek `person`,
- klasifikasi sederhana `person` vs `not person/background`.
## Tujuan Fitur Saat Ini
1. Upload gambar atau ambil dari kamera.
2. Jalankan deteksi `person` dengan YOLOv8.
3. Tampilkan hasil:
- gambar teranotasi bounding box,
- jumlah person terdeteksi,
- kelas prediksi evaluasi `Person` / `Not Person/Background`,
- confusion matrix dan rumus evaluasi,
- arsip evaluasi lokal (gambar hasil + CSV),
- grafik hasil pengecekan.
4. Setelah proses cek, confusion matrix dan rumus evaluasi diperbarui otomatis tanpa input manual tambahan.
## Struktur UI
- **Tahap 1 - Pilih Model**
- mode inferensi
- pilihan model `YOLOv8n` atau `Best.pt`
- confidence threshold
- advanced options:
- gaya anotasi `Border + Label` atau `Label saja`
- **Tahap 2 - Training dan Evaluasi Model**
- membaca dataset dari `dataset/train` dan `dataset/test`
- pilihan model awal training: `YOLOv8n` atau `Best.pt`
- jika label `.txt` YOLO belum ada, bisa aktifkan pseudo-label
- training dijalankan di background process (server-side)
- progres bisa dipantau kembali setelah reconnect (status + log + grafik)
- terminal training live untuk progres epoch
- grafik training otomatis (loss, precision, recall, mAP per epoch)
- confusion matrix training dari hasil validasi YOLO
- ringkasan precision, recall, mAP50, dan mAP50-95
- output model terbaik selalu di-overwrite ke `best.pt` setiap training selesai
- file `results.csv` training tersedia sebagai arsip metrik lokal
- file `training.log`, `training_curve_latest.png`, dan `confusion_matrix_latest.png` juga disimpan lokal
- jika env Hugging Face diisi, `best.pt` dan artefak training otomatis di-sync ke repo HF
- grafik training disimpan permanen sebagai gambar PNG di `training_outputs/training_curve_latest.png` dan `space_training_archive/<run>/training_curve.png`
- persiapan dataset dan pseudo-label berjalan di background worker, sehingga training tidak berhenti hanya karena koneksi browser terputus
- **Tahap 3 - Input Gambar**
- input gambar (upload/webcam)
- tombol proses
- **Tahap 4 - Grafik Hasil Deteksi**
- grafik count `Person` dan `Not Person/Background`
- **Tahap 5 - Evaluasi Foto Uji**
- confusion matrix berbasis count objek `Person` dan `Not Person/Background`
- rumus Accuracy, Precision, Recall, dan F1 dengan substitusi angka
- **Tahap 6 - Hasil Gambar**
- hasil gambar deteksi
- ringkasan klasifikasi `person` vs `not person/background`
- file gambar evaluasi dan file CSV evaluasi lokal
Catatan:
- evaluasi dilakukan pada kelas `Person` dan `Not Person/Background` berbasis count objek.
- panel evaluasi diperbarui otomatis setelah inferensi.
- hasil confidence rendah/tinggi dapat diamati melalui slider confidence dan arsip CSV evaluasi.
- UI otomatis menyesuaikan mode gelap perangkat (dark mode).
- output gambar dapat diperbesar melalui file hasil evaluasi yang tersimpan.
- `Best.pt` mengikuti kelas yang memang tersedia pada model hasil training.
- Jika `best.pt` belum tersedia, opsi `Best.pt` tetap muncul di UI, tetapi proses akan menampilkan pesan bahwa model sedang belum tersedia dan perlu training terlebih dahulu.
- `YOLOv8n.pt` dipakai sebagai model default yang masih mendeteksi semua objek umum.
- `Best.pt` dipakai sebagai model hasil training yang difokuskan ke `Person` saja.
## File Penting
- `app.py` - aplikasi Gradio
- `requirements.txt` - dependensi
- `yolov8n.pt` - model default
- `.gitignore` - aturan ignore
- `CHANGELOG.md` - riwayat update (termasuk nomor update)
- `skills/update-tracking/SKILL.md` - panduan konsistensi versi & format update
- `evaluation_outputs/` - arsip hasil deteksi untuk evaluasi artikel
- `runs_train/` - hasil training dan grafik/metrik YOLO
- `training_outputs/` - arsip lokal grafik PNG dan summary training terbaru
## Tracking Versi
- UI menampilkan versi kecil di bagian atas dan bawah halaman.
- Konfigurasi versi ada di `app.py`:
- `APP_VERSION`
- `APP_MINOR_UPDATE`
- Setiap perubahan sebaiknya menambah entri `CHANGELOG.md`.
Opsional environment variable:
- `MODEL_PATH` - path model lokal custom
- `HF_MODEL_REPO` - repo target Hugging Face (contoh: `KLP2-PCD/KLP2`)
- `HF_MODEL_FILE` - nama file model di Hub (disarankan: `best.pt`)
- `HF_MODEL_REPO_TYPE` - tipe repo HF: `space` (default), `model`, atau `dataset`
- `HF_TOKEN` - token untuk upload otomatis saat training selesai
- `HF_DETECTION_DIR` - folder khusus di repo HF untuk auto-save hasil deteksi (default: `space_detection_archive`)
- `HF_TRAINING_DIR` - folder khusus di repo HF untuk auto-save artefak training (default: `space_training_archive`)
- `HF_ARTIFACT_REPO` - repo dataset/model terpisah untuk menyimpan dan menampilkan ulang artefak training terakhir (contoh: `KLP2-PCD/KLP2-training-artifacts`)
- `HF_ARTIFACT_REPO_TYPE` - tipe repo artefak, default `dataset`
- `HF_AUTOSYNC_ENABLED` - aktif/nonaktif auto-sync file repo (`true/false`)
- `HF_AUTOSYNC_LOCAL_ONLY` - default `true`, artinya autosync hanya jalan dari lokal
- `HF_AUTOSYNC_REALTIME` - default `false`; jika `true` baru watcher realtime aktif
- `HF_AUTOSYNC_REPO_ID` - repo target auto-sync (fallback ke `HF_MODEL_REPO`)
- `HF_AUTOSYNC_REPO_TYPE` - tipe repo target auto-sync (default `space`)
- `HF_AUTOSYNC_TOKEN` - token auto-sync (fallback ke `HF_TOKEN`)
- `HF_AUTOSYNC_INTERVAL_SEC` - interval cek perubahan file (default `3` detik)
- `HF_AUTOSYNC_DEBOUNCE_SEC` - jeda batch commit agar tidak commit tiap perubahan kecil (default `8` detik)
- `HF_AUTOSYNC_INCLUDE_GLOBS` - pola file yang ingin disync (default `*.py,*.md,requirements.txt,.gitignore`)
- `HF_AUTOSYNC_MAX_FILE_MB` - batas ukuran file yang di-sync (default `200` MB)
- `HF_AUTOSYNC_IGNORE_GLOBS` - daftar pola file/folder yang diabaikan (dipisah koma)
- `HF_ALLOW_SPACE_RUNTIME_COMMITS` - default `false`; aktifkan hanya jika benar-benar ingin app melakukan commit ke repo Space yang sedang berjalan
Catatan sync otomatis setelah training:
- Jika `HF_MODEL_REPO` terisi, aplikasi akan upload `best.pt` ke `HF_MODEL_FILE`.
- Jika tidak terisi, training tetap jalan normal dan hanya menyimpan `best.pt` lokal.
- Jika `HF_MODEL_REPO` menunjuk ke Space yang sama, upload runtime dinonaktifkan secara default agar Space tidak rebuild sendiri dan memunculkan 503.
Catatan auto-save hasil deteksi:
- Setelah inferensi sukses, aplikasi menyimpan gambar anotasi ke `evaluation_outputs/` lokal.
- Jika `HF_MODEL_REPO` terisi, gambar hasil deteksi dan `detection_log.csv` juga otomatis di-upload ke folder repo `HF_DETECTION_DIR`.
Catatan auto-save hasil training:
- Setelah training selesai, grafik training, confusion matrix training, `results.csv`, `training.log`, dan summary JSON disimpan ke folder repo `HF_TRAINING_DIR`.
- File grafik terbaru juga disalin ke `training_outputs/training_curve_latest.png` agar tetap bisa ditampilkan ulang setelah Space rebuild.
- Proses training juga langsung menyalin grafik YOLO `results.png` menjadi PNG permanen saat training selesai, sehingga tidak bergantung pada refresh browser.
- Jika koneksi browser terputus saat training, artefak tetap aman setelah proses training selesai dan sync ke repo berhasil. Jika container berhenti sebelum training selesai, artefak final memang belum sempat dibuat.
- Pseudo-label dari dataset tanpa label `.txt` dapat memakan waktu di CPU Space karena semua gambar harus diproses YOLOv8n sebelum epoch dimulai.
- Panel training akan mengambil ulang data terakhir dari `HF_ARTIFACT_REPO` saat Space rebuild, sehingga metrik dan grafik terakhir tetap tampil di UI.
Catatan auto-sync update file repo:
- Default `HF_AUTOSYNC_ENABLED=false`, jadi tidak ada sync repo saat startup/runtime.
- Jika ingin sync repo otomatis, aktifkan manual: `HF_AUTOSYNC_ENABLED=true`.
- Untuk mode realtime, tambahkan `HF_AUTOSYNC_REALTIME=true`.
- Disarankan tetap fokus ke sync model `best.pt` setelah training (lebih ringan dan stabil).
## Menjalankan Lokal
```bash
python -m venv .venv
# Windows
.venv\Scripts\activate
pip install -r requirements.txt
python app.py
```
## Setup Kontributor Windows/VS Code
### Opsi A - Installer Otomatis
Jika laptop teman belum punya Git, Python, atau VS Code, jalankan:
```cmd
install_windows.bat
```
Atau dari PowerShell:
```powershell
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\install_windows.ps1
```
Installer ini memakai `winget` untuk menyiapkan:
- Git for Windows,
- Python 3.10,
- Visual Studio Code.
Setelah aplikasi dasar siap, installer otomatis lanjut menjalankan `setup_contributor.ps1`.
Catatan:
- `winget` biasanya tersedia di Windows 10/11 melalui App Installer.
- Jika `winget` tidak ada, install **App Installer** dari Microsoft Store.
- Beberapa laptop mungkin meminta izin administrator saat install aplikasi.
### Opsi B - Setup Project Saja
Pastikan teman kelompok sudah:
- menjadi member organization `KLP2-PCD` dengan akses write,
- punya Git for Windows,
- punya Python 3.10+,
- punya token Hugging Face dengan permission write ke `KLP2-PCD/KLP2`.
Jalankan dari PowerShell:
```powershell
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\setup_contributor.ps1
```
Script akan:
- clone repo `KLP2-PCD/KLP2`,
- membuat `.venv`,
- upgrade `pip`, `setuptools`, dan `wheel`,
- install dependency dari `requirements.txt`,
- menjalankan `pip check`,
- menyiapkan ekstensi VS Code: Python, Pylance, dan Jupyter,
- memakai konfigurasi workspace dari `.vscode/settings.json`,
- validasi `app.py`,
- set remote agar bisa `git push`,
- membuka folder di VS Code jika command `code` tersedia.
Package Python yang dipasang:
```text
gradio
ultralytics
opencv-python-headless
huggingface_hub
numpy
matplotlib
seaborn
```
Alur kerja setelah edit:
```powershell
git status
git add app.py README.md CHANGELOG.md requirements.txt
git commit -m "update fitur"
git push origin main
```
## Deploy ke Hugging Face Spaces
Upload:
- `app.py`
- `requirements.txt`
- `README.md`
- `.gitignore`
- `yolov8n.pt` (atau gunakan env Hub fallback)