| --- |
| license: cc-by-4.0 |
| tags: |
| - mesh-segmentation |
| - part-segmentation |
| - point-cloud |
| - vehicle |
| - onnx |
| - 3d |
| - qtmesheditor |
| library_name: onnx |
| pipeline_tag: other |
| --- |
| |
| # QtMeshEditor β Vehicle Part Segmentation |
|
|
| A point-cloud part-segmentation network (PointNet++-style) that labels each |
| point of a **vehicle** mesh (car / truck / plane / helicopter) as |
| `vehicle_body`, `wheel`, `window`, `wing`, or `rotor` (propeller), exported |
| to **ONNX** for local inference via ONNX Runtime. |
|
|
| One of the category-specialised segmentation models built for |
| **[QtMeshEditor](https://github.com/fernandotonon/QtMeshEditor)** (epic #818, |
| Track B2) β a free, open-source 3D mesh & animation editor. The app |
| auto-detects the mesh category with a companion |
| [point-cloud classifier](https://huggingface.co/fernandotonon/QtMeshEditor-mesh-segmentation-category) |
| and dispatches to this model for vehicles; siblings: |
| [body](https://huggingface.co/fernandotonon/QtMeshEditor-mesh-segmentation), |
| [vegetation](https://huggingface.co/fernandotonon/QtMeshEditor-mesh-segmentation-vegetation), |
| [building](https://huggingface.co/fernandotonon/QtMeshEditor-mesh-segmentation-building). |
| Aggregate download source used by the app: |
| [QtMeshEditor-models](https://huggingface.co/fernandotonon/QtMeshEditor-models) |
| (`segment/meshseg_vehicle.onnx`). |
|
|
| ## Model |
|
|
| - **Input:** a sampled point cloud `float32 [1, N, 3]` (normalised to a centred |
| unit box; +Y up, vehicle nose facing +Z). |
| - **Output:** per-point class logits over 6 channels |
| (`unknown, vehicle_body, wheel, window, wing, rotor`); argmax β label, |
| scattered back to mesh vertices/faces by nearest sampled point. |
| - **Architecture:** shared per-point MLP + two kNN local-aggregation blocks |
| (in-graph `cdist`+`topk`, ONNX-exportable) + a global max-pooled feature; |
| ~0.78 MB. Trained at the app's inference sample size (4096 points). |
|
|
| ## Training data & license |
|
|
| Trained **from scratch, 100% on procedurally generated synthetic vehicles we |
| own** (no third-party data at all): parametric cars/trucks (body + cabin + |
| proud window panes + 4β6 wheels), planes (fuselage, main/tail wings, vertical |
| fin, optional nose prop + landing gear + canopy), and helicopters (body + |
| tail boom, main/tail rotors, skids, canopy) β labels are exact by |
| construction. Weights released under **CC-BY-4.0**; please credit |
| *QtMeshEditor*. |
|
|
| ## Evaluation |
|
|
| - Held-out synthetic validation accuracy: **92.8%** (per-point, unknown |
| masked; v1.1's harder detached-part-augmented data β v1.0 scored 93.5% on |
| the easier all-attached set). Real-world CC0 vehicle packs are the planned |
| next data slice (mined via submesh/material-name labels β "Wheel_FL", |
| "glass", β¦). |
| |
| ## Reproducing |
| |
| `scripts/export-meshseg-onnx.py --category vehicle` in the QtMeshEditor repo |
| (one-time, offline; the app never runs Python). Strategy + roadmap: |
| `docs/MESH_SEGMENTATION_STRATEGY.md`. |
| |
| ## Versions |
| |
| - **v1.1.0** (current) β detached-part robustness: wheel/part clusters are |
| randomly offset during training (real exports often ship wheels as |
| separate nodes below the hull β the verified real-world failure case), so |
| detached wheels still label as `wheel`. |
| - **v1.0.0** β initial synthetic-only release (#818 Track B2). |
| |