docs(perception): record PointPillars transfer verdict

This commit is contained in:
DCCONSTRUCTIONS
2026-07-31 10:48:56 +03:00
parent a9a5ca5a26
commit 8fe6184c52
2 changed files with 335 additions and 9 deletions
+84 -9
View File
@@ -620,21 +620,96 @@ Exit: one immutable K1 session yields both a persistent reconstruction and a
bounded local world state without hard-coded terrain height or scanner-side
changes.
### L3 — LiDAR-native 3D detection — deferred behind L2.6
### L3 — LiDAR-native 3D detection — active after L2.6
- [ ] Establish the public-dataset baseline first; freeze K1-specific 3D
annotations only when a measured domain gap justifies them.
- [ ] Run NVIDIA PointPillars through the existing external worker/Triton seam.
- [ ] Treat pretrained output as a baseline, not an accepted product model.
- [ ] Measure class precision/recall, center/range/yaw error, distance-bucket
recall, false occupied objects and end-to-end latency.
- [x] Freeze a fail-closed benchmark admission that distinguishes independent
oriented 3D box truth from point-wise semantic/instance labels.
- [x] Extract and seal the contract from the exact NVIDIA ONNX instead of
copying a generic KITTI example range into the product profile.
- [x] Build the target TensorRT engine on Worker 006, install it into the
existing canonical Triton repository and execute both GOOSE and KITTI schema
smokes without creating or restarting a second serving stack.
- [x] Admit all KITTI 3D Object Detection 2017 archives and the pinned complete
`3,712 / 3,769` train/validation split on Worker 006.
- [x] Measure the complete public cross-domain transfer probe through the
canonical worker seam: `3,769/3,769` frames, fixed postprocess and no
validation retuning.
- [x] Reject the exact `deployable_v1.1` checkpoint as a K1 product candidate:
runtime is healthy, while BEV mAP40 is `2.46322%`, 3D mAP40 is
`0.000216745%` and false occupied rate is `99.9981%`.
- [x] Preserve the claim boundary: the NGC model card's proprietary
solid-state-LiDAR result is not independently reproducible, KITTI is
cross-domain, and `RAVNOVES01` without independent cuboids cannot establish
detector accuracy.
- [ ] Freeze a separate training/adaptation admission before downloading a
trainable checkpoint or starting a training runtime.
- [ ] Train only on the frozen `3,712` KITTI train frames; keep all `3,769`
validation frames untouched until the candidate ONNX is sealed.
- [ ] Rebuild and evaluate the adapted engine through the already proven
Worker 006/Triton/postprocess seam.
- [ ] After a useful public box-truth result, run `RAVNOVES01` as a K1
deterministic-replay, schema, latency, queue/drop and visual-plausibility
transfer. Do not call it a K1 accuracy benchmark.
- [ ] Compare Autoware CenterPoint only after the PointPillars harness is stable.
- [ ] Fine-tune only if the baseline demonstrates useful transfer and the
annotation budget is justified.
Exit: the selected detector beats the camera-derived cuboid baseline on the
independent gate without increasing unsafe false-free or false-dynamic output.
The current immutable L3 admission result is
`l3-pointpillars-admission-857a8c6a958850f82db7a58e894e13e2a54add09379ca58fb8e47db1e6aba65c`.
It freezes NGC `nvidia/tao/pointpillarnet:deployable_v1.1` as ONNX digest
`2dcabddc3a365e9608a112d7bbbb7db769a6dddeeaa59aa03611a83113326da1`.
The signed companion label file has digest
`0adaeb5a374421b61bf83b8fa4522e11abd68461f239a4c72cf5627de913b3da`
and names `Vehicle`, `Pedestrian`, `Cyclist`. The evaluation profile explicitly
maps only `Vehicle → Car`; the other two class names are identity mappings.
The decoded row contract and class-agnostic BEV NMS are pinned to NVIDIA's
`tao_toolkit_recipes` commit
`a540badc47812a17a94e924b537d49ad3969b5a8`: `4,096` pre-NMS candidates and
IoU threshold `0.01`. The ONNX itself embeds score threshold `0.1` and the
voxel range `[-51.2, -51.2, -1.4]` to `[51.2, 51.2, 4.4]`; the sealed graph
contract has digest
`2fd29cd054ab058c2cfec3dfba305c71e123ef3f04b457d0c64de0c8dac2e1be`.
Postprocessing executes on Worker 006; the raw
`[1, 393216, 9]` tensor is never a Mac/browser transport contract.
The public metric is explicitly a cross-domain transfer probe, not native
checkpoint accuracy. It is a frozen local 40-point AP gate without KITTI
difficulty filtering or test-server submission: IoU is `0.7` for `Car` and
`0.5` for `Pedestrian/Cyclist`, with distance recall buckets
`020 / 2040 / 4070 m`.
Worker 006 built a TensorRT 11.0 engine for its RTX 4090 with digest
`12005d972a4632d56342a5da44442b632c1dcc5144fa3c70b162dec334532481`.
The build completed in `9.139 s`, used approximately `192 MiB` peak builder
GPU memory and stayed inside the existing `ndc-mission-core-triton` container.
The model was installed into the existing repository and loaded through
explicit model control without restarting Triton.
One GOOSE native XYZI frame with `169,883` points then passed a single-query
representation smoke at `55.2069 ms` GPU compute time. This proves only that
the admitted sensor-frame XYZI shape can execute through the staged engine.
GOOSE and RELLIS provide independent point-wise semantic/instance truth, not
oriented 3D cuboids, so they cannot produce PointPillars 3D mAP, center or yaw
accuracy. KITTI 3D Object Detection 2017 is the independent public
cross-domain box-truth source under `CC-BY-NC-SA-3.0`, with the OpenPCDet split
at commit
`233f849829b6ac19afb8af8837a0246890908755`. Its admission is archive-only and
fail-closed: three official archive sizes and digests, XYZI packing, all
training/test calibrations, all training label rows, and the disjoint complete
`3,712 / 3,769` train/validation partition are verified before a path-free
state may be published. The source archives stay on Worker 006 and are not
silently copied to an operator host.
The complete immutable transfer probe is
`l3-pointpillars-kitti-1a6b499e194a363644854dc324bd1b565c100b809f145c1324a25328e7ae0910`.
It processed `3,769/3,769` frames sequentially. Mean inference was
`31.1366 ms`, p95 was `45.9418 ms` and maximum was `68.8731 ms`. Of `315,589`
post-NMS boxes, `159,263` were inside the shared model/KITTI evaluation volume;
the remaining `156,326` were explicitly excluded rather than scored against
an uncovered volume.
The exact contract, metrics, rejection decision and reproduction notes are in
`experiments/perception/L3_POINTPILLARS_TRANSFER_REPORT_2026-07-31.md`.
### L4 — live shadow integration
- [x] Add a provider-neutral bounded LiDAR local-surface queue independent of