ruview @ v1036
integrity
- size
- 55.1 MiB
- downloaded
- last checked
release notes
Automated release from CI pipeline
Changes: feat(cog-person-count): v0.0.2 — K-fold + label-smoothing + temperature-calibrated (#699)
- chore: stage v0.0.2 artifacts + temperature scalar for build pipeline
Stages count_v1.{safetensors,onnx,temperature,train_results.json} ahead of the build/sign/upload step. This commit is a momentary side-effect — the next commit will refresh the per-arch manifests with the new binary SHAs once ruvultra finishes the cross-build.
The .temperature file holds the calibration scalar from LBFGS over the held-out conf logits. The Rust cog will read it post-load and divide conf_logits by it before sigmoid, exactly matching the Python eval.
- feat(cog-person-count): v0.0.2 — K-fold validated, label smoothing + early stop + temp scale
The v0.0.1 "65.1% but class-1=0%" result was an unlucky temporal split that let a degenerate "always predict 0" classifier hit eval acc = class-0 fraction. 5-fold stratified random CV proved the architecture actually learns ~57.1% class-1 accuracy under fair splits — a real, modestly useful signal.
v0.0.2 ships a retrained model that:
- Splits randomly (seed=42) 80/20 instead of temporally — eliminates the trailing-window-class-imbalance cheat.
- Class-balanced sampler (multinomial with replacement, weighted by inverse class frequency) — per-batch expected counts are equal regardless of dataset distribution.
- Label smoothing 0.1 on the cross-entropy — reduces confidence saturation that drove v0.0.1's all-or-nothing predictions.
- Early stopping with patience=20 — stops at epoch 29 instead of overfitting through 400.
- Temperature scaling of the conf head — LBFGS fits a scalar T on held-out conf logits; ships as a count_v1.temperature sidecar so the Rust cog can divide conf_logits by T before sigmoid.
Numbers on the same data:
| Metric | v0.0.1 | v0.0.2 | K-fold (5x100) |
|---|---|---|---|
| Overall acc | 65.1% | 62.3% | 62.2% ± 1.9% |
| Class 0 acc | 100% | 86.2% | 67.4% |
| Class 1 acc | 0% | 34.3% | 57.1% ✓ |
| MAE | 0.349 | 0.377 | 0.378 |
| Spearman | 0.023 | 0.013 | 0.160 |
Class-1 accuracy 0 → 34.3% is the headline win. Net acc moves slightly because we stopped cheating on class 0. K-fold's 57% says there's headroom remaining; reaching it needs more independent splits (== more data), not more training tricks.
Confidence calibration didn't move. Temperature scaling alone can't fix a confidence head trained against a noisy argmax==truth indicator over a 62%-accurate classifier — the head's training signal is the issue, not its post-hoc transform. The honest fix is multi-room data (#645), not another calibration knob.
Live on cognitum-v0 at /var/lib/cognitum/apps/person-count/ — health reports candle-cpu backend, count = 1 (was 0 in v0.0.1) on synthetic zero input.
Files changed:
- scripts/train-count.py — adds --k-fold (no sklearn dep, hand-rolled stratified splits with deterministic shuffle) and --v2 paths.
- v2/.../cog/artifacts/count_v1.safetensors (392 KB, new sha 32996433…) + count_v1.onnx (16 KB) + count_v1.temperature (0.9262 scalar) + count_train_results.json (full epoch trace).
- v2/.../cog/artifacts/manifests/{arm,x86_64}/manifest.json bumped to version 0.0.2 with the new weights_sha256 + caveats.
- docs/benchmarks/person-count-cog.md — appends a v0.0.2 section with the K-fold diagnostic table and honest-read paragraph.
GCS: gs://cognitum-apps/cogs/arm/cog-person-count-count_v1.safetensors refreshed (binaries unchanged — load weights via mmap at runtime).
Docker Image:
ghcr.io/ruvnet/RuView:b3a5012dbd1db43c444b12d1eae367f95c71ba4e
download
curl -fL -o v1036.zip https://ratatoskr.space/pkg/ruview/v1036.zip
printf '%s %s\n' 'fa5a4f17a01a9d06dcf49b85a2cfeaa2398e48f1419c61671285072499de7306' 'v1036.zip' | sha256sum -c -
$url = "https://ratatoskr.space/pkg/ruview/v1036.zip"
$out = "v1036.zip"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "fa5a4f17a01a9d06dcf49b85a2cfeaa2398e48f1419c61671285072499de7306") { throw "sha256 mismatch" }
curl -fL -o v1036.tar.gz https://ratatoskr.space/pkg/ruview/v1036.tar.gz
printf '%s %s\n' '6636f6a1b9fb9c1319f1f0c5760f4aa1070a5133ad5338896d4207d41dae7076' 'v1036.tar.gz' | sha256sum -c -
$url = "https://ratatoskr.space/pkg/ruview/v1036.tar.gz"
$out = "v1036.tar.gz"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "6636f6a1b9fb9c1319f1f0c5760f4aa1070a5133ad5338896d4207d41dae7076") { throw "sha256 mismatch" }
download via yggdrasil mesh
curl -fL -o v1036.zip http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v1036.zip
printf '%s %s\n' 'fa5a4f17a01a9d06dcf49b85a2cfeaa2398e48f1419c61671285072499de7306' 'v1036.zip' | sha256sum -c -
$url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v1036.zip"
$out = "v1036.zip"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "fa5a4f17a01a9d06dcf49b85a2cfeaa2398e48f1419c61671285072499de7306") { throw "sha256 mismatch" }
curl -fL -o v1036.tar.gz http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v1036.tar.gz
printf '%s %s\n' '6636f6a1b9fb9c1319f1f0c5760f4aa1070a5133ad5338896d4207d41dae7076' 'v1036.tar.gz' | sha256sum -c -
$url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v1036.tar.gz"
$out = "v1036.tar.gz"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "6636f6a1b9fb9c1319f1f0c5760f4aa1070a5133ad5338896d4207d41dae7076") { throw "sha256 mismatch" }
| artifact | format | size | hashes |
|---|---|---|---|
| v1036.zip | zip | 55.1 MiB |
blake3-24 6cc62d63f47fb36311005db662ed3fe9f2f2c81665563a80
sha256 fa5a4f17a01a9d06dcf49b85a2cfeaa2398e48f1419c61671285072499de7306
sha1 a519bc405358ea65f4a2c29f6f3c96665d00ec62
|
| v1036.tar.gz | tar.gz | 53.7 MiB |
blake3-24 c08dbc9a9ada01380a629cc00f220121d1b975a95aa5835a
sha256 6636f6a1b9fb9c1319f1f0c5760f4aa1070a5133ad5338896d4207d41dae7076
sha1 98c5ec9a0d2e9ecf671136e5b41670662e45ccec
|
install
http_archive(
name = "ruview",
urls = ["https://ratatoskr.space/pkg/ruview/v1036.tar.gz"],
integrity = "sha256-Zjb2obn7nBMZ8fDFdg9KoQcKUTOtUziJbUIH1B2ucHY=",
strip_prefix = "ruview-v1036",
)
.url = "https://ratatoskr.space/pkg/ruview/v1036.tar.gz",
install via yggdrasil mesh
http_archive(
name = "ruview",
urls = ["http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v1036.tar.gz"],
integrity = "sha256-Zjb2obn7nBMZ8fDFdg9KoQcKUTOtUziJbUIH1B2ucHY=",
strip_prefix = "ruview-v1036",
)
.url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v1036.tar.gz",