--- license: apache-2.0 library_name: pytorch pipeline_tag: image-classification tags: - robotics - capture-qa - hand-detection - edge datasets: - lerobot/droid_1.0.1 - imageomics/KABR model-index: - name: referee-hands-s results: - task: type: image-classification name: Hand/gripper visibility (clip-level) dataset: type: referee-lab/hands-visible name: referee-lab/hands-visible split: full metrics: - type: accuracy name: Provisional development-sheet clip accuracy value: 0.9778 --- # referee-hands-s A 1.5M-parameter MobileNetV3-small classifier for hand/gripper visibility in robot-training footage. 96px inputs, sized for microcontroller-class deployment. The published 97.8% result is from a 45-clip, in-domain development sheet that was repeatedly consulted during development and has not yet passed the declared independent two-grader gate. It is reproducible development evidence, not a frozen external benchmark. ## Benchmark 97.8% clip accuracy on [referee-lab/hands-visible](https://github.com/publu/referee-lab) (45-clip provisional development sheet, robot + wildlife domains) — matching gemma3:27b on that sheet at 1/18,000th the parameters. | Model | Params | Accuracy | |---|---|---| | gemma3:27b | 27B | 97.8% | | **referee-hands-s** | **1.5M** | **97.8%** | | referee-hands-s, cross-video split | 1.5M | 95.6% | | qwen2.5vl:32b | 32B | 74.4% | | *constant-answer floor* | — | *68.9%* | The cross-video row keeps every training frame at least 60 seconds away from any test clip on its source stream. Under that separation the model scores 100% on real footage (41/41); its two misses are synthetic drawn-hand control clips outside the training distribution. ## Intended use and scope Version 1 targets fixed-camera and wrist-camera **robot workspace footage** — the domain it was trained on (DROID, ALOHA-sim, KABR negatives). Human egocentric and general webcam scenes are outside the v1 training distribution; a mixed-domain v2 is in development. Use for capture-pipeline gating in the supported domain. ## Usage ```python import torch from torchvision import models, transforms from safetensors.torch import load_file net = models.mobilenet_v3_small() net.classifier[3] = torch.nn.Linear(net.classifier[3].in_features, 1) net.load_state_dict(load_file("model.safetensors")) net.eval() tf = transforms.Compose([transforms.Resize((96, 96)), transforms.ToTensor()]) p = torch.sigmoid(net(tf(img).unsqueeze(0)).squeeze()) # P(hand/gripper visible) ``` Clip-level verdict: sample ~12 frames, yes if `max(p) > 0.5`. Training: distilled from gemma3:27b pseudo-labels on CC BY / CC0 / MIT media. Benchmark, gates, and tooling: https://github.com/publu/referee-lab