"Use for CPU-safe SECOND box geometry, coordinate conversion,
Scanned 9/9/2026
Install to Claude Code
npx -y skills add VectorSpaceLab/AREX-Skill --skill geometry-and-evaluation --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Geometry And Evaluation?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/vectorspacelab-geometry-and-evaluation)More formats (shields.io, HTML) on the badges page.
---
name: geometry-and-evaluation
description: "Use for CPU-safe SECOND box geometry, coordinate conversion,
encoding and target assignment, IoU/NMS decisions, KITTI or NuScenes
evaluation, result conversion, and tiny-fixture validation."
disable-model-invocation: true
metadata:
disco-role: operating
license: MIT
---
# Geometry and evaluation
Use this route when a task mentions lidar or camera boxes, corners, yaw, encode/decode,
anchors, target assignment, IoU, NMS, KITTI labels/AP, NuScenes result JSON, or
coordinate transforms. This is a **static/CPU-safe operating route**. It does not
prove detector execution.
## Operating boundary
- Prefer NumPy-only geometry and fixture checks. Read [api-reference.md](references/api-reference.md)
for signatures, shapes, and source-faithful dimension order.
- Read [coordinate-systems.md](references/coordinate-systems.md) before converting
KITTI camera boxes, internal lidar boxes, or NuScenes boxes.
- Read [evaluation.md](references/evaluation.md) before building annotations,
interpreting AP, or writing NuScenes submissions.
- Run the bundled helper before changing box conventions:
```bash
python skills/disco/second-pytorch/sub-skills/geometry-and-evaluation/scripts/geometry_smoke.py --help
python skills/disco/second-pytorch/sub-skills/geometry-and-evaluation/scripts/geometry_smoke.py
```
Expected output contains four `[PASS]` checks and `geometry smoke: PASS`; the
helper imports only NumPy and never imports the detector, spconv, Numba CUDA,
or Torch.
## Safe workflow
1. Normalize every box array to an explicit shape and convention. Internal lidar
boxes are normally `[N, 7] = [x, y, z, w, l, h, rz]`; preserve any velocity or
custom values only after documenting their trailing columns.
2. Check dimensions are positive, row counts agree, calibration matrices are
homogeneous-compatible, and labels/scores have the same first dimension.
3. For corners, use `center_to_corner_box3d` with lidar `axis=2` and the correct
origin; use `center_to_corner_box2d` for `[x, y, w, l, rz]`. Never silently
swap `w,l,h` with KITTI `l,h,w`.
4. For regression, pair each target with its anchor (`[N,7]`), select linear
dimensions or log dimensions consistently, and compare decoded centers,
dimensions, and angle modulo the selected period. Vector-angle coding has
code size 8 rather than 7.
5. For assignment, inspect feature-map order `[D,H,W]`, class-specific anchor
ranges, thresholds, and label semantics (`1+` positive, `0` negative,
`-1` ignore). Use a tiny overlap matrix before sampling positives.
6. Treat NMS as a separate backend decision. The axis-aligned `nms_jit`
algorithm is CPU NumPy/Numba math, but its historical module may import
legacy spconv transitively; rotated CPU NMS depends on the same helpers. GPU
NMS and rotated IoU use legacy Numba CUDA/spconv interfaces and are **not verified**.
7. For KITTI, validate annotation keys, class spelling, dimensions, camera/lidar
convention, and `z_axis`/`z_center` before calling evaluation. For NuScenes,
validate sample tokens, class mapping, quaternion and `wlh` order, range
filtering, and required devkit availability before invoking the evaluator.
## API and failure routing
- Use [api-reference.md](references/api-reference.md) for box math, anchors,
target assignment, similarity, point-in-box, and NMS signatures.
- Use [coordinate-systems.md](references/coordinate-systems.md) for axes,
origins, angle periods, calibration direction, and visualization conventions.
- Use [evaluation.md](references/evaluation.md) for KITTI schemas, metric output
shapes, NuScenes JSON fields, and minimal perfect-match fixtures.
- Use [troubleshooting.md](references/troubleshooting.md) when imports, optional
dependencies, malformed arrays/configs, CLI/API calls, or evaluator output fail.
## Verification status and historical caveats
This checkout has no setup metadata. The model path uses legacy spconv and Numba
APIs; modern spconv 2.x is not proven compatible. The inspection environment had
NumPy, Numba, Torch, spconv, Fire, tensorboardX, nuscenes-devkit, and related
packages, and an A100 CUDA smoke was available, but detector execution was not
accepted as verified. In particular, the installed spconv did not expose the
legacy `non_max_suppression`/`VoxelGeneratorV2` interfaces. Do not claim that GPU
NMS kernels, modern spconv NMS, or the full detector runtime executed successfully.
For new detector work, treat this route as historical guidance and prefer a
maintained SECOND implementation rather than extending the deprecated runtime.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!