- config.yaml canonical for stream/models/counting/batch/output/camera - models.modes hold engines+class filters only; conf/iou/min_bbox in detection_params - predict.py derives tracker roles structurally (no per-mode branching) - dashboard mode switch validates + persists atomically to config.yaml - .env keeps secrets/deployment only; zones.json geometry; tracker.yaml hyperparams - batch_mode.json keeps manual/auto batch mode; legacy model_mode ignored w/ warning - src/detection+tracking gain iou param (default 0.7 = no behavior change)
3.4 KiB
Model Zoo
All weights live here. Three formats coexist per model:
.pt— PyTorch checkpoint (training source, dev, re-export).onnx— ONNX intermediate (export pipeline artifact).engine— TensorRT FP16, what production loads on the Jetson
Class names below are read directly from each checkpoint (YOLO(path).names).
Inventory
| File | Classes | Task | Role |
|---|---|---|---|
truck-detector.{pt,engine} |
{0: truck} |
bbox | Dedicated truck specialist (ROI, batch lifecycle) |
v4-best.{pt,onnx,engine} (v4-best (1).pt = duplicate copy) |
{0: sack, 1: truck} |
bbox | Combined sack+truck (Modes A/B/C/D truck; Modes A/C sack) |
model_karung_truk.{pt,onnx,engine} |
{0: sack, 1: truck} |
bbox | Legacy combined alias (auto-pick fallback) |
yolo11n-bbox-100ep-sack+box-20260909-best.{pt,onnx,engine} |
{0: sack, 1: box} |
bbox | Unified sack+box (Modes B/C/D) |
best.{pt,onnx,engine} |
{0: sack} |
seg | Sack-only specialist (Mode D sack) |
karung-dimuat-detection-di-feedmill-yolo26n-seg-200e.{pt,onnx,engine} |
{0: person, 1: sack} |
seg | Person-exclusion seg model (legacy predict_new.py) |
Model Modes (predict.py --model-mode / config.yaml models.active_mode, default C)
Modes are DATA in config.yaml models.modes — each preset declares engines
(path key + contributed classes) and class filters only. Per-class
conf/iou/min_bbox live in models.detection_params (shared across modes).
Add E/F/... in YAML with no code change; predict.py derives tracker roles
structurally and the dashboard lists new modes automatically.
Counting filters by class name, not ID (BaseDetector(class_filter) in
src/detection.py; tracker allow-list in src/tracking.py; dual counters in
src/counting.py). "Filtered out" = class exists in the checkpoint but is
dropped before tracking/counting.
| Mode | Truck detector (filter) | Sack detector (filter) | Box detector (filter) |
|---|---|---|---|
| A | v4-best.engine → keep truck, drop sack |
v4-best.engine (shared) → keep sack, drop truck |
— (no box counting) |
| B | v4-best.engine → keep truck, drop sack |
yolo11n-….engine → keep sack, drop box |
yolo11n-….engine (shared with sack) → keep box, drop sack |
| C (default) | v4-best.engine → keep truck, drop sack |
v4-best.engine (shared) → keep sack, drop truck |
yolo11n-….engine → keep box, drop sack |
| D | v4-best.engine → keep truck, drop sack |
best.engine → sack only (nothing to drop) |
yolo11n-….engine → keep box, drop sack |
Notes:
- Mode B loads one yolo11n handle shared by the sack and box paths (single tracker, single track-ID space); modes C/D run a dedicated box tracker (separate ID space + own stabilizer, so sack/box IDs never collide).
- All
.enginefiles verified to coexist: 2 engines ~16 MB, 3 engines ~24 MB peak of 7.6 GB Jetson GPU. If.ptis ever used, load PyTorch models before TensorRT engines or CUDA init fails. - Mode switches via dashboard persist to
batch_mode.jsonand apply on nextkarung-counterrestart (models load once at startup).
Exporting
python export_model.py models/<name>.pt # → FP16 .engine next to the .pt
Deploy
deploy_to_jetson.py syncs the .engine files only (what production loads);
.pt/.onnx stay local for dev/export.