dlrv-pointnet-exp5

PointNet++ 6DoF object pose estimator for the fifteen LineMOD objects, trained on masked RGB-D point clouds. This is the exp5 checkpoint: the strongest configuration under the surrogate training objective, and the one used for the head-to-head comparison against the MVCNN track in the report.

Produced for a Deep Learning for Robot Vision project at Hochschule Bonn-Rhein-Sieg.

What it does

Given a masked point cloud of a single object, it regresses the object's full 6DoF pose:

  • Rotation in the continuous 6D representation of Zhou et al., which avoids the discontinuities of quaternions and Euler angles.
  • Translation as a residual from the observed point cloud centroid, not as an absolute position. This matters: PointNet++ set abstraction re-centres every local neighbourhood on its own centroid, so absolute position cannot survive to the global descriptor. Predicting the residual is what makes the translation learnable at all.

Architecture

Backbone PointNetPlusPlus, SA1 to SA3, 1024 input points
Head PoseEstimationHead, 512-d feature, separate rotation and translation branches
Parameters 0.86 M
Input 1024 points, metres, centroid-centred

Results

Trained on the synthetic PBR split only, with no domain adaptation.

Split ADD(-S)@0.05d ADD(-S)@0.1d ADD(-S)@0.2d Mean Median
Synthetic validation 57.36%
Real BOP test, 3,000 images 8.17% 36.23% 60.20% 43.82 mm 26.95 mm

Accuracy is strongly correlated with object diameter (Pearson r = +0.92 on real data): the lamp reaches 61.0% and the holepuncher 5.0%. The ADD threshold is 0.1 x diameter while this model's precision is absolute rather than relative, which is the mechanism behind that spread.

Training

--experiment exp5_combined --epochs 30 --batch_size 32
--lr 0.001 --backbone_lr 0.0005 --rot_weight 1.0 --trans_weight 0.05

The objective is a surrogate: a geodesic rotation loss plus an L1 translation loss, weighted by trans_weight. Raising that weight fivefold was the single strongest lever found in the ablation, worth +8.3 points, and it composes with a fivefold higher backbone learning rate for +17.1 over the baseline.

For the variant trained on diameter-normalised ADD instead, see jan024/dlrv-ppointnet-exp6. It is more accurate on synthetic data and less accurate on real data.

Usage

The checkpoint is a dict with keys epoch, val_add, backbone and pose_head. Load it with the model definitions from the project repository:

import torch
from pointnet.model import PointNetPlusPlus
from pose.head import PoseEstimationHead

ckpt = torch.load('exp5_combined_best.pth', map_location='cuda')

backbone = PointNetPlusPlus(n_classes=15, n_points=1024).cuda()
backbone.load_state_dict(ckpt['backbone'])

pose_head = PoseEstimationHead(feature_dim=512).cuda()
pose_head.load_state_dict(ckpt['pose_head'])

To reproduce the 36.23% figure end to end:

python -u src/pose/eval_test_set.py \
    --checkpoint exp5_combined_best.pth \
    --data_root /path/to/lm \
    --output_json results.json

Roughly two minutes on an RTX A5000. LineMOD in BOP format is required and is not distributed here; get it from https://bop.felk.cvut.cz/datasets/.

Limitations

  • Trained on synthetic data only. Accuracy falls 21.1 points from synthetic validation to real images, because real depth observations are sparser and more fragmented than rendered ones.
  • Small objects fail badly on real data. The ape scores 14.5%, and its failures are gross rather than marginal.
  • Requires a ground-truth object mask. No detection or segmentation stage is included.
  • Evaluation subsamples the point cloud and the CAD vertices without a seed, so per-object figures move by a few points between runs.
Downloads last month

-

Downloads are not tracked for this model. How to track
Video Preview
loading