Fixes and improvements

April 20, 2026 · View on GitHub

This note tracks fixes and improvements we are rolling into the released code and models.

2026-04-16

The changes below make the released models more robust for in-the-wild use. Please use interactvlm-3d-hcontact-damon-fix for DAMON 3D human-contact evaluation from this point on; the numbers below are produced by this model. An arXiv update with the new numbers and re-releases of the other Model Zoo entries are on the way.

  • Validation inference mode. evaluate.py now defaults to autoregressive generate mode. The previous forward path (from LISA) used teacher forcing, where body-part tokens were included in the prompt while producing [SEG]. In generate mode, the model must generate body parts before [SEG], matching test-time usage. Thanks to Ha Linh Nguyen for first reporting this issue.

  • Body-part dropout during training (hC_body_part_dropout_prob). Training still uses teacher forcing, which creates a mismatch with generate inference. To reduce this gap, we drop body-part tokens with probability p by switching from the parts template to the simple template. This forces the model to predict masks from visual evidence alone in a subset of updates, improving generalization.

  • Improved per-view GT contact masks (mv2). generate_damon_human_mask.py now supports --min_vertices 2 (previously 3), and DAMON training uses the 4MV-Z_Vitru_mv2 view set. A contact triangle is retained if at least two vertices project inside the silhouette, instead of all three. This stabilizes boundary regions. The overall gain is modest; masks from the previous version remain usable.

  • 3D contact predictor. HumanContact3DPredictor now aggregates views with a soft sigmoid and barycentric-weighted scatter, restoring gradient flow through the 2D→3D step. The previous hard-threshold version was effectively detached.

  • Loss cleanups. compute_dice_loss no longer returns early on empty-GT views, and HumanContact3DLoss clamps its inputs before BCE.

  • Binary contact metric threshold. get_damon_binary_contact now thresholds predictions at 0.5 before forming the per-image union.

Updated DAMON numbers

Two models are released with this update, both evaluated on the full DAMON test split (1370 samples) with inference_type=generate and threshold 0.5:

Binary contact (per-image)

ModelF1PrecisionRecall
interactvlm-3d-hcontact-damon-fix70.3267.9178.91
interactvlm-3d-hcontact-damon-noParts64.4667.3468.31

Semantic contact (per-object)

Category # samples with body parts (damon-fix) without body parts (damon-noParts)
F1PrecisionRecall F1PrecisionRecall
transport8772.2567.8482.3670.3570.4976.97
sports30572.4471.2081.4766.6469.1671.84
kitchen3865.3562.1275.3157.3257.0464.85
food3262.0557.6176.6756.0852.3570.82
accessory4760.3456.1570.0546.4547.6551.32
furniture14658.9054.0472.8745.0457.5942.78
everyday-objects17454.9853.6263.4252.1750.4564.20
supporting54168.8467.4376.7865.2367.1470.17
DAMON (weighted)137066.4964.3575.7960.9863.3766.52

Please use these numbers for any comparison against InteractVLM on DAMON.