# Phase2 OT / Collapse Diagnostics

- Sample: `#73 PartNetMobility / electronics`
- Reference parts/joints: `31` / `30`
- VLM: disabled.

| Variant | Requested parts | Stage1 nonempty | Exported parts | Empty Stage1 parts |
| --- | ---: | ---: | ---: | --- |
| Official PAct | 7 | 7 | 2 | - |
| Phase2 RGB edge + dropout | 7 | 7 | 2 | - |


## Hard-5 Input Cardinality Check

| # | Dataset | Category | Reference parts | EXR positive labels |
| ---: | --- | --- | ---: | ---: |
| 0 | ArtVIP | major_appliances | 7 | 2 |
| 4 | GAPartNet | small_appliances | 12 | 12 |
| 26 | GAPartNet | electronics | 21 | 21 |
| 73 | PartNetMobility | electronics | 31 | 7 |
| 97 | PartNetMobility | major_appliances | 6 | 3 |

This shows the pre-model 2D condition is already under-counting several hard samples, especially PartNetMobility #73 and #97.

## Heatmaps



## Interpretation

- The reference has 31 parts, but the PAct input reader requests only 7 parts for this sample. This means the first collapse happens before Stage1, in the 2D mask/input-conditioning path.
- Stage1 itself keeps all 7 requested parts nonempty for both Official PAct and Phase2 RGB edge + dropout.
- The exported object has only 2 parts, so a second collapse happens after Stage1, in the Stage2/mesh-export side of the pipeline.
- The OT snapshot is weakly localized: row-normalized plan entropy is high and top-10 patch mass is low, so the current OT gate is not producing a crisp one-part-to-one-region assignment.
- This diagnostic run also confirms that the current inference wrapper cannot use true RGB edge maps yet; with `--ot-edge-source rgb`, edge delta is 0.0 unless raw RGB-derived edge values are explicitly supplied to the routing context.

collapse_diagnostics.json ยท Phase2 hard5 eval