Scene encoders¶
--set backbone=47 optionsThe scene encoder is the first learned stage of a seed-based method: it turns the point cloud of one depth view into one feature vector per point. Its reach and resolution decide what a seed knows about its surroundings before any crop is taken.
Use it¶
grasppanda compose graspnet_baseline/graspnet-baseline_pointnet2_g1b-realsense_18e \
--set backbone=ptv3 -o graspnet-baseline_ptv3.yaml
grasppanda compose graspnet_baseline/graspnet-baseline_pointnet2_g1b-realsense_18e --list backbone
grasppanda compose gsnet/gsnet_sunet14_g1b-realsense_10e \
--set backbone=ptv3 -o gsnet_ptv3.yaml
grasppanda compose gsnet/gsnet_sunet14_g1b-realsense_10e --list backbone
grasppanda compose scale_balanced_grasp/sbg_pointnet2-transformer_g1b-realsense_18e \
--set backbone=ptv3 -o scale-balanced-grasp_ptv3.yaml
grasppanda compose scale_balanced_grasp/sbg_pointnet2-transformer_g1b-realsense_18e --list backbone
grasppanda compose economicgrasp/economicgrasp_sunet14_g1b-realsense_10e \
--set backbone=ptv3 -o economicgrasp_ptv3.yaml
grasppanda compose economicgrasp/economicgrasp_sunet14_g1b-realsense_10e --list backbone
grasppanda compose finegrasp/finegrasp_sunet14_g1b-realsense_10e \
--set backbone=ptv3 -o finegrasp_ptv3.yaml
grasppanda compose finegrasp/finegrasp_sunet14_g1b-realsense_10e --list backbone
The first command writes a checked config; the second lists every option of the slot under that method, with what was measured. Then grasppanda probe <file> tries the config on real frames and grasppanda train <file> trains it (Swap a component). Each method page lists the same: GraspNet-baseline · GSNet · Scale-Balanced-Grasp · EconomicGrasp · FineGrasp.
Options¶
The encoders are split by family over three pages; this table says which page lists which.
A probe shows that a combination trains on real frames of GraspNet-1Billion, not how good it is. Accuracy is claimed only for a method trained and evaluated here.
| Page | Options | Encoders |
|---|---|---|
| Scene encoders: point-based networks | 23 | assanet, dela, dgcnn, dgcnn-static, pointmetabase, pointmetabase-xl, pointmlp, pointnet2, pointnet2-dense, pointnet2-msg, pointnet2-msg-dense, pointnet2-transformer, pointnext, pointnext-b, pointnext-l, pointnext-xl, pointvector, pointvector-xl, pyg-edgeconv, pyg-point-transformer, pyg-pointgnn, pyg-pointnet, randlanet |
| Scene encoders: sparse-voxel networks | 8 | minkunet18a, minkunet18a-openscene, minkunet34c, minkunet34c-pointcontrast, oacnns, sparse-unet14, spunet, spunet-gaussiancross |
| Scene encoders: transformers and sequence models | 16 | litept, litept-structured3d, octformer, point-mamba, point-transformer-v1, point-transformer-v2, point-vit, ptv3, ptv3-encoder, ptv3-ppt, ptv3-scannet200, ptv3-sonata, ptv3-sonata-small, ptv3-utonia, uni3d, volt |
The adapters and point painting: options with no probe of their own.
What the columns say, and who is left out
- Runs: out of the methods the option is a swap under, those under which its probe trained on real frames without error. A method that ships the option is named own and not counted; a method still undecided is counted and named. Measured on 20 training iterations on 8 RealSense frames of GraspNet-1Billion (one scene), seed 0, one run per cell; nothing was measured on GraspClutter6D or on Kinect frames.
- How we measure defines every word of these columns.
Who is left out, and why:
feature-propagation, runs: an adapter: compose inserts it where the next stage needs it, so it is measured inside the cells it was inserted in; inserted in 65 cells (43 runs, 18 runs-empty, 4 refused).furthest-point-subsample, runs: an adapter: compose inserts it where the next stage needs it, so it is measured inside the cells it was inserted in; inserted in 90 cells (54 runs, 36 runs-empty).image-painted, runs: point painting: a wrapper written into a config by hand (compose does not write it); no probe record.image-painted-subsampled, runs: point painting: a wrapper written into a config by hand (compose does not write it); no probe record.
Sources and licences
Code base: the upstream repository, commit and licence that THIRD_PARTY_NOTICES.md lists for the class's file (code adapted from it, or a module tree that follows it so that its weights load); written here: no third-party code. Extra: the optional install the class needs (every extra). Output: where the features live and how many channels the preset returns; compose sets a free out_channels to the width the method's other stages need. Released weights carry licences of their own.
| Class | Options | Work | Code base | Extra | Output |
|---|---|---|---|---|---|
FeaturePropagation |
feature-propagation |
PointNet++ feature propagation (Qi et al., NeurIPS 2017) | written here | — | dense · 256 |
FurthestPointSubsample |
furthest-point-subsample |
PointNet++ furthest point sampling (Qi et al., NeurIPS 2017) | written here | — | subsampled, 1024 points · the width of the encoder it wraps |
ImagePainted |
image-painted |
PointPainting (Vora et al., CVPR 2020), PointAugmenting (Wang et al., CVPR 2021) | written here | — | dense · 512 |
ImagePaintedSubsampled |
image-painted-subsampled |
PointPainting (Vora et al., CVPR 2020), PointAugmenting (Wang et al., CVPR 2021) | written here | — | subsampled, 1024 points · 256 |
Choosing¶
- Change as little as possible: an encoder of the kind the method has needs no adapter.
Otherwise compose inserts
FeaturePropagationorFurthestPointSubsampleand says so. - The width: compose sets
out_channelsto the width of the encoder it replaces where the encoder has that option, so the other stages keep theirs. - Room-scale settings: most of these networks were published for rooms or streets. The presets restate radii and grids for a table top by analogy; they are starting points, not tuned values.
- Released weights are an initialisation trained on other data, often under their own licence; each family page lists the files that load and what does not.
- Optional libraries: a config that names a missing library passes the config check and stops when the model is built, with the install line.
Details¶
Input and output
class Backbone(nn.Module): # grasppanda/models/base.py
output: "dense" | "subsampled" # where the returned features live
in_channels: int
out_channels: int
def forward(self, points: PointSet, feats: Tensor) -> PointFeatures: ...
points |
coords (N, 3) in metres in the camera frame, all clouds of the batch concatenated with batch offsets; a table-top view has 15 000 to 20 000 points about 5 mm apart. |
feats |
(N, in_channels): constant ones, coordinates and normals, or nothing, as the method feeds; compose sets in_channels to match. |
output dense |
one feature per input point, bound to the same point set. |
output subsampled |
features on a sub-sample, the same number for every cloud of the batch; those points become the seeds. |
out_channels |
the width of the features, injected into the proposal, the view stage and the grouper. |
Three contracts tie an encoder to its neighbours; grasppanda compose resolves each or
refuses with the fix:
- Where the features live. A proposal requires
denseorsubsampledfeatures; for the other kind compose wraps the encoder in an adapter and says so. - The point features. Compose sets the encoder's
in_channelsto what the method feeds. - The width. An encoder declares the width it returns, a grouper the width it needs, and the config check compares them without building anything. Under Scale-Balanced-Grasp a fixed width gets the projected grouper (Grouper, "The width of the seed features").
No contract checks the unit of length: the header of every preset says what its radii and grids were derived from.
Probing under Scale-Balanced-Grasp
A probe of Scale-Balanced-Grasp needs the reference's width histogram, which cannot be
built from the eight frames of a probe; without it the probe ends as wired (a synthetic
scene). Import the file once (configs/scale_balanced_grasp/README.md), then:
grasppanda probe <config> --opts data.train.dataset.scale_statistic.source=legacy_import \
data.train.dataset.scale_statistic.reference_sha256=<SHA-256 of the reference's file>
Scene encoders checked against the code their authors published (PTv3 and its variants, LitePT, PointNet2) are on Encoders checked against their authors' code.