--- 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).