diff --git a/experiments/perception/M48T_RF_DETR_UPSTREAM_PARITY_REPORT.md b/experiments/perception/M48T_RF_DETR_UPSTREAM_PARITY_REPORT.md new file mode 100644 index 0000000..93f4bc2 --- /dev/null +++ b/experiments/perception/M48T_RF_DETR_UPSTREAM_PARITY_REPORT.md @@ -0,0 +1,111 @@ +# M48T RF-DETR upstream и TensorRT parity gate + +Дата: 2026-08-26 + +Режим: diagnostic shadow + +Worker: `worker-006`, NVIDIA GeForce RTX 4090 + +Production acceptance: **нет** + +## Решение + +Полный официальный COCO val2017 gate принят. Закреплённый RF-DETR Large +checkpoint воспроизвёл опубликованное upstream-качество в официальном PyTorch +пути, а развёрнутый TensorRT engine сохранил это качество практически точно. + +Диагноз: `upstream-and-tensorrt-parity-passed`. + +Следовательно, наблюдавшиеся в Mission Core пропуски поведенчески значимых +объектов нельзя объяснять деградацией RF-DETR checkpoint, ONNX/TensorRT +конвертацией или декодированием TensorRT outputs. Следующий поиск должен быть в +downstream admission: class mapping, valid-FOV, confidence/area gates, +risk-class policy, temporal delivery и доменном покрытии городского источника. + +## Строгий контракт + +- dataset: все 5 000 изображений COCO val2017; +- categories: все официальные COCO categories; +- preprocessing: официальный RF-DETR Large, `704x704`; +- predictions: top 300, confidence prefilter `0.0`; +- custom area filtering: выключен; +- crowd handling: официальный `pycocotools.COCOeval`; +- published reference: AP@[.50:.95] `0.565`, AP50 `0.751`; +- upstream tolerance: `0.01`; +- PyTorch/TensorRT parity tolerance: `0.005`; +- navigation, safety, command и actuation authority: `false`. + +## Результат + +| Метрика | Официальный PyTorch | TensorRT/Triton | Абсолютная дельта | +|---|---:|---:|---:| +| AP@[.50:.95] | 0.565100 | 0.565133 | 0.000033 | +| AP50 | 0.751158 | 0.751285 | 0.000127 | +| AP75 | 0.613005 | 0.613402 | 0.000397 | +| AP small | 0.388411 | 0.389311 | 0.000900 | +| AP medium | 0.610420 | 0.610540 | 0.000120 | +| AP large | 0.740038 | 0.739485 | 0.000553 | +| Prediction count | 1 499 907 | 1 499 909 | 2 | +| Effective throughput | 35.094 FPS | 42.807 FPS | — | +| Image p95 | 36.858 ms | 30.792 ms | — | + +Полный прогон занял `375.912 s`. Оба admission checks приняты: + +- upstream reproduction: `passed`; +- TensorRT provider parity: `passed`. + +## Immutable provenance + +- profile: `m48t-rf-detr-large-upstream-coco-parity/v1`; +- report identity SHA-256: + `20a286d0190d1873d924260fc9b7c61288642e53b7206b2da81610da2989ef88`; +- result file SHA-256: + `48bb85081d733a0a839c7d1110fbf7f0da69234b45d38e5c4e85f28079883cbc`; +- checkpoint SHA-256: + `0f4e20e19a99c0f8a62b5685f57f6c8b5c371c59081feda6752a0561a79ccf38`; +- annotations SHA-256: + `e8c7f7908f1d7278341fae127d0da654f102f11bd7b21d8aeefa635b8c810b6f`; +- TensorRT engine SHA-256: + `986399ce706b7380472cf5e473232249fed6e628971d8007f6609e83128d46b8`; +- PyTorch predictions SHA-256: + `da5b895bf906ee8480405149d63a3d19f1d8af0179d9a457d5202d844dc07b9d`; +- TensorRT predictions SHA-256: + `bb3baa3997e303a467799eb0b8ed49005182d06495106d57575906087402709b`; +- runtime: + `nvcr.io/nvidia/tritonserver:26.06-py3@sha256:58df7489c3f2276f9591d500a012dee03e23d35543ce3c390b4c001e6bf90794`; +- packages: RF-DETR `1.9.4`, PyTorch `2.9.1+cu130`, torchvision +`0.24.1+cu130`, pycocotools `2.0.10`, Triton client `2.71.0`. + +Worker evidence остаётся в +`D:\NDC_MISSIONCORE\runtime\results\m48t-upstream-parity\full-coco2017-val-20260825T213600Z`. +Компактная копия `result.json` и `progress.jsonl` сохранена локально в +`.runtime/worker-results/m48t-upstream-parity-coco2017-val-full-v1/`. + +Канонический `ndc-mission-core-triton` до и после прогона сохранил тот же +container id и состояние `healthy`; его конфигурация не изменялась. + +## Что этот gate не доказывает + +- качество на RAVNOVES00 и будущих городских/полевых доменах; +- полноту классов вне COCO, включая отдельный класс самоката; +- корректность наших confidence, area и valid-FOV порогов; +- отсутствие потерь между detector output, tracker и world-state graph; +- безопасность navigation/actuation policy. + +## Следующий gate + +Провести downstream attribution replay на immutable RAVNOVES00: для каждого +кадра сохранить один и тот же TensorRT output и посчитать, сколько объектов и +каких risk-классов остаётся после каждой ступени: + +1. raw top-300 output; +2. COCO class mapping; +3. confidence gate; +4. valid-FOV и area gates; +5. fixed risk-class qualification; +6. tracker/temporal/world-state delivery. + +Это локализует конкретную ступень потери `person`, animal, light-road-user и +vehicle detections без добавления второй тяжёлой модели и без изменения FPS +critical path. После attribution можно менять только доказанно виновный gate и +повторять source-paced reference-graph load acceptance.