Start from a detector that already knows a ship in daylight. Twelve epochs later, it knows a radar chip.
On SSDD, 1,160 SAR chips, a Faster R-CNN finetune reached 90.34% on the held-out test. The split and the curves are below.

The dataset Link to heading
Single class ship. Native loader discovers VOC XML (rotated_bndbox / robndbox), then COCO, then DOTA. Point data_root at Official-SSDD-OPEN (walks into RBox_SSDD/voc_style). Grayscale SAR is loaded as RGB (channel repeat). Chips fit a 608 keep-ratio canvas — do not tile.
| Split | Chips | In training? |
|---|---|---|
| last-digit train | ~928 | Yes |
| last-digit test | ~232 | No |
| test inshore / offshore | 46 / 186 | subsets of test |
odet train --config configs/rotated_faster_rcnn/ssdd_le90_1x.json
make eval-val EXPERIMENT=runs/rotated_faster_rcnn/<timestamp>
Notebook: notebooks/ssdd_finetune_tutorial.ipynb (1-epoch smoke and full 1×). Optional: odet ssdd-to-dota.

Local 1× Faster R-CNN: 90.34% Link to heading
From hf://rotated_faster_rcnn_dota_le90_1x (1-way ship head re-init), RTX 3090 Ti, 15 m (runs/rotated_faster_rcnn/20260918-130546). Score ≥ 0.05, rotated IoU 0.50, NMS IoU 0.10. Report: docs/eval-reports/rotated_faster_rcnn_ssdd_le90_1x/.
| Epoch | Train loss | In-train val mAP50 (score ≥ 0.3) |
|---|---|---|
| 4 | 0.292 | 79.86% |
| 8 | 0.260 | 80.73% |
| 12 | 0.235 | 90.41% |
make eval-val (score ≥ 0.05) is 90.34% — same checkpoint, slightly different floor. Best-F1 deploy threshold on that sweep is 0.40 (P 0.94 / R 0.91 / F1 0.93). Mean best IoU vs GT is 0.74.


Literature Faster R-CNN on SSDD sits around ~89% (Guo et al., Sensors 2021: 88.96% overall). Treat <80% overall as a failed train. The notebook 1-epoch smoke will not hit 90%. Inshore / offshore subsets were not scored separately on this run — the pictures above are the contrast, not a split table.
Links Link to heading
- Official-SSDD · docs — SSDD
- v0.3 release note
- Previous: FAIR1M · v0.3
- Next: HRSID (1 Oct)