bubblesmal commited on
Commit
3a24e10
·
verified ·
1 Parent(s): 1d27dd6

Publish models v2 (form)

Browse files
README.md CHANGED
@@ -16,10 +16,12 @@ Models for **Spotter**, a quiet AI spotter for new gym-goers and people returnin
16
  (Knight Hacks IX). The iPhone app runs the pose model on-device; the form model scores reps.
17
  The app reads `manifest.json` on launch and downloads any model that changed.
18
 
19
- Manifest version **1**, published 2026-10-10T09:04:25+00:00.
20
 
21
  | Model | Format | Path | Size |
22
  |---|---|---|---|
 
 
23
  | `pose-256-coreml` | coreml | `pose/yolov8n-pose-256.mlpackage` | 6.7 MB |
24
  | `pose-320-coreml` | coreml | `pose/yolov8n-pose-320.mlpackage` | 6.7 MB |
25
  | `pose-320-onnx` | onnx | `pose/yolov8n-pose-320.onnx` | 13.3 MB |
@@ -35,12 +37,12 @@ Manifest version **1**, published 2026-10-10T09:04:25+00:00.
35
 
36
  ## Form quality
37
 
38
- - `spotter.ml.form_quality` version ?
39
  from Databricks Unity Catalog, as two ONNX graphs: `label` (clean, partial_range, knees_in,
40
  forward_lean, fast_lowering, other) and `score` (quality, clip to 0-1).
41
- - Inputs, one row per rep: see manifest.
42
  `exercise_id` is a string; unseen exercises are ignored. Numeric inputs may be missing (NaN).
43
- - Held-out metrics: n/a.
44
  - **Limitations:** a baseline gradient-boosted model trained on labels derived from the phone's
45
  rule flags and synthetic sessions, not hand-labelled clips. Expect it to be replaced.
46
 
 
16
  (Knight Hacks IX). The iPhone app runs the pose model on-device; the form model scores reps.
17
  The app reads `manifest.json` on launch and downloads any model that changed.
18
 
19
+ Manifest version **2**, published 2026-10-10T17:03:35+00:00.
20
 
21
  | Model | Format | Path | Size |
22
  |---|---|---|---|
23
+ | `form-quality-label-onnx` | onnx | `form/form_quality_label.onnx` | 0.9 MB |
24
+ | `form-quality-score-onnx` | onnx | `form/form_quality_score.onnx` | 0.2 MB |
25
  | `pose-256-coreml` | coreml | `pose/yolov8n-pose-256.mlpackage` | 6.7 MB |
26
  | `pose-320-coreml` | coreml | `pose/yolov8n-pose-320.mlpackage` | 6.7 MB |
27
  | `pose-320-onnx` | onnx | `pose/yolov8n-pose-320.onnx` | 13.3 MB |
 
37
 
38
  ## Form quality
39
 
40
+ - `spotter.ml.form_quality` version 4
41
  from Databricks Unity Catalog, as two ONNX graphs: `label` (clean, partial_range, knees_in,
42
  forward_lean, fast_lowering, other) and `score` (quality, clip to 0-1).
43
+ - Inputs, one row per rep: `exercise_id`, `range_deg`, `weight_kg`.
44
  `exercise_id` is a string; unseen exercises are ignored. Numeric inputs may be missing (NaN).
45
+ - Held-out metrics: label_accuracy 0.188, label_macro_f1 0.2427, quality_mae 0.0807, quality_r2 0.153, test_lifters 40.0, test_reps 35816.0.
46
  - **Limitations:** a baseline gradient-boosted model trained on labels derived from the phone's
47
  rule flags and synthetic sessions, not hand-labelled clips. Expect it to be replaced.
48
 
form/form_quality_label.onnx ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:dd95793c9ce7591819db35b649159b3733fab593d2be68bc023c2e5dcc7e6015
3
+ size 866866
form/form_quality_score.onnx ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:c2406c62fbaee0a415d5085894969f4e5b45bc2e474c649d62d3abed55a2b5ea
3
+ size 179478
manifest.json CHANGED
@@ -1,7 +1,7 @@
1
  {
2
  "schema": 1,
3
- "version": 1,
4
- "published_at": "2026-10-10T09:04:25+00:00",
5
  "repo": "bubblesmal/spotter-models",
6
  "models": {
7
  "pose-320-coreml": {
@@ -62,10 +62,62 @@
62
  "md5": "1c723684a348f8d3d26a500aef3e340c"
63
  }
64
  ]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
65
  }
66
  },
67
  "sources": {
68
- "pose": "e864f6edf93045c257de046685874fec0df23d2030161098f5280853f6c99105"
 
69
  },
70
- "form": {}
 
 
 
 
 
 
 
 
 
 
 
 
 
71
  }
 
1
  {
2
  "schema": 1,
3
+ "version": 2,
4
+ "published_at": "2026-10-10T17:03:35+00:00",
5
  "repo": "bubblesmal/spotter-models",
6
  "models": {
7
  "pose-320-coreml": {
 
62
  "md5": "1c723684a348f8d3d26a500aef3e340c"
63
  }
64
  ]
65
+ },
66
+ "form-quality-label-onnx": {
67
+ "format": "onnx",
68
+ "path": "form/form_quality_label.onnx",
69
+ "inputs": [
70
+ "exercise_id",
71
+ "range_deg",
72
+ "weight_kg"
73
+ ],
74
+ "output": "label (string)",
75
+ "uc_model": "spotter.ml.form_quality",
76
+ "uc_version": "4",
77
+ "files": [
78
+ {
79
+ "path": "form/form_quality_label.onnx",
80
+ "size": 866866,
81
+ "md5": "46af17b1d0948ff0821ed5b29ae9b5df"
82
+ }
83
+ ]
84
+ },
85
+ "form-quality-score-onnx": {
86
+ "format": "onnx",
87
+ "path": "form/form_quality_score.onnx",
88
+ "inputs": [
89
+ "exercise_id",
90
+ "range_deg",
91
+ "weight_kg"
92
+ ],
93
+ "output": "quality before clipping to 0-1",
94
+ "uc_model": "spotter.ml.form_quality",
95
+ "uc_version": "4",
96
+ "files": [
97
+ {
98
+ "path": "form/form_quality_score.onnx",
99
+ "size": 179478,
100
+ "md5": "704fc63db1b8bd93be4f649e8dc51904"
101
+ }
102
+ ]
103
  }
104
  },
105
  "sources": {
106
+ "pose": "e864f6edf93045c257de046685874fec0df23d2030161098f5280853f6c99105",
107
+ "form": "757dce930d499b16b1959fdb506614de9b9e9f27024e0ff57a2787fe67b08659"
108
  },
109
+ "form": {
110
+ "uc_model": "spotter.ml.form_quality",
111
+ "uc_alias": "champion",
112
+ "uc_version": "4",
113
+ "run_id": "1cd5473eb34943cd838ff0d9efa50b10",
114
+ "metrics": {
115
+ "label_accuracy": 0.188,
116
+ "label_macro_f1": 0.2427,
117
+ "quality_mae": 0.0807,
118
+ "quality_r2": 0.153,
119
+ "test_lifters": 40.0,
120
+ "test_reps": 35816.0
121
+ }
122
+ }
123
  }