HOWC hierarchical perception: card + runnable code
Browse files- .gitattributes +2 -0
- README.md +108 -28
- assets/hero.mp4 +3 -0
- assets/hero_poster.jpg +3 -0
- hpercept/.DS_Store +0 -0
.gitattributes
CHANGED
|
@@ -33,3 +33,5 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
|
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
| 36 |
+
assets/hero.mp4 filter=lfs diff=lfs merge=lfs -text
|
| 37 |
+
assets/hero_poster.jpg filter=lfs diff=lfs merge=lfs -text
|
README.md
CHANGED
|
@@ -7,51 +7,131 @@ tags:
|
|
| 7 |
- functional-safety
|
| 8 |
- neuro-symbolic
|
| 9 |
pipeline_tag: object-detection
|
|
|
|
| 10 |
---
|
| 11 |
|
| 12 |
-
# HOWC :
|
| 13 |
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
|
|
|
|
|
|
|
|
|
| 18 |
|
| 19 |
-
|
| 20 |
-
Novel Objects in Autonomous Driving Perception*, F. Schaller,
|
| 21 |
-
[doi:10.5281/zenodo.21593472](https://doi.org/10.5281/zenodo.21593472).
|
| 22 |
-
Source & full history: <https://github.com/freshNfunky/IE2025-Research-Paper>.
|
| 23 |
|
| 24 |
-
|
|
|
|
|
|
|
|
|
|
| 25 |
|
| 26 |
-
A
|
| 27 |
-
horse-drawn carriage, an overloaded truck) it must mislabel it or drop it, both
|
| 28 |
-
unsafe. HOWC abstracts up a taxonomy to a still-useful category
|
| 29 |
-
(… → Truck → Transport Vehicle → Vehicle), bounded by a per-branch **safety
|
| 30 |
-
floor** so it never collapses into a useless "Object"; below the floor it flags an
|
| 31 |
-
explicit **UNKNOWN OBSTACLE** with an inspectable decision path.
|
| 32 |
|
| 33 |
-
##
|
| 34 |
|
| 35 |
-
|
| 36 |
-
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
|
| 40 |
-
|
| 41 |
-
|
| 42 |
-
|
| 43 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 44 |
|
| 45 |
## Run it locally
|
| 46 |
|
| 47 |
-
|
| 48 |
|
| 49 |
```bash
|
| 50 |
pip install -r requirements.txt
|
| 51 |
-
python app.py # Gradio UI: upload an image, see the taxonomy decision
|
| 52 |
python app.py --share # same, but also prints a temporary public URL (~72h)
|
| 53 |
```
|
| 54 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 55 |
## License
|
| 56 |
|
| 57 |
CC BY-NC 4.0, matching the paper.
|
|
|
|
| 7 |
- functional-safety
|
| 8 |
- neuro-symbolic
|
| 9 |
pipeline_tag: object-detection
|
| 10 |
+
thumbnail: https://raw.githubusercontent.com/freshNfunky/IE2025-Research-Paper/main/figures/title_scene_annotated.png
|
| 11 |
---
|
| 12 |
|
| 13 |
+
# HOWC : Hierarchical Open-World Classification for road perception
|
| 14 |
|
| 15 |
+
<p>
|
| 16 |
+
<a href="https://arxiv.org/abs/2608.07577"><img src="https://img.shields.io/badge/arXiv-2608.07577-b31b1b.svg" alt="arXiv"></a>
|
| 17 |
+
<a href="https://youtu.be/Awy3qmCCe78"><img src="https://img.shields.io/badge/YouTube-explainer-red.svg?logo=youtube" alt="Video"></a>
|
| 18 |
+
<a href="https://github.com/freshNfunky/IE2025-Research-Paper"><img src="https://img.shields.io/badge/GitHub-source-181717.svg?logo=github" alt="GitHub"></a>
|
| 19 |
+
<img src="https://img.shields.io/badge/license-CC%20BY--NC%204.0-lightgrey.svg" alt="License">
|
| 20 |
+
<img src="https://img.shields.io/badge/training-free-2fd6a6.svg" alt="Training-free">
|
| 21 |
+
</p>
|
| 22 |
|
| 23 |
+
> A **training-free** layer that turns a flat object detector into a hierarchical, open-set one. Every detection is resolved by **taxonomic abstraction**: the most specific level the evidence safely supports, or an explicit **UNKNOWN OBSTACLE**, never a confident wrong leaf.
|
|
|
|
|
|
|
|
|
|
| 24 |
|
| 25 |
+
<video autoplay loop muted playsinline width="100%" poster="https://huggingface.co/freshNfunky/howc/resolve/main/assets/hero_poster.jpg">
|
| 26 |
+
<source src="https://huggingface.co/freshNfunky/howc/resolve/main/assets/hero.mp4" type="video/mp4"/>
|
| 27 |
+
<img src="https://huggingface.co/freshNfunky/howc/resolve/main/assets/hero_poster.jpg" alt="HOWC live tool: a deer crossing a road is classified as Living Being, with the taxonomy descent path and a segmentation cross-check" width="100%"/>
|
| 28 |
+
</video>
|
| 29 |
|
| 30 |
+
<sub>The live tool. A deer, a class no closed detector is asked to output on the road, is not dropped and not mislabeled: it resolves to <code>Living Being</code>, with the full taxonomy descent path and an independent segmentation cross-check shown alongside.</sub>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 31 |
|
| 32 |
+
## Watch the 3-minute explainer
|
| 33 |
|
| 34 |
+
<p align="center">
|
| 35 |
+
<a href="https://youtu.be/Awy3qmCCe78">
|
| 36 |
+
<img src="https://img.youtube.com/vi/Awy3qmCCe78/maxresdefault.jpg" alt="HOWC explainer video" width="70%">
|
| 37 |
+
</a>
|
| 38 |
+
</p>
|
| 39 |
+
|
| 40 |
+
---
|
| 41 |
+
|
| 42 |
+
## The problem
|
| 43 |
+
|
| 44 |
+
A closed-set detector must assign every object one of a fixed set of labels. On an object outside that set (a horse-drawn carriage, road debris, livestock on a rural road) it can only do one of two unsafe things: force a **confident but wrong** specific label, or **drop** the object entirely. Real incidents trace back to exactly this failure.
|
| 45 |
+
|
| 46 |
+
## How it works
|
| 47 |
+
|
| 48 |
+
HOWC puts a **taxonomy** over the detector and, per object, aggregates leaf probability mass up the tree. It commits only as deep as one branch holds enough mass; otherwise it stops at a coarser node. A per-branch **safety floor** (`Vehicle`, `Living Being`, `Static Object`) means it never collapses into a useless bare `Object`: below the floor, it emits an explicit **UNKNOWN OBSTACLE** with a fully inspectable decision path.
|
| 49 |
+
|
| 50 |
+
<img src="https://raw.githubusercontent.com/freshNfunky/IE2025-Research-Paper/main/figures/taxonomy_architecture.png" alt="The object taxonomy, with safety floors marked" width="100%">
|
| 51 |
+
|
| 52 |
+
## How it decides (worked examples)
|
| 53 |
+
|
| 54 |
+
Each detection produces a decision path: probability mass per node, the safety floor, and the resulting action.
|
| 55 |
+
|
| 56 |
+
<table>
|
| 57 |
+
<tr>
|
| 58 |
+
<td width="50%" valign="top">
|
| 59 |
+
<img src="https://raw.githubusercontent.com/freshNfunky/IE2025-Research-Paper/main/figures/ex_road_anomaly_04_2_abstracted.png" alt="ABSTRACTED: a truck YOLO calls 'car' is abstracted up to the safe Vehicle floor" width="100%">
|
| 60 |
+
<br><sub><b>ABSTRACTED.</b> YOLO calls a distant truck "car" (0.33). The mass is ambiguous below the <code>Vehicle</code> floor, so HOWC does not guess a leaf: it reports <b>Vehicle</b>, still useful, never wrong.</sub>
|
| 61 |
+
</td>
|
| 62 |
+
<td width="50%" valign="top">
|
| 63 |
+
<img src="https://raw.githubusercontent.com/freshNfunky/IE2025-Research-Paper/main/figures/ex_road_anomaly_02_1_unknown.png" alt="UNKNOWN: mass splits above the safety floor, so the object is flagged UNKNOWN OBSTACLE" width="100%">
|
| 64 |
+
<br><sub><b>UNKNOWN.</b> A rural-road anomaly YOLO calls "person" (0.72). The mass splits <i>above</i> the floor across Living Being / Vehicle / Static, so HOWC refuses a category and flags <b>UNKNOWN OBSTACLE</b>.</sub>
|
| 65 |
+
</td>
|
| 66 |
+
</tr>
|
| 67 |
+
</table>
|
| 68 |
+
|
| 69 |
+
## Beyond 2D: a depth cue for flat detections
|
| 70 |
+
|
| 71 |
+
A 2D box cannot tell a real vehicle from a flat picture of one (a billboard, a truck livery). The open-world study adds a monocular-depth relief cue: detections that are geometrically **flat** get flagged, and the depth field feeds the open-world proposal front-end.
|
| 72 |
+
|
| 73 |
+
<img src="https://raw.githubusercontent.com/freshNfunky/IE2025-Research-Paper/main/figures/depth3d_04.png" alt="Left: 3D mode flags flat detections on a horse trailer scene. Right: monocular depth (nearer = bright)" width="100%">
|
| 74 |
+
|
| 75 |
+
<sub>Left: 3D mode flags flat detections. Right: the monocular depth field (nearer = bright). This is a feasibility signal, not a solved module, and the paper is explicit that no single 2D cue suffices.</sub>
|
| 76 |
+
|
| 77 |
+
## Results (honest)
|
| 78 |
+
|
| 79 |
+
**Out-of-vocabulary objects** (v3 ground-truth leave-classes-out on COCO, n=235). Hold seven classes out of the taxonomy, then classify their real annotated crops:
|
| 80 |
+
|
| 81 |
+
<img src="https://raw.githubusercontent.com/freshNfunky/IE2025-Research-Paper/main/figures/v3_openworld_benchmark.png" alt="Flat head is 100% confidently wrong; HOWC is 0% confidently wrong and 94% safe" width="90%">
|
| 82 |
+
|
| 83 |
+
| On out-of-vocabulary objects | Flat / closed head | **HOWC** |
|
| 84 |
+
|---|---|---|
|
| 85 |
+
| Confident **wrong** specific label | **100%** | **0%** |
|
| 86 |
+
| ... of which in the **wrong super-category** | 37% | 0% |
|
| 87 |
+
| Safely handled (right super-cat, or honest UNKNOWN) | 0% | **94%** |
|
| 88 |
+
| Correct super-category recovered | — | 26% |
|
| 89 |
+
| Conservatively flagged UNKNOWN | — | 69% |
|
| 90 |
+
|
| 91 |
+
On **known, in-taxonomy** objects: **0% off-branch (categorical) errors** with ~24% calibrated abstention, versus a flat arg-max head's ~53% off-branch errors.
|
| 92 |
+
|
| 93 |
+
The safety/specificity trade-off is a dial, not a fixed point. Every hierarchical configuration stays **100% safe on novel objects** while still usefully classifying up to 76% of known ones; the flat baseline sits alone at 0% novel-safe.
|
| 94 |
+
|
| 95 |
+
<img src="https://raw.githubusercontent.com/freshNfunky/IE2025-Research-Paper/main/figures/calibration_tradeoff.png" alt="Safety vs specificity: every hierarchical config is 100% novel-safe; the flat baseline is 0% novel-safe" width="80%">
|
| 96 |
+
|
| 97 |
+
> **What this is, and is not.** This is a **safety** result, not a specificity one. On closed-set COCO mAP a trained YOLO is more accurate, and we say so. The contribution is the abstraction layer over open-vocabulary (CLIP) features: it never makes a confident categorical mistake on an unknown object, at the honest cost of 69% abstention. The point is the tail, not the leaderboard.
|
| 98 |
+
|
| 99 |
+
## An independent second path
|
| 100 |
+
|
| 101 |
+
The box classification is cross-checked against a class-agnostic **segmentation** path: does the pixel evidence back up the box verdict? Across sampled detections it **confirms or stays neutral 63%** of the time and **flags 37%** for review, with **0% hard conflicts**, and it agrees most where it should (on abstracted and unknown objects).
|
| 102 |
+
|
| 103 |
+
<img src="https://raw.githubusercontent.com/freshNfunky/IE2025-Research-Paper/main/figures/segmentation_agreement.png" alt="Segmentation cross-check verdict: 37% confirm, 26% neutral, 37% flag, 0% conflict" width="70%">
|
| 104 |
|
| 105 |
## Run it locally
|
| 106 |
|
| 107 |
+
Self-contained: code + taxonomy + a Gradio app. Training-free (pretrained YOLO + CLIP zero-shot); first run downloads weights (~360 MB).
|
| 108 |
|
| 109 |
```bash
|
| 110 |
pip install -r requirements.txt
|
| 111 |
+
python app.py # Gradio UI: upload an image, see the taxonomy decision path
|
| 112 |
python app.py --share # same, but also prints a temporary public URL (~72h)
|
| 113 |
```
|
| 114 |
|
| 115 |
+
## Papers
|
| 116 |
+
|
| 117 |
+
- **Open-world (v3):** *Open-World Hierarchical Perception: Taxonomic Abstraction over Class-Agnostic Proposals for the Safe Handling of Out-of-Vocabulary Road Objects*, F. Schaller, [arXiv:2608.07577](https://arxiv.org/abs/2608.07577).
|
| 118 |
+
- **Foundational (v1):** *Hierarchical Taxonomic Abstraction for the Safe Handling of Novel Objects in Autonomous Driving Perception*, [doi:10.5281/zenodo.21593472](https://doi.org/10.5281/zenodo.21593472).
|
| 119 |
+
- **Source & full history:** <https://github.com/freshNfunky/IE2025-Research-Paper>
|
| 120 |
+
|
| 121 |
+
```bibtex
|
| 122 |
+
@misc{schaller2026howc,
|
| 123 |
+
title = {Open-World Hierarchical Perception: Taxonomic Abstraction over
|
| 124 |
+
Class-Agnostic Proposals for the Safe Handling of
|
| 125 |
+
Out-of-Vocabulary Road Objects},
|
| 126 |
+
author = {Schaller, Felix},
|
| 127 |
+
year = {2026},
|
| 128 |
+
eprint = {2608.07577},
|
| 129 |
+
archivePrefix = {arXiv},
|
| 130 |
+
primaryClass = {cs.CV},
|
| 131 |
+
url = {https://arxiv.org/abs/2608.07577}
|
| 132 |
+
}
|
| 133 |
+
```
|
| 134 |
+
|
| 135 |
## License
|
| 136 |
|
| 137 |
CC BY-NC 4.0, matching the paper.
|
assets/hero.mp4
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:d947155a39a506b5a9793c0ca04811978592117515dfd7ec6c91e1395a350d76
|
| 3 |
+
size 451523
|
assets/hero_poster.jpg
ADDED
|
Git LFS Details
|
hpercept/.DS_Store
CHANGED
|
Binary files a/hpercept/.DS_Store and b/hpercept/.DS_Store differ
|
|
|