Skip to content

feat: add JointProofreader and NewVisionHGAT models; fix split_datase… - #787

Open
anna-grim wants to merge 4 commits into
mainfrom
feat-joint-training
Open

anna-grim wants to merge 4 commits into
mainfrom
feat-joint-training

Conversation

@anna-grim

Copy link
Copy Markdown
Collaborator

…ts GCS calls

  • models/joint_model.py: JointProofreader with shared CNN3D backbone, Arborist merge head, and HGAT split head; routes batches by task at forward time
  • models/new_gnn_models.py: NewVisionHGAT for standalone split correction
  • split_datasets.py: replace list_gcs_subdirectories(bucket, prefix) calls with list_gcs_subprefixes(full_gcs_path) to match the current util API

Anna Grim and others added 4 commits September 25, 2026 22:14
…ts GCS calls

- models/joint_model.py: JointProofreader with shared CNN3D backbone, Arborist
  merge head, and HGAT split head; routes batches by task at forward time
- models/new_gnn_models.py: NewVisionHGAT for standalone split correction
- split_datasets.py: replace list_gcs_subdirectories(bucket, prefix) calls with
  list_gcs_subprefixes(full_gcs_path) to match the current util API

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Decouples split head dropout from merge head dropout so each task can
be regularized independently. split_dropout defaults to dropout when
None for backward compatibility.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
… fixes

- models/joint_model.py: add JointProofreader (joint split+merge model with
  shared CNN3D backbone, Arborist merge head, and 3-layer HGAT split head)
- models/new_gnn_models.py: add gat3 (3rd HGAT layer), bump gnn_hidden_dim
  and img_embed_dim defaults 64→96, add ProposalTreeEncoder
- split_proofreading/new_split_feature_extraction.py: add ArboristSplitDataset
  (prefetched iterator with Arborist tree features alongside image patches)
- split_proofreading/split_inference.py: route to ArboristSplitDataset when
  use_tree_features=True (required by JointProofreader split head)
- configs.py: add fov_merge to ImageConfig (load at fov, resize to patch_shape
  for merge detection); add modality to MergeInferenceConfig; add
  model_config_path and use_tree_features to SplitInferenceConfig; add
  keys/__getitem__ to Config base class
- machine_learning/image_dataloader.py: DetectionPatchLoader loads at
  fov_merge when set, then resizes to patch_shape before returning
- machine_learning/train.py: add n_mistake_mips reservoir-sampled mistake MIP
  saving per val epoch
- utils/img_util.py: cast img to float32 before np.percentile to fix NaN on
  float16 arrays (all-white MIP bug)
- merge_proofreading/search_datasets.py: fix subgraph_to_tree_sample root arg
- proofreading_pipeline.py: pass modality and use_tree_features from configs
- proposal_graph.py: accept **kwargs in __init__ for forward-compat
- utils/geometry_util.py: guard is_double against empty query_nodes

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…eEncoder

Within a batch subgraph, proposals in the same local neighborhood share
many of the same surrounding skeleton paths as curves. Previously,
arborist.encode() was called once per proposal, causing CurveEncoder to
re-encode shared curves redundantly.

The fix deduplicates curves across all proposals using (shape, bytes) as
the key, runs CurveEncoder once on all unique curves, then does a
per-sample GraphTransformer pass (which must remain per-sample since each
proposal has a unique tree topology/edge_index).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant