fernandotonon's picture
Upload README.md with huggingface_hub
5391485 verified
|
Raw
History Blame Contribute Delete
3.18 kB
---
license: cc-by-4.0
tags:
- point-cloud
- classification
- mesh-segmentation
- onnx
- 3d
- qtmesheditor
library_name: onnx
pipeline_tag: other
---
# QtMeshEditor β€” Mesh Category Classifier
A tiny point-cloud **category classifier** (PointNet: per-point MLP +
max-pool + linear head, ~0.1 MB) that decides whether a mesh is a **body**
(character/creature), **vegetation**, **vehicle**, or **building** β€” exported
to **ONNX** for local inference via ONNX Runtime.
This is the **Auto dispatcher** for QtMeshEditor's category-specialised mesh
part-segmentation family (epic #818, Track B2): the editor samples the mesh
into a point cloud, runs this classifier, then dispatches to the matching
specialist β€”
[body](https://huggingface.co/fernandotonon/QtMeshEditor-mesh-segmentation),
[vegetation](https://huggingface.co/fernandotonon/QtMeshEditor-mesh-segmentation-vegetation),
[vehicle](https://huggingface.co/fernandotonon/QtMeshEditor-mesh-segmentation-vehicle),
[building](https://huggingface.co/fernandotonon/QtMeshEditor-mesh-segmentation-building).
When this model is unavailable the editor falls back to the body model
(its pre-#818 behaviour). Aggregate download source used by the app:
[QtMeshEditor-models](https://huggingface.co/fernandotonon/QtMeshEditor-models)
(`segment/meshseg_category.onnx`).
## Model
- **Input:** a sampled point cloud `float32 [1, N, 3]` (normalised to a centred
unit box; +Y up).
- **Output:** logits `float32 [1, 4]` over
(`body, vegetation, vehicle, building`); argmax β†’ category.
## Training data & license
Trained **from scratch** on the same permissive corpus as the segmentation
family: procedurally generated synthetic bodies / trees / vehicles /
buildings we own (category labels are free β€” they come from which generator
produced the cloud), plus CC0 rigged characters (Quaternius packs) mined as
extra real `body` samples. Weights released under **CC-BY-4.0**; please
credit *QtMeshEditor*.
## Evaluation
- Held-out validation accuracy: **97.5%** (4-way, on the v1.1 hardened data:
full-random yaw + detached-part augmentation β€” a strictly harder task than
v1.0's 99.1% near-canonical set).
- Robustness probe (20 trials each, synthetic cars): detached wheels
20/20 (v1.0: 18), detached + 45Β° yaw 19/20 (v1.0: 5), detached + 90Β° yaw
20/20 (v1.0: 3); no regression on any category at random yaw.
## Reproducing
`scripts/export-meshseg-onnx.py --category classifier --real-data <mined/>`
in the QtMeshEditor repo (one-time, offline; the app never runs Python).
Strategy + decision record (why several specialists + a classifier instead
of one multi-category softmax): `docs/MESH_SEGMENTATION_STRATEGY.md`.
## Versions
- **v1.1.0** (current) β€” yaw-invariance + detached-part robustness: every
training cloud is spun by a full random yaw (category is a yaw-invariant
question; v1.0 inherited the segmenters' near-canonical augmentation), and
minority-part clusters are randomly offset (real exports drop wheels/parts
as separate nodes β€” the verified real-world failure: a car with detached
wheels classified as `body`).
- **v1.0.0** β€” initial release (#818 Track B2).