Learned Suppression for 3D Keypoint Detection

with a Graph-Transformer Backbone

Batuhan Arda Bekar Can Sarı Hüseyin Can Gülkan Barış Özcan

Bahçeşehir University

ACCV 2026

TL;DR: We replace the hand-tuned NMS or DBSCAN step at the end of 3D keypoint detectors with a small learned graph network that decides which candidates to keep and moves them onto the correct location.

Detected keypoints on KeypointNet objects and Building3D roofs, with predictions in red and ground truth in green
Greedy NMS, DBSCAN, and learned suppression on the same backbone output, for semantic object landmarks (KeypointNet test shapes) and roof corners from airborne LiDAR (held out Building3D Entry-Level scenes). The first four KeypointNet shapes are those of Fig. 1 in the paper; the others were chosen where the methods differ most. Scores use Hungarian matching at ε = 0.10. Drag to rotate, scroll to zoom.

Abstract

Detecting 3D keypoints is a long-standing challenge in computer vision. Most detectors end with a heuristic post-processing step that is not learned. We propose a 3D keypoint detector that improves on this step with a learned suppression module, paired with a Point Transformer backbone that we extend with a directional graph neural network. The module is a graph network over candidates that learns which to keep, which to suppress, and how to relocate the remaining ones. Paired with three backbones, it improves over DBSCAN and greedy non-maximum suppression, and because it operates on candidate features rather than raw geometry, the same formulation applies to both structural and semantic keypoints. Our model surpasses the per-category trained KeypointDETR on 12 of 16 KeypointNet categories, attains the best Corner F1 on the Building3D Entry-Level benchmark, and remains competitive with BWFormer on the larger Tallinn split.

Method

Model architecture A point cloud passes through a Point Transformer encoder (SA1 to SA4) and a UNet3+ decoder (FP4 to FP1) with full-scale skip connections, then a directional GNN. Classification and offset heads produce candidates, which the learned suppression module turns into the final keypoints using the frozen backbone features. UNet3+ skips: every decoder stage fuses features from every encoder scale full-scale skip connections Input point cloud (a roof from Building3D or an object from KeypointNet) Point cloud Point Transformer encoder: set abstraction stages built from vector attention blocks SA4 adds a ground truth log prior to its attention logits at training time only SA1SA2 SA3SA4 Point Transformer encoder UNet3+ decoder: four feature propagation stages, each upsampling by three nearest neighbor interpolation FP4FP3 FP2FP1 UNet3+ decoder Directional GNN: signed, direction aware messages between neighboring points reinforce corners; its features are regularized with the VICReg variance and covariance terms Directional GNN Classification head: per point keypoint probability, trained with a focal loss Keypoint score focal loss Offset regression head: displacement from each point to its nearest keypoint, trained with a smooth L1 loss Offset smooth L1 loss frozen backbone features Learned suppression: a graph network over the candidates that keeps, suppresses and relocates them (Algorithm 1 below) Learned suppression candidates Final keypoints Keypoints
A hierarchical Point Transformer encoder (SA4 adds a ground truth attention prior at training time only) feeds a UNet3+ decoder with full-scale skip connections. A directional GNN refines the full resolution features before the classification and offset heads, whose candidates the learned suppression module consolidates into the final keypoints. Hover a block for details.

Backbone

The backbone predicts, for every point, a keypoint probability and an offset to the nearest keypoint. It builds on a hierarchical Point Transformer encoder with two extensions: a spectral positional encoding that adapts its frequency bands to the geometry of each local neighborhood, and a directional graph neural network after the decoder that passes signed, direction-aware messages between neighboring points to reinforce geometrically distinctive locations such as corners.

Point Transformer block and spectral positional encoding
Point Transformer block and spectral positional encoding
(a) Point Transformer block with the training-only attention prior at the coarsest stage. (b) Geometry-adaptive spectral positional encoding.

Learned suppression

High-confidence points vote at their offset-displaced positions, and the votes are reduced to a small candidate set. Instead of a fixed rule deciding which candidates survive, a graph network over the candidates makes that decision. In each of two message-passing rounds, every pair of nearby candidates predicts how strongly one suppresses the other, each candidate updates its state from the suppression it receives, and then moves toward a better position before the next round. A final keep score, discounted by the strongest suppression a candidate received, selects the output keypoints.

Earlier learned NMS only rescored detections in place. In 3D a keypoint rarely coincides with any candidate, so relocation is what lets the module improve localization, not just selection. The module adds 0.15M parameters and is trained on top of the frozen backbone.

Algorithm 1 Learned suppression module
Require: candidate features \(\{z_j\}\), candidate positions \(\{c_j\}\)
  1. \(h_j \gets \mathrm{MLP}_{\mathrm{emb}}(z_j)\)shared embedding into \(\mathbb{R}^{128}\)
  2. for \(t = 1,\dots,T\) do
  3. \(d_{ij} \gets \lVert c_i - c_j \rVert,\;\; \mathcal{A} \gets \{(i,j): d_{ij} < \rho,\ i \neq j\}\)
  4. \(s_{ij} \gets \sigma\big(\mathrm{MLP}_{\mathrm{rel}}([\,h_i, h_j, d_{ij}\,])\big)\) for \((i,j)\in\mathcal{A}\), else \(0\)\(s_{ij}\): \(i\) suppresses \(j\)
  5. \(u_j \gets \sum_i s_{ij}\, h_i\)incoming suppression
  6. \(h_j \gets h_j + \mathrm{MLP}_{\mathrm{upd}}([\,h_j, u_j\,])\)
  7. \(c_j \gets c_j + \mathrm{MLP}_{\mathrm{mov}}(h_j)\)relocate; \(c_j\) accumulates the displacement
  8. end for
  9. \(\pi_j \gets \sigma\big(\mathrm{MLP}_{\mathrm{keep}}(h_j)\big)\cdot\big(1 - \max_i s_{ij}\big)\)\(s_{ij}\) from the final round
  10. return \(\{c_j : \pi_j > \tau\}\)

