Paper · 2024-09-03 · cs.RO, cs.CV
A Modern Take on Visual Relationship Reasoning for Grasp Planning
D3G detects objects with a DETR-style transformer and predicts an adjacency matrix of grasp dependencies between object queries with a dense graph transformer, trained with Hungarian matching and a BCE loss on matched pairs. On the new D3GD bin-picking benchmark it reports the best AP_rel in every synthetic split and 24.44 AP_rel on synth-to-real (author-reported).
Graph transformerScene graph generationBipartite matching for set-prediction lossesObject queries (learned query slots in transformer decoders)grasp-planningrelationship-reasoningbin-pickingtransformerdependency-graph
arXivPDFCodeMarkdown15 min read
AI-compiled by claude-haiku-5-5 on 2026-10-25, not yet reviewed by a human. Every claim cites its source; check it when a detail matters.
In plain words
When a robot takes objects out of a cluttered bin, some items sit on top of others. The top ones have to come out first, or the pile collapses. Knowing which object is blocking which lets a robot plan a safe picking order. Older methods first find the objects and then guess the blocking relations between each pair, using crops of the picture around each pair. In a crowded bin these crops often contain the wrong things.
This card's paper, D3G, does both steps in one network. It looks at the whole picture, proposes a fixed set of object slots, and then fills in a table that says, for every pair of slots, whether one blocks the other. Small graph layers let each pair's answer take the other objects into account. The authors also built a bin-picking test set with many objects per scene and used a relation-level average precision to compare methods. The model has the best relation AP on their synthetic splits and on the real-image split, though not every other metric is best.
TL;DR
D3G is a DETR-style detector whose decoder output is turned into an N x N dependency graph by a dense graph transformer; it is trained with Hungarian matching for the objects and a BCE loss on the matched object pairs. The paper adds D3GD, a bin-picking benchmark built on MetaGraspNetV2 with difficulty splits, and uses Average Precision of Relationships (AP_rel) as the main metric. Relevant if you need object-dependency graphs for picking order in dense clutter. Results are author-reported. Code is MIT-licensed.
Problem
Robot picking in clutter needs a dependency graph: object A must be removed before object B if A rests on B §1 fig. 2. Prior visual manipulation relationship methods (VMRN, GVMRN, GGNN) detect objects first and then encode each pair with object-pair pooling, which crops the feature map on the union of the two boxes §1 §6.1. In dense clutter the crop can be dominated by one object or contain unrelated ones, which causes redundant or missing edges §1. Evaluation in prior work relies on mAP, OR and OP, and OR/OP depend on an object-score threshold that is usually tuned on a validation set §5. The authors also note that existing datasets (VMRD, REGRAD) are simpler than bin scenes: up to 35 objects from 97 classes in MetaGraspNetV2 §3. The paper notes that relations in its data can be annotated exhaustively, unlike Open Images §5.
Method
D3G has three parts. Detection follows DETR §4.1. A graph transformer then works on the N decoder outputs ("object queries") §4.2. A loss matches the queries to ground-truth objects and supervises both the detections and the relations §4.3. Symbols below follow the paper: N queries, P ground-truth objects, F node dimension, S heads, z = F/S, L layers.
Detection (§4.1). An image of size 3 x H0 x W0 goes through a CNN backbone that outputs C = 2048 channels at stride 32. A 1 x 1 convolution reduces the channels to d, and the spatial map is flattened into a sequence. A transformer encoder with positional encodings processes it. A transformer decoder with N learned object queries produces N embeddings, which feed box and class heads §4.1. The paper does not state N or d; the code uses 100 queries and width 256 detr_base.yaml configs.py.
Edges (§4.2). Three learned maps M_h, M_e1, M_e2 turn the N node embeddings into h0 (N x F), e1 and e2. Pairwise concatenation of e1 and e2 gives an N x N x 2F tensor, which M_e halves to F; this gives e0 §4.2. The paper's alternative edge initializers (Hadamard product, sum, difference) are compared in tab. 4. Pairwise concatenation is kept.
Graph transformer layer (§4.2). Each layer has S heads and works like multi-head attention with edge features. For each head, query and key projections of the nodes form a pair score, which is multiplied by an edge projection, giving a pseudo-attention tensor per pair eq. 1. Summing over the z channels and applying a softmax across the first node index gives the attention matrix eq. 2. The new node features are the attention-weighted values of all heads, concatenated and projected eq. 3. The new edge features are the pseudo-attention of all heads, concatenated and projected eq. 4. Both paths then use residual connections, normalization and a feed-forward network. The paper argues that this dense form, with a fixed set of queries, is cheaper than message passing over sparse graphs §4.2.
# Dense graph transformer layer [§4.2] [eq. 1-4]
# Input: nodes (N, F), edges (N, N, F)
# Output: nodes (N, F), edges (N, N, F)
def graph_layer(nodes, edges):
# Per-head pseudo-attention from node pairs and edge features [eq. 1]
for head in range(S):
pair_scores = (
queries[head](nodes) @ keys[head](nodes).T / sqrt(z)
) # (N, N, z) per pair
pseudo_attn[head] = pair_scores * edge_proj[head](edges)
# Normalise across the first node index [eq. 2]
for head in range(S):
attn[head] = softmax(sum_over_z(pseudo_attn[head]), axis=0)
# Node update: attention-weighted values, heads concatenated [eq. 3]
nodes = concat(attn[head] @ values[head](nodes)) @ O_h
# Edge update: pseudo-attention, heads concatenated [eq. 4]
edges = concat(pseudo_attn) @ O_e
# Residual, normalisation and feed-forward [§4.2]
nodes, edges = add_norm_ffn(nodes, edges)
return nodes, edgesEdge read-out (§4.2). After the last layer only the edge output is kept. An MLP maps each edge to one logit, and the N x N logit matrix is the predicted adjacency matrix §4.2.
# D3G forward pass [§4.1] [§4.2]
# Input: image (3, H0, W0)
# Output: class scores and boxes per query; N x N relation logits
def d3g_forward(image):
# Backbone features at stride 32, reduced to d channels [§4.1]
features = conv1x1(backbone(image)) # (d, H, W)
# Encoder over the flattened map, decoder over N learned queries [§4.1]
memory = encoder(flatten(features))
nodes = decoder(object_queries, memory) # (N, F)
class_scores, boxes = detection_heads(nodes)
# Node and edge inputs, then L graph transformer layers [§4.2]
h = map_h(nodes) # (N, F)
edges = map_e(pairwise_concat(map_e1(nodes), map_e2(nodes)))
for layer in graph_layers:
h, edges = layer(h, edges)
# One logit per ordered pair (i, j) [§4.2]
relation_logits = edge_mlp(edges) # (N, N)
return class_scores, boxes, relation_logitsLoss (§4.3). Ground-truth objects are padded with the empty class to N. The Hungarian algorithm finds a one-to-one assignment sigma between queries and objects, minimising a matching cost made of the class probability and a box term that combines L1 and generalized IoU eq. 5 eq. 6. The node loss is the class negative log-likelihood, including the empty class, plus the box loss on matched objects eq. 7. The relation loss first builds a selection matrix T (N x P) that picks the matched queries §4.3. The predicted sub-graph is G-hat = T^T e_pred T eq. 8. The relation loss is a binary cross-entropy over all P x P ordered pairs against the ground-truth matrix G eq. 9. The total loss is node plus relation §4.3. Fig. 4 shows this procedure fig. 4.
# Set loss with a relation term [§4.3] [eq. 5-9]
# Input: class_scores (N, K+1), boxes (N, 4), relation_logits (N, N)
# gt_classes (P,), gt_boxes (P, 4), gt_graph (P, P)
# Output: scalar loss
def d3g_loss(class_scores, boxes, relation_logits, targets):
# One-to-one assignment of queries to objects [eq. 5] [eq. 6]
assignment = hungarian(match_cost(class_scores, boxes, targets))
# Node term: class NLL (empty class included) plus box loss [eq. 7]
node_loss = node_criterion(class_scores, boxes, assignment, targets)
# Selection matrix T (N, P) keeps the matched query pairs [eq. 8]
selection = one_hot_selection(assignment, num_queries, num_objects)
predicted_graph = selection.T @ relation_logits @ selection
# BCE over all P x P ordered pairs [eq. 9]
relation_loss = bce_with_logits(predicted_graph, gt_graph)
return node_loss + relation_lossInference (§5, §4.2). The relation output is thresholded at 0.5 after the sigmoid, which yields the binary adjacency matrix used for OR and OP [code: models/detr_graph.py#L289]. AP_rel sweeps the detection confidence. A triplet counts as true positive when both boxes have IoU above 0.5 with an unmatched ground-truth object and all three labels match §5.
Hyperparameters
Source key: "paper" means stated in the paper; "code" means the official
repository's config or code at code_commit. "not stated" means neither gives
the value.
| Name | Value | Where | Notes |
|---|---|---|---|
| backbone | ResNet-50 | §6.1 detr_base.yaml | paper: ResNet50 for all compared models |
| backbone output C | 2048 | §4.1 | stride 32 |
| backbone LR multiplier | 0.1 | detr_base.yaml | code only |
| number of object queries N | 100 | detr_base.yaml | paper: "exceed the max number of objects" (35), exact N not stated |
| transformer d_model | 256 | configs.py | paper does not state d |
| encoder / decoder layers | 6 / 6 | configs.py | paper: not stated |
| heads (DETR attention) | 8 | configs.py | paper: not stated |
| FFN width (DETR) | 2048 | configs.py | Deformable DETR config uses 1024 def_detr_graphdense.yaml |
| dropout | 0.1 | configs.py | paper: not stated |
| graph layers L | 2 | §6.4 tab. 5 detr_graphdense.yaml | selected by authors |
| graph heads S | 2 | §6.4 tab. 5 detr_graphdense.yaml | selected by authors |
| graph node dim F | 256 | detr_graphdense.yaml | paper: not stated |
| per-head dim z | 128 | derived: F / S | |
| edge init | pairwise concatenation | §6.4 tab. 4 | |
| graph FFN width | 512 | graph_transformer_dense.py | 2F; paper: not stated |
| relation MLP | 3 layers, hidden 128, output 1 | detr_gheads.py | |
| attention score clamp | [-5, 5] | graph_transformer_dense.py | not in paper |
| matching cost weights | class 1, L1 5, GIoU 2 | detr_graph.py detr_base.yaml | paper: weights not stated |
| no-object weight | 0.1 | configs.py | paper: not stated |
| relation loss weight | 1.0 | configs.py | paper: equal weight (L_tot = L_node + L_rel) §4.3 |
| optimizer | AdamW | §6.2 detr_graphdense.yaml | |
| weight decay | 1e-4 | detr_graphdense.yaml | paper: not stated |
| batch size | 32 | detr_graphdense.yaml | paper: not stated |
| pretraining (detection) | 60,000 iterations, LR 6e-4, warmup 1000, cosine to 1e-8 | detr_pretrain.yaml | paper: "about 18 epochs" for DETR-based models §6.2 |
| relation training | 30,000 iterations, LR 5e-4, warmup 100, cosine to 1e-8 | detr_graphdense.yaml | paper: 6 epochs, "lower learning rate" for detection, value not stated |
| gradient clipping | full model, norm 2.0, value 0.01 | detr_graphdense.yaml | paper: not stated |
| mixed precision | enabled | detr_graphdense.yaml | |
| augmentation (v3) | brightness 0.9–1.1, horizontal flip p=0.5, saturation 0.9–1.1, contrast 0.9–1.1 | §6.2 augmentations.py | v3 also resizes to img_size (default 512x512) |
| train/eval/test split | 80:10:10 | §3 | |
| real-image test set | 743 images after filtering | §3 | |
| hardware | 1 x NVIDIA A100 (40 GB) | §6.2 |
Results
Author-reported. Setup: the D3GD testbed built on MetaGraspNetV2 (synthetic scenes plus 743 real test images), compared against VMRN, GVMRN and GGNN (all Mask-RCNN ResNet-50) and EGTR (deformable DETR) §6.1 §6.3.
Benchmark splits and statistics
Splits are defined by object count and two clutter measures tab. 1:
| Set | # Objects | Relative clutter width | Clutter depth | # Samples |
|---|---|---|---|---|
| Trivial | < 3 | >= 0 | >= 1 | 90798 |
| Easy | >= 3 | >= 0 | >= 1 | 186998 |
| Medium | >= 6 | > 0.4 | >= 3 | 13616 |
| Hard | >= 10 | > 0.5 | >= 4 | 4884 |
The paper drops Trivial and evaluates Easy, Medium and Hard §3. Average statistics against VMRD and REGRAD tab. 2:
| Dataset | Data | Avg. #Rel | Avg. #Objs | Clutter depth | Clutter width |
|---|---|---|---|---|---|
| VMRD Train | Real | 2.39 | 3.45 | 2.48 | 3.34 |
| VMRD Test | Real | 2.35 | 3.40 | 2.44 | 3.28 |
| REGRAD Train | Synt | 2.72 | 9.43 | 1.64 | 1.79 |
| REGRAD Test | Synt | 2.77 | 9.54 | 1.65 | 1.79 |
| D3GD Train | Synt | 4.04 | 5.42 | 2.60 | 3.49 |
| D3GD Test Easy | Synt | 2.89 | 4.89 | 2.41 | 2.84 |
| D3GD Test Medium | Synt | 14.33 | 10.51 | 4.39 | 9.20 |
| D3GD Test Hard | Synt | 30.40 | 16.05 | 4.46 | 15.05 |
| D3GD Test Real | Real | 2.58 | 3.70 | 1.09 | 2.23 |
D3GD results (synthetic and synth-to-real)
Metrics: mAP (COCO-style, detection), AP_rel, OR and OP. Higher is better. Best per column is bold in the paper; here the paper's values are reproduced without emphasis tab. 3.
| Split | Method | Detector | mAP | AP_rel | OR | OP |
|---|---|---|---|---|---|---|
| Synth Easy | VMRN | Mask-RCNN | 86.96 | 73.29 | 88.76 | 86.12 |
| Synth Easy | GVMRN | Mask-RCNN | 86.39 | 57.22 | 83.27 | 80.58 |
| Synth Easy | GGNN | Mask-RCNN | 86.31 | 70.51 | 87.41 | 84.15 |
| Synth Easy | EGTR | Def. DETR | 84.23 | 52.47 | 79.28 | 78.20 |
| Synth Easy | D3G | DETR | 83.22 | 76.27 | 89.57 | 88.64 |
| Synth Easy | D3G | Def. DETR | 87.68 | 76.96 | 87.42 | 90.66 |
| Synth Medium | VMRN | Mask-RCNN | 75.20 | 54.97 | 70.22 | 71.86 |
| Synth Medium | GVMRN | Mask-RCNN | 74.03 | 34.89 | 62.63 | 63.30 |
| Synth Medium | GGNN | Mask-RCNN | 74.19 | 51.43 | 68.04 | 69.39 |
| Synth Medium | EGTR | Def. DETR | 75.37 | 33.13 | 61.33 | 70.11 |
| Synth Medium | D3G | DETR | 70.92 | 58.65 | 72.86 | 71.58 |
| Synth Medium | D3G | Def. DETR | 74.84 | 60.81 | 66.91 | 77.98 |
| Synth Hard | VMRN | Mask-RCNN | 67.36 | 42.49 | 62.26 | 71.58 |
| Synth Hard | GVMRN | Mask-RCNN | 66.05 | 21.54 | 54.34 | 60.50 |
| Synth Hard | GGNN | Mask-RCNN | 66.02 | 37.52 | 59.11 | 68.58 |
| Synth Hard | EGTR | Def. DETR | 66.66 | 22.72 | 48.07 | 73.38 |
| Synth Hard | D3G | DETR | 60.25 | 43.99 | 63.71 | 57.85 |
| Synth Hard | D3G | Def. DETR | 65.92 | 46.45 | 51.69 | 85.18 |
| Synth-to-Real | VMRN | Mask-RCNN | 45.04 | 13.36 | 49.70 | 10.20 |
| Synth-to-Real | GVMRN | Mask-RCNN | 43.76 | 7.62 | 49.39 | 10.30 |
| Synth-to-Real | GGNN | Mask-RCNN | 44.50 | 10.55 | 39.03 | 7.11 |
| Synth-to-Real | EGTR | Def. DETR | 56.36 | 15.11 | 56.25 | 48.88 |
| Synth-to-Real | D3G | DETR | 55.93 | 24.44 | 41.11 | 51.36 |
| Synth-to-Real | D3G | Def. DETR | 56.14 | 22.38 | 33.70 | 38.90 |
Headline numbers from the text §6.3: D3G (Def. DETR) reaches 76.96 AP_rel on Synth Easy and 46.45 on Synth Hard; D3G (DETR) reaches 24.44 AP_rel synth-to-real, against 13.36 for VMRN. The paper notes that the synth-to-real OR and OP numbers vary a lot because no validation set is available to tune the score threshold §6.3.
Design choices (synthetic, AP_rel)
Edge initialisation tab. 4:
| e0 init. | Easy | Medium | Hard | Real |
|---|---|---|---|---|
| Hadamard product | 76.20 | 58.93 | 44.23 | 24.09 |
| Sum | 75.96 | 59.51 | 43.61 | 21.45 |
| Difference | 76.42 | 59.81 | 44.41 | 23.59 |
| Pairwise concatenation (chosen) | 76.27 | 58.65 | 43.99 | 24.44 |
Graph transformer size tab. 5:
| Config | # Params | Easy | Medium | Hard | Real |
|---|---|---|---|---|---|
| S=2, L=1 | 0.921M | 76.26 | 58.08 | 44.30 | 25.32 |
| S=2, L=2 (chosen) | 1.84M | 76.77 | 58.65 | 43.99 | 24.44 |
| S=2, L=4 | 3.68M | 76.06 | 59.32 | 44.25 | 25.37 |
| S=4, L=1 | 0.921M | 76.40 | 60.00 | 45.27 | 23.18 |
| S=4, L=2 | 1.84M | 76.10 | 54.84 | 44.17 | 24.66 |
| S=4, L=4 | 3.68M | 73.38 | 57.68 | 50.31 | 24.32 |
The S=2, L=2 Easy value here (76.77) differs from the 76.27 in tab. 3 and tab. 4 for the same configuration. See Pitfalls.
VMRD (standard benchmark)
Results on VMRD with PascalVOC mAP tab. 6 §6.5. Time is in ms on a 2080Ti for D3G; competitor times are as claimed in their own papers §6.5.
| Model | mAP (voc) | OR | OP | IA | Time (ms) |
|---|---|---|---|---|---|
| VMRN | 95.40 | 85.40 | 85.50 | 65.80 | 10 |
| GVMRN | 95.40 | 87.40 | 87.90 | 69.30 | 67 |
| GGNN | 96.40 | 90.09 | 88.01 | 75.33 | 130 |
| D3G | 96.50 | 88.88 | 91.12 | 78.33 | 49 |
| D3G-Deformable | 96.66 | 89.64 | 90.00 | 77.55 | 87 |
IA is the fraction of dependency graphs reconstructed completely §6.5.
Paper vs code
Code: github.com/paolotron/D3G at commit dc21f2065c6a61cb5b41b9fb05acb90187f72871,
MIT License, copyright Paolo Rabino (an author). The repository was cloned to
raw/code/2409.02035. The discrepancies below were checked against that
commit.
- Relation loss scale. Paper: sum over all P x P pairs of BCE eq. 9. Code: mean BCE over the matrix, multiplied by the number of matched GT nodes, which is sum divided by that number, per image and then averaged over the batch detr_graph.py detr_graph.py detr_graph.py. An implementation that follows eq. 9 literally will use a different loss scale than the released code.
- Relation loss on every decoder layer. Paper: L_tot = L_node + L_rel, one relation term §4.3. Code: with deep supervision the graph loss is also computed on each auxiliary decoder layer and stored under keys with a layer suffix detr.py. Those keys are not in the weight dictionary, so they are not scaled by the weight table [code: models/detr_graph.py#L226-L234]. The detectron2 trainer sums the returned values, which would make the relation loss a sum over all decoder layers. This is inferred from detectron2's usual behaviour; detectron2 is not in the repository, so it was not checked here.
- Loss weights. Paper: no weights given §4.3. Code: matching and classification weights 1 / 5 (L1) / 2 (GIoU), no-object weight 0.1, relation weight 1.0 detr_graph.py configs.py configs.py.
- Edge adapters. Paper: M_e halves the 2F concatenation to F §4.2. Code: the two edge projections map directly to F/2 each, and their concatenation is already F wide; there is no separate M_e detr_gheads.py detr_gheads.py.
- Attention details not in the paper. Code clamps the summed scores to [-5, 5] before the softmax graph_transformer_dense.py. Edge and node update use LayerNorm after the residual in the head [code: models/detr_gheads.py#L94] graph_transformer_dense.py.
- Training schedule. Paper: detection to convergence (about 18 epochs for DETR-based models), then relation training with detection fine-tuned at a lower learning rate for 6 epochs §6.2. Code: detection pretraining for 60,000 iterations at LR 6e-4 detr_pretrain.yaml; relation training for 30,000 iterations at LR 5e-4 from that checkpoint, with all parameters trainable detr_graphdense.yaml. The option to freeze detection and train only the graph head (FINETUNE_GHEAD) exists, but it defaults to False and is not set in the relation configs configs.py detr_graph.py. No two-phase schedule with its own epochs appears in the configs. The paper's epoch counts cannot be converted to iterations because the training-set size is not stated.
- Augmentation. Paper: random flip, brightness, contrast and saturation §6.2. Code (v3): the same four operations with ranges 0.9–1.1, followed by a resize to the transform's image size (default 512 x 512) [code: data/augmentations.py#L112-L119]. The base config also lists multi-scale training sizes and a crop detr_base.yaml; which of these applies to the relation runs was not traced.
- Ground-truth graph. The dense target is the transpose of the stored dependency matrix, multiplied by -1 metagraspnet_synth_mapper.py. The paper defines G_ij with direction (G_ij != G_ji) §4.3. The code convention is the one to follow; check it against the stored graphs before relying on it.
- Deformable variant loss. The deformable graph model divides the relation loss by the batch size without applying the graph weight [code: models/deformable_detr_graph.py#L499]. The DETR variant does apply it.
- README. The README example names configs/detr_graphdense_medium.yaml, which is not in configs/ README.md.
No discrepancies were found for the graph head width (256), heads (2) and layers (2) detr_graphdense.yaml, which match the paper's choices §6.4.
Pitfalls
- Loss scale is ambiguous. Eq. 9 and the released code give different relation-loss magnitudes (see Paper vs code). Choose one and document it.
- Edge direction and labels. The paper's OR and OP text describes three relation labels (in, out, no relation) §5, but the model predicts one logit per ordered pair. Direction comes from the (i, j) and (j, i) entries. Cross-check the sign and transpose convention of the ground truth against the code metagraspnet_synth_mapper.py.
- Relations are hard decisions. The relation output is thresholded at 0.5 after the sigmoid detr_graph.py. AP_rel then sweeps only the detection confidence, with a constant score for the relation [code: metrics/calculate_ap_results.py#L13]. The paper calls AP_rel "threshold-free" §5, which holds only for the detection-confidence sweep. The relation threshold stays fixed and affects OR and OP.
- Quadratic memory. Each graph layer holds an N x N x F edge tensor per sample. With the released settings (N = 100, F = 256, batch 32), that is about 8.2e7 values per tensor, roughly 330 MB in fp32 before intermediate copies for backward. The per-head pseudo-attention adds more [code: configs/detr_graphdense.yaml#L15-L21]. The paper's efficiency claim §4.2 is for compute, not memory; mixed precision is enabled in the config.
- Softmax axis. The paper says column-wise softmax §4.2. The code applies softmax over the first node index of the pair tensor and then contracts over the second index graph_transformer_dense.py. Implement it the way the code does, or verify the intended axis against the paper's figure.
- Unmatched queries. Training supervises only the P x P sub-matrix of matched queries §4.3. At inference, relations are read for all N queries, including those with low object scores detr_graph.py.
- Hidden choices. The paper does not state N, d, batch size, learning rates, loss weights, number of encoder and decoder layers, or the cost weights. The values in Hyperparameters come from the code. They are not the paper's stated values.
- Synth-to-real. No validation set exists in this setting, so the score threshold cannot be tuned for OR and OP; treat those numbers as unstable §6.3.
- Timing. Competitor inference times come from their own papers and were not measured on the same hardware §6.5.
- Table and equation numbers. Numbers were assigned in source order, not checked against the compiled PDF. Equation numbers were counted from the LaTeX source (nine numbered equations). Verify against the paper before citing elsewhere.
- Internal inconsistency. The S=2, L=2 Easy AP_rel is 76.77 in tab. 5 but 76.27 in tab. 3 and tab. 4. The other columns agree. Treat the Easy value as uncertain.
Lineage
- Builds on: DETR for the detection transformer and set prediction §4.1; the graph transformer of Dwivedi and Bresson, "A Generalization of Transformer Networks to Graphs" (arXiv id not given in the source) §4.2; Deformable DETR as an alternative detector §6.1.
- Compared against: VMRN, GVMRN and GGNN (object pair pooling with Mask-RCNN) and EGTR (scene-graph generation from a deformable DETR decoder) §6.1.
- Benchmark: built on MetaGraspNetV2 §3; the paper names VMRD and REGRAD as earlier datasets §3.
- Superseded by: not known from this wiki.
Source and license
Adapted from “A Modern Take on Visual Relationship Reasoning for Grasp Planning” by Paolo Rabino, Tatiana Tommasi (arXiv:2409.02035), used under CC BY 4.0. Changes: condensed and restructured for implementation, with tables, equations and algorithms taken from the paper and its code, each cited to its source. Not affiliated with or endorsed by the authors. Code citations refer to https://github.com/paolotron/D3G at commit dc21f2065c6a (MIT). Any quoted code is shown under that license.