got detection somewhat working

This commit is contained in:
Boki 2026-02-20 21:57:51 -05:00
parent 40d30115bf
commit c75b2b27f0
10 changed files with 500 additions and 56 deletions

View file

@ -7,6 +7,7 @@ Subcommands (all take a positional boss name):
runs kulemak List training runs + metrics table
annotate kulemak [dir] Launch annotation GUI
prelabel kulemak [dir] [--model boss-kulemak] Auto-label unlabeled images
export kulemak [--imgsz 640] Export .pt to ONNX format
"""
import argparse
@ -291,6 +292,32 @@ def cmd_prelabel(args):
_PRELABEL_MODEL_DEFAULT = "__auto__"
# ── export ──────────────────────────────────────────────────────
def cmd_export(args):
"""Export .pt model to .onnx format for ONNX Runtime inference."""
boss = args.boss
model_name = f"boss-{boss}"
pt_path = os.path.join(MODELS_DIR, f"{model_name}.pt")
if not os.path.exists(pt_path):
print(f"Model not found: {pt_path}")
return
from ultralytics import YOLO
model = YOLO(pt_path)
print(f"Exporting {pt_path} -> ONNX (imgsz={args.imgsz})...")
model.export(format="onnx", imgsz=args.imgsz, opset=17, simplify=True, dynamic=False)
# ultralytics writes the .onnx next to the .pt file
onnx_src = os.path.join(MODELS_DIR, f"{model_name}.onnx")
if os.path.exists(onnx_src):
size_mb = os.path.getsize(onnx_src) / (1024 * 1024)
print(f"\nExported: {onnx_src} ({size_mb:.1f} MB)")
else:
print(f"\nWarning: expected output not found at {onnx_src}")
# ── CLI ──────────────────────────────────────────────────────────
def main():
parser = argparse.ArgumentParser(
@ -315,10 +342,10 @@ def main():
p = sub.add_parser("train", help="Train YOLO model")
p.add_argument("boss", help="Boss name (e.g. kulemak)")
p.add_argument("--data", default=None, help="Path to data.yaml")
p.add_argument("--model", default="yolo11s", help="YOLO model variant")
p.add_argument("--model", default="yolo11n", help="YOLO model variant")
p.add_argument("--epochs", type=int, default=200, help="Training epochs")
p.add_argument("--imgsz", type=int, default=1280, help="Image size")
p.add_argument("--batch", type=int, default=8, help="Batch size")
p.add_argument("--imgsz", type=int, default=640, help="Image size")
p.add_argument("--batch", type=int, default=16, help="Batch size")
p.add_argument("--device", default="0", help="CUDA device")
p.add_argument("--name", default=None, help="Run name (auto-increments if omitted)")
@ -333,6 +360,11 @@ def main():
p.add_argument("--model", default=_PRELABEL_MODEL_DEFAULT, help="Model name in models/ (default: boss-{boss})")
p.add_argument("--conf", type=float, default=0.20, help="Confidence threshold")
# export
p = sub.add_parser("export", help="Export .pt model to ONNX format")
p.add_argument("boss", help="Boss name (e.g. kulemak)")
p.add_argument("--imgsz", type=int, default=640, help="Image size for export")
args = parser.parse_args()
if args.command is None:
@ -345,6 +377,7 @@ def main():
"train": cmd_train,
"runs": cmd_runs,
"prelabel": cmd_prelabel,
"export": cmd_export,
}
commands[args.command](args)