Upload README.md
Browse files
README.md
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
license: apache-2.0
|
| 3 |
+
tags:
|
| 4 |
+
- object-detection
|
| 5 |
+
- oriented-object-detection
|
| 6 |
+
- jittor
|
| 7 |
+
- remote-sensing
|
| 8 |
+
- dota
|
| 9 |
+
---
|
| 10 |
+
|
| 11 |
+
# Point2RBox-v3 (Jittor reproduction)
|
| 12 |
+
|
| 13 |
+
This is a **Jittor** reproduction of
|
| 14 |
+
[Point2RBox-v3](https://github.com/VisionXLab/Point2RBox-v3)
|
| 15 |
+
(point-supervised oriented object detection with SAM-guided pseudo-label
|
| 16 |
+
refinement, [arXiv:2509.26281](https://arxiv.org/pdf/2509.26281)), built on
|
| 17 |
+
JDet. Code: <https://github.com/mingqian-233/Point2RBox-v3-jittor>.
|
| 18 |
+
|
| 19 |
+
## Results (DOTA-v1.0, official test server, mAP50)
|
| 20 |
+
|
| 21 |
+
| Model | Paper (PyTorch) | This repo (Jittor) |
|
| 22 |
+
|---|---|---|
|
| 23 |
+
| Point2RBox-v3 end-to-end (12 ep) | 61.38 | **59.52** |
|
| 24 |
+
| Point2RBox-v3 two-stage (rotated-FCOS) | 67.24 | **TBD(Task1 包已生成,待服务器)** |
|
| 25 |
+
|
| 26 |
+
The end-to-end number is the official DOTA-v1.0 Task1 test-server mAP50
|
| 27 |
+
(`0.5952330691632053`) and passes the project's paper−2.0 acceptance threshold
|
| 28 |
+
(59.38). Per-class AP table: TBD.
|
| 29 |
+
|
| 30 |
+
Local diagnostic only: the norm-eval-correct end-to-end checkpoint scores
|
| 31 |
+
**66.6056 mAP50** on the unmerged 1024×1024 trainval-patch protocol. The
|
| 32 |
+
same-machine full upstream PyTorch run scores **65.60**, while the published
|
| 33 |
+
upstream log reports **66.70**. This is not the official DOTA test-server
|
| 34 |
+
protocol; the merged test submission has been generated and awaits server
|
| 35 |
+
evaluation.
|
| 36 |
+
|
| 37 |
+
The completed two-stage checkpoint scores **75.7029 mAP50** on the same local
|
| 38 |
+
trainval-patch diagnostic. Its canonical Task1 submission has been generated;
|
| 39 |
+
the official DOTA test-server result is pending.
|
| 40 |
+
|
| 41 |
+
The generated stage-2 pseudo boxes were also matched directly against all
|
| 42 |
+
245,953 trainval GT boxes. They achieve mean rotated IoU **0.7330**,
|
| 43 |
+
recall@0.5 **91.03%**, and recall@0.75 **56.58%**. The corresponding
|
| 44 |
+
official-code PyTorch v2 baseline is 0.7295 / 91.25% / 55.39%.
|
| 45 |
+
|
| 46 |
+
## Files
|
| 47 |
+
|
| 48 |
+
- `checkpoints/point2rbox_v3_1x_dota_ckpt_12.pkl` — end-to-end model
|
| 49 |
+
- `checkpoints/rotated_fcos_1x_dota_using_pseudo_ckpt_12.pkl` — stage-2 model
|
| 50 |
+
- `weights/mobile_sam.pkl` — MobileSAM converted weights (439 tensors, numpy
|
| 51 |
+
pickle; native Jittor port, mask IoU 1.0000 vs PyTorch on CPU fp32)
|
| 52 |
+
- `weights/ted.pkl` — TED edge detector converted weights (parity 5.7e-6)
|
| 53 |
+
- `logs/` — training logs
|
| 54 |
+
|
| 55 |
+
## Training environment
|
| 56 |
+
|
| 57 |
+
- Jittor 1.3.8.5, numpy 1.26.4 (pinned — numpy≥2 silently corrupts jt.array
|
| 58 |
+
inputs), CUDA 11.2 toolchain (g++-10), single A100 80GB, official
|
| 59 |
+
hyper-parameters verbatim (end-to-end batch=2; stage-2 batch=4; AdamW
|
| 60 |
+
5e-5, grad-clip 35, 12 epochs, LinearLR warmup 500 iters + MultiStepLR
|
| 61 |
+
[8,11]).
|
| 62 |
+
- Config parity is locked by a zero-tolerance L0 test suite (17 tests,
|
| 63 |
+
including the 74-line per-class SAM rule table byte-copied from upstream).
|
| 64 |
+
|
| 65 |
+
## Known differences from the upstream paper run
|
| 66 |
+
|
| 67 |
+
1. **SAM attention bias**: the upstream `mobile_sam` package calls `eval()`
|
| 68 |
+
before `load_state_dict`, leaving TinyViT's non-persistent attention-bias
|
| 69 |
+
cache at its random initialisation — i.e. the upstream training used an
|
| 70 |
+
unseeded random attention bias (unreproducible across runs). This repo
|
| 71 |
+
loads the weights correctly. Direction of the effect on mAP is unknown
|
| 72 |
+
(expected neutral-to-positive). See `docs/config_parity.md`.
|
| 73 |
+
2. Upstream's copy-paste stage-2 branch is dead code (condition can never be
|
| 74 |
+
true); reproduced verbatim.
|
| 75 |
+
3. `num_workers=0` instead of 2 (Jittor multi-process dataloader deadlock);
|
| 76 |
+
pure infra, no effect on training math.
|
| 77 |
+
4. GPU-mode numeric noise vs PyTorch golden is at the cuDNN-TF32 level
|
| 78 |
+
(~1e-3); CPU-mode strict-fp32 parity is 1e-5 to bit-exact per component.
|
| 79 |
+
|
| 80 |
+
## Citation
|
| 81 |
+
|
| 82 |
+
Please cite the original papers:
|
| 83 |
+
|
| 84 |
+
```bibtex
|
| 85 |
+
@article{point2rboxv3,
|
| 86 |
+
title={Point2RBox-v3: Self-Bootstrapping from Point Annotations via
|
| 87 |
+
Integrated Pseudo-Label Refinement and Utilization},
|
| 88 |
+
journal={arXiv preprint arXiv:2509.26281}, year={2025}
|
| 89 |
+
}
|
| 90 |
+
@article{whollywood,
|
| 91 |
+
title={Wholly-WOOD: Wholly Leveraging Diversified-quality Labels for
|
| 92 |
+
Weakly-supervised Oriented Object Detection},
|
| 93 |
+
year={2024}
|
| 94 |
+
}
|
| 95 |
+
```
|