File size: 2,593 Bytes
d667566
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# Local checkpoint mirror

Downloaded from the Modal volume `pmdm-ckpt` (account `bigbalak`) on 2026-08-16 with
`modal volume get`. These are the actual trained weights behind every number in `HANDOVER.md`,
kept locally so the next owner does not need access to that Modal account.

| Path | Size | What it is |
|---|---|---|
| `stage1_fold0_convnext_tiny/best.pt` | 128 MB | **The model.** Fold-0 detector, ConvNeXt-tiny backbone, saved at epoch 19 — the best out-of-fold evaluation of run 2. 318 tensors, 32.8 M parameters. |
| `stage1_fold0_convnext_tiny/last.pt` | 384 MB | Final training state (epoch 35): weights plus optimizer and scheduler state. Use this to resume training, not to run inference. |
| `stage1_fold0_convnext_tiny/history.json` | 12 KB | Per-epoch losses, timings, and the seven evaluations. Same file as `runs/fold0_run2_history.json`. |
| `oof/fold0_convnext_tiny.npz` | 24 KB | Out-of-fold candidate boxes and scores on the 40 validation pairs. |
| `oof/fold0_convnext_tiny.json` | 4 KB | The threshold sweep on those candidates. |
| `stage2_ab/last.pt` | 43 MB | Verifier from the leakage-free A/B. Kept for reference only — its measured delta was +0.0009, i.e. nothing. |
| `stage2_ab/records.json` | 20 KB | The crops the verifier trained on. Explains why it failed: too few negatives. |

Not downloaded: `pmdm-ckpt:/stage2_ab/stage2/`, a duplicate written by the path bug described in
`HANDOVER.md` §6 before it was fixed, and `pmdm-ckpt:/hf/`, which is just the timm pretrained-weight
cache and re-downloads on demand.

## Checkpoint contents

`best.pt` holds three keys:

```python
ck = torch.load("checkpoints/stage1_fold0_convnext_tiny/best.pt", map_location="cpu")
ck["model"]    # state dict for pmdm.model.SiamCenterNet(backbone="convnext_tiny")
ck["epoch"]    # 19
ck["metric"]   # {'f1': 0.9049, 'precision': 0.9225, 'recall': 0.8881, 'threshold': 0.31, ...}
```

Load for inference:

```python
import torch
from pmdm.model import SiamCenterNet

model = SiamCenterNet(backbone="convnext_tiny")
ck = torch.load("checkpoints/stage1_fold0_convnext_tiny/best.pt", map_location="cpu")
model.load_state_dict(ck["model"])
model.eval()
```

`last.pt` additionally carries `optimizer`, `scaler`, and `scheduler` state, which is why it is
three times the size. `train_fold` picks it up automatically when the checkpoint directory is
present, so copying this directory back onto a Modal volume resumes training from epoch 36.

## Pushing back to Modal

```bash
modal volume put pmdm-ckpt checkpoints/stage1_fold0_convnext_tiny /stage1_fold0_convnext_tiny
```