File size: 7,082 Bytes
ac7cafe
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
{
  "checkpoint": {
    "path": "joint_root_area_poc_epoch200.pt",
    "sha256": "1bed00bc8f934243f079592c84f06090d720798f63044ffcb462a11ddf0105f8",
    "size_bytes": 382445498
  },
  "config": {
    "area_lambda": 0.15,
    "backbone": "facebook/dinov3-vitb16-pretrain-lvd1689m",
    "batch_size": 2,
    "classification_positive_weight": 10.0,
    "classification_probability_threshold": 0.5,
    "classification_sigma": 3.0,
    "decoder_activation_checkpointing": true,
    "density_alpha": 0.5,
    "derived_polygon_labelme": "tile_1001_0_0_pseudo_area_labelme.json",
    "epochs": 200,
    "experiment": "joint-root-area-poc",
    "freeze_backbone": true,
    "gradient_accumulation_steps": 2,
    "image_height": 3943,
    "image_id": "day2/tiles_png_1001/tile_1001_0_0.png",
    "image_width": 3797,
    "inference_patch_size": 512,
    "inference_stride": 512,
    "learning_rate": 0.0001,
    "logical_device": "cuda:0",
    "match_tolerance_px": 15.0,
    "patch_count": 64,
    "patch_size": 512,
    "peak_min_distance": 8,
    "physical_gpu": 5,
    "physical_microbatch_size": 1,
    "polygon_array_count": 457,
    "polygon_prediction_count": 401,
    "polygon_source": "test_tile_1001_0_0.json",
    "precision": "CUDA autocast float16; GradScaler; losses accumulated as float32 where PyTorch requires",
    "preprocessing": "RGB; pixels with all channels >=250 filled black; ImageNet normalization",
    "raw_image": "tile_1001_0_0_raw.png",
    "root_count": 209,
    "root_xml": "point_id18_annotations.xml",
    "run_id": "0003-point18-joint-area-poc",
    "schema": "wheat-exp.run-config",
    "schema_version": "1.0.0",
    "seed": 1001,
    "split": "row-major edge-push coordinates; first 32 train, last 32 validation",
    "stride": 512,
    "train_patch_count": 32,
    "unseen_image": "/mnt/hdb/chenyizi/sam3-fewshot/data/tile_1020_test/tile_1020_0_0.png",
    "use_area": true,
    "validation_patch_count": 32,
    "weight_decay": 0.0001
  },
  "epoch_1": {
    "epoch": 1,
    "finite": true,
    "train": {
      "loss": 1.4028209700281877,
      "loss_area": 0.9841924272077449,
      "loss_cls": 0.080084727796077,
      "loss_density": 0.016705973462740595,
      "loss_reg": 1.166754387319088
    },
    "validation": {
      "loss": 2.1073910218233323,
      "loss_area": 1.0187577032193076,
      "loss_cls": 0.0756952810331768,
      "loss_density": 9.822749692952291e-09,
      "loss_reg": 1.878882072865963
    }
  },
  "epoch_200": {
    "epoch": 200,
    "finite": true,
    "train": {
      "loss": 0.07707233374471402,
      "loss_area": 0.17010920215398073,
      "loss_cls": 0.002606162868971751,
      "loss_density": 1.155940458440587e-08,
      "loss_reg": 0.04894978346419521
    },
    "validation": {
      "loss": 2.308025994721122,
      "loss_area": 0.4174362588724989,
      "loss_cls": 0.06357826597036365,
      "loss_density": 1.1210296078304881e-08,
      "loss_reg": 2.1818322725594044
    }
  },
  "experiment": "joint-root-area-poc",
  "history_file": "training_history.json",
  "limitations": [
    "Single selected source tile with a deterministic spatial patch holdout; not independent-image generalization evidence.",
    "SAM3 polygon arrays are pseudo segmentation used only by the auxiliary area branch.",
    "No matched point-only baseline was run, so this run makes no area-supervision improvement claim.",
    "Unseen output is qualitative because no manual roots are available for that image.",
    "The required optimizer batch size 2 is executed as two size-1 physical microbatches with gradient accumulation because an unrelated co-tenant occupied about 14.7 GiB on physical GPU 5; decoder activation checkpointing and AMP preserve the requested GPU and effective batch without changing source model code."
  ],
  "metrics": {
    "area_auxiliary": {
      "interpretation": "auxiliary diagnostic against SAM3 pseudo segmentation, not manual GT",
      "intersection_pixels": 144289,
      "iou_against_pseudo_area": 0.5008104515273627,
      "threshold": 0.5,
      "union_pixels": 288111
    },
    "evaluation_class": "architecture/behavior POC; not an area-supervision effect comparison",
    "held_out_manual_root_count": 142,
    "held_out_prediction_count": 99,
    "held_out_spatial_region": {
      "count_error": 43.0,
      "f1": 0.5477178423236515,
      "fn": 76,
      "fp": 33,
      "precision": 0.6666666666666666,
      "recall": 0.4647887323943662,
      "tp": 66
    },
    "same_tile_full_image": {
      "count_error": 43.0,
      "f1": 0.7093333333333333,
      "fn": 76,
      "fp": 33,
      "precision": 0.8012048192771084,
      "recall": 0.6363636363636364,
      "tp": 133
    }
  },
  "run_id": "0003-point18-joint-area-poc",
  "schema": "wheat-exp.recipe",
  "schema_version": "1.0.0",
  "smoke_command": "cd /mnt/hdb/chenyizi/wheat-detect && source /mnt/hdb/chenyizi/sam3-fewshot/venv/bin/activate && PYTHONPATH=/mnt/hdb/chenyizi/wheat-detect HF_HOME=/mnt/hdb/chenyizi/sam3-fewshot/hf-cache TRANSFORMERS_OFFLINE=1 CUDA_VISIBLE_DEVICES=5 python experiments/joint-root-area-poc/runs/0003-point18-joint-area-poc/run_joint_poc.py --mode smoke",
  "source_revision": {
    "git_commit": null,
    "git_commit_status": "unavailable: remote checkout has no commit object",
    "repository": "/mnt/hdb/chenyizi/wheat-detect",
    "source_file_sha256": {
      "wheat_detect/data/dataset.py": "0401cc3a0a39ab02a3322aa5c68d689c2df4ab79718c7191493b7f70bae8efe2",
      "wheat_detect/data/preprocessing.py": "fe57174183e5427517c5f3e68077cc226e6ebbf390b8522aedb2140b10c1ab6e",
      "wheat_detect/evaluation/metrics.py": "0762d8e0aff3d0f170d366b93814ab032a4392ce55b4cf9e8f555c3f3ab45467",
      "wheat_detect/evaluation/rendering.py": "c4d273e24332666bd1ac909141af4e18eb53ec4023d0fd41f7cb4694e0b6981f",
      "wheat_detect/losses/counting_loss.py": "3e112a1a861bd47150bfd8b9236c649aeb434f79a303354774b196a76403f4f3",
      "wheat_detect/models/counting_module.py": "8a33d7510d1f48ec4682dc7ae93ef47c072097a312174fa5bac6ccfdf0c98db6",
      "wheat_detect/models/decoder.py": "19e61542dc4cba0616435a9b5054db631840ef819bc10fee2aeb982b8f5e378b"
    },
    "source_model_code_modified_by_run": false
  },
  "spec_version": "1.0.0",
  "status": "complete",
  "supervision": {
    "area_target": "raster fills from 457 SAM3 pseudo polygon arrays",
    "area_valid": true,
    "classification_target": "manual root Gaussian heatmap",
    "density_target": "manual root density diagnostic/supporting loss",
    "polygon_geometry_used_for_point_targets_or_metrics": false,
    "primary_root_target": "209 manual CVAT wheat points",
    "regression_target": "manual root offset map"
  },
  "training_command": "cd /mnt/hdb/chenyizi/wheat-detect && source /mnt/hdb/chenyizi/sam3-fewshot/venv/bin/activate && PYTHONPATH=/mnt/hdb/chenyizi/wheat-detect HF_HOME=/mnt/hdb/chenyizi/sam3-fewshot/hf-cache TRANSFORMERS_OFFLINE=1 CUDA_VISIBLE_DEVICES=5 python experiments/joint-root-area-poc/runs/0003-point18-joint-area-poc/run_joint_poc.py --mode train",
  "unseen_status": "complete_qualitative_only"
}