Model Retraining & LakeFS Workflow¶
Deze README begeleidt nieuwe teamleden die nieuwe data willen toevoegen en een smart_gestures-model opnieuw moeten trainen. We behandelen eerst het VGT-alfabetmodel en vervolgens het LSTM-woordmodel.
Overzicht Stappen¶
- Verzamel/normaliseer je data (bijv.
webcam_landmarks.pyvoor alfabetten,capture_dataset_lstm.pyvoor sequenties). - Check een LakeFS-branch uit, voeg de ruwe en verwerkte data toe en commit/push.
- Download de data via
lakectl local cloneoflakectl local pullen wijs de trainingsscripts naar die map (LAKEFS_DATA_PATH). - Train, valideer en sla het
.pth-bestand op. - Kopieer het model naar
notebooks/package/smart_gestures/.../models/, bumpsmart_gesturesen update de FastAPI- afhankelijkheid (zie AI-Packages.md).
1. Voorwaarden¶
- LakeFS + Minio draaien lokaal en CLI-tools zijn geconfigureerd. Volg setup_guide_lakefs_minio.md om:
docker compose up -dte draaien innotebooks/.lakectl/mcte installeren enlakectl configuit te voeren.- Virtuele omgeving met de notebook-dependencies (bijv.
python3.12 -m venv .venv && source .venv/bin/activate && pip install -r notebooks/requirements.txt).
2. VGT-alfabet opnieuw trainen¶
2.1 Data verzamelen (VGT)¶
- Gebruik één van de utilities in
notebooks/utilities/: webcam_landmarks.py/static_image_landmarks.pyvoor snelle opnames.extract_landmarks_from_dataset.pyofcsv_to_json.pyom bestaande datasets om te zetten.- Bewaar de labels exact zoals in
smart_gestures/alphabet/vgt_model/data/classes.json(A-Z). Elk record in de JSONL/CSV bevat 21 landmarks (x,y,z). - Voeg context toe (datum, gebaarder, camerapositie) in een
README-data.mdzodat reviewers weten waar de samples vandaan komen.
2.2 Data naar LakeFS pushen (VGT)¶
Gebruik hetzelfde LakeFS-proces voor elke dataset:
# Maak branch
lakectl branch create lakefs://signapse-data/feature/new-vgt-data \
--source lakefs://signapse-data/main
# Clone lokaal
lakectl local clone lakefs://signapse-data/feature/new-vgt-data data-lake
cd data-lake
Kopieer je nieuwe alfabetdataset naar datasets/vgt/<datum>/hand_landmarks.json (of .csv) en voer lakectl local commit + lakectl local push uit.
2.3 Data gebruiken in notebooks (VGT)¶
- Op de trainingsmachine:
- Kopieer of symlink het bestand naar
notebooks/training/vgt_model/data/hand_landmarks.json(of update de scripts om rechtstreeks naarLAKEFS_DATA_PATHte wijzen).
2.4 VGT-model trainen¶
- Activeer de venv en ga naar de trainingsmap:
- Start de training met de gewenste hyperparameters (zie CLI-tabel):
python run_training.py \
--batch_size 64 \
--epochs 60 \
--lr 5e-4 \
--augment \
--augment_prob 0.6 \
--noise_std 0.02 \
--rotate_deg 15 \
--scheduler plateau \
--label_smoothing 0.1 \
--lambda_brier 1.0 \
--output vgt_alphabet_model_2024_12.pth
- Controleer accuracy/loss en noteer belangrijke metrics (bijv. calibratie resultaten).
2.5 Valideren & promoten (VGT)¶
- Kopieer het model naar het package:
cp vgt_alphabet_model_2024_12.pth ../../package/smart_gestures/alphabet/vgt_model/models/vgt_alphabet_model.pth
- Update
classes.jsonindien de labelset uitbreidt. - Volg de model lifecycle voor package bump, dependency-updates en smoke-tests (focus op
/alphabet/vgt/predict).
3. LSTM-woordmodel opnieuw trainen¶
3.1 Nieuwe data verzamelen (LSTM)¶
- Gebruik
notebooks/utilities/capture_dataset_lstm.pyom keypoint-sequenties op te nemen. Het script creëert een mapstructuur van de vorm:
dataset/
├── hallo/
│ └── 000/
│ └── 2024-12-11T10-00-00/
│ ├── keypoints_000.npy
│ ├── keypoints_001.npy
│ └── ...
- Controleer of elk gebaar minstens
SEQUENCE_LENGTH(40) frames bevat. Bij minder frames vult het trainingsscript wel aan, maar variatie per gebaar is gewenst. - Documenteer meta-informatie (datum, performer, omgeving) zodat reviewers weten waar de data vandaan komt. Bewaar deze info in een
README-data.mdin dezelfde map.
3.2 Data naar LakeFS pushen (LSTM)¶
Volg dezelfde werkwijze als voor VGT, maar groepeer je data onder datasets/lstm/<datum>/. Gebruik een specifieke branchnaam, bijvoorbeeld feature/new-lstm-data, en commit/push via lakectl local commit.
3.3 Data downloaden/verwijzen in notebooks¶
- Clone/pull de branch op de machine waar je gaat trainen (
lakectl local clone ...oflakectl local pull). - Wijs het trainingsscript naar de LakeFS-checkout door de env var
LAKEFS_DATA_PATHte zetten:
De LSTM data_utils.py haalt automatisch dit pad op. Zonder env var gebruikt het script de lokale notebooks/training/lstm_model/dataset map.
3.4 LSTM-model trainen¶
- Activeer je virtuele omgeving en installeer dependencies:
- Start training vanuit
notebooks/training/lstm_model/:
cd notebooks/training/lstm_model
python run_training.py \
--batch_size 32 \
--epochs 60 \
--lr 5e-4 \
--hidden_size 128 \
--num_layers 2 \
--output lstm_model_2024_12.pth
Pas de argumenten aan op basis van de CLI-tabel.
- Controleer de console-output en noteer de validatie-accuracy.
3.5 Valideren & promoten (LSTM)¶
- Gebruik
evaluate_modelof schrijf een extra notebook/testscript dat inference doet op bekende sequences. - Kopieer het beste
.pthbestand naar het package:
- Update eventueel
gesture_map.jsonen commit de wijzigingen. - Volg de model lifecycle checklist:
- Bump
smart_gesturesversie innotebooks/package/pyproject.toml. - Bouw/publiceer of installeer het nieuwe package (bijv.
pip install -e notebooks/package). - Update
server/pyproject.tomlenserver/requirements.txtzodat de FastAPI backend het nieuwe package gebruikt. - Draai smoke-tests (
/alphabet/asl/predict,/alphabet/vgt/predict,/gestures/lstm/predict) en commit de code.
4. LakeFS housekeeping¶
- Voeg je nieuwe
.pthen alle dataset changes toe aan dezelfde LakeFS-branch (zowel ruwe als verwerkte bestanden). - Commit en maak een merge request richting
main. Gebruik de LakeFS UI om diffs te keuren en een reviewer te taggen. - Na merge kun je de lokale checkout updaten en de branch opruimen:
Nu is de dataset geversioneerd, het model opnieuw getraind en het backend package bijgewerkt. Nieuwe teamleden kunnen deze README volgen voor alle toekomstige retrainings.
Document-informatie:
- Versie: 1.1
- Datum: December 2025
- Auteurs: Lynn Delaere
- Contact: Zie GitHub repository