Ground truth labeling pipeline #9

Closed
opened 2026-02-02 19:33:37 +00:00 by forbes · 0 comments
Owner

Summary

Implement the ground truth labeling pipeline for synthetic assemblies. Per Phase 1.3 of the repository plan. This extends the existing per-edge independence labels with richer per-joint, per-body, and assembly-level labels needed for multi-task GNN training.

Labels to produce

Per-joint labels

  • Independence: binary per scalar constraint (already exists from pebble game)
  • Jacobian rank verification: per-joint numerical independence check for geometric special cases
  • Joint-level summary: independent_constraints, redundant_constraints, total_constraints (already in generate_training_batch)

Assembly-level labels

  • Classification: rigid, minimally rigid, underconstrained, overconstrained, mixed
  • Total DOF: both combinatorial and Jacobian-verified
  • Redundant count: number of redundant scalar constraints
  • Geometric degeneracy count: combinatorial independent - Jacobian rank

DOF signature per body

  • Remaining translational DOF (0-3) per body
  • Remaining rotational DOF (0-3) per body
  • Requires per-body DOF analysis — extend PebbleGame3D or JacobianVerifier with per-body nullspace projection

Disagreement flag

  • Boolean flag per assembly: pebble game and Jacobian disagree on independence count
  • These assemblies contain geometric degeneracies and are high-value training examples
  • Should be oversampled during training

Output format

{
    "per_constraint": [{"joint_id": int, "constraint_idx": int, "pebble_independent": bool, "jacobian_independent": bool}],
    "per_joint": [{"joint_id": int, "independent_count": int, "redundant_count": int, "total": int}],
    "per_body": [{"body_id": int, "translational_dof": int, "rotational_dof": int}],
    "assembly": {"classification": str, "total_dof": int, "redundant_count": int, "is_rigid": bool, "is_minimally_rigid": bool, "has_degeneracy": bool}
}

Requirements

  • solver/datagen/labeling.py with label_assembly(bodies, joints, ground_body) -> AssemblyLabels
  • Per-body DOF signature computation
  • Disagreement flag between pebble game and Jacobian
  • Serializable output (dict/JSON-compatible)
  • Integrate into SyntheticAssemblyGenerator.generate_training_batch()

Depends on

  • #2 (PebbleGame3D)
  • #3 (JacobianVerifier)
  • #4 (analyze_assembly)
## Summary Implement the ground truth labeling pipeline for synthetic assemblies. Per Phase 1.3 of the repository plan. This extends the existing per-edge independence labels with richer per-joint, per-body, and assembly-level labels needed for multi-task GNN training. ## Labels to produce ### Per-joint labels - **Independence**: binary per scalar constraint (already exists from pebble game) - **Jacobian rank verification**: per-joint numerical independence check for geometric special cases - **Joint-level summary**: independent_constraints, redundant_constraints, total_constraints (already in `generate_training_batch`) ### Assembly-level labels - **Classification**: rigid, minimally rigid, underconstrained, overconstrained, mixed - **Total DOF**: both combinatorial and Jacobian-verified - **Redundant count**: number of redundant scalar constraints - **Geometric degeneracy count**: combinatorial independent - Jacobian rank ### DOF signature per body - Remaining translational DOF (0-3) per body - Remaining rotational DOF (0-3) per body - Requires per-body DOF analysis — extend `PebbleGame3D` or `JacobianVerifier` with per-body nullspace projection ### Disagreement flag - Boolean flag per assembly: pebble game and Jacobian disagree on independence count - These assemblies contain geometric degeneracies and are high-value training examples - Should be oversampled during training ## Output format ```python { "per_constraint": [{"joint_id": int, "constraint_idx": int, "pebble_independent": bool, "jacobian_independent": bool}], "per_joint": [{"joint_id": int, "independent_count": int, "redundant_count": int, "total": int}], "per_body": [{"body_id": int, "translational_dof": int, "rotational_dof": int}], "assembly": {"classification": str, "total_dof": int, "redundant_count": int, "is_rigid": bool, "is_minimally_rigid": bool, "has_degeneracy": bool} } ``` ## Requirements - [ ] `solver/datagen/labeling.py` with `label_assembly(bodies, joints, ground_body) -> AssemblyLabels` - [ ] Per-body DOF signature computation - [ ] Disagreement flag between pebble game and Jacobian - [ ] Serializable output (dict/JSON-compatible) - [ ] Integrate into `SyntheticAssemblyGenerator.generate_training_batch()` ## Depends on - #2 (PebbleGame3D) - #3 (JacobianVerifier) - #4 (analyze_assembly)
forbes added the phase:1feature labels 2026-02-02 19:33:37 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: kindred/solver#9