# Self-correcting QC on the edge: sealed detector on the NPU, judged and retrained on the board **Team Edgeble** (Akhil Beeram, Aharone Routu, Buji Mamidipalli, Rithwik Beeram, Jagan Teki) **Track:** IoT, Arduino VENTUNO Q (Qualcomm Dragonwing IQ8 / QCS8275, Hexagon V75) **Repo:** https://github.com/edgeble/self-correction-qc-executorch (Apache-2.0) ## The problem A vision model on a production line is right on the day it is installed and wrong the day the lighting changes. A battery-terminal checker that reads good batteries as mismatched stops the line, and the fix today is a human, a laptop and a retrain somewhere else. We show the runtime correcting itself on the device: on the spot at the decision point, and over time by retraining the model's head on the board. ## What we built - **Our own model.** A YOLO11n detector trained on our 9 V battery data (four classes: positive, negative, and the two mismatch cases), exported with ExecuTorch 1.5.1 and the Qualcomm QNN backend as a sealed int8 `.pte` for the Hexagon NPU. ExecuTorch did not list this chip; we patched the chipset tables and found the QNN runtime that the board accepts. - **A rig.** A rotating ring with a stepper motor, a USB camera and three light strips on Modbus/RS485, so the lighting failure can be produced on demand. - **edgeble-infer**, our C/C++ inference engine, hosts the sealed program: camera, tracking, the gate that turns detections into GO/NG, the HDMI and browser view, and the hooks where the correction layer plugs in. ExecuTorch is the model runtime inside it, not a replacement for it. - **The judge.** At the decision point every terminal crop is compared, with the same frozen backbone the detector runs (a second sealed `.pte` on the NPU, 256-d), against a bank of examples the line confirmed in good light. A clear match flips the label in about 15 ms; an unclear one abstains. The model never judges itself. - **On-device retrain.** The trainable head of the same network is retrained on the board from the corrected frames, in minutes, checked for learning and forgetting, and hot-swapped with the old head kept for rollback. The sealed front on the NPU never changes. ## What we measured on the Q (2026-10-18) - Sealed inference: 9.5 ms per frame, 30 fps, ~7% NPU, one CPU core, 259 MB. - Judge on the recorded mixed clip, same frames, same binary, two panes started together: model as installed 16 NG / 33 GO; with the judge 10 NG / 39 GO. Six false positives corrected, zero genuine mismatches lost. 77 verdicts: 46 confirmed, 22 abstained, 9 flips, 6 to 109 ms each. - On-device head retrain: end to end on the board (7.6 min for 930 frames); the recipe has not yet removed the lighting false positives on this model, and the README says so with the logs. ## Why ExecuTorch One PyTorch model, two sealed programs on the same NPU (detector and embedder), the trainable head exported as a separate program with its weights in a `.ptd` the device can rewrite, and a C++ runtime small enough to live inside our own engine. Correct now, fix forever, nothing leaves the device. ## Honest limits The judge's bank is built from the line's own good-light run; a new room needs that run first, until then the judge abstains. The self-correction architecture is Edgeble's, patent pending (India filed, US in progress); the procedure and the retrain recipe are not in the repository, the results, logs and code around them are.
Built at ExecuTorch Hackathon — IoT Track
On-device self-correcting runtime for deployed vision models
# Self-correcting QC on the edge: sealed detector on the NPU, judged and retrained on the board **Team Edgeble** (Akhil Beeram, Aharone Routu, Buji Mamidipalli, Rithwik Beeram, Jagan Teki) **Track:** IoT, Arduino VENTUNO Q (Qualcomm Dragonwing IQ8 / QCS8275, Hexagon V75) **Repo:** https://github.com/edgeble/self-correction-qc-executorch (Apache-2.0) ## The problem A vision model on a production line is right on the day it is installed and wrong the day the lighting changes. A battery-terminal checker that reads good batteries as mismatched stops the line, and the fix today is a human, a laptop and a retrain somewhere else. We show the runtime correcting itself on the device: on the spot at the decision point, and over time by retraining the model's head on the board. ## What we built - **Our own model.** A YOLO11n detector trained on our 9 V battery data (four classes: positive, negative, and the two mismatch cases), exported with ExecuTorch 1.5.1 and the Qualcomm QNN backend as a sealed int8 `.pte` for the Hexagon NPU. ExecuTorch did not list this chip; we patched the chipset tables and found the QNN runtime that the board accepts. - **A rig.** A rotating ring with a stepper motor, a USB camera and three light strips on Modbus/RS485, so the lighting failure can be produced on demand. - **edgeble-infer**, our C/C++ inference engine, hosts the sealed program: camera, tracking, the gate that turns detections into GO/NG, the HDMI and browser view, and the hooks where the correction layer plugs in. ExecuTorch is the model runtime inside it, not a replacement for it. - **The judge.** At the decision point every terminal crop is compared, with the same frozen backbone the detector runs (a second sealed `.pte` on the NPU, 256-d), against a bank of examples the line confirmed in good light. A clear match flips the label in about 15 ms; an unclear one abstains. The model never judges itself. - **On-device retrain.** The trainable head of the same network is retrained on the board from the corrected frames, in minutes, checked for learning and forgetting, and hot-swapped with the old head kept for rollback. The sealed front on the NPU never changes. ## What we measured on the Q (2026-10-18) - Sealed inference: 9.5 ms per frame, 30 fps, ~7% NPU, one CPU core, 259 MB. - Judge on the recorded mixed clip, same frames, same binary, two panes started together: model as installed 16 NG / 33 GO; with the judge 10 NG / 39 GO. Six false positives corrected, zero genuine mismatches lost. 77 verdicts: 46 confirmed, 22 abstained, 9 flips, 6 to 109 ms each. - On-device head retrain: end to end on the board (7.6 min for 930 frames); the recipe has not yet removed the lighting false positives on this model, and the README says so with the logs. ## Why ExecuTorch One PyTorch model, two sealed programs on the same NPU (detector and embedder), the trainable head exported as a separate program with its weights in a `.ptd` the device can rewrite, and a C++ runtime small enough to live inside our own engine. Correct now, fix forever, nothing leaves the device. ## Honest limits The judge's bank is built from the line's own good-light run; a new room needs that run first, until then the judge abstains. The self-correction architecture is Edgeble's, patent pending (India filed, US in progress); the procedure and the retrain recipe are not in the repository, the results, logs and code around them are.
Keep exploring what builders shipped.
Magic Mirror
Magic Mirror
Project brief ExecuTorch Hackathon — Founders, Inc., October 17–18, 2026. Everything below runs on the Arduino VENTUNO Q on the desk: no cloud, no account, no network needed once the board is flashed. The pitch A store fixture that puts the shopper in the product photo. Stand in front of a camera and you appear wearing the garment — the head cutout, the body matte, the garment placement and the generated try-on image are all computed on the board's Hexagon NPU, with the web page that shows the result served from the same device. What's built and measured Piece Where it runs Cost Virtual billboard (BiSeNet head matte → product photo) NPU 12 ms compute, ~1 fps end to end Person segmentation (SegFormer human parsing) NPU 24.9 ms Generated try-on (Stable Diffusion + ControlNet-Canny) NPU ~0.3 s per step Face swap into a studio shot (GHOST, Apache-2.0) NPU 82 ms, fp16 LLM text generation (Gemma 4 E2B) NPU 188 tok/s prompt, 16.3 tok/s gen, 494 MiB Vision Q&A (InternVL3-1B) NPU 0.5 s encode, ~33 tok/s Live speech (Whisper-tiny → Gemma translate) NPU 1.8–2.6 s transcript, ~9 s translated LLM baseline (Llama 3.2 1B, XNNPACK) CPU 10.1 tok/s The NPU numbers are the point: prompt eval is ~12× the CPU baseline on a model twice the size, with resident memory a fraction of it, because the weights live in the NPU context. How it fits together Hugging Face model → optimum-cli export executorch → quantized .pte → ExecuTorch runtime. The same .pte runs on the Mac and on the board, which is what makes iterating on a laptop and demoing on hardware the same workflow. NPU models go through the track bundle's QNN AOT path (Linux only) and are driven by a warm persistent runner — 468 ms per inference launched cold, 26 ms held open with scratch on tmpfs. Two independent routes to the same effect, kept separate on purpose: overlay moves a garment onto a live frame (garment_overlay.py, garment_clip.py), and face swap moves the shopper's face into a studio shot that already has the garment, lighting and pose (board_faceswap_*). Hardware QCS8275, Cortex-A78C big cores, 14 GB RAM, Ubuntu 24.04 aarch64 over adb — not Android, despite answering adb, and considerably better than its published spec. No root; the compiler, the runners and the Python environment were all installed without it. Status and limits Board path: working, demoed, including the web UI and the walkthrough deck. Android/XR app (android/): compiles, never run — no device was attached. macOS cannot do QNN ahead-of-time compilation, so NPU work happens on the board. Thin segmentation classes (arms) lose accuracy at 8a8w; silhouettes don't. The board reboots under heavy load, so long board-side jobs are resumable.
Harshith Ande's team
Kamikaze
Kamikaze is an edge-AI vision system built on the Arduino VENTUNO Q that converts physical consumer items into interactive 3D digital twins in real time. Powered by an on-device Qualcomm Hexagon NPU, the pipeline uses YOLO-World, DINOv2, RapidOCR, and HSV color gating to identify smartphones and beverage cans during a guided five-second scan. An integrated FastMCP server then resolves metric-accurate 3D models by cross-referencing local CAD caches, 1:1 dummy repositories, and procedural mesh generators with live-stitched label textures—all while enforcing a zero-cloud privacy boundary. The resulting Smart Kiosk interface pairs Modulino RGB LED feedback and real-time hardware telemetry with an auto-orienting 3D viewport that dynamically mirrors the physical pose of the object in the user's hand.
Team AAA
Depth Perception
Collating Arduino distance sensor readings with video to train camera-alone depth perception