| # S23DR 2026 β WireframeDETR |
|
|
| Submission to the [S23DR 2026 Challenge](https://huggingface.co/spaces/usm3d/S23DR2026). |
|
|
| **Public test HSS: 0.575** (F1=0.664, IoU=0.516) |
|
|
| > This project was built on Modal GPU credits left over from a previous hackathon. Each run took hours, so the budget kept experiments deliberate. Several training configurations were explored, but a full factorial study of every contribution wasn't feasible. |
|
|
|
|
| ## Approach |
|
|
| End-to-end 3D wireframe prediction via DETR-style set prediction over COLMAP point clouds. |
| Each predicted edge is a 6D coordinate pair `(x1,y1,z1,x2,y2,z2)` regressed by a learned query. |
| Hungarian matching assigns predictions to ground-truth edges at training time. |
|
|
| **Our contributions:** |
| - **Contrastive Denoising Training (CDN)** β adapted from [DN-DETR](https://arxiv.org/abs/2203.01305); injects GT-aligned denoising queries alongside learned queries to stabilise Hungarian matching in early epochs |
| - **Multi-scale encoder** β learned softmax-weighted average of last K=3 encoder layer outputs, giving the decoder access to both fine-grained and abstract representations |
| - **Progressive auxiliary loss weighting** β decoder layer i weighted at 0.5 + 0.5Β·(i+1)/N |
|
|
| **Model input:** plain 3-channel RGB per point. No semantic feature encoding. |
|
|
| **Adapted from [jastermark/S23DR2026](https://huggingface.co/jastermark/S23DR2026):** |
| - Gestalt-guided point sampling and COLMAP projection pipeline |
| - Post-processing (confidence filtering, vertex merging, gap filling) |
|
|
| ## Results |
|
|
| | Approach | Split | F1 | IoU | HSS | |
| |---|---|---|---|---| |
| | Perceiver baseline | cleaned val | β | β | 0.350 | |
| | PointNet two-stage (Path B) | public test | 0.497 | 0.409 | 0.442 | |
| | WireframeDETR (ours) | cleaned val | 0.603 | 0.471 | 0.534 | |
| | WireframeDETR (ours, best) | public test | **0.664** | **0.516** | **0.575** | |
|
|
| ## Architecture |
|
|
| - Embedding dim: 384, Queries: 128, Encoder layers: 4, Decoder layers: 5 |
| - ~22.7M parameters |
| - CDN groups: 5, Ξ»_pos=0.4, Ξ»_neg=0.8 |
| - Training: AdamW lr=1e-4, OneCycle schedule, batch=14, 200 epochs, A100 80GB (~27h) |
|
|
| ## Checkpoint |
|
|
| `wireframe_detr_cdn_multiscale_384d_128q.pth` β plain RGB, feature_dim=3 |
| |
| ## Inference |
| |
| ```python |
| from s23dr_2026.model import get_model, load_checkpoint_compat |
| from s23dr_2026.inference import predict_wireframe_v2 |
|
|
| import torch |
| ckpt = torch.load("wireframe_detr_cdn_multiscale_384d_128q.pth", map_location="cpu") |
| model = get_model(ckpt) |
| load_checkpoint_compat(model, ckpt) |
| model.eval().to("cuda") |
| |
| verts, edges = predict_wireframe_v2(scene, model, "cuda") |
| ``` |
| |
| ## Training |
| |
| ```bash |
| # via Modal |
| modal run pipeline.py --step train --name my-run |
| |
| # local |
| python -m s23dr_2026.train \ |
| --name my-run \ |
| --ply_dir /path/to/ply_data \ |
| --embed_dim 384 --num_queries 128 \ |
| --num_encoder_layers 4 --num_decoder_layers 5 \ |
| --use_cdn --cdn_groups 5 \ |
| --scheduler onecycle --num_epochs 200 \ |
| --batch_size 14 --device cuda |
| ``` |
| |
| ## Credits |
| |
| - [DN-DETR](https://arxiv.org/abs/2203.01305) β contrastive denoising training |
| - [S23DR 2026 organisers](https://huggingface.co/spaces/usm3d/S23DR2026) β challenge and baseline |
| - [jastermark/S23DR2026](https://huggingface.co/jastermark/S23DR2026) β COLMAP projection pipeline and post-processing |
| - [Modal Labs](https://modal.com) β GPU compute |
| |