\(\mathrm{MLP}_{\mathrm{emb}}\) and \(\mathrm{MLP}_{\mathrm{keep}}\) are shared across rounds; \(\mathrm{MLP}_{\mathrm{rel}}\), \(\mathrm{MLP}_{\mathrm{upd}}\), and \(\mathrm{MLP}_{\mathrm{mov}}\) have independent weights in each round \(t\). \(\rho\): suppression radius; \(T\): message-passing rounds per forward pass; \(\tau\): keep threshold. pairs(h, d) builds \([\,h_i, h_j, d_{ij}\,]\) for every pair.

Results

Learned suppression versus heuristic post-processing

Swapping only the post-processing stage, on three different backbones, learned suppression gives the best Corner F1 and mIoU in every case.

Test splits. Corner F1 on Building3D, Hungarian mIoU (%) at ε = 0.10 on KeypointNet. Best per backbone in bold.
BackbonePost-processingEntry-Level CF1Tallinn CF1KeypointNet mIoU
OursGreedy NMS90.7085.1084.25
DBSCAN89.0083.6079.67
Learned suppression93.2087.8092.01
PointNet++Greedy NMS60.4068.3046.33
DBSCAN82.3080.4070.92
Learned suppression87.0084.9074.99
DGCNNGreedy NMS43.0044.3042.87
DBSCAN78.4074.9070.68
Learned suppression84.9081.7077.87

Compare the three post-processing methods in 3D at the top of the page.

Building3D: roof corners from airborne LiDAR

Our detector reaches the best Corner Recall and F1 on Entry-Level and stays competitive with BWFormer on the full Tallinn split, without the roof-specific priors used by PBWR and BWFormer.

Entry-Level (test)
MethodACO↓CPCRCF1
Supervised (PT)0.2689.066.076.0
PBWR0.2297.085.091.0
Ours0.2296.590.193.2
Tallinn (test)
MethodACO↓CPCRCF1
PBWR0.22298.568.881.0
BWFormer0.20494.982.788.4
Ours0.21692.383.787.8

Selected rows; the paper reports the full comparison with prior methods.

Predicted and ground truth roof corners on four more Building3D scenes
More Building3D scenes: predictions (red crosses), ground truth (green circles).

KeypointNet: semantic landmarks across 16 categories

A single model trained on all 16 categories surpasses KeypointDETR on 12 of them. KeypointDETR is trained per category with a fixed keypoint set per category, so the two methods are trained under different regimes; this comparison is best read as a single cross-category model against per-category specialists.

Hungarian mIoU (%) at ε = 0.10 per category, KeypointDETR (per category models, numbers as reported in its paper) against our single model. Sorted by the difference.
Per-category numbers, with Chamfer distance
Hungarian mIoU (%) at ε = 0.10 and Chamfer Distance, test split. KeypointDETR numbers as reported in its paper, under the same evaluation protocol. Better per row in bold.
CategoryKeypointDETR mIoUOurs mIoUKeypointDETR CD↓Ours CD↓
Airplane91.3796.930.0450.038
Bathtub71.3790.830.0740.049
Bed70.8387.610.0810.056
Bottle87.2290.680.0500.049
Cap79.4391.740.0660.062
Car94.2992.250.0450.051
Chair91.8994.580.0550.051
Guitar93.9697.840.0450.029
Helmet85.0552.360.0870.407
Knife63.1291.120.0890.036
Laptop99.1199.650.0240.033
Motorcycle87.5292.280.0530.047
Mug96.6285.550.0490.096
Skateboard92.2894.250.0550.037
Table98.0595.960.0270.059
Vessel59.9777.350.1050.079

Where it fails. Helmet is our weakest category. The detector relies on locally distinctive geometry and has no category template, while Helmet's landmarks are semantic conventions on a smooth shell. Cap has a similarly smooth overall shape, but its landmarks sit on the sharp brim, and the same model reaches 91.74 mIoU there.

Predicted and ground truth keypoints on twelve KeypointNet categories
Test shapes from twelve KeypointNet categories, from a single model trained on the whole dataset. Predictions (red crosses), ground truth (green circles).
Hungarian mIoU against the distance threshold ε for all 16 KeypointNet categories. Hover a curve or pick a category to highlight it.

BibTeX

@misc{bekar2026learnedsuppression3dkeypoint,
  title={Learned Suppression for 3D Keypoint Detection with a Graph-Transformer Backbone}, 
      author={Batuhan Arda Bekar and Can Sarı and Hüseyin Can Gülkan and Barış Özcan},
      year={2026},
      eprint={2605.15088},
      archivePrefix={arXiv},
      primaryClass={cs.CV},
      url={https://arxiv.org/abs/2605.15088},
}