Skip to content

Commit 40b8119

Browse files
committed
chore(release): mdformat CHANGELOG.md
1 parent 3d19e9d commit 40b8119

1 file changed

Lines changed: 23 additions & 24 deletions

File tree

CHANGELOG.md

Lines changed: 23 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,10 @@ short-lived allocations in R-VPF + R-GPF.
1212

1313
**High-impact (this is where the +14.8% comes from):**
1414

15-
- `estimate_plane`: drop `Eigen::MatrixX3f eigen_ground` + `centered`
16-
+ `centered.adjoint() * centered`. Replace with a single-pass
17-
scalar accumulation of mean and 9 cross-products, then build the
18-
3x3 covariance on the stack. No more per-call Eigen heap
19-
allocations.
15+
- `estimate_plane`: drop the `Eigen::MatrixX3f eigen_ground`,
16+
`centered`, and `centered.adjoint() * centered` heap allocations.
17+
Replace with a single-pass scalar accumulation of mean and 9
18+
cross-products, then build the 3x3 covariance on the stack.
2019
- `extract_piecewiseground`: promote `src_wo_verticals` and
2120
`src_tmp` to reused instance scratch members. `vector::clear()`
2221
keeps capacity, so per-patch malloc pressure on the glibc heap
@@ -50,10 +49,10 @@ is sub-us/patch.
5049

5150
KITTI seq 00 (4541 frames), v1.4.0 to v1.4.1:
5251

53-
| Method (protocol) | Before | After | Δ F1 |
54-
| ------------------- | -------------------------- | -------------------------- | ----: |
55-
| `patchwork` (pw) | P 92.34, R 94.64, F1 93.41 | P 92.34, R 94.64, F1 93.41 | 0.00 |
56-
| `patchworkpp` (pp) | P 94.88, R 98.47, F1 96.62 | P 94.89, R 98.48, F1 96.63 | +0.01 |
52+
| Method (protocol) | Before | After | Δ F1 |
53+
| ------------------ | -------------------------- | -------------------------- | ----: |
54+
| `patchwork` (pw) | P 92.34, R 94.64, F1 93.41 | P 92.34, R 94.64, F1 93.41 | 0.00 |
55+
| `patchworkpp` (pp) | P 94.88, R 98.47, F1 96.62 | P 94.89, R 98.48, F1 96.63 | +0.01 |
5756

5857
Algebraic identity of `JacobiSVD` vs `eigh` verified on 500 real
5958
KITTI patch covariances: `normal_` (up to sign),
@@ -95,10 +94,10 @@ order so numerical results are byte-identical to the sequential path.
9594

9695
Measured on KITTI seq 00 (i7-12700, 24 logical cores):
9796

98-
| Configuration | Median ms/frame | Median Hz |
99-
| -- | --: | --: |
100-
| `--method patchwork` single-thread (taskset -c 0) | 8.31 | 120.4 |
101-
| `--method patchwork` parallel (TBB default scheduler) | **4.81** | **207.8** |
97+
| Configuration | Median ms/frame | Median Hz |
98+
| ----------------------------------------------------- | --------------: | --------: |
99+
| `--method patchwork` single-thread (taskset -c 0) | 8.31 | 120.4 |
100+
| `--method patchwork` parallel (TBB default scheduler) | **4.81** | **207.8** |
102101

103102
**1.73× speedup**. TBB is an **optional** build dependency: missing
104103
TBB causes a CMake STATUS message and falls back to a sequential
@@ -129,10 +128,10 @@ or a real user CPU complaint).
129128
KITTI 00-10 full sweep (23,201 frames), Patchwork++ paper protocol,
130129
v1.3.1 → v1.4.0:
131130

132-
| Method | F1 v1.3.1 | F1 v1.4.0 | Δ |
133-
| --- | --- | --- | --- |
134-
| `--method patchwork` | 96.0172 | 96.0172 | 0 (byte-identical) |
135-
| `--method patchworkpp` | 96.2918 | 96.2919 | +0.0001 (float noise) |
131+
| Method | F1 v1.3.1 | F1 v1.4.0 | Δ |
132+
| ---------------------- | --------- | --------- | --------------------- |
133+
| `--method patchwork` | 96.0172 | 96.0172 | 0 (byte-identical) |
134+
| `--method patchworkpp` | 96.2918 | 96.2919 | +0.0001 (float noise) |
136135

137136
Both well within the ±0.05 budget set in the refactor plan.
138137

@@ -177,12 +176,12 @@ parameters (`uprightness_thr=0.707`, `using_global_thr=false`) on SemanticKITTI
177176
sequences 00–10 (23,201 frames), under the Patchwork++ paper evaluation
178177
protocol (Sec. IV.A — VEGETATION excluded):
179178

180-
| Configuration | Precision | Recall | F1 |
181-
| --- | --- | --- | --- |
182-
| v1.2.0 (`pypatchworkpp.patchwork`) | 89.70 | 98.49 | 93.73 |
183-
| **v1.3.0 (`pypatchworkpp.patchwork`)** | **94.64** | **97.58** | **96.02** |
184-
| Original Patchwork ROS 2 (reference) | 94.38 | 97.90 | 96.05 |
185-
| Patchwork++ paper Table I, Patchwork \[1\] | 94.23 | 97.62 | 95.88 |
179+
| Configuration | Precision | Recall | F1 |
180+
| ---------------------------------------- | --------- | --------- | --------- |
181+
| v1.2.0 (`pypatchworkpp.patchwork`) | 89.70 | 98.49 | 93.73 |
182+
| **v1.3.0 (`pypatchworkpp.patchwork`)** | **94.64** | **97.58** | **96.02** |
183+
| Original Patchwork ROS 2 (reference) | 94.38 | 97.90 | 96.05 |
184+
| Patchwork++ paper Table I, Patchwork [1] | 94.23 | 97.62 | 95.88 |
186185

187186
**+2.29 F1** vs v1.2.0; within ±0.14 F1 of the original Patchwork ROS 2 build
188187
and within paper run-to-run variance of Table I.
@@ -195,7 +194,7 @@ Fixes:
195194
effectively never fired for normal ground.
196195
1. Plane-distance comparison now uses uncentred `normal · p` against
197196
`th_dist_d_ = th_dist − d_`, which is equivalent to "signed distance to
198-
plane \< th_dist". The previous centred form shifted the cutoff by an
197+
plane < th_dist". The previous centred form shifted the cutoff by an
199198
extra `−d_ ≈ |normal · mean| ≈ 1.6 m` on KITTI ground.
200199
1. The elevation/flatness tier index is now the GLOBAL ring index across all
201200
zones, so each of the first `elevation_thr.size()` rings gets its own

0 commit comments

Comments
 (0)