make building results authority-first after V74 evaluation
GeoIntel release gates / Compile, test, contracts and builds (push) Canceled after 0s
GeoIntel release gates / Python and npm vulnerability policy (push) Canceled after 0s
GeoIntel release gates / GIS image, SBOM and container scan (push) Canceled after 0s

This commit is contained in:
Jens
2026-08-10 04:44:29 +02:00
parent 98188e0a44
commit 4b0cab3ce5
27 changed files with 13067 additions and 6 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 10 MiB

@@ -0,0 +1,289 @@
{
"schema_version": 1,
"model": "/app/models/geointel-building-yolov8s-smallbld-minpx3-img640-ft30.pt",
"summary": "/app/storage/operator-data/building-be-v72-fresh-calibration-r1/diagnostic-yolo512-r2/yolo_tile_dataset_summary.json",
"threshold": 0.3,
"match_iou": 0.25,
"samples": [
"v72-zandhoven-lowrise-cal",
"v72-assenede-field-cal-bg",
"v72-libramont-lowrise-cal",
"v72-havelange-field-cal-bg",
"v72-ganshoren-lowrise-cal",
"v72-laeken-park-cal-bg"
],
"legend": {
"reference": "yellow",
"matched_prediction": "green",
"false_positive": "red",
"false_negative": "magenta"
},
"geometry": {
"reference": {
"area_share": {
"count": 348,
"median": 0.008302689057617198,
"p90": 0.022865294687500003,
"p95": 0.038036347509765596,
"p99": 0.10563659499999999,
"max": 0.380516048828125
},
"aspect_ratio": {
"count": 348,
"median": 1.1538463659172016,
"p90": 2.0588235294117645,
"p95": 2.548386968907398,
"p99": 3.111111996049629,
"max": 8.600004915202515
}
},
"matched": {
"area_share": {
"count": 97,
"median": 0.015811838169121906,
"p90": 0.03523627635466653,
"p95": 0.08015326985225713,
"p99": 0.10632651335649834,
"max": 0.1267303712638128
},
"aspect_ratio": {
"count": 97,
"median": 1.1681283370262416,
"p90": 1.6504031418485514,
"p95": 1.8264904530848893,
"p99": 2.047274588985069,
"max": 2.132431315224294
}
},
"false_positive": {
"area_share": {
"count": 292,
"median": 0.0018011374421038062,
"p90": 0.028208259408568637,
"p95": 0.07724808180330967,
"p99": 0.12387540370893509,
"max": 0.12652627555299745
},
"aspect_ratio": {
"count": 292,
"median": 1.0897888782459404,
"p90": 1.4005369425270608,
"p95": 1.720561010708864,
"p99": 2.167934539644849,
"max": 4.5864901518951715
}
},
"false_negative": {
"area_share": {
"count": 251,
"median": 0.006526946728515598,
"p90": 0.019935608671874994,
"p95": 0.024063111093749995,
"p99": 0.07019043124999999,
"max": 0.380516048828125
},
"aspect_ratio": {
"count": 251,
"median": 1.1489361076324167,
"p90": 2.25,
"p95": 2.5833335466666654,
"p99": 3.111111996049629,
"max": 8.600004915202515
}
}
},
"tiles": [
{
"sample_slug": "v72-zandhoven-lowrise-cal",
"image_path": "/app/storage/operator-data/building-be-v72-fresh-calibration-r1/diagnostic-yolo512-r2/images/val/v72-zandhoven-lowrise-cal_0000_r0_c0.png",
"label_count": 60,
"true_positive": 6,
"false_positive": 34,
"false_negative": 54
},
{
"sample_slug": "v72-zandhoven-lowrise-cal",
"image_path": "/app/storage/operator-data/building-be-v72-fresh-calibration-r1/diagnostic-yolo512-r2/images/val/v72-zandhoven-lowrise-cal_0001_r0_c512.png",
"label_count": 28,
"true_positive": 2,
"false_positive": 17,
"false_negative": 26
},
{
"sample_slug": "v72-zandhoven-lowrise-cal",
"image_path": "/app/storage/operator-data/building-be-v72-fresh-calibration-r1/diagnostic-yolo512-r2/images/val/v72-zandhoven-lowrise-cal_0003_r512_c0.png",
"label_count": 22,
"true_positive": 3,
"false_positive": 25,
"false_negative": 19
},
{
"sample_slug": "v72-zandhoven-lowrise-cal",
"image_path": "/app/storage/operator-data/building-be-v72-fresh-calibration-r1/diagnostic-yolo512-r2/images/val/v72-zandhoven-lowrise-cal_0004_r512_c512.png",
"label_count": 9,
"true_positive": 0,
"false_positive": 3,
"false_negative": 9
},
{
"sample_slug": "v72-assenede-field-cal-bg",
"image_path": "/app/storage/operator-data/building-be-v72-fresh-calibration-r1/diagnostic-yolo512-r2/images/val/v72-assenede-field-cal-bg_0000_r0_c0.png",
"label_count": 0,
"true_positive": 0,
"false_positive": 0,
"false_negative": 0
},
{
"sample_slug": "v72-assenede-field-cal-bg",
"image_path": "/app/storage/operator-data/building-be-v72-fresh-calibration-r1/diagnostic-yolo512-r2/images/val/v72-assenede-field-cal-bg_0001_r0_c512.png",
"label_count": 0,
"true_positive": 0,
"false_positive": 2,
"false_negative": 0
},
{
"sample_slug": "v72-assenede-field-cal-bg",
"image_path": "/app/storage/operator-data/building-be-v72-fresh-calibration-r1/diagnostic-yolo512-r2/images/val/v72-assenede-field-cal-bg_0003_r512_c0.png",
"label_count": 0,
"true_positive": 0,
"false_positive": 0,
"false_negative": 0
},
{
"sample_slug": "v72-assenede-field-cal-bg",
"image_path": "/app/storage/operator-data/building-be-v72-fresh-calibration-r1/diagnostic-yolo512-r2/images/val/v72-assenede-field-cal-bg_0004_r512_c512.png",
"label_count": 4,
"true_positive": 0,
"false_positive": 4,
"false_negative": 4
},
{
"sample_slug": "v72-libramont-lowrise-cal",
"image_path": "/app/storage/operator-data/building-be-v72-fresh-calibration-r1/diagnostic-yolo512-r2/images/val/v72-libramont-lowrise-cal_0000_r0_c0.png",
"label_count": 13,
"true_positive": 7,
"false_positive": 17,
"false_negative": 6
},
{
"sample_slug": "v72-libramont-lowrise-cal",
"image_path": "/app/storage/operator-data/building-be-v72-fresh-calibration-r1/diagnostic-yolo512-r2/images/val/v72-libramont-lowrise-cal_0001_r0_c512.png",
"label_count": 2,
"true_positive": 2,
"false_positive": 46,
"false_negative": 0
},
{
"sample_slug": "v72-libramont-lowrise-cal",
"image_path": "/app/storage/operator-data/building-be-v72-fresh-calibration-r1/diagnostic-yolo512-r2/images/val/v72-libramont-lowrise-cal_0003_r512_c0.png",
"label_count": 11,
"true_positive": 2,
"false_positive": 7,
"false_negative": 9
},
{
"sample_slug": "v72-libramont-lowrise-cal",
"image_path": "/app/storage/operator-data/building-be-v72-fresh-calibration-r1/diagnostic-yolo512-r2/images/val/v72-libramont-lowrise-cal_0004_r512_c512.png",
"label_count": 0,
"true_positive": 0,
"false_positive": 23,
"false_negative": 0
},
{
"sample_slug": "v72-havelange-field-cal-bg",
"image_path": "/app/storage/operator-data/building-be-v72-fresh-calibration-r1/diagnostic-yolo512-r2/images/val/v72-havelange-field-cal-bg_0000_r0_c0.png",
"label_count": 48,
"true_positive": 21,
"false_positive": 20,
"false_negative": 27
},
{
"sample_slug": "v72-havelange-field-cal-bg",
"image_path": "/app/storage/operator-data/building-be-v72-fresh-calibration-r1/diagnostic-yolo512-r2/images/val/v72-havelange-field-cal-bg_0001_r0_c512.png",
"label_count": 14,
"true_positive": 7,
"false_positive": 6,
"false_negative": 7
},
{
"sample_slug": "v72-havelange-field-cal-bg",
"image_path": "/app/storage/operator-data/building-be-v72-fresh-calibration-r1/diagnostic-yolo512-r2/images/val/v72-havelange-field-cal-bg_0003_r512_c0.png",
"label_count": 24,
"true_positive": 9,
"false_positive": 28,
"false_negative": 15
},
{
"sample_slug": "v72-havelange-field-cal-bg",
"image_path": "/app/storage/operator-data/building-be-v72-fresh-calibration-r1/diagnostic-yolo512-r2/images/val/v72-havelange-field-cal-bg_0004_r512_c512.png",
"label_count": 48,
"true_positive": 12,
"false_positive": 24,
"false_negative": 36
},
{
"sample_slug": "v72-ganshoren-lowrise-cal",
"image_path": "/app/storage/operator-data/building-be-v72-fresh-calibration-r1/diagnostic-yolo512-r2/images/val/v72-ganshoren-lowrise-cal_0000_r0_c0.png",
"label_count": 7,
"true_positive": 2,
"false_positive": 10,
"false_negative": 5
},
{
"sample_slug": "v72-ganshoren-lowrise-cal",
"image_path": "/app/storage/operator-data/building-be-v72-fresh-calibration-r1/diagnostic-yolo512-r2/images/val/v72-ganshoren-lowrise-cal_0001_r0_c512.png",
"label_count": 28,
"true_positive": 12,
"false_positive": 6,
"false_negative": 16
},
{
"sample_slug": "v72-ganshoren-lowrise-cal",
"image_path": "/app/storage/operator-data/building-be-v72-fresh-calibration-r1/diagnostic-yolo512-r2/images/val/v72-ganshoren-lowrise-cal_0003_r512_c0.png",
"label_count": 17,
"true_positive": 4,
"false_positive": 8,
"false_negative": 13
},
{
"sample_slug": "v72-ganshoren-lowrise-cal",
"image_path": "/app/storage/operator-data/building-be-v72-fresh-calibration-r1/diagnostic-yolo512-r2/images/val/v72-ganshoren-lowrise-cal_0004_r512_c512.png",
"label_count": 10,
"true_positive": 7,
"false_positive": 9,
"false_negative": 3
},
{
"sample_slug": "v72-laeken-park-cal-bg",
"image_path": "/app/storage/operator-data/building-be-v72-fresh-calibration-r1/diagnostic-yolo512-r2/images/val/v72-laeken-park-cal-bg_0000_r0_c0.png",
"label_count": 3,
"true_positive": 1,
"false_positive": 3,
"false_negative": 2
},
{
"sample_slug": "v72-laeken-park-cal-bg",
"image_path": "/app/storage/operator-data/building-be-v72-fresh-calibration-r1/diagnostic-yolo512-r2/images/val/v72-laeken-park-cal-bg_0001_r0_c512.png",
"label_count": 0,
"true_positive": 0,
"false_positive": 0,
"false_negative": 0
},
{
"sample_slug": "v72-laeken-park-cal-bg",
"image_path": "/app/storage/operator-data/building-be-v72-fresh-calibration-r1/diagnostic-yolo512-r2/images/val/v72-laeken-park-cal-bg_0003_r512_c0.png",
"label_count": 0,
"true_positive": 0,
"false_positive": 0,
"false_negative": 0
},
{
"sample_slug": "v72-laeken-park-cal-bg",
"image_path": "/app/storage/operator-data/building-be-v72-fresh-calibration-r1/diagnostic-yolo512-r2/images/val/v72-laeken-park-cal-bg_0004_r512_c512.png",
"label_count": 0,
"true_positive": 0,
"false_positive": 0,
"false_negative": 0
}
]
}
@@ -0,0 +1,32 @@
{
"schema_version": 1,
"status": "all_v74_candidates_rejected",
"active_model_sha256": "a9088b8491dfae36694b53e9e9406cb4e3511d334a5712fa34f75078a47759c1",
"active_model_changed": false,
"human_review_complete": false,
"review_type": "ai_assisted_visual_error_analysis",
"promotion_allowed": false,
"release_claim_allowed": false,
"decisions": [
{
"candidate": "proposal-filter-v74",
"sha256": "a4570a6257e5f234730fc03b75d53251afdeb830ea3c96dfff45604b23786260",
"decision": "reject_global_production",
"reason": "best detector-plus-filter V72 F1 0.2200 is below unfiltered active F1 0.2504"
},
{
"candidate": "v74-rehearsal-controlled-e10",
"sha256": "8473f09234bbad9175d5540e2f298e57c902c332fa5729561774b01a98c355d3",
"decision": "reject",
"reason": "optimizer auto overrode requested learning rate; V72 metrics regressed"
},
{
"candidate": "v74-rehearsal-low-lr-e6",
"sha256": "be9881ad734f60f8779e9a08dc9112b993cf87e7cc888709c6f695bcf200dffc",
"decision": "reject",
"reason": "explicit AdamW low-learning-rate run remained below active V72 baseline"
}
],
"product_mitigation": "authority_first_grb_evidence_overlay",
"claim_boundary": "AI detections remain proposals; GRB validation is authoritative for registered Flemish buildings within source coverage and edition."
}
@@ -0,0 +1,732 @@
{
"schema_version": 1,
"model": "/app/models/geointel-building-yolov8s-smallbld-minpx3-img640-ft30.pt",
"summary": "/app/storage/operator-data/building-be-v72-fresh-calibration-r1/diagnostic-yolo512-r2/yolo_tile_dataset_summary.json",
"split": "val",
"match_iou": 0.25,
"test_time_augmentation": false,
"inference_imgsz": 640,
"inference_batch": 8,
"max_detections_per_tile": 1000,
"nms_iou": 0.7,
"containment_nms": 1.0,
"box_scale": 1.0,
"box_offset_x": 0.0,
"box_offset_y": 0.0,
"additional_model": null,
"regional_models": {},
"regional_model_tile_counts": {},
"ensemble_mode": null,
"ensemble_match_iou": null,
"proposal_classifier": "/app/storage/training/experimental/building-be-v73-fresh-flanders-train-r1/proposal-filter-v74/proposal-filter.experimental.torchscript.pt",
"proposal_classifier_threshold": 0.1,
"proposal_crop_scale": 1.4,
"proposal_classifier_batch": 64,
"tile_count": 24,
"sweeps": [
{
"threshold": 0.05,
"aggregate": {
"true_positive": 95,
"false_positive": 438,
"false_negative": 253,
"precision": 0.17823639774859287,
"recall": 0.27298850574712646,
"f1": 0.2156640181611805
},
"regions": {
"brussels": {
"true_positive": 25,
"false_positive": 42,
"false_negative": 40,
"precision": 0.373134328358209,
"recall": 0.38461538461538464,
"f1": 0.3787878787878788
},
"flanders": {
"true_positive": 15,
"false_positive": 127,
"false_negative": 108,
"precision": 0.1056338028169014,
"recall": 0.12195121951219512,
"f1": 0.11320754716981132
},
"wallonia": {
"true_positive": 55,
"false_positive": 269,
"false_negative": 105,
"precision": 0.1697530864197531,
"recall": 0.34375,
"f1": 0.2272727272727273
}
},
"samples": {
"v72-assenede-field-cal-bg": {
"true_positive": 0,
"false_positive": 5,
"false_negative": 4,
"precision": 0.0,
"recall": 0.0,
"f1": 0.0
},
"v72-ganshoren-lowrise-cal": {
"true_positive": 25,
"false_positive": 41,
"false_negative": 37,
"precision": 0.3787878787878788,
"recall": 0.4032258064516129,
"f1": 0.39062499999999994
},
"v72-havelange-field-cal-bg": {
"true_positive": 42,
"false_positive": 87,
"false_negative": 92,
"precision": 0.32558139534883723,
"recall": 0.31343283582089554,
"f1": 0.3193916349809886
},
"v72-laeken-park-cal-bg": {
"true_positive": 0,
"false_positive": 1,
"false_negative": 3,
"precision": 0.0,
"recall": 0.0,
"f1": 0.0
},
"v72-libramont-lowrise-cal": {
"true_positive": 13,
"false_positive": 182,
"false_negative": 13,
"precision": 0.06666666666666667,
"recall": 0.5,
"f1": 0.11764705882352941
},
"v72-zandhoven-lowrise-cal": {
"true_positive": 15,
"false_positive": 122,
"false_negative": 104,
"precision": 0.10948905109489052,
"recall": 0.12605042016806722,
"f1": 0.1171875
}
},
"pure_empty_false_positives": 0
},
{
"threshold": 0.1,
"aggregate": {
"true_positive": 78,
"false_positive": 283,
"false_negative": 270,
"precision": 0.21606648199445982,
"recall": 0.22413793103448276,
"f1": 0.22002820874471088
},
"regions": {
"brussels": {
"true_positive": 20,
"false_positive": 24,
"false_negative": 45,
"precision": 0.45454545454545453,
"recall": 0.3076923076923077,
"f1": 0.3669724770642202
},
"flanders": {
"true_positive": 11,
"false_positive": 71,
"false_negative": 112,
"precision": 0.13414634146341464,
"recall": 0.08943089430894309,
"f1": 0.1073170731707317
},
"wallonia": {
"true_positive": 47,
"false_positive": 188,
"false_negative": 113,
"precision": 0.2,
"recall": 0.29375,
"f1": 0.2379746835443038
}
},
"samples": {
"v72-assenede-field-cal-bg": {
"true_positive": 0,
"false_positive": 3,
"false_negative": 4,
"precision": 0.0,
"recall": 0.0,
"f1": 0.0
},
"v72-ganshoren-lowrise-cal": {
"true_positive": 20,
"false_positive": 23,
"false_negative": 42,
"precision": 0.46511627906976744,
"recall": 0.3225806451612903,
"f1": 0.380952380952381
},
"v72-havelange-field-cal-bg": {
"true_positive": 35,
"false_positive": 58,
"false_negative": 99,
"precision": 0.3763440860215054,
"recall": 0.26119402985074625,
"f1": 0.30837004405286345
},
"v72-laeken-park-cal-bg": {
"true_positive": 0,
"false_positive": 1,
"false_negative": 3,
"precision": 0.0,
"recall": 0.0,
"f1": 0.0
},
"v72-libramont-lowrise-cal": {
"true_positive": 12,
"false_positive": 130,
"false_negative": 14,
"precision": 0.08450704225352113,
"recall": 0.46153846153846156,
"f1": 0.14285714285714285
},
"v72-zandhoven-lowrise-cal": {
"true_positive": 11,
"false_positive": 68,
"false_negative": 108,
"precision": 0.13924050632911392,
"recall": 0.09243697478991597,
"f1": 0.1111111111111111
}
},
"pure_empty_false_positives": 0
},
{
"threshold": 0.15,
"aggregate": {
"true_positive": 63,
"false_positive": 213,
"false_negative": 285,
"precision": 0.22826086956521738,
"recall": 0.1810344827586207,
"f1": 0.2019230769230769
},
"regions": {
"brussels": {
"true_positive": 14,
"false_positive": 19,
"false_negative": 51,
"precision": 0.42424242424242425,
"recall": 0.2153846153846154,
"f1": 0.28571428571428575
},
"flanders": {
"true_positive": 10,
"false_positive": 56,
"false_negative": 113,
"precision": 0.15151515151515152,
"recall": 0.08130081300813008,
"f1": 0.10582010582010581
},
"wallonia": {
"true_positive": 39,
"false_positive": 138,
"false_negative": 121,
"precision": 0.22033898305084745,
"recall": 0.24375,
"f1": 0.2314540059347181
}
},
"samples": {
"v72-assenede-field-cal-bg": {
"true_positive": 0,
"false_positive": 2,
"false_negative": 4,
"precision": 0.0,
"recall": 0.0,
"f1": 0.0
},
"v72-ganshoren-lowrise-cal": {
"true_positive": 14,
"false_positive": 18,
"false_negative": 48,
"precision": 0.4375,
"recall": 0.22580645161290322,
"f1": 0.2978723404255319
},
"v72-havelange-field-cal-bg": {
"true_positive": 30,
"false_positive": 41,
"false_negative": 104,
"precision": 0.4225352112676056,
"recall": 0.22388059701492538,
"f1": 0.29268292682926833
},
"v72-laeken-park-cal-bg": {
"true_positive": 0,
"false_positive": 1,
"false_negative": 3,
"precision": 0.0,
"recall": 0.0,
"f1": 0.0
},
"v72-libramont-lowrise-cal": {
"true_positive": 9,
"false_positive": 97,
"false_negative": 17,
"precision": 0.08490566037735849,
"recall": 0.34615384615384615,
"f1": 0.13636363636363638
},
"v72-zandhoven-lowrise-cal": {
"true_positive": 10,
"false_positive": 54,
"false_negative": 109,
"precision": 0.15625,
"recall": 0.08403361344537816,
"f1": 0.10928961748633881
}
},
"pure_empty_false_positives": 0
},
{
"threshold": 0.2,
"aggregate": {
"true_positive": 54,
"false_positive": 156,
"false_negative": 294,
"precision": 0.2571428571428571,
"recall": 0.15517241379310345,
"f1": 0.19354838709677422
},
"regions": {
"brussels": {
"true_positive": 13,
"false_positive": 16,
"false_negative": 52,
"precision": 0.4482758620689655,
"recall": 0.2,
"f1": 0.27659574468085113
},
"flanders": {
"true_positive": 9,
"false_positive": 42,
"false_negative": 114,
"precision": 0.17647058823529413,
"recall": 0.07317073170731707,
"f1": 0.10344827586206896
},
"wallonia": {
"true_positive": 32,
"false_positive": 98,
"false_negative": 128,
"precision": 0.24615384615384617,
"recall": 0.2,
"f1": 0.22068965517241382
}
},
"samples": {
"v72-assenede-field-cal-bg": {
"true_positive": 0,
"false_positive": 1,
"false_negative": 4,
"precision": 0.0,
"recall": 0.0,
"f1": 0.0
},
"v72-ganshoren-lowrise-cal": {
"true_positive": 13,
"false_positive": 16,
"false_negative": 49,
"precision": 0.4482758620689655,
"recall": 0.20967741935483872,
"f1": 0.2857142857142857
},
"v72-havelange-field-cal-bg": {
"true_positive": 25,
"false_positive": 26,
"false_negative": 109,
"precision": 0.49019607843137253,
"recall": 0.1865671641791045,
"f1": 0.27027027027027023
},
"v72-laeken-park-cal-bg": {
"true_positive": 0,
"false_positive": 0,
"false_negative": 3,
"precision": 1.0,
"recall": 0.0,
"f1": 0.0
},
"v72-libramont-lowrise-cal": {
"true_positive": 7,
"false_positive": 72,
"false_negative": 19,
"precision": 0.08860759493670886,
"recall": 0.2692307692307692,
"f1": 0.13333333333333336
},
"v72-zandhoven-lowrise-cal": {
"true_positive": 9,
"false_positive": 41,
"false_negative": 110,
"precision": 0.18,
"recall": 0.07563025210084033,
"f1": 0.10650887573964496
}
},
"pure_empty_false_positives": 0
},
{
"threshold": 0.25,
"aggregate": {
"true_positive": 49,
"false_positive": 109,
"false_negative": 299,
"precision": 0.310126582278481,
"recall": 0.14080459770114942,
"f1": 0.19367588932806323
},
"regions": {
"brussels": {
"true_positive": 12,
"false_positive": 11,
"false_negative": 53,
"precision": 0.5217391304347826,
"recall": 0.18461538461538463,
"f1": 0.2727272727272727
},
"flanders": {
"true_positive": 8,
"false_positive": 31,
"false_negative": 115,
"precision": 0.20512820512820512,
"recall": 0.06504065040650407,
"f1": 0.09876543209876544
},
"wallonia": {
"true_positive": 29,
"false_positive": 67,
"false_negative": 131,
"precision": 0.3020833333333333,
"recall": 0.18125,
"f1": 0.2265625
}
},
"samples": {
"v72-assenede-field-cal-bg": {
"true_positive": 0,
"false_positive": 1,
"false_negative": 4,
"precision": 0.0,
"recall": 0.0,
"f1": 0.0
},
"v72-ganshoren-lowrise-cal": {
"true_positive": 12,
"false_positive": 11,
"false_negative": 50,
"precision": 0.5217391304347826,
"recall": 0.1935483870967742,
"f1": 0.2823529411764706
},
"v72-havelange-field-cal-bg": {
"true_positive": 22,
"false_positive": 18,
"false_negative": 112,
"precision": 0.55,
"recall": 0.16417910447761194,
"f1": 0.2528735632183908
},
"v72-laeken-park-cal-bg": {
"true_positive": 0,
"false_positive": 0,
"false_negative": 3,
"precision": 1.0,
"recall": 0.0,
"f1": 0.0
},
"v72-libramont-lowrise-cal": {
"true_positive": 7,
"false_positive": 49,
"false_negative": 19,
"precision": 0.125,
"recall": 0.2692307692307692,
"f1": 0.17073170731707316
},
"v72-zandhoven-lowrise-cal": {
"true_positive": 8,
"false_positive": 30,
"false_negative": 111,
"precision": 0.21052631578947367,
"recall": 0.06722689075630252,
"f1": 0.10191082802547771
}
},
"pure_empty_false_positives": 0
},
{
"threshold": 0.3,
"aggregate": {
"true_positive": 44,
"false_positive": 77,
"false_negative": 304,
"precision": 0.36363636363636365,
"recall": 0.12643678160919541,
"f1": 0.18763326226012794
},
"regions": {
"brussels": {
"true_positive": 12,
"false_positive": 7,
"false_negative": 53,
"precision": 0.631578947368421,
"recall": 0.18461538461538463,
"f1": 0.2857142857142857
},
"flanders": {
"true_positive": 6,
"false_positive": 22,
"false_negative": 117,
"precision": 0.21428571428571427,
"recall": 0.04878048780487805,
"f1": 0.07947019867549668
},
"wallonia": {
"true_positive": 26,
"false_positive": 48,
"false_negative": 134,
"precision": 0.35135135135135137,
"recall": 0.1625,
"f1": 0.22222222222222224
}
},
"samples": {
"v72-assenede-field-cal-bg": {
"true_positive": 0,
"false_positive": 1,
"false_negative": 4,
"precision": 0.0,
"recall": 0.0,
"f1": 0.0
},
"v72-ganshoren-lowrise-cal": {
"true_positive": 12,
"false_positive": 7,
"false_negative": 50,
"precision": 0.631578947368421,
"recall": 0.1935483870967742,
"f1": 0.2962962962962963
},
"v72-havelange-field-cal-bg": {
"true_positive": 20,
"false_positive": 13,
"false_negative": 114,
"precision": 0.6060606060606061,
"recall": 0.14925373134328357,
"f1": 0.2395209580838323
},
"v72-laeken-park-cal-bg": {
"true_positive": 0,
"false_positive": 0,
"false_negative": 3,
"precision": 1.0,
"recall": 0.0,
"f1": 0.0
},
"v72-libramont-lowrise-cal": {
"true_positive": 6,
"false_positive": 35,
"false_negative": 20,
"precision": 0.14634146341463414,
"recall": 0.23076923076923078,
"f1": 0.17910447761194032
},
"v72-zandhoven-lowrise-cal": {
"true_positive": 6,
"false_positive": 21,
"false_negative": 113,
"precision": 0.2222222222222222,
"recall": 0.05042016806722689,
"f1": 0.08219178082191782
}
},
"pure_empty_false_positives": 0
},
{
"threshold": 0.35,
"aggregate": {
"true_positive": 33,
"false_positive": 56,
"false_negative": 315,
"precision": 0.3707865168539326,
"recall": 0.09482758620689655,
"f1": 0.15102974828375285
},
"regions": {
"brussels": {
"true_positive": 10,
"false_positive": 4,
"false_negative": 55,
"precision": 0.7142857142857143,
"recall": 0.15384615384615385,
"f1": 0.25316455696202533
},
"flanders": {
"true_positive": 2,
"false_positive": 16,
"false_negative": 121,
"precision": 0.1111111111111111,
"recall": 0.016260162601626018,
"f1": 0.028368794326241138
},
"wallonia": {
"true_positive": 21,
"false_positive": 36,
"false_negative": 139,
"precision": 0.3684210526315789,
"recall": 0.13125,
"f1": 0.1935483870967742
}
},
"samples": {
"v72-assenede-field-cal-bg": {
"true_positive": 0,
"false_positive": 1,
"false_negative": 4,
"precision": 0.0,
"recall": 0.0,
"f1": 0.0
},
"v72-ganshoren-lowrise-cal": {
"true_positive": 10,
"false_positive": 4,
"false_negative": 52,
"precision": 0.7142857142857143,
"recall": 0.16129032258064516,
"f1": 0.2631578947368421
},
"v72-havelange-field-cal-bg": {
"true_positive": 15,
"false_positive": 8,
"false_negative": 119,
"precision": 0.6521739130434783,
"recall": 0.11194029850746269,
"f1": 0.1910828025477707
},
"v72-laeken-park-cal-bg": {
"true_positive": 0,
"false_positive": 0,
"false_negative": 3,
"precision": 1.0,
"recall": 0.0,
"f1": 0.0
},
"v72-libramont-lowrise-cal": {
"true_positive": 6,
"false_positive": 28,
"false_negative": 20,
"precision": 0.17647058823529413,
"recall": 0.23076923076923078,
"f1": 0.20000000000000004
},
"v72-zandhoven-lowrise-cal": {
"true_positive": 2,
"false_positive": 15,
"false_negative": 117,
"precision": 0.11764705882352941,
"recall": 0.01680672268907563,
"f1": 0.029411764705882353
}
},
"pure_empty_false_positives": 0
},
{
"threshold": 0.4,
"aggregate": {
"true_positive": 26,
"false_positive": 36,
"false_negative": 322,
"precision": 0.41935483870967744,
"recall": 0.07471264367816093,
"f1": 0.12682926829268293
},
"regions": {
"brussels": {
"true_positive": 10,
"false_positive": 2,
"false_negative": 55,
"precision": 0.8333333333333334,
"recall": 0.15384615384615385,
"f1": 0.25974025974025977
},
"flanders": {
"true_positive": 2,
"false_positive": 12,
"false_negative": 121,
"precision": 0.14285714285714285,
"recall": 0.016260162601626018,
"f1": 0.029197080291970802
},
"wallonia": {
"true_positive": 14,
"false_positive": 22,
"false_negative": 146,
"precision": 0.3888888888888889,
"recall": 0.0875,
"f1": 0.14285714285714285
}
},
"samples": {
"v72-assenede-field-cal-bg": {
"true_positive": 0,
"false_positive": 0,
"false_negative": 4,
"precision": 1.0,
"recall": 0.0,
"f1": 0.0
},
"v72-ganshoren-lowrise-cal": {
"true_positive": 10,
"false_positive": 2,
"false_negative": 52,
"precision": 0.8333333333333334,
"recall": 0.16129032258064516,
"f1": 0.27027027027027023
},
"v72-havelange-field-cal-bg": {
"true_positive": 10,
"false_positive": 4,
"false_negative": 124,
"precision": 0.7142857142857143,
"recall": 0.07462686567164178,
"f1": 0.13513513513513511
},
"v72-laeken-park-cal-bg": {
"true_positive": 0,
"false_positive": 0,
"false_negative": 3,
"precision": 1.0,
"recall": 0.0,
"f1": 0.0
},
"v72-libramont-lowrise-cal": {
"true_positive": 4,
"false_positive": 18,
"false_negative": 22,
"precision": 0.18181818181818182,
"recall": 0.15384615384615385,
"f1": 0.16666666666666669
},
"v72-zandhoven-lowrise-cal": {
"true_positive": 2,
"false_positive": 12,
"false_negative": 117,
"precision": 0.14285714285714285,
"recall": 0.01680672268907563,
"f1": 0.030075187969924814
}
},
"pure_empty_false_positives": 0
}
]
}
@@ -0,0 +1,732 @@
{
"schema_version": 1,
"model": "/app/models/geointel-building-yolov8s-smallbld-minpx3-img640-ft30.pt",
"summary": "/app/storage/operator-data/building-be-v72-fresh-calibration-r1/diagnostic-yolo512-r2/yolo_tile_dataset_summary.json",
"split": "val",
"match_iou": 0.25,
"test_time_augmentation": false,
"inference_imgsz": 640,
"inference_batch": 8,
"max_detections_per_tile": 1000,
"nms_iou": 0.7,
"containment_nms": 1.0,
"box_scale": 1.0,
"box_offset_x": 0.0,
"box_offset_y": 0.0,
"additional_model": null,
"regional_models": {},
"regional_model_tile_counts": {},
"ensemble_mode": null,
"ensemble_match_iou": null,
"proposal_classifier": "/app/storage/training/experimental/building-be-v73-fresh-flanders-train-r1/proposal-filter-v74/proposal-filter.experimental.torchscript.pt",
"proposal_classifier_threshold": 0.15,
"proposal_crop_scale": 1.4,
"proposal_classifier_batch": 64,
"tile_count": 24,
"sweeps": [
{
"threshold": 0.05,
"aggregate": {
"true_positive": 85,
"false_positive": 415,
"false_negative": 263,
"precision": 0.17,
"recall": 0.2442528735632184,
"f1": 0.20047169811320756
},
"regions": {
"brussels": {
"true_positive": 25,
"false_positive": 42,
"false_negative": 40,
"precision": 0.373134328358209,
"recall": 0.38461538461538464,
"f1": 0.3787878787878788
},
"flanders": {
"true_positive": 14,
"false_positive": 115,
"false_negative": 109,
"precision": 0.10852713178294573,
"recall": 0.11382113821138211,
"f1": 0.1111111111111111
},
"wallonia": {
"true_positive": 46,
"false_positive": 258,
"false_negative": 114,
"precision": 0.1513157894736842,
"recall": 0.2875,
"f1": 0.1982758620689655
}
},
"samples": {
"v72-assenede-field-cal-bg": {
"true_positive": 0,
"false_positive": 5,
"false_negative": 4,
"precision": 0.0,
"recall": 0.0,
"f1": 0.0
},
"v72-ganshoren-lowrise-cal": {
"true_positive": 25,
"false_positive": 41,
"false_negative": 37,
"precision": 0.3787878787878788,
"recall": 0.4032258064516129,
"f1": 0.39062499999999994
},
"v72-havelange-field-cal-bg": {
"true_positive": 34,
"false_positive": 79,
"false_negative": 100,
"precision": 0.3008849557522124,
"recall": 0.2537313432835821,
"f1": 0.27530364372469635
},
"v72-laeken-park-cal-bg": {
"true_positive": 0,
"false_positive": 1,
"false_negative": 3,
"precision": 0.0,
"recall": 0.0,
"f1": 0.0
},
"v72-libramont-lowrise-cal": {
"true_positive": 12,
"false_positive": 179,
"false_negative": 14,
"precision": 0.06282722513089005,
"recall": 0.46153846153846156,
"f1": 0.11059907834101382
},
"v72-zandhoven-lowrise-cal": {
"true_positive": 14,
"false_positive": 110,
"false_negative": 105,
"precision": 0.11290322580645161,
"recall": 0.11764705882352941,
"f1": 0.11522633744855967
}
},
"pure_empty_false_positives": 0
},
{
"threshold": 0.1,
"aggregate": {
"true_positive": 70,
"false_positive": 266,
"false_negative": 278,
"precision": 0.20833333333333334,
"recall": 0.20114942528735633,
"f1": 0.2046783625730994
},
"regions": {
"brussels": {
"true_positive": 20,
"false_positive": 24,
"false_negative": 45,
"precision": 0.45454545454545453,
"recall": 0.3076923076923077,
"f1": 0.3669724770642202
},
"flanders": {
"true_positive": 11,
"false_positive": 63,
"false_negative": 112,
"precision": 0.14864864864864866,
"recall": 0.08943089430894309,
"f1": 0.11167512690355329
},
"wallonia": {
"true_positive": 39,
"false_positive": 179,
"false_negative": 121,
"precision": 0.17889908256880735,
"recall": 0.24375,
"f1": 0.20634920634920637
}
},
"samples": {
"v72-assenede-field-cal-bg": {
"true_positive": 0,
"false_positive": 3,
"false_negative": 4,
"precision": 0.0,
"recall": 0.0,
"f1": 0.0
},
"v72-ganshoren-lowrise-cal": {
"true_positive": 20,
"false_positive": 23,
"false_negative": 42,
"precision": 0.46511627906976744,
"recall": 0.3225806451612903,
"f1": 0.380952380952381
},
"v72-havelange-field-cal-bg": {
"true_positive": 28,
"false_positive": 51,
"false_negative": 106,
"precision": 0.35443037974683544,
"recall": 0.208955223880597,
"f1": 0.2629107981220657
},
"v72-laeken-park-cal-bg": {
"true_positive": 0,
"false_positive": 1,
"false_negative": 3,
"precision": 0.0,
"recall": 0.0,
"f1": 0.0
},
"v72-libramont-lowrise-cal": {
"true_positive": 11,
"false_positive": 128,
"false_negative": 15,
"precision": 0.07913669064748201,
"recall": 0.4230769230769231,
"f1": 0.1333333333333333
},
"v72-zandhoven-lowrise-cal": {
"true_positive": 11,
"false_positive": 60,
"false_negative": 108,
"precision": 0.15492957746478872,
"recall": 0.09243697478991597,
"f1": 0.11578947368421053
}
},
"pure_empty_false_positives": 0
},
{
"threshold": 0.15,
"aggregate": {
"true_positive": 58,
"false_positive": 198,
"false_negative": 290,
"precision": 0.2265625,
"recall": 0.16666666666666666,
"f1": 0.19205298013245034
},
"regions": {
"brussels": {
"true_positive": 14,
"false_positive": 19,
"false_negative": 51,
"precision": 0.42424242424242425,
"recall": 0.2153846153846154,
"f1": 0.28571428571428575
},
"flanders": {
"true_positive": 10,
"false_positive": 49,
"false_negative": 113,
"precision": 0.1694915254237288,
"recall": 0.08130081300813008,
"f1": 0.10989010989010989
},
"wallonia": {
"true_positive": 34,
"false_positive": 130,
"false_negative": 126,
"precision": 0.2073170731707317,
"recall": 0.2125,
"f1": 0.20987654320987653
}
},
"samples": {
"v72-assenede-field-cal-bg": {
"true_positive": 0,
"false_positive": 2,
"false_negative": 4,
"precision": 0.0,
"recall": 0.0,
"f1": 0.0
},
"v72-ganshoren-lowrise-cal": {
"true_positive": 14,
"false_positive": 18,
"false_negative": 48,
"precision": 0.4375,
"recall": 0.22580645161290322,
"f1": 0.2978723404255319
},
"v72-havelange-field-cal-bg": {
"true_positive": 25,
"false_positive": 35,
"false_negative": 109,
"precision": 0.4166666666666667,
"recall": 0.1865671641791045,
"f1": 0.25773195876288657
},
"v72-laeken-park-cal-bg": {
"true_positive": 0,
"false_positive": 1,
"false_negative": 3,
"precision": 0.0,
"recall": 0.0,
"f1": 0.0
},
"v72-libramont-lowrise-cal": {
"true_positive": 9,
"false_positive": 95,
"false_negative": 17,
"precision": 0.08653846153846154,
"recall": 0.34615384615384615,
"f1": 0.13846153846153844
},
"v72-zandhoven-lowrise-cal": {
"true_positive": 10,
"false_positive": 47,
"false_negative": 109,
"precision": 0.17543859649122806,
"recall": 0.08403361344537816,
"f1": 0.11363636363636363
}
},
"pure_empty_false_positives": 0
},
{
"threshold": 0.2,
"aggregate": {
"true_positive": 50,
"false_positive": 142,
"false_negative": 298,
"precision": 0.2604166666666667,
"recall": 0.14367816091954022,
"f1": 0.1851851851851852
},
"regions": {
"brussels": {
"true_positive": 13,
"false_positive": 16,
"false_negative": 52,
"precision": 0.4482758620689655,
"recall": 0.2,
"f1": 0.27659574468085113
},
"flanders": {
"true_positive": 9,
"false_positive": 36,
"false_negative": 114,
"precision": 0.2,
"recall": 0.07317073170731707,
"f1": 0.10714285714285712
},
"wallonia": {
"true_positive": 28,
"false_positive": 90,
"false_negative": 132,
"precision": 0.23728813559322035,
"recall": 0.175,
"f1": 0.2014388489208633
}
},
"samples": {
"v72-assenede-field-cal-bg": {
"true_positive": 0,
"false_positive": 1,
"false_negative": 4,
"precision": 0.0,
"recall": 0.0,
"f1": 0.0
},
"v72-ganshoren-lowrise-cal": {
"true_positive": 13,
"false_positive": 16,
"false_negative": 49,
"precision": 0.4482758620689655,
"recall": 0.20967741935483872,
"f1": 0.2857142857142857
},
"v72-havelange-field-cal-bg": {
"true_positive": 21,
"false_positive": 20,
"false_negative": 113,
"precision": 0.5121951219512195,
"recall": 0.15671641791044777,
"f1": 0.24000000000000002
},
"v72-laeken-park-cal-bg": {
"true_positive": 0,
"false_positive": 0,
"false_negative": 3,
"precision": 1.0,
"recall": 0.0,
"f1": 0.0
},
"v72-libramont-lowrise-cal": {
"true_positive": 7,
"false_positive": 70,
"false_negative": 19,
"precision": 0.09090909090909091,
"recall": 0.2692307692307692,
"f1": 0.1359223300970874
},
"v72-zandhoven-lowrise-cal": {
"true_positive": 9,
"false_positive": 35,
"false_negative": 110,
"precision": 0.20454545454545456,
"recall": 0.07563025210084033,
"f1": 0.11042944785276074
}
},
"pure_empty_false_positives": 0
},
{
"threshold": 0.25,
"aggregate": {
"true_positive": 46,
"false_positive": 101,
"false_negative": 302,
"precision": 0.3129251700680272,
"recall": 0.13218390804597702,
"f1": 0.18585858585858586
},
"regions": {
"brussels": {
"true_positive": 12,
"false_positive": 11,
"false_negative": 53,
"precision": 0.5217391304347826,
"recall": 0.18461538461538463,
"f1": 0.2727272727272727
},
"flanders": {
"true_positive": 8,
"false_positive": 27,
"false_negative": 115,
"precision": 0.22857142857142856,
"recall": 0.06504065040650407,
"f1": 0.10126582278481014
},
"wallonia": {
"true_positive": 26,
"false_positive": 63,
"false_negative": 134,
"precision": 0.29213483146067415,
"recall": 0.1625,
"f1": 0.20883534136546184
}
},
"samples": {
"v72-assenede-field-cal-bg": {
"true_positive": 0,
"false_positive": 1,
"false_negative": 4,
"precision": 0.0,
"recall": 0.0,
"f1": 0.0
},
"v72-ganshoren-lowrise-cal": {
"true_positive": 12,
"false_positive": 11,
"false_negative": 50,
"precision": 0.5217391304347826,
"recall": 0.1935483870967742,
"f1": 0.2823529411764706
},
"v72-havelange-field-cal-bg": {
"true_positive": 19,
"false_positive": 15,
"false_negative": 115,
"precision": 0.5588235294117647,
"recall": 0.1417910447761194,
"f1": 0.2261904761904762
},
"v72-laeken-park-cal-bg": {
"true_positive": 0,
"false_positive": 0,
"false_negative": 3,
"precision": 1.0,
"recall": 0.0,
"f1": 0.0
},
"v72-libramont-lowrise-cal": {
"true_positive": 7,
"false_positive": 48,
"false_negative": 19,
"precision": 0.12727272727272726,
"recall": 0.2692307692307692,
"f1": 0.1728395061728395
},
"v72-zandhoven-lowrise-cal": {
"true_positive": 8,
"false_positive": 26,
"false_negative": 111,
"precision": 0.23529411764705882,
"recall": 0.06722689075630252,
"f1": 0.10457516339869281
}
},
"pure_empty_false_positives": 0
},
{
"threshold": 0.3,
"aggregate": {
"true_positive": 41,
"false_positive": 71,
"false_negative": 307,
"precision": 0.36607142857142855,
"recall": 0.11781609195402298,
"f1": 0.1782608695652174
},
"regions": {
"brussels": {
"true_positive": 12,
"false_positive": 7,
"false_negative": 53,
"precision": 0.631578947368421,
"recall": 0.18461538461538463,
"f1": 0.2857142857142857
},
"flanders": {
"true_positive": 6,
"false_positive": 19,
"false_negative": 117,
"precision": 0.24,
"recall": 0.04878048780487805,
"f1": 0.08108108108108109
},
"wallonia": {
"true_positive": 23,
"false_positive": 45,
"false_negative": 137,
"precision": 0.3382352941176471,
"recall": 0.14375,
"f1": 0.20175438596491227
}
},
"samples": {
"v72-assenede-field-cal-bg": {
"true_positive": 0,
"false_positive": 1,
"false_negative": 4,
"precision": 0.0,
"recall": 0.0,
"f1": 0.0
},
"v72-ganshoren-lowrise-cal": {
"true_positive": 12,
"false_positive": 7,
"false_negative": 50,
"precision": 0.631578947368421,
"recall": 0.1935483870967742,
"f1": 0.2962962962962963
},
"v72-havelange-field-cal-bg": {
"true_positive": 17,
"false_positive": 11,
"false_negative": 117,
"precision": 0.6071428571428571,
"recall": 0.12686567164179105,
"f1": 0.20987654320987653
},
"v72-laeken-park-cal-bg": {
"true_positive": 0,
"false_positive": 0,
"false_negative": 3,
"precision": 1.0,
"recall": 0.0,
"f1": 0.0
},
"v72-libramont-lowrise-cal": {
"true_positive": 6,
"false_positive": 34,
"false_negative": 20,
"precision": 0.15,
"recall": 0.23076923076923078,
"f1": 0.18181818181818185
},
"v72-zandhoven-lowrise-cal": {
"true_positive": 6,
"false_positive": 18,
"false_negative": 113,
"precision": 0.25,
"recall": 0.05042016806722689,
"f1": 0.08391608391608392
}
},
"pure_empty_false_positives": 0
},
{
"threshold": 0.35,
"aggregate": {
"true_positive": 32,
"false_positive": 51,
"false_negative": 316,
"precision": 0.3855421686746988,
"recall": 0.09195402298850575,
"f1": 0.14849187935034802
},
"regions": {
"brussels": {
"true_positive": 10,
"false_positive": 4,
"false_negative": 55,
"precision": 0.7142857142857143,
"recall": 0.15384615384615385,
"f1": 0.25316455696202533
},
"flanders": {
"true_positive": 2,
"false_positive": 14,
"false_negative": 121,
"precision": 0.125,
"recall": 0.016260162601626018,
"f1": 0.02877697841726619
},
"wallonia": {
"true_positive": 20,
"false_positive": 33,
"false_negative": 140,
"precision": 0.37735849056603776,
"recall": 0.125,
"f1": 0.18779342723004694
}
},
"samples": {
"v72-assenede-field-cal-bg": {
"true_positive": 0,
"false_positive": 1,
"false_negative": 4,
"precision": 0.0,
"recall": 0.0,
"f1": 0.0
},
"v72-ganshoren-lowrise-cal": {
"true_positive": 10,
"false_positive": 4,
"false_negative": 52,
"precision": 0.7142857142857143,
"recall": 0.16129032258064516,
"f1": 0.2631578947368421
},
"v72-havelange-field-cal-bg": {
"true_positive": 14,
"false_positive": 6,
"false_negative": 120,
"precision": 0.7,
"recall": 0.1044776119402985,
"f1": 0.18181818181818182
},
"v72-laeken-park-cal-bg": {
"true_positive": 0,
"false_positive": 0,
"false_negative": 3,
"precision": 1.0,
"recall": 0.0,
"f1": 0.0
},
"v72-libramont-lowrise-cal": {
"true_positive": 6,
"false_positive": 27,
"false_negative": 20,
"precision": 0.18181818181818182,
"recall": 0.23076923076923078,
"f1": 0.2033898305084746
},
"v72-zandhoven-lowrise-cal": {
"true_positive": 2,
"false_positive": 13,
"false_negative": 117,
"precision": 0.13333333333333333,
"recall": 0.01680672268907563,
"f1": 0.029850746268656716
}
},
"pure_empty_false_positives": 0
},
{
"threshold": 0.4,
"aggregate": {
"true_positive": 26,
"false_positive": 34,
"false_negative": 322,
"precision": 0.43333333333333335,
"recall": 0.07471264367816093,
"f1": 0.12745098039215688
},
"regions": {
"brussels": {
"true_positive": 10,
"false_positive": 2,
"false_negative": 55,
"precision": 0.8333333333333334,
"recall": 0.15384615384615385,
"f1": 0.25974025974025977
},
"flanders": {
"true_positive": 2,
"false_positive": 11,
"false_negative": 121,
"precision": 0.15384615384615385,
"recall": 0.016260162601626018,
"f1": 0.029411764705882356
},
"wallonia": {
"true_positive": 14,
"false_positive": 21,
"false_negative": 146,
"precision": 0.4,
"recall": 0.0875,
"f1": 0.14358974358974355
}
},
"samples": {
"v72-assenede-field-cal-bg": {
"true_positive": 0,
"false_positive": 0,
"false_negative": 4,
"precision": 1.0,
"recall": 0.0,
"f1": 0.0
},
"v72-ganshoren-lowrise-cal": {
"true_positive": 10,
"false_positive": 2,
"false_negative": 52,
"precision": 0.8333333333333334,
"recall": 0.16129032258064516,
"f1": 0.27027027027027023
},
"v72-havelange-field-cal-bg": {
"true_positive": 10,
"false_positive": 4,
"false_negative": 124,
"precision": 0.7142857142857143,
"recall": 0.07462686567164178,
"f1": 0.13513513513513511
},
"v72-laeken-park-cal-bg": {
"true_positive": 0,
"false_positive": 0,
"false_negative": 3,
"precision": 1.0,
"recall": 0.0,
"f1": 0.0
},
"v72-libramont-lowrise-cal": {
"true_positive": 4,
"false_positive": 17,
"false_negative": 22,
"precision": 0.19047619047619047,
"recall": 0.15384615384615385,
"f1": 0.1702127659574468
},
"v72-zandhoven-lowrise-cal": {
"true_positive": 2,
"false_positive": 11,
"false_negative": 117,
"precision": 0.15384615384615385,
"recall": 0.01680672268907563,
"f1": 0.0303030303030303
}
},
"pure_empty_false_positives": 0
}
]
}
@@ -0,0 +1,732 @@
{
"schema_version": 1,
"model": "/app/models/geointel-building-yolov8s-smallbld-minpx3-img640-ft30.pt",
"summary": "/app/storage/operator-data/building-be-v72-fresh-calibration-r1/diagnostic-yolo512-r2/yolo_tile_dataset_summary.json",
"split": "val",
"match_iou": 0.25,
"test_time_augmentation": false,
"inference_imgsz": 640,
"inference_batch": 8,
"max_detections_per_tile": 1000,
"nms_iou": 0.7,
"containment_nms": 1.0,
"box_scale": 1.0,
"box_offset_x": 0.0,
"box_offset_y": 0.0,
"additional_model": null,
"regional_models": {},
"regional_model_tile_counts": {},
"ensemble_mode": null,
"ensemble_match_iou": null,
"proposal_classifier": "/app/storage/training/experimental/building-be-v73-fresh-flanders-train-r1/proposal-filter-v74/proposal-filter.experimental.torchscript.pt",
"proposal_classifier_threshold": 0.2,
"proposal_crop_scale": 1.4,
"proposal_classifier_batch": 64,
"tile_count": 24,
"sweeps": [
{
"threshold": 0.05,
"aggregate": {
"true_positive": 79,
"false_positive": 390,
"false_negative": 269,
"precision": 0.16844349680170576,
"recall": 0.22701149425287356,
"f1": 0.193390452876377
},
"regions": {
"brussels": {
"true_positive": 24,
"false_positive": 37,
"false_negative": 41,
"precision": 0.39344262295081966,
"recall": 0.36923076923076925,
"f1": 0.38095238095238093
},
"flanders": {
"true_positive": 12,
"false_positive": 105,
"false_negative": 111,
"precision": 0.10256410256410256,
"recall": 0.0975609756097561,
"f1": 0.1
},
"wallonia": {
"true_positive": 43,
"false_positive": 248,
"false_negative": 117,
"precision": 0.14776632302405499,
"recall": 0.26875,
"f1": 0.19068736141906875
}
},
"samples": {
"v72-assenede-field-cal-bg": {
"true_positive": 0,
"false_positive": 5,
"false_negative": 4,
"precision": 0.0,
"recall": 0.0,
"f1": 0.0
},
"v72-ganshoren-lowrise-cal": {
"true_positive": 24,
"false_positive": 36,
"false_negative": 38,
"precision": 0.4,
"recall": 0.3870967741935484,
"f1": 0.39344262295081966
},
"v72-havelange-field-cal-bg": {
"true_positive": 32,
"false_positive": 74,
"false_negative": 102,
"precision": 0.3018867924528302,
"recall": 0.23880597014925373,
"f1": 0.26666666666666666
},
"v72-laeken-park-cal-bg": {
"true_positive": 0,
"false_positive": 1,
"false_negative": 3,
"precision": 0.0,
"recall": 0.0,
"f1": 0.0
},
"v72-libramont-lowrise-cal": {
"true_positive": 11,
"false_positive": 174,
"false_negative": 15,
"precision": 0.05945945945945946,
"recall": 0.4230769230769231,
"f1": 0.1042654028436019
},
"v72-zandhoven-lowrise-cal": {
"true_positive": 12,
"false_positive": 100,
"false_negative": 107,
"precision": 0.10714285714285714,
"recall": 0.10084033613445378,
"f1": 0.10389610389610389
}
},
"pure_empty_false_positives": 0
},
{
"threshold": 0.1,
"aggregate": {
"true_positive": 66,
"false_positive": 249,
"false_negative": 282,
"precision": 0.20952380952380953,
"recall": 0.1896551724137931,
"f1": 0.1990950226244344
},
"regions": {
"brussels": {
"true_positive": 19,
"false_positive": 20,
"false_negative": 46,
"precision": 0.48717948717948717,
"recall": 0.2923076923076923,
"f1": 0.36538461538461536
},
"flanders": {
"true_positive": 9,
"false_positive": 57,
"false_negative": 114,
"precision": 0.13636363636363635,
"recall": 0.07317073170731707,
"f1": 0.09523809523809522
},
"wallonia": {
"true_positive": 38,
"false_positive": 172,
"false_negative": 122,
"precision": 0.18095238095238095,
"recall": 0.2375,
"f1": 0.20540540540540542
}
},
"samples": {
"v72-assenede-field-cal-bg": {
"true_positive": 0,
"false_positive": 3,
"false_negative": 4,
"precision": 0.0,
"recall": 0.0,
"f1": 0.0
},
"v72-ganshoren-lowrise-cal": {
"true_positive": 19,
"false_positive": 19,
"false_negative": 43,
"precision": 0.5,
"recall": 0.3064516129032258,
"f1": 0.38
},
"v72-havelange-field-cal-bg": {
"true_positive": 28,
"false_positive": 47,
"false_negative": 106,
"precision": 0.37333333333333335,
"recall": 0.208955223880597,
"f1": 0.2679425837320574
},
"v72-laeken-park-cal-bg": {
"true_positive": 0,
"false_positive": 1,
"false_negative": 3,
"precision": 0.0,
"recall": 0.0,
"f1": 0.0
},
"v72-libramont-lowrise-cal": {
"true_positive": 10,
"false_positive": 125,
"false_negative": 16,
"precision": 0.07407407407407407,
"recall": 0.38461538461538464,
"f1": 0.12422360248447205
},
"v72-zandhoven-lowrise-cal": {
"true_positive": 9,
"false_positive": 54,
"false_negative": 110,
"precision": 0.14285714285714285,
"recall": 0.07563025210084033,
"f1": 0.0989010989010989
}
},
"pure_empty_false_positives": 0
},
{
"threshold": 0.15,
"aggregate": {
"true_positive": 54,
"false_positive": 183,
"false_negative": 294,
"precision": 0.22784810126582278,
"recall": 0.15517241379310345,
"f1": 0.18461538461538463
},
"regions": {
"brussels": {
"true_positive": 13,
"false_positive": 15,
"false_negative": 52,
"precision": 0.4642857142857143,
"recall": 0.2,
"f1": 0.27956989247311825
},
"flanders": {
"true_positive": 8,
"false_positive": 43,
"false_negative": 115,
"precision": 0.1568627450980392,
"recall": 0.06504065040650407,
"f1": 0.09195402298850575
},
"wallonia": {
"true_positive": 33,
"false_positive": 125,
"false_negative": 127,
"precision": 0.2088607594936709,
"recall": 0.20625,
"f1": 0.20754716981132076
}
},
"samples": {
"v72-assenede-field-cal-bg": {
"true_positive": 0,
"false_positive": 2,
"false_negative": 4,
"precision": 0.0,
"recall": 0.0,
"f1": 0.0
},
"v72-ganshoren-lowrise-cal": {
"true_positive": 13,
"false_positive": 14,
"false_negative": 49,
"precision": 0.48148148148148145,
"recall": 0.20967741935483872,
"f1": 0.29213483146067415
},
"v72-havelange-field-cal-bg": {
"true_positive": 25,
"false_positive": 33,
"false_negative": 109,
"precision": 0.43103448275862066,
"recall": 0.1865671641791045,
"f1": 0.2604166666666667
},
"v72-laeken-park-cal-bg": {
"true_positive": 0,
"false_positive": 1,
"false_negative": 3,
"precision": 0.0,
"recall": 0.0,
"f1": 0.0
},
"v72-libramont-lowrise-cal": {
"true_positive": 8,
"false_positive": 92,
"false_negative": 18,
"precision": 0.08,
"recall": 0.3076923076923077,
"f1": 0.126984126984127
},
"v72-zandhoven-lowrise-cal": {
"true_positive": 8,
"false_positive": 41,
"false_negative": 111,
"precision": 0.16326530612244897,
"recall": 0.06722689075630252,
"f1": 0.09523809523809523
}
},
"pure_empty_false_positives": 0
},
{
"threshold": 0.2,
"aggregate": {
"true_positive": 47,
"false_positive": 132,
"false_negative": 301,
"precision": 0.26256983240223464,
"recall": 0.13505747126436782,
"f1": 0.17836812144212524
},
"regions": {
"brussels": {
"true_positive": 12,
"false_positive": 13,
"false_negative": 53,
"precision": 0.48,
"recall": 0.18461538461538463,
"f1": 0.2666666666666667
},
"flanders": {
"true_positive": 8,
"false_positive": 33,
"false_negative": 115,
"precision": 0.1951219512195122,
"recall": 0.06504065040650407,
"f1": 0.0975609756097561
},
"wallonia": {
"true_positive": 27,
"false_positive": 86,
"false_negative": 133,
"precision": 0.23893805309734514,
"recall": 0.16875,
"f1": 0.19780219780219782
}
},
"samples": {
"v72-assenede-field-cal-bg": {
"true_positive": 0,
"false_positive": 1,
"false_negative": 4,
"precision": 0.0,
"recall": 0.0,
"f1": 0.0
},
"v72-ganshoren-lowrise-cal": {
"true_positive": 12,
"false_positive": 13,
"false_negative": 50,
"precision": 0.48,
"recall": 0.1935483870967742,
"f1": 0.2758620689655172
},
"v72-havelange-field-cal-bg": {
"true_positive": 21,
"false_positive": 19,
"false_negative": 113,
"precision": 0.525,
"recall": 0.15671641791044777,
"f1": 0.2413793103448276
},
"v72-laeken-park-cal-bg": {
"true_positive": 0,
"false_positive": 0,
"false_negative": 3,
"precision": 1.0,
"recall": 0.0,
"f1": 0.0
},
"v72-libramont-lowrise-cal": {
"true_positive": 6,
"false_positive": 67,
"false_negative": 20,
"precision": 0.0821917808219178,
"recall": 0.23076923076923078,
"f1": 0.12121212121212122
},
"v72-zandhoven-lowrise-cal": {
"true_positive": 8,
"false_positive": 32,
"false_negative": 111,
"precision": 0.2,
"recall": 0.06722689075630252,
"f1": 0.10062893081761007
}
},
"pure_empty_false_positives": 0
},
{
"threshold": 0.25,
"aggregate": {
"true_positive": 43,
"false_positive": 92,
"false_negative": 305,
"precision": 0.31851851851851853,
"recall": 0.1235632183908046,
"f1": 0.1780538302277433
},
"regions": {
"brussels": {
"true_positive": 11,
"false_positive": 8,
"false_negative": 54,
"precision": 0.5789473684210527,
"recall": 0.16923076923076924,
"f1": 0.2619047619047619
},
"flanders": {
"true_positive": 7,
"false_positive": 24,
"false_negative": 116,
"precision": 0.22580645161290322,
"recall": 0.056910569105691054,
"f1": 0.0909090909090909
},
"wallonia": {
"true_positive": 25,
"false_positive": 60,
"false_negative": 135,
"precision": 0.29411764705882354,
"recall": 0.15625,
"f1": 0.20408163265306123
}
},
"samples": {
"v72-assenede-field-cal-bg": {
"true_positive": 0,
"false_positive": 1,
"false_negative": 4,
"precision": 0.0,
"recall": 0.0,
"f1": 0.0
},
"v72-ganshoren-lowrise-cal": {
"true_positive": 11,
"false_positive": 8,
"false_negative": 51,
"precision": 0.5789473684210527,
"recall": 0.1774193548387097,
"f1": 0.2716049382716049
},
"v72-havelange-field-cal-bg": {
"true_positive": 19,
"false_positive": 14,
"false_negative": 115,
"precision": 0.5757575757575758,
"recall": 0.1417910447761194,
"f1": 0.22754491017964074
},
"v72-laeken-park-cal-bg": {
"true_positive": 0,
"false_positive": 0,
"false_negative": 3,
"precision": 1.0,
"recall": 0.0,
"f1": 0.0
},
"v72-libramont-lowrise-cal": {
"true_positive": 6,
"false_positive": 46,
"false_negative": 20,
"precision": 0.11538461538461539,
"recall": 0.23076923076923078,
"f1": 0.15384615384615388
},
"v72-zandhoven-lowrise-cal": {
"true_positive": 7,
"false_positive": 23,
"false_negative": 112,
"precision": 0.23333333333333334,
"recall": 0.058823529411764705,
"f1": 0.09395973154362415
}
},
"pure_empty_false_positives": 0
},
{
"threshold": 0.3,
"aggregate": {
"true_positive": 38,
"false_positive": 66,
"false_negative": 310,
"precision": 0.36538461538461536,
"recall": 0.10919540229885058,
"f1": 0.168141592920354
},
"regions": {
"brussels": {
"true_positive": 11,
"false_positive": 6,
"false_negative": 54,
"precision": 0.6470588235294118,
"recall": 0.16923076923076924,
"f1": 0.2682926829268293
},
"flanders": {
"true_positive": 5,
"false_positive": 17,
"false_negative": 118,
"precision": 0.22727272727272727,
"recall": 0.04065040650406504,
"f1": 0.0689655172413793
},
"wallonia": {
"true_positive": 22,
"false_positive": 43,
"false_negative": 138,
"precision": 0.3384615384615385,
"recall": 0.1375,
"f1": 0.19555555555555557
}
},
"samples": {
"v72-assenede-field-cal-bg": {
"true_positive": 0,
"false_positive": 1,
"false_negative": 4,
"precision": 0.0,
"recall": 0.0,
"f1": 0.0
},
"v72-ganshoren-lowrise-cal": {
"true_positive": 11,
"false_positive": 6,
"false_negative": 51,
"precision": 0.6470588235294118,
"recall": 0.1774193548387097,
"f1": 0.2784810126582279
},
"v72-havelange-field-cal-bg": {
"true_positive": 17,
"false_positive": 10,
"false_negative": 117,
"precision": 0.6296296296296297,
"recall": 0.12686567164179105,
"f1": 0.2111801242236025
},
"v72-laeken-park-cal-bg": {
"true_positive": 0,
"false_positive": 0,
"false_negative": 3,
"precision": 1.0,
"recall": 0.0,
"f1": 0.0
},
"v72-libramont-lowrise-cal": {
"true_positive": 5,
"false_positive": 33,
"false_negative": 21,
"precision": 0.13157894736842105,
"recall": 0.19230769230769232,
"f1": 0.15625
},
"v72-zandhoven-lowrise-cal": {
"true_positive": 5,
"false_positive": 16,
"false_negative": 114,
"precision": 0.23809523809523808,
"recall": 0.04201680672268908,
"f1": 0.07142857142857142
}
},
"pure_empty_false_positives": 0
},
{
"threshold": 0.35,
"aggregate": {
"true_positive": 30,
"false_positive": 47,
"false_negative": 318,
"precision": 0.38961038961038963,
"recall": 0.08620689655172414,
"f1": 0.1411764705882353
},
"regions": {
"brussels": {
"true_positive": 10,
"false_positive": 3,
"false_negative": 55,
"precision": 0.7692307692307693,
"recall": 0.15384615384615385,
"f1": 0.2564102564102564
},
"flanders": {
"true_positive": 1,
"false_positive": 13,
"false_negative": 122,
"precision": 0.07142857142857142,
"recall": 0.008130081300813009,
"f1": 0.014598540145985401
},
"wallonia": {
"true_positive": 19,
"false_positive": 31,
"false_negative": 141,
"precision": 0.38,
"recall": 0.11875,
"f1": 0.18095238095238095
}
},
"samples": {
"v72-assenede-field-cal-bg": {
"true_positive": 0,
"false_positive": 1,
"false_negative": 4,
"precision": 0.0,
"recall": 0.0,
"f1": 0.0
},
"v72-ganshoren-lowrise-cal": {
"true_positive": 10,
"false_positive": 3,
"false_negative": 52,
"precision": 0.7692307692307693,
"recall": 0.16129032258064516,
"f1": 0.26666666666666666
},
"v72-havelange-field-cal-bg": {
"true_positive": 14,
"false_positive": 5,
"false_negative": 120,
"precision": 0.7368421052631579,
"recall": 0.1044776119402985,
"f1": 0.1830065359477124
},
"v72-laeken-park-cal-bg": {
"true_positive": 0,
"false_positive": 0,
"false_negative": 3,
"precision": 1.0,
"recall": 0.0,
"f1": 0.0
},
"v72-libramont-lowrise-cal": {
"true_positive": 5,
"false_positive": 26,
"false_negative": 21,
"precision": 0.16129032258064516,
"recall": 0.19230769230769232,
"f1": 0.17543859649122806
},
"v72-zandhoven-lowrise-cal": {
"true_positive": 1,
"false_positive": 12,
"false_negative": 118,
"precision": 0.07692307692307693,
"recall": 0.008403361344537815,
"f1": 0.01515151515151515
}
},
"pure_empty_false_positives": 0
},
{
"threshold": 0.4,
"aggregate": {
"true_positive": 24,
"false_positive": 31,
"false_negative": 324,
"precision": 0.43636363636363634,
"recall": 0.06896551724137931,
"f1": 0.11910669975186104
},
"regions": {
"brussels": {
"true_positive": 10,
"false_positive": 2,
"false_negative": 55,
"precision": 0.8333333333333334,
"recall": 0.15384615384615385,
"f1": 0.25974025974025977
},
"flanders": {
"true_positive": 1,
"false_positive": 10,
"false_negative": 122,
"precision": 0.09090909090909091,
"recall": 0.008130081300813009,
"f1": 0.01492537313432836
},
"wallonia": {
"true_positive": 13,
"false_positive": 19,
"false_negative": 147,
"precision": 0.40625,
"recall": 0.08125,
"f1": 0.13541666666666669
}
},
"samples": {
"v72-assenede-field-cal-bg": {
"true_positive": 0,
"false_positive": 0,
"false_negative": 4,
"precision": 1.0,
"recall": 0.0,
"f1": 0.0
},
"v72-ganshoren-lowrise-cal": {
"true_positive": 10,
"false_positive": 2,
"false_negative": 52,
"precision": 0.8333333333333334,
"recall": 0.16129032258064516,
"f1": 0.27027027027027023
},
"v72-havelange-field-cal-bg": {
"true_positive": 10,
"false_positive": 3,
"false_negative": 124,
"precision": 0.7692307692307693,
"recall": 0.07462686567164178,
"f1": 0.13605442176870747
},
"v72-laeken-park-cal-bg": {
"true_positive": 0,
"false_positive": 0,
"false_negative": 3,
"precision": 1.0,
"recall": 0.0,
"f1": 0.0
},
"v72-libramont-lowrise-cal": {
"true_positive": 3,
"false_positive": 16,
"false_negative": 23,
"precision": 0.15789473684210525,
"recall": 0.11538461538461539,
"f1": 0.13333333333333333
},
"v72-zandhoven-lowrise-cal": {
"true_positive": 1,
"false_positive": 10,
"false_negative": 118,
"precision": 0.09090909090909091,
"recall": 0.008403361344537815,
"f1": 0.015384615384615384
}
},
"pure_empty_false_positives": 0
}
]
}
@@ -0,0 +1,732 @@
{
"schema_version": 1,
"model": "/app/models/geointel-building-yolov8s-smallbld-minpx3-img640-ft30.pt",
"summary": "/app/storage/operator-data/building-be-v72-fresh-calibration-r1/diagnostic-yolo512-r2/yolo_tile_dataset_summary.json",
"split": "val",
"match_iou": 0.25,
"test_time_augmentation": false,
"inference_imgsz": 640,
"inference_batch": 8,
"max_detections_per_tile": 1000,
"nms_iou": 0.7,
"containment_nms": 1.0,
"box_scale": 1.0,
"box_offset_x": 0.0,
"box_offset_y": 0.0,
"additional_model": null,
"regional_models": {},
"regional_model_tile_counts": {},
"ensemble_mode": null,
"ensemble_match_iou": null,
"proposal_classifier": "/app/storage/training/experimental/building-be-v73-fresh-flanders-train-r1/proposal-filter-v74/proposal-filter.experimental.torchscript.pt",
"proposal_classifier_threshold": 0.3,
"proposal_crop_scale": 1.4,
"proposal_classifier_batch": 64,
"tile_count": 24,
"sweeps": [
{
"threshold": 0.05,
"aggregate": {
"true_positive": 71,
"false_positive": 356,
"false_negative": 277,
"precision": 0.16627634660421545,
"recall": 0.20402298850574713,
"f1": 0.18322580645161288
},
"regions": {
"brussels": {
"true_positive": 22,
"false_positive": 35,
"false_negative": 43,
"precision": 0.38596491228070173,
"recall": 0.3384615384615385,
"f1": 0.36065573770491804
},
"flanders": {
"true_positive": 10,
"false_positive": 85,
"false_negative": 113,
"precision": 0.10526315789473684,
"recall": 0.08130081300813008,
"f1": 0.09174311926605504
},
"wallonia": {
"true_positive": 39,
"false_positive": 236,
"false_negative": 121,
"precision": 0.14181818181818182,
"recall": 0.24375,
"f1": 0.1793103448275862
}
},
"samples": {
"v72-assenede-field-cal-bg": {
"true_positive": 0,
"false_positive": 3,
"false_negative": 4,
"precision": 0.0,
"recall": 0.0,
"f1": 0.0
},
"v72-ganshoren-lowrise-cal": {
"true_positive": 22,
"false_positive": 34,
"false_negative": 40,
"precision": 0.39285714285714285,
"recall": 0.3548387096774194,
"f1": 0.3728813559322034
},
"v72-havelange-field-cal-bg": {
"true_positive": 29,
"false_positive": 68,
"false_negative": 105,
"precision": 0.29896907216494845,
"recall": 0.21641791044776118,
"f1": 0.2510822510822511
},
"v72-laeken-park-cal-bg": {
"true_positive": 0,
"false_positive": 1,
"false_negative": 3,
"precision": 0.0,
"recall": 0.0,
"f1": 0.0
},
"v72-libramont-lowrise-cal": {
"true_positive": 10,
"false_positive": 168,
"false_negative": 16,
"precision": 0.056179775280898875,
"recall": 0.38461538461538464,
"f1": 0.09803921568627451
},
"v72-zandhoven-lowrise-cal": {
"true_positive": 10,
"false_positive": 82,
"false_negative": 109,
"precision": 0.10869565217391304,
"recall": 0.08403361344537816,
"f1": 0.0947867298578199
}
},
"pure_empty_false_positives": 0
},
{
"threshold": 0.1,
"aggregate": {
"true_positive": 57,
"false_positive": 225,
"false_negative": 291,
"precision": 0.20212765957446807,
"recall": 0.16379310344827586,
"f1": 0.18095238095238095
},
"regions": {
"brussels": {
"true_positive": 16,
"false_positive": 19,
"false_negative": 49,
"precision": 0.45714285714285713,
"recall": 0.24615384615384617,
"f1": 0.32
},
"flanders": {
"true_positive": 7,
"false_positive": 44,
"false_negative": 116,
"precision": 0.13725490196078433,
"recall": 0.056910569105691054,
"f1": 0.08045977011494253
},
"wallonia": {
"true_positive": 34,
"false_positive": 162,
"false_negative": 126,
"precision": 0.17346938775510204,
"recall": 0.2125,
"f1": 0.19101123595505617
}
},
"samples": {
"v72-assenede-field-cal-bg": {
"true_positive": 0,
"false_positive": 2,
"false_negative": 4,
"precision": 0.0,
"recall": 0.0,
"f1": 0.0
},
"v72-ganshoren-lowrise-cal": {
"true_positive": 16,
"false_positive": 18,
"false_negative": 46,
"precision": 0.47058823529411764,
"recall": 0.25806451612903225,
"f1": 0.3333333333333333
},
"v72-havelange-field-cal-bg": {
"true_positive": 25,
"false_positive": 42,
"false_negative": 109,
"precision": 0.373134328358209,
"recall": 0.1865671641791045,
"f1": 0.24875621890547264
},
"v72-laeken-park-cal-bg": {
"true_positive": 0,
"false_positive": 1,
"false_negative": 3,
"precision": 0.0,
"recall": 0.0,
"f1": 0.0
},
"v72-libramont-lowrise-cal": {
"true_positive": 9,
"false_positive": 120,
"false_negative": 17,
"precision": 0.06976744186046512,
"recall": 0.34615384615384615,
"f1": 0.11612903225806451
},
"v72-zandhoven-lowrise-cal": {
"true_positive": 7,
"false_positive": 42,
"false_negative": 112,
"precision": 0.14285714285714285,
"recall": 0.058823529411764705,
"f1": 0.08333333333333333
}
},
"pure_empty_false_positives": 0
},
{
"threshold": 0.15,
"aggregate": {
"true_positive": 47,
"false_positive": 163,
"false_negative": 301,
"precision": 0.22380952380952382,
"recall": 0.13505747126436782,
"f1": 0.16845878136200718
},
"regions": {
"brussels": {
"true_positive": 11,
"false_positive": 14,
"false_negative": 54,
"precision": 0.44,
"recall": 0.16923076923076924,
"f1": 0.24444444444444446
},
"flanders": {
"true_positive": 6,
"false_positive": 31,
"false_negative": 117,
"precision": 0.16216216216216217,
"recall": 0.04878048780487805,
"f1": 0.075
},
"wallonia": {
"true_positive": 30,
"false_positive": 118,
"false_negative": 130,
"precision": 0.20270270270270271,
"recall": 0.1875,
"f1": 0.1948051948051948
}
},
"samples": {
"v72-assenede-field-cal-bg": {
"true_positive": 0,
"false_positive": 1,
"false_negative": 4,
"precision": 0.0,
"recall": 0.0,
"f1": 0.0
},
"v72-ganshoren-lowrise-cal": {
"true_positive": 11,
"false_positive": 13,
"false_negative": 51,
"precision": 0.4583333333333333,
"recall": 0.1774193548387097,
"f1": 0.2558139534883721
},
"v72-havelange-field-cal-bg": {
"true_positive": 23,
"false_positive": 30,
"false_negative": 111,
"precision": 0.4339622641509434,
"recall": 0.17164179104477612,
"f1": 0.24598930481283418
},
"v72-laeken-park-cal-bg": {
"true_positive": 0,
"false_positive": 1,
"false_negative": 3,
"precision": 0.0,
"recall": 0.0,
"f1": 0.0
},
"v72-libramont-lowrise-cal": {
"true_positive": 7,
"false_positive": 88,
"false_negative": 19,
"precision": 0.07368421052631578,
"recall": 0.2692307692307692,
"f1": 0.11570247933884296
},
"v72-zandhoven-lowrise-cal": {
"true_positive": 6,
"false_positive": 30,
"false_negative": 113,
"precision": 0.16666666666666666,
"recall": 0.05042016806722689,
"f1": 0.07741935483870967
}
},
"pure_empty_false_positives": 0
},
{
"threshold": 0.2,
"aggregate": {
"true_positive": 41,
"false_positive": 116,
"false_negative": 307,
"precision": 0.2611464968152866,
"recall": 0.11781609195402298,
"f1": 0.16237623762376235
},
"regions": {
"brussels": {
"true_positive": 10,
"false_positive": 12,
"false_negative": 55,
"precision": 0.45454545454545453,
"recall": 0.15384615384615385,
"f1": 0.22988505747126442
},
"flanders": {
"true_positive": 6,
"false_positive": 23,
"false_negative": 117,
"precision": 0.20689655172413793,
"recall": 0.04878048780487805,
"f1": 0.07894736842105263
},
"wallonia": {
"true_positive": 25,
"false_positive": 81,
"false_negative": 135,
"precision": 0.2358490566037736,
"recall": 0.15625,
"f1": 0.1879699248120301
}
},
"samples": {
"v72-assenede-field-cal-bg": {
"true_positive": 0,
"false_positive": 0,
"false_negative": 4,
"precision": 1.0,
"recall": 0.0,
"f1": 0.0
},
"v72-ganshoren-lowrise-cal": {
"true_positive": 10,
"false_positive": 12,
"false_negative": 52,
"precision": 0.45454545454545453,
"recall": 0.16129032258064516,
"f1": 0.23809523809523805
},
"v72-havelange-field-cal-bg": {
"true_positive": 20,
"false_positive": 18,
"false_negative": 114,
"precision": 0.5263157894736842,
"recall": 0.14925373134328357,
"f1": 0.2325581395348837
},
"v72-laeken-park-cal-bg": {
"true_positive": 0,
"false_positive": 0,
"false_negative": 3,
"precision": 1.0,
"recall": 0.0,
"f1": 0.0
},
"v72-libramont-lowrise-cal": {
"true_positive": 5,
"false_positive": 63,
"false_negative": 21,
"precision": 0.07352941176470588,
"recall": 0.19230769230769232,
"f1": 0.10638297872340427
},
"v72-zandhoven-lowrise-cal": {
"true_positive": 6,
"false_positive": 23,
"false_negative": 113,
"precision": 0.20689655172413793,
"recall": 0.05042016806722689,
"f1": 0.08108108108108107
}
},
"pure_empty_false_positives": 0
},
{
"threshold": 0.25,
"aggregate": {
"true_positive": 38,
"false_positive": 79,
"false_negative": 310,
"precision": 0.3247863247863248,
"recall": 0.10919540229885058,
"f1": 0.16344086021505377
},
"regions": {
"brussels": {
"true_positive": 10,
"false_positive": 8,
"false_negative": 55,
"precision": 0.5555555555555556,
"recall": 0.15384615384615385,
"f1": 0.24096385542168675
},
"flanders": {
"true_positive": 6,
"false_positive": 15,
"false_negative": 117,
"precision": 0.2857142857142857,
"recall": 0.04878048780487805,
"f1": 0.08333333333333334
},
"wallonia": {
"true_positive": 22,
"false_positive": 56,
"false_negative": 138,
"precision": 0.28205128205128205,
"recall": 0.1375,
"f1": 0.18487394957983194
}
},
"samples": {
"v72-assenede-field-cal-bg": {
"true_positive": 0,
"false_positive": 0,
"false_negative": 4,
"precision": 1.0,
"recall": 0.0,
"f1": 0.0
},
"v72-ganshoren-lowrise-cal": {
"true_positive": 10,
"false_positive": 8,
"false_negative": 52,
"precision": 0.5555555555555556,
"recall": 0.16129032258064516,
"f1": 0.25
},
"v72-havelange-field-cal-bg": {
"true_positive": 17,
"false_positive": 14,
"false_negative": 117,
"precision": 0.5483870967741935,
"recall": 0.12686567164179105,
"f1": 0.20606060606060606
},
"v72-laeken-park-cal-bg": {
"true_positive": 0,
"false_positive": 0,
"false_negative": 3,
"precision": 1.0,
"recall": 0.0,
"f1": 0.0
},
"v72-libramont-lowrise-cal": {
"true_positive": 5,
"false_positive": 42,
"false_negative": 21,
"precision": 0.10638297872340426,
"recall": 0.19230769230769232,
"f1": 0.136986301369863
},
"v72-zandhoven-lowrise-cal": {
"true_positive": 6,
"false_positive": 15,
"false_negative": 113,
"precision": 0.2857142857142857,
"recall": 0.05042016806722689,
"f1": 0.08571428571428572
}
},
"pure_empty_false_positives": 0
},
{
"threshold": 0.3,
"aggregate": {
"true_positive": 33,
"false_positive": 55,
"false_negative": 315,
"precision": 0.375,
"recall": 0.09482758620689655,
"f1": 0.1513761467889908
},
"regions": {
"brussels": {
"true_positive": 10,
"false_positive": 6,
"false_negative": 55,
"precision": 0.625,
"recall": 0.15384615384615385,
"f1": 0.2469135802469136
},
"flanders": {
"true_positive": 4,
"false_positive": 9,
"false_negative": 119,
"precision": 0.3076923076923077,
"recall": 0.032520325203252036,
"f1": 0.05882352941176471
},
"wallonia": {
"true_positive": 19,
"false_positive": 40,
"false_negative": 141,
"precision": 0.3220338983050847,
"recall": 0.11875,
"f1": 0.1735159817351598
}
},
"samples": {
"v72-assenede-field-cal-bg": {
"true_positive": 0,
"false_positive": 0,
"false_negative": 4,
"precision": 1.0,
"recall": 0.0,
"f1": 0.0
},
"v72-ganshoren-lowrise-cal": {
"true_positive": 10,
"false_positive": 6,
"false_negative": 52,
"precision": 0.625,
"recall": 0.16129032258064516,
"f1": 0.2564102564102564
},
"v72-havelange-field-cal-bg": {
"true_positive": 15,
"false_positive": 10,
"false_negative": 119,
"precision": 0.6,
"recall": 0.11194029850746269,
"f1": 0.18867924528301888
},
"v72-laeken-park-cal-bg": {
"true_positive": 0,
"false_positive": 0,
"false_negative": 3,
"precision": 1.0,
"recall": 0.0,
"f1": 0.0
},
"v72-libramont-lowrise-cal": {
"true_positive": 4,
"false_positive": 30,
"false_negative": 22,
"precision": 0.11764705882352941,
"recall": 0.15384615384615385,
"f1": 0.13333333333333333
},
"v72-zandhoven-lowrise-cal": {
"true_positive": 4,
"false_positive": 9,
"false_negative": 115,
"precision": 0.3076923076923077,
"recall": 0.03361344537815126,
"f1": 0.0606060606060606
}
},
"pure_empty_false_positives": 0
},
{
"threshold": 0.35,
"aggregate": {
"true_positive": 27,
"false_positive": 37,
"false_negative": 321,
"precision": 0.421875,
"recall": 0.07758620689655173,
"f1": 0.13106796116504857
},
"regions": {
"brussels": {
"true_positive": 10,
"false_positive": 3,
"false_negative": 55,
"precision": 0.7692307692307693,
"recall": 0.15384615384615385,
"f1": 0.2564102564102564
},
"flanders": {
"true_positive": 1,
"false_positive": 5,
"false_negative": 122,
"precision": 0.16666666666666666,
"recall": 0.008130081300813009,
"f1": 0.01550387596899225
},
"wallonia": {
"true_positive": 16,
"false_positive": 29,
"false_negative": 144,
"precision": 0.35555555555555557,
"recall": 0.1,
"f1": 0.15609756097560973
}
},
"samples": {
"v72-assenede-field-cal-bg": {
"true_positive": 0,
"false_positive": 0,
"false_negative": 4,
"precision": 1.0,
"recall": 0.0,
"f1": 0.0
},
"v72-ganshoren-lowrise-cal": {
"true_positive": 10,
"false_positive": 3,
"false_negative": 52,
"precision": 0.7692307692307693,
"recall": 0.16129032258064516,
"f1": 0.26666666666666666
},
"v72-havelange-field-cal-bg": {
"true_positive": 12,
"false_positive": 5,
"false_negative": 122,
"precision": 0.7058823529411765,
"recall": 0.08955223880597014,
"f1": 0.15894039735099338
},
"v72-laeken-park-cal-bg": {
"true_positive": 0,
"false_positive": 0,
"false_negative": 3,
"precision": 1.0,
"recall": 0.0,
"f1": 0.0
},
"v72-libramont-lowrise-cal": {
"true_positive": 4,
"false_positive": 24,
"false_negative": 22,
"precision": 0.14285714285714285,
"recall": 0.15384615384615385,
"f1": 0.14814814814814817
},
"v72-zandhoven-lowrise-cal": {
"true_positive": 1,
"false_positive": 5,
"false_negative": 118,
"precision": 0.16666666666666666,
"recall": 0.008403361344537815,
"f1": 0.016
}
},
"pure_empty_false_positives": 0
},
{
"threshold": 0.4,
"aggregate": {
"true_positive": 22,
"false_positive": 23,
"false_negative": 326,
"precision": 0.4888888888888889,
"recall": 0.06321839080459771,
"f1": 0.11195928753180662
},
"regions": {
"brussels": {
"true_positive": 10,
"false_positive": 2,
"false_negative": 55,
"precision": 0.8333333333333334,
"recall": 0.15384615384615385,
"f1": 0.25974025974025977
},
"flanders": {
"true_positive": 1,
"false_positive": 4,
"false_negative": 122,
"precision": 0.2,
"recall": 0.008130081300813009,
"f1": 0.015625000000000003
},
"wallonia": {
"true_positive": 11,
"false_positive": 17,
"false_negative": 149,
"precision": 0.39285714285714285,
"recall": 0.06875,
"f1": 0.11702127659574468
}
},
"samples": {
"v72-assenede-field-cal-bg": {
"true_positive": 0,
"false_positive": 0,
"false_negative": 4,
"precision": 1.0,
"recall": 0.0,
"f1": 0.0
},
"v72-ganshoren-lowrise-cal": {
"true_positive": 10,
"false_positive": 2,
"false_negative": 52,
"precision": 0.8333333333333334,
"recall": 0.16129032258064516,
"f1": 0.27027027027027023
},
"v72-havelange-field-cal-bg": {
"true_positive": 8,
"false_positive": 3,
"false_negative": 126,
"precision": 0.7272727272727273,
"recall": 0.05970149253731343,
"f1": 0.11034482758620691
},
"v72-laeken-park-cal-bg": {
"true_positive": 0,
"false_positive": 0,
"false_negative": 3,
"precision": 1.0,
"recall": 0.0,
"f1": 0.0
},
"v72-libramont-lowrise-cal": {
"true_positive": 3,
"false_positive": 14,
"false_negative": 23,
"precision": 0.17647058823529413,
"recall": 0.11538461538461539,
"f1": 0.13953488372093026
},
"v72-zandhoven-lowrise-cal": {
"true_positive": 1,
"false_positive": 4,
"false_negative": 118,
"precision": 0.2,
"recall": 0.008403361344537815,
"f1": 0.016129032258064516
}
},
"pure_empty_false_positives": 0
}
]
}
@@ -0,0 +1,732 @@
{
"schema_version": 1,
"model": "/app/models/geointel-building-yolov8s-smallbld-minpx3-img640-ft30.pt",
"summary": "/app/storage/operator-data/building-be-v72-fresh-calibration-r1/diagnostic-yolo512-r2/yolo_tile_dataset_summary.json",
"split": "val",
"match_iou": 0.25,
"test_time_augmentation": false,
"inference_imgsz": 640,
"inference_batch": 8,
"max_detections_per_tile": 1000,
"nms_iou": 0.7,
"containment_nms": 1.0,
"box_scale": 1.0,
"box_offset_x": 0.0,
"box_offset_y": 0.0,
"additional_model": null,
"regional_models": {},
"regional_model_tile_counts": {},
"ensemble_mode": null,
"ensemble_match_iou": null,
"proposal_classifier": "/app/storage/training/experimental/building-be-v73-fresh-flanders-train-r1/proposal-filter-v74/proposal-filter.experimental.torchscript.pt",
"proposal_classifier_threshold": 0.5,
"proposal_crop_scale": 1.4,
"proposal_classifier_batch": 64,
"tile_count": 24,
"sweeps": [
{
"threshold": 0.05,
"aggregate": {
"true_positive": 63,
"false_positive": 298,
"false_negative": 285,
"precision": 0.1745152354570637,
"recall": 0.1810344827586207,
"f1": 0.17771509167842034
},
"regions": {
"brussels": {
"true_positive": 20,
"false_positive": 32,
"false_negative": 45,
"precision": 0.38461538461538464,
"recall": 0.3076923076923077,
"f1": 0.3418803418803419
},
"flanders": {
"true_positive": 8,
"false_positive": 63,
"false_negative": 115,
"precision": 0.11267605633802817,
"recall": 0.06504065040650407,
"f1": 0.08247422680412371
},
"wallonia": {
"true_positive": 35,
"false_positive": 203,
"false_negative": 125,
"precision": 0.14705882352941177,
"recall": 0.21875,
"f1": 0.17587939698492464
}
},
"samples": {
"v72-assenede-field-cal-bg": {
"true_positive": 0,
"false_positive": 2,
"false_negative": 4,
"precision": 0.0,
"recall": 0.0,
"f1": 0.0
},
"v72-ganshoren-lowrise-cal": {
"true_positive": 20,
"false_positive": 31,
"false_negative": 42,
"precision": 0.39215686274509803,
"recall": 0.3225806451612903,
"f1": 0.35398230088495575
},
"v72-havelange-field-cal-bg": {
"true_positive": 27,
"false_positive": 56,
"false_negative": 107,
"precision": 0.3253012048192771,
"recall": 0.20149253731343283,
"f1": 0.24884792626728114
},
"v72-laeken-park-cal-bg": {
"true_positive": 0,
"false_positive": 1,
"false_negative": 3,
"precision": 0.0,
"recall": 0.0,
"f1": 0.0
},
"v72-libramont-lowrise-cal": {
"true_positive": 8,
"false_positive": 147,
"false_negative": 18,
"precision": 0.05161290322580645,
"recall": 0.3076923076923077,
"f1": 0.08839779005524862
},
"v72-zandhoven-lowrise-cal": {
"true_positive": 8,
"false_positive": 61,
"false_negative": 111,
"precision": 0.11594202898550725,
"recall": 0.06722689075630252,
"f1": 0.0851063829787234
}
},
"pure_empty_false_positives": 0
},
{
"threshold": 0.1,
"aggregate": {
"true_positive": 50,
"false_positive": 187,
"false_negative": 298,
"precision": 0.2109704641350211,
"recall": 0.14367816091954022,
"f1": 0.17094017094017094
},
"regions": {
"brussels": {
"true_positive": 15,
"false_positive": 19,
"false_negative": 50,
"precision": 0.4411764705882353,
"recall": 0.23076923076923078,
"f1": 0.303030303030303
},
"flanders": {
"true_positive": 5,
"false_positive": 31,
"false_negative": 118,
"precision": 0.1388888888888889,
"recall": 0.04065040650406504,
"f1": 0.06289308176100629
},
"wallonia": {
"true_positive": 30,
"false_positive": 137,
"false_negative": 130,
"precision": 0.17964071856287425,
"recall": 0.1875,
"f1": 0.1834862385321101
}
},
"samples": {
"v72-assenede-field-cal-bg": {
"true_positive": 0,
"false_positive": 1,
"false_negative": 4,
"precision": 0.0,
"recall": 0.0,
"f1": 0.0
},
"v72-ganshoren-lowrise-cal": {
"true_positive": 15,
"false_positive": 18,
"false_negative": 47,
"precision": 0.45454545454545453,
"recall": 0.24193548387096775,
"f1": 0.3157894736842105
},
"v72-havelange-field-cal-bg": {
"true_positive": 23,
"false_positive": 33,
"false_negative": 111,
"precision": 0.4107142857142857,
"recall": 0.17164179104477612,
"f1": 0.2421052631578947
},
"v72-laeken-park-cal-bg": {
"true_positive": 0,
"false_positive": 1,
"false_negative": 3,
"precision": 0.0,
"recall": 0.0,
"f1": 0.0
},
"v72-libramont-lowrise-cal": {
"true_positive": 7,
"false_positive": 104,
"false_negative": 19,
"precision": 0.06306306306306306,
"recall": 0.2692307692307692,
"f1": 0.1021897810218978
},
"v72-zandhoven-lowrise-cal": {
"true_positive": 5,
"false_positive": 30,
"false_negative": 114,
"precision": 0.14285714285714285,
"recall": 0.04201680672268908,
"f1": 0.06493506493506493
}
},
"pure_empty_false_positives": 0
},
{
"threshold": 0.15,
"aggregate": {
"true_positive": 42,
"false_positive": 129,
"false_negative": 306,
"precision": 0.24561403508771928,
"recall": 0.1206896551724138,
"f1": 0.16184971098265896
},
"regions": {
"brussels": {
"true_positive": 10,
"false_positive": 14,
"false_negative": 55,
"precision": 0.4166666666666667,
"recall": 0.15384615384615385,
"f1": 0.22471910112359555
},
"flanders": {
"true_positive": 4,
"false_positive": 20,
"false_negative": 119,
"precision": 0.16666666666666666,
"recall": 0.032520325203252036,
"f1": 0.05442176870748299
},
"wallonia": {
"true_positive": 28,
"false_positive": 95,
"false_negative": 132,
"precision": 0.22764227642276422,
"recall": 0.175,
"f1": 0.19787985865724383
}
},
"samples": {
"v72-assenede-field-cal-bg": {
"true_positive": 0,
"false_positive": 1,
"false_negative": 4,
"precision": 0.0,
"recall": 0.0,
"f1": 0.0
},
"v72-ganshoren-lowrise-cal": {
"true_positive": 10,
"false_positive": 13,
"false_negative": 52,
"precision": 0.43478260869565216,
"recall": 0.16129032258064516,
"f1": 0.23529411764705882
},
"v72-havelange-field-cal-bg": {
"true_positive": 22,
"false_positive": 21,
"false_negative": 112,
"precision": 0.5116279069767442,
"recall": 0.16417910447761194,
"f1": 0.2485875706214689
},
"v72-laeken-park-cal-bg": {
"true_positive": 0,
"false_positive": 1,
"false_negative": 3,
"precision": 0.0,
"recall": 0.0,
"f1": 0.0
},
"v72-libramont-lowrise-cal": {
"true_positive": 6,
"false_positive": 74,
"false_negative": 20,
"precision": 0.075,
"recall": 0.23076923076923078,
"f1": 0.11320754716981132
},
"v72-zandhoven-lowrise-cal": {
"true_positive": 4,
"false_positive": 19,
"false_negative": 115,
"precision": 0.17391304347826086,
"recall": 0.03361344537815126,
"f1": 0.056338028169014086
}
},
"pure_empty_false_positives": 0
},
{
"threshold": 0.2,
"aggregate": {
"true_positive": 36,
"false_positive": 92,
"false_negative": 312,
"precision": 0.28125,
"recall": 0.10344827586206896,
"f1": 0.15126050420168066
},
"regions": {
"brussels": {
"true_positive": 9,
"false_positive": 12,
"false_negative": 56,
"precision": 0.42857142857142855,
"recall": 0.13846153846153847,
"f1": 0.20930232558139533
},
"flanders": {
"true_positive": 4,
"false_positive": 15,
"false_negative": 119,
"precision": 0.21052631578947367,
"recall": 0.032520325203252036,
"f1": 0.056338028169014086
},
"wallonia": {
"true_positive": 23,
"false_positive": 65,
"false_negative": 137,
"precision": 0.26136363636363635,
"recall": 0.14375,
"f1": 0.18548387096774194
}
},
"samples": {
"v72-assenede-field-cal-bg": {
"true_positive": 0,
"false_positive": 0,
"false_negative": 4,
"precision": 1.0,
"recall": 0.0,
"f1": 0.0
},
"v72-ganshoren-lowrise-cal": {
"true_positive": 9,
"false_positive": 12,
"false_negative": 53,
"precision": 0.42857142857142855,
"recall": 0.14516129032258066,
"f1": 0.21686746987951808
},
"v72-havelange-field-cal-bg": {
"true_positive": 19,
"false_positive": 12,
"false_negative": 115,
"precision": 0.6129032258064516,
"recall": 0.1417910447761194,
"f1": 0.2303030303030303
},
"v72-laeken-park-cal-bg": {
"true_positive": 0,
"false_positive": 0,
"false_negative": 3,
"precision": 1.0,
"recall": 0.0,
"f1": 0.0
},
"v72-libramont-lowrise-cal": {
"true_positive": 4,
"false_positive": 53,
"false_negative": 22,
"precision": 0.07017543859649122,
"recall": 0.15384615384615385,
"f1": 0.09638554216867469
},
"v72-zandhoven-lowrise-cal": {
"true_positive": 4,
"false_positive": 15,
"false_negative": 115,
"precision": 0.21052631578947367,
"recall": 0.03361344537815126,
"f1": 0.057971014492753624
}
},
"pure_empty_false_positives": 0
},
{
"threshold": 0.25,
"aggregate": {
"true_positive": 32,
"false_positive": 65,
"false_negative": 316,
"precision": 0.32989690721649484,
"recall": 0.09195402298850575,
"f1": 0.14382022471910114
},
"regions": {
"brussels": {
"true_positive": 9,
"false_positive": 8,
"false_negative": 56,
"precision": 0.5294117647058824,
"recall": 0.13846153846153847,
"f1": 0.21951219512195122
},
"flanders": {
"true_positive": 4,
"false_positive": 11,
"false_negative": 119,
"precision": 0.26666666666666666,
"recall": 0.032520325203252036,
"f1": 0.057971014492753624
},
"wallonia": {
"true_positive": 19,
"false_positive": 46,
"false_negative": 141,
"precision": 0.2923076923076923,
"recall": 0.11875,
"f1": 0.1688888888888889
}
},
"samples": {
"v72-assenede-field-cal-bg": {
"true_positive": 0,
"false_positive": 0,
"false_negative": 4,
"precision": 1.0,
"recall": 0.0,
"f1": 0.0
},
"v72-ganshoren-lowrise-cal": {
"true_positive": 9,
"false_positive": 8,
"false_negative": 53,
"precision": 0.5294117647058824,
"recall": 0.14516129032258066,
"f1": 0.2278481012658228
},
"v72-havelange-field-cal-bg": {
"true_positive": 15,
"false_positive": 10,
"false_negative": 119,
"precision": 0.6,
"recall": 0.11194029850746269,
"f1": 0.18867924528301888
},
"v72-laeken-park-cal-bg": {
"true_positive": 0,
"false_positive": 0,
"false_negative": 3,
"precision": 1.0,
"recall": 0.0,
"f1": 0.0
},
"v72-libramont-lowrise-cal": {
"true_positive": 4,
"false_positive": 36,
"false_negative": 22,
"precision": 0.1,
"recall": 0.15384615384615385,
"f1": 0.12121212121212123
},
"v72-zandhoven-lowrise-cal": {
"true_positive": 4,
"false_positive": 11,
"false_negative": 115,
"precision": 0.26666666666666666,
"recall": 0.03361344537815126,
"f1": 0.05970149253731343
}
},
"pure_empty_false_positives": 0
},
{
"threshold": 0.3,
"aggregate": {
"true_positive": 27,
"false_positive": 45,
"false_negative": 321,
"precision": 0.375,
"recall": 0.07758620689655173,
"f1": 0.1285714285714286
},
"regions": {
"brussels": {
"true_positive": 9,
"false_positive": 6,
"false_negative": 56,
"precision": 0.6,
"recall": 0.13846153846153847,
"f1": 0.22499999999999998
},
"flanders": {
"true_positive": 2,
"false_positive": 6,
"false_negative": 121,
"precision": 0.25,
"recall": 0.016260162601626018,
"f1": 0.030534351145038174
},
"wallonia": {
"true_positive": 16,
"false_positive": 33,
"false_negative": 144,
"precision": 0.32653061224489793,
"recall": 0.1,
"f1": 0.15311004784688992
}
},
"samples": {
"v72-assenede-field-cal-bg": {
"true_positive": 0,
"false_positive": 0,
"false_negative": 4,
"precision": 1.0,
"recall": 0.0,
"f1": 0.0
},
"v72-ganshoren-lowrise-cal": {
"true_positive": 9,
"false_positive": 6,
"false_negative": 53,
"precision": 0.6,
"recall": 0.14516129032258066,
"f1": 0.2337662337662338
},
"v72-havelange-field-cal-bg": {
"true_positive": 13,
"false_positive": 7,
"false_negative": 121,
"precision": 0.65,
"recall": 0.09701492537313433,
"f1": 0.1688311688311688
},
"v72-laeken-park-cal-bg": {
"true_positive": 0,
"false_positive": 0,
"false_negative": 3,
"precision": 1.0,
"recall": 0.0,
"f1": 0.0
},
"v72-libramont-lowrise-cal": {
"true_positive": 3,
"false_positive": 26,
"false_negative": 23,
"precision": 0.10344827586206896,
"recall": 0.11538461538461539,
"f1": 0.10909090909090909
},
"v72-zandhoven-lowrise-cal": {
"true_positive": 2,
"false_positive": 6,
"false_negative": 117,
"precision": 0.25,
"recall": 0.01680672268907563,
"f1": 0.031496062992125984
}
},
"pure_empty_false_positives": 0
},
{
"threshold": 0.35,
"aggregate": {
"true_positive": 23,
"false_positive": 32,
"false_negative": 325,
"precision": 0.41818181818181815,
"recall": 0.06609195402298851,
"f1": 0.1141439205955335
},
"regions": {
"brussels": {
"true_positive": 9,
"false_positive": 3,
"false_negative": 56,
"precision": 0.75,
"recall": 0.13846153846153847,
"f1": 0.2337662337662338
},
"flanders": {
"true_positive": 0,
"false_positive": 3,
"false_negative": 123,
"precision": 0.0,
"recall": 0.0,
"f1": 0.0
},
"wallonia": {
"true_positive": 14,
"false_positive": 26,
"false_negative": 146,
"precision": 0.35,
"recall": 0.0875,
"f1": 0.13999999999999999
}
},
"samples": {
"v72-assenede-field-cal-bg": {
"true_positive": 0,
"false_positive": 0,
"false_negative": 4,
"precision": 1.0,
"recall": 0.0,
"f1": 0.0
},
"v72-ganshoren-lowrise-cal": {
"true_positive": 9,
"false_positive": 3,
"false_negative": 53,
"precision": 0.75,
"recall": 0.14516129032258066,
"f1": 0.24324324324324328
},
"v72-havelange-field-cal-bg": {
"true_positive": 11,
"false_positive": 4,
"false_negative": 123,
"precision": 0.7333333333333333,
"recall": 0.08208955223880597,
"f1": 0.1476510067114094
},
"v72-laeken-park-cal-bg": {
"true_positive": 0,
"false_positive": 0,
"false_negative": 3,
"precision": 1.0,
"recall": 0.0,
"f1": 0.0
},
"v72-libramont-lowrise-cal": {
"true_positive": 3,
"false_positive": 22,
"false_negative": 23,
"precision": 0.12,
"recall": 0.11538461538461539,
"f1": 0.11764705882352941
},
"v72-zandhoven-lowrise-cal": {
"true_positive": 0,
"false_positive": 3,
"false_negative": 119,
"precision": 0.0,
"recall": 0.0,
"f1": 0.0
}
},
"pure_empty_false_positives": 0
},
{
"threshold": 0.4,
"aggregate": {
"true_positive": 19,
"false_positive": 18,
"false_negative": 329,
"precision": 0.5135135135135135,
"recall": 0.05459770114942529,
"f1": 0.09870129870129869
},
"regions": {
"brussels": {
"true_positive": 9,
"false_positive": 2,
"false_negative": 56,
"precision": 0.8181818181818182,
"recall": 0.13846153846153847,
"f1": 0.2368421052631579
},
"flanders": {
"true_positive": 0,
"false_positive": 2,
"false_negative": 123,
"precision": 0.0,
"recall": 0.0,
"f1": 0.0
},
"wallonia": {
"true_positive": 10,
"false_positive": 14,
"false_negative": 150,
"precision": 0.4166666666666667,
"recall": 0.0625,
"f1": 0.10869565217391304
}
},
"samples": {
"v72-assenede-field-cal-bg": {
"true_positive": 0,
"false_positive": 0,
"false_negative": 4,
"precision": 1.0,
"recall": 0.0,
"f1": 0.0
},
"v72-ganshoren-lowrise-cal": {
"true_positive": 9,
"false_positive": 2,
"false_negative": 53,
"precision": 0.8181818181818182,
"recall": 0.14516129032258066,
"f1": 0.24657534246575347
},
"v72-havelange-field-cal-bg": {
"true_positive": 7,
"false_positive": 2,
"false_negative": 127,
"precision": 0.7777777777777778,
"recall": 0.05223880597014925,
"f1": 0.0979020979020979
},
"v72-laeken-park-cal-bg": {
"true_positive": 0,
"false_positive": 0,
"false_negative": 3,
"precision": 1.0,
"recall": 0.0,
"f1": 0.0
},
"v72-libramont-lowrise-cal": {
"true_positive": 3,
"false_positive": 12,
"false_negative": 23,
"precision": 0.2,
"recall": 0.11538461538461539,
"f1": 0.14634146341463417
},
"v72-zandhoven-lowrise-cal": {
"true_positive": 0,
"false_positive": 2,
"false_negative": 119,
"precision": 0.0,
"recall": 0.0,
"f1": 0.0
}
},
"pure_empty_false_positives": 0
}
]
}
@@ -0,0 +1,86 @@
{
"architecture": "resnet18_binary_proposal_filter",
"counts": {
"train": {
"negative": 1335,
"positive": 1019
},
"val": {
"negative": 351,
"positive": 321
}
},
"epochs": 8,
"history": [
{
"epoch": 1,
"train_loss": 0.5134634735884055
},
{
"epoch": 2,
"train_loss": 0.17598877930752585
},
{
"epoch": 3,
"train_loss": 0.03689257871160187
},
{
"epoch": 4,
"train_loss": 0.020946205270016914
},
{
"epoch": 5,
"train_loss": 0.009861895276080048
},
{
"epoch": 6,
"train_loss": 0.010347233114316236
},
{
"epoch": 7,
"train_loss": 0.01452157101748209
},
{
"epoch": 8,
"train_loss": 0.013557729805038709
}
],
"human_review_pending": true,
"model": "/app/storage/training/experimental/building-be-v73-fresh-flanders-train-r1/proposal-filter-v74/proposal-filter.experimental.torchscript.pt",
"model_sha256": "a4570a6257e5f234730fc03b75d53251afdeb830ea3c96dfff45604b23786260",
"promotion_allowed": false,
"proposal_model": "/app/models/geointel-building-yolov8s-smallbld-minpx3-img640-ft30.pt",
"proposal_model_sha256": "a9088b8491dfae36694b53e9e9406cb4e3511d334a5712fa34f75078a47759c1",
"release_claim_allowed": false,
"required_next_gate": "independent V72 detector-plus-filter calibration",
"schema_version": 1,
"selected_threshold": 0.15,
"selected_threshold_source": "internal_v73_validation_only",
"source_summary": "/app/storage/training/experimental/building-be-v73-fresh-flanders-train-r1/yolo512/experimental_dataset_summary.json",
"source_summary_sha256": "047874a4f9362c82263ffe11c389a2f65168c449d3f6cbcc77cea709c0ba4c59",
"status": "trained_experimental_only",
"train_samples": [
"v73-adinkerke-dunes-train-bg",
"v73-borgloon-rural-train",
"v73-doel-port-train-bg",
"v73-houthulst-forest-train-bg",
"v73-kaprijke-field-train-bg",
"v73-lede-ribbon-train",
"v73-ronse-industry-train-bg",
"v73-schoten-lowrise-train",
"v73-wevelgem-industry-train"
],
"validation_metrics": {
"f1": 0.8067700987306066,
"false_negative": 35,
"false_positive": 102,
"precision": 0.7371134020618557,
"recall": 0.8909657320872274,
"true_positive": 286
},
"validation_samples": [
"v73-kontich-lowrise-train",
"v73-peer-field-train-bg",
"v73-tielt-rural-train"
]
}
@@ -0,0 +1,20 @@
{
"base_model": "/app/models/geointel-building-yolov8s-smallbld-minpx3-img640-ft30.pt",
"base_model_sha256": "a9088b8491dfae36694b53e9e9406cb4e3511d334a5712fa34f75078a47759c1",
"batch": 8,
"candidate_model": "/app/storage/training/experimental/building-be-v73-fresh-flanders-train-r1/runs/v74-rehearsal-controlled-e10/candidate.experimental.pt",
"candidate_model_sha256": "8473f09234bbad9175d5540e2f298e57c902c332fa5729561774b01a98c355d3",
"dataset_yaml_sha256": "2fa0c66ddb7105629b7873e45030e6977da941130cb032c63e6449033ed42409",
"device": "NVIDIA GeForce RTX 4080 SUPER",
"epochs": 10,
"freeze": 10,
"human_review_pending": true,
"imgsz": 640,
"learning_rate": 0.0001,
"promotion_allowed": false,
"release_claim_allowed": false,
"required_next_gate": "independent frozen V72 calibration evaluation",
"schema_version": 1,
"status": "trained_experimental_only",
"workers": 0
}
@@ -0,0 +1,116 @@
{
"attempts": [
{
"map50": 0.05677865740374553,
"map50_95": 0.02175035531261916,
"model_path": "/app/models/geointel-building-yolov8s-smallbld-minpx3-img640-ft30.pt",
"model_sha256": "a9088b8491dfae36694b53e9e9406cb4e3511d334a5712fa34f75078a47759c1",
"precision": 0.1576550586330707,
"recall": 0.11781609195402298,
"size_bytes": 22516074,
"status": "ok"
},
{
"map50": 0.026181668883665236,
"map50_95": 0.009758453459274275,
"model_path": "/app/storage/training/experimental/building-be-v73-fresh-flanders-train-r1/runs/v74-rehearsal-controlled-e10/candidate.experimental.pt",
"model_sha256": "8473f09234bbad9175d5540e2f298e57c902c332fa5729561774b01a98c355d3",
"precision": 0.07101814254884525,
"recall": 0.07758620689655173,
"size_bytes": 22513578,
"status": "ok"
}
],
"candidate_count": 2,
"claim_boundary": "Non-protected validation ranking only; no test, challenge or promotion claim.",
"dataset_overlap_evidence": {
"interpretation": "Tiles do not overlap, but spatial/statistical independence is not established because adjacent tiles share AOI context and edge objects can remain split.",
"overlap_pixels": 0,
"statistical_independence_established": false,
"status": "non_overlapping",
"stride": 512,
"summary_path": "/app/storage/operator-data/building-be-v72-fresh-calibration-r1/diagnostic-yolo512-r2/yolo_tile_dataset_summary.json",
"summary_sha256": "78e16f46fa2a313a147404a19f2ce99417d2cb384b5db5f6ba33e934ff99c631",
"tile_size": 512,
"validation_tiles_non_overlapping": true
},
"dataset_yaml": "/app/storage/operator-data/building-be-v72-fresh-calibration-r1/diagnostic-yolo512-r2/dataset.yaml",
"dataset_yaml_sha256": "d1e85ffb6776d92a4534830f2214fa6444f5a9160329aca0a68d0ea0a1a40144",
"device": "cuda:0",
"generated_at": "2026-08-10T02:29:41.222925+00:00",
"model_lineage_independence_evidence": {
"evaluation_samples": [
"v72-assenede-field-cal-bg",
"v72-ganshoren-lowrise-cal",
"v72-havelange-field-cal-bg",
"v72-laeken-park-cal-bg",
"v72-libramont-lowrise-cal",
"v72-zandhoven-lowrise-cal"
],
"evaluation_summary_path": "/app/storage/operator-data/building-be-v72-fresh-calibration-r1/diagnostic-yolo512-r2/yolo_tile_dataset_summary.json",
"evaluation_summary_sha256": "78e16f46fa2a313a147404a19f2ce99417d2cb384b5db5f6ba33e934ff99c631",
"independent_for_all_supplied_lineage_corpora": true,
"interpretation": "No evaluation AOI occurs in any split of any supplied ancestral corpus.",
"lineage_corpora": [
{
"exposure_roles": {},
"lineage_sample_count": 19,
"lineage_summary_path": "/app/storage/operator-data/yolo-building-aoi1024-expanded-minpx4vis035/yolo_tile_dataset_summary.json",
"lineage_summary_sha256": "1887e2ba5c719d33675a9ed85db99a274fd66d98d5f6ad44558d673620917201",
"overlapping_evaluation_samples": []
},
{
"exposure_roles": {},
"lineage_sample_count": 22,
"lineage_summary_path": "/app/storage/operator-data/yolo-building-aoi1024-smallbld-minpx3vis035/yolo_tile_dataset_summary.json",
"lineage_summary_sha256": "49b2a07d2105d08356431757b83eafc1498eaf1fb76965b1efe05b776824942a",
"overlapping_evaluation_samples": []
},
{
"exposure_roles": {},
"lineage_sample_count": 28,
"lineage_summary_path": "/app/storage/operator-data/yolo-building-aoi1024-reviewedexp6-minpx3vis035/yolo_tile_dataset_summary.json",
"lineage_summary_sha256": "7c917e31216d1df2174c0f9c736f88a81f3835aa991971f8fb8665e17ddf5c9c",
"overlapping_evaluation_samples": []
},
{
"exposure_roles": {},
"lineage_sample_count": 12,
"lineage_summary_path": "/app/storage/training/experimental/building-be-v73-fresh-flanders-train-r1/yolo512/experimental_dataset_summary.json",
"lineage_summary_sha256": "047874a4f9362c82263ffe11c389a2f65168c449d3f6cbcc77cea709c0ba4c59",
"overlapping_evaluation_samples": []
}
],
"overlapping_evaluation_samples": [],
"status": "independent"
},
"pure_background_confidence": 0.15,
"pure_background_prefixes": [],
"ranking": [
{
"map50": 0.05677865740374553,
"map50_95": 0.02175035531261916,
"model_path": "/app/models/geointel-building-yolov8s-smallbld-minpx3-img640-ft30.pt",
"model_sha256": "a9088b8491dfae36694b53e9e9406cb4e3511d334a5712fa34f75078a47759c1",
"precision": 0.1576550586330707,
"recall": 0.11781609195402298,
"size_bytes": 22516074,
"status": "ok"
},
{
"map50": 0.026181668883665236,
"map50_95": 0.009758453459274275,
"model_path": "/app/storage/training/experimental/building-be-v73-fresh-flanders-train-r1/runs/v74-rehearsal-controlled-e10/candidate.experimental.pt",
"model_sha256": "8473f09234bbad9175d5540e2f298e57c902c332fa5729561774b01a98c355d3",
"precision": 0.07101814254884525,
"recall": 0.07758620689655173,
"size_bytes": 22513578,
"status": "ok"
}
],
"schema_version": 3,
"status": "ok",
"successful_candidate_count": 2,
"torch_version": "2.11.0+cu128",
"validation_image_count": 24
}
@@ -0,0 +1,116 @@
{
"attempts": [
{
"map50": 0.05677865740374553,
"map50_95": 0.02175035531261916,
"model_path": "/app/models/geointel-building-yolov8s-smallbld-minpx3-img640-ft30.pt",
"model_sha256": "a9088b8491dfae36694b53e9e9406cb4e3511d334a5712fa34f75078a47759c1",
"precision": 0.1576550586330707,
"recall": 0.11781609195402298,
"size_bytes": 22516074,
"status": "ok"
},
{
"map50": 0.03488615176663095,
"map50_95": 0.013585769267074197,
"model_path": "/app/storage/training/experimental/building-be-v73-fresh-flanders-train-r1/runs/v74-rehearsal-low-lr-e6/candidate.experimental.pt",
"model_sha256": "be9881ad734f60f8779e9a08dc9112b993cf87e7cc888709c6f695bcf200dffc",
"precision": 0.08391893066046782,
"recall": 0.10344827586206896,
"size_bytes": 22513066,
"status": "ok"
}
],
"candidate_count": 2,
"claim_boundary": "Non-protected validation ranking only; no test, challenge or promotion claim.",
"dataset_overlap_evidence": {
"interpretation": "Tiles do not overlap, but spatial/statistical independence is not established because adjacent tiles share AOI context and edge objects can remain split.",
"overlap_pixels": 0,
"statistical_independence_established": false,
"status": "non_overlapping",
"stride": 512,
"summary_path": "/app/storage/operator-data/building-be-v72-fresh-calibration-r1/diagnostic-yolo512-r2/yolo_tile_dataset_summary.json",
"summary_sha256": "78e16f46fa2a313a147404a19f2ce99417d2cb384b5db5f6ba33e934ff99c631",
"tile_size": 512,
"validation_tiles_non_overlapping": true
},
"dataset_yaml": "/app/storage/operator-data/building-be-v72-fresh-calibration-r1/diagnostic-yolo512-r2/dataset.yaml",
"dataset_yaml_sha256": "d1e85ffb6776d92a4534830f2214fa6444f5a9160329aca0a68d0ea0a1a40144",
"device": "cuda:0",
"generated_at": "2026-08-10T02:32:19.973651+00:00",
"model_lineage_independence_evidence": {
"evaluation_samples": [
"v72-assenede-field-cal-bg",
"v72-ganshoren-lowrise-cal",
"v72-havelange-field-cal-bg",
"v72-laeken-park-cal-bg",
"v72-libramont-lowrise-cal",
"v72-zandhoven-lowrise-cal"
],
"evaluation_summary_path": "/app/storage/operator-data/building-be-v72-fresh-calibration-r1/diagnostic-yolo512-r2/yolo_tile_dataset_summary.json",
"evaluation_summary_sha256": "78e16f46fa2a313a147404a19f2ce99417d2cb384b5db5f6ba33e934ff99c631",
"independent_for_all_supplied_lineage_corpora": true,
"interpretation": "No evaluation AOI occurs in any split of any supplied ancestral corpus.",
"lineage_corpora": [
{
"exposure_roles": {},
"lineage_sample_count": 19,
"lineage_summary_path": "/app/storage/operator-data/yolo-building-aoi1024-expanded-minpx4vis035/yolo_tile_dataset_summary.json",
"lineage_summary_sha256": "1887e2ba5c719d33675a9ed85db99a274fd66d98d5f6ad44558d673620917201",
"overlapping_evaluation_samples": []
},
{
"exposure_roles": {},
"lineage_sample_count": 22,
"lineage_summary_path": "/app/storage/operator-data/yolo-building-aoi1024-smallbld-minpx3vis035/yolo_tile_dataset_summary.json",
"lineage_summary_sha256": "49b2a07d2105d08356431757b83eafc1498eaf1fb76965b1efe05b776824942a",
"overlapping_evaluation_samples": []
},
{
"exposure_roles": {},
"lineage_sample_count": 28,
"lineage_summary_path": "/app/storage/operator-data/yolo-building-aoi1024-reviewedexp6-minpx3vis035/yolo_tile_dataset_summary.json",
"lineage_summary_sha256": "7c917e31216d1df2174c0f9c736f88a81f3835aa991971f8fb8665e17ddf5c9c",
"overlapping_evaluation_samples": []
},
{
"exposure_roles": {},
"lineage_sample_count": 12,
"lineage_summary_path": "/app/storage/training/experimental/building-be-v73-fresh-flanders-train-r1/yolo512/experimental_dataset_summary.json",
"lineage_summary_sha256": "047874a4f9362c82263ffe11c389a2f65168c449d3f6cbcc77cea709c0ba4c59",
"overlapping_evaluation_samples": []
}
],
"overlapping_evaluation_samples": [],
"status": "independent"
},
"pure_background_confidence": 0.15,
"pure_background_prefixes": [],
"ranking": [
{
"map50": 0.05677865740374553,
"map50_95": 0.02175035531261916,
"model_path": "/app/models/geointel-building-yolov8s-smallbld-minpx3-img640-ft30.pt",
"model_sha256": "a9088b8491dfae36694b53e9e9406cb4e3511d334a5712fa34f75078a47759c1",
"precision": 0.1576550586330707,
"recall": 0.11781609195402298,
"size_bytes": 22516074,
"status": "ok"
},
{
"map50": 0.03488615176663095,
"map50_95": 0.013585769267074197,
"model_path": "/app/storage/training/experimental/building-be-v73-fresh-flanders-train-r1/runs/v74-rehearsal-low-lr-e6/candidate.experimental.pt",
"model_sha256": "be9881ad734f60f8779e9a08dc9112b993cf87e7cc888709c6f695bcf200dffc",
"precision": 0.08391893066046782,
"recall": 0.10344827586206896,
"size_bytes": 22513066,
"status": "ok"
}
],
"schema_version": 3,
"status": "ok",
"successful_candidate_count": 2,
"torch_version": "2.11.0+cu128",
"validation_image_count": 24
}
@@ -0,0 +1,21 @@
{
"base_model": "/app/models/geointel-building-yolov8s-smallbld-minpx3-img640-ft30.pt",
"base_model_sha256": "a9088b8491dfae36694b53e9e9406cb4e3511d334a5712fa34f75078a47759c1",
"batch": 8,
"candidate_model": "/app/storage/training/experimental/building-be-v73-fresh-flanders-train-r1/runs/v74-rehearsal-low-lr-e6/candidate.experimental.pt",
"candidate_model_sha256": "be9881ad734f60f8779e9a08dc9112b993cf87e7cc888709c6f695bcf200dffc",
"dataset_yaml_sha256": "2fa0c66ddb7105629b7873e45030e6977da941130cb032c63e6449033ed42409",
"device": "NVIDIA GeForce RTX 4080 SUPER",
"epochs": 6,
"freeze": 10,
"human_review_pending": true,
"imgsz": 640,
"learning_rate": 0.0001,
"optimizer": "AdamW",
"promotion_allowed": false,
"release_claim_allowed": false,
"required_next_gate": "independent frozen V72 calibration evaluation",
"schema_version": 1,
"status": "trained_experimental_only",
"workers": 0
}
@@ -0,0 +1,17 @@
{
"dataset_yaml": "/app/storage/training/experimental/building-be-v73-fresh-flanders-train-r1/rehearsal-v74/dataset.yaml",
"dataset_yaml_sha256": "2fa0c66ddb7105629b7873e45030e6977da941130cb032c63e6449033ed42409",
"human_review_pending": true,
"promotion_allowed": false,
"protected_v72_used": false,
"rehearsal_summary": "/app/storage/operator-data/yolo-building-aoi1024-smallbld-minpx3vis035/yolo_tile_dataset_summary.json",
"rehearsal_summary_sha256": "49b2a07d2105d08356431757b83eafc1498eaf1fb76965b1efe05b776824942a",
"rehearsal_train_tile_count": 180,
"release_claim_allowed": false,
"remediation_repeat": 2,
"remediation_summary": "/app/storage/training/experimental/building-be-v73-fresh-flanders-train-r1/yolo512/experimental_dataset_summary.json",
"remediation_summary_sha256": "047874a4f9362c82263ffe11c389a2f65168c449d3f6cbcc77cea709c0ba4c59",
"remediation_unique_train_tile_count": 48,
"schema_version": 1,
"status": "experimental_rehearsal_only"
}
+6
View File
@@ -1712,6 +1712,12 @@ Returns persisted detections for a dataset as a GeoJSON FeatureCollection. Optio
Compares persisted detection geometries from an analysis run against persisted `vector_features` from a reference vector dataset.
The map-driven building workflow immediately loads the persisted evidence from
the resulting quality check. For current Flemish building validation it labels
strict matches as GRB-confirmed, unmatched detections as unconfirmed AI-only
proposals and unmatched reference footprints as official GRB buildings missed
by AI. AI-only proposals are never promoted to authoritative building results.
Request:
```json
+20
View File
@@ -1,3 +1,23 @@
## 2026-08-10 - V74 root-cause remediation en authority-first uitvoer
### Opgeleverd
- De volledige V72 failure gallery gerenderd en AI-assisted geïnspecteerd;
terugkerende foutpositieven omvatten spoorinfrastructuur, voertuigen, bomen
en schaduwen.
- Een hard-negative proposal-filter en twee rehearsal-kandidaten getraind op
de Tower RTX 4080 SUPER en alle drie afgewezen op de onafhankelijke V72-set.
- De experimentele trainer bindt nu expliciet AdamW, zodat Ultralytics niet
stilzwijgend de gevraagde learning rate vervangt via `optimizer=auto`.
- De kaartwerkstroom laadt het GRB-QA-bewijs automatisch en onderscheidt
GRB-bevestigde, AI-only en door AI gemiste gebouwobjecten.
### Grens
- Het productiecheckpoint bleef ongewijzigd. Er is geen landelijke of
100%-accuratesseclaim gedaan en de visuele review blijft AI-assisted.
- Evidence: `artifacts/evidence/accuracy/model-training/20260810-v74-root-cause/`.
## 2026-07-29 - V31 closed-loop iteration 3 assessment and semantic correction
- Iteration 3 stopped deterministically after epoch 21 with epoch 3 retained as
+10
View File
@@ -1,5 +1,15 @@
# GeoIntel TODO
## V74 authority-first gebouwresultaten (2026-08-10)
- [x] Voer een V72-foutanalyse, hard-negative proposal-filter en rehearsal
training uit; wijs alle regresserende kandidaten af en behoud het actieve
checkpoint.
- [x] Laad na gebouwdetectie automatisch het bewaarde GRB-QA-bewijs en splits
de kaartuitvoer in GRB-bevestigd, AI-only en door AI gemist.
- [ ] Laat een onafhankelijke menselijke reviewer de bevroren contact sheets
en labels ondertekenen voordat een kandidaat ooit promoveerbaar wordt.
## PyTorch-modelprogramma
Uitvoeringsbord: `docs/PYTORCH_TRAINING_ROADMAP_BELGIUM.md`.
@@ -0,0 +1,71 @@
# V74 foutoorzaak en authority-first resultaten
## Uitkomst
V74 heeft geen nieuw productiemodel opgeleverd. De actieve checkpoint blijft
ongewijzigd omdat zowel de experimentele proposal-filter als twee
rehearsal-kandidaten op de bevroren V72-calibratie slechter presteren. GeoIntel
presenteert de automatische gebouwanalyse daarom niet langer als één uniforme
resultaatlaag: de GRB-vergelijking maakt voortaan zichtbaar welke AI-kandidaten
officieel bevestigd zijn, welke alleen modelvoorstellen zijn en welke
GRB-gebouwen door AI gemist zijn.
## Visuele foutanalyse
De volledige V72-portfolio van 24 onafhankelijke tegels is met het actieve model
op confidence 0,30 gerenderd. De contact sheet toont terugkerende foutpositieven
op spoorlijnen, voertuigen, bomen, schaduwen en andere contrastrijke structuren.
Daarnaast ontbreken veel gebouwen. Dit ondersteunt de conclusie dat extra
epochs op alleen de nieuwe Vlaamse shard de hoofdoorzaak niet oplossen.
De review is AI-assisted en niet menselijk. Het bewijs mag dus geen menselijke
acceptatie of promotiegate vervangen.
## Afgewezen proposal-filter
Een experimentele ResNet18-filter werd op afzonderlijke V73-AOI's getraind om
building proposals van moeilijke negatieve patches te onderscheiden. De interne
V73-validatie behaalde F1 0,8068, maar die score generaliseerde niet naar V72.
De beste globale V72-combinatie behaalde precision 0,2161, recall 0,2241 en F1
0,2200. Het actieve model zonder filter behaalt op confidence 0,30 F1 0,2504.
De filter kan precision verhogen bij een vaste detectordrempel, maar halveert
dan de recall. Hij blijft daarom experimenteel en wordt niet geladen in
productie.
## Afgewezen rehearsal-training
De trainingsset combineert 180 historische trainingstegels met de 48 nieuwe
V73-tegels, waarbij V73 tweemaal voorkomt. V72 is alleen evaluatie en komt niet
in de fitdata voor.
| Model | Precision | Recall | mAP50 | mAP50-95 | Besluit |
|---|---:|---:|---:|---:|---|
| Actief | 0,1577 | 0,1178 | 0,0568 | 0,0218 | behouden |
| Rehearsal, optimizer auto, 10 epochs | 0,0710 | 0,0776 | 0,0262 | 0,0098 | afgewezen |
| Rehearsal, AdamW 0,0001, 6 epochs | 0,0839 | 0,1034 | 0,0349 | 0,0136 | afgewezen |
De eerste run bracht bovendien een reproduceerbaarheidsfout aan het licht:
Ultralytics `optimizer=auto` negeerde de gevraagde learning rate en koos AdamW
0,002. De wrapper bindt daarom nu expliciet `optimizer=AdamW` en legt dit vast
in het trainingsmanifest. De gecorrigeerde low-learning-rate-run bleef eveneens
onder de actieve baseline.
## Productcorrectheid
Voor actuele gebouwvalidatie in Vlaanderen is GRB de gezagsbron binnen de
beschikbare editie en dekking. De kaartwerkstroom laadt na detectie automatisch
het bewaarde QA-bewijs en toont afzonderlijk:
- GRB-bevestigde AI-kandidaten;
- AI-only, onbevestigde onderzoeksvoorstellen;
- officiële GRB-gebouwen die het model miste.
AI-only voorstellen worden niet als officiële gebouwen voorgesteld. Dit maakt
de productuitvoer aantoonbaar correcter zonder de zwakke modelscore te verbergen
of een niet-bewezen nauwkeurigheidsclaim te maken.
## Evidence
Alle ruwe contact sheets, foutmanifesten, filtermatrices, trainingssamenvattingen
en modelhashes staan onder
`artifacts/evidence/accuracy/model-training/20260810-v74-root-cause/`.
+1
View File
@@ -580,6 +580,7 @@ function WorkbenchApp({ username, accessMode, loggingOut, onLogout }: WorkbenchA
prepareAndRunDetection: (datasetId) => prepareAndRunDetection(datasetId, 'yolo-configured'),
compareDetectionRunWithReference: (analysisRunId, referenceDatasetId, iouThreshold) =>
compareDetectionRunWithReference(analysisRunId, referenceDatasetId, false, iouThreshold),
loadQualityEvidence: (qualityCheckId) => loadQualityEvidenceGeoJson(qualityCheckId),
onAnalysisReady: () => {
setMapContentMode('analysis')
setMapLayerVisible(true)
+9 -5
View File
@@ -2759,13 +2759,17 @@ export function MapWorkspace({
{orthophotoAnalysisQuality ? (
<>
<div className="geo-image-quality-metrics" aria-label="Gemeten kwaliteit van de beeldanalyse">
<div><span>Kandidaten</span><strong>{orthophotoAnalysisDetectionCount?.toLocaleString('nl-BE') ?? 'n.v.t.'}</strong></div>
<div><span>Strikte matches</span><strong>{orthophotoAnalysisQuality.matches.toLocaleString('nl-BE')}</strong></div>
<div><span>Precision</span><strong>{formatPercentage(orthophotoAnalysisQuality.precision)}</strong></div>
<div><span>Herkenningsgraad</span><strong>{formatPercentage(orthophotoAnalysisQuality.recall)}</strong></div>
<div><span>AI-kandidaten</span><strong>{orthophotoAnalysisDetectionCount?.toLocaleString('nl-BE') ?? 'n.v.t.'}</strong></div>
<div><span>GRB-bevestigd</span><strong>{orthophotoAnalysisQuality.matches.toLocaleString('nl-BE')}</strong></div>
<div><span>AI-only, onbevestigd</span><strong>{orthophotoAnalysisQuality.false_positives.toLocaleString('nl-BE')}</strong></div>
<div><span>GRB, gemist door AI</span><strong>{orthophotoAnalysisQuality.false_negatives.toLocaleString('nl-BE')}</strong></div>
<div><span>AI-precision</span><strong>{formatPercentage(orthophotoAnalysisQuality.precision)}</strong></div>
<div><span>AI-herkenningsgraad</span><strong>{formatPercentage(orthophotoAnalysisQuality.recall)}</strong></div>
<div><span>F1</span><strong>{formatPercentage(orthophotoAnalysisQuality.f1_score)}</strong></div>
<div><span>Fout / gemist</span><strong>{orthophotoAnalysisQuality.false_positives.toLocaleString('nl-BE')} / {orthophotoAnalysisQuality.false_negatives.toLocaleString('nl-BE')}</strong></div>
</div>
<p className="geo-image-quality-context">
GRB is hier de gezagsbron voor geregistreerde gebouwen. AI-only vormen zijn onderzoeksvoorstellen en worden niet als officieel resultaat voorgesteld. De bewijslaag op de kaart toont elke categorie afzonderlijk.
</p>
{orthophotoAnalysisQuality.box_to_footprint_diagnostics ? (
<p className="geo-image-quality-context">
Rechthoekcontrole: {orthophotoAnalysisQuality.box_to_footprint_diagnostics.envelope_matches.toLocaleString('nl-BE')} matches,
@@ -32,6 +32,7 @@ interface MapOrthophotoAnalysisOptions {
referenceDatasetId: string,
iouThreshold: number,
) => Promise<DetectionQaResult | null>
loadQualityEvidence: (qualityCheckId: string) => Promise<unknown>
onAnalysisReady: () => void
}
@@ -79,6 +80,7 @@ export function useMapOrthophotoAnalysis({
loadProjectData,
prepareAndRunDetection,
compareDetectionRunWithReference,
loadQualityEvidence,
onAnalysisReady,
}: MapOrthophotoAnalysisOptions) {
const [stage, setStage] = useState<MapOrthophotoAnalysisStage>('idle')
@@ -180,9 +182,12 @@ export function useMapOrthophotoAnalysis({
MAP_BUILDING_QA_IOU_THRESHOLD,
)
setLastQuality(quality)
if (quality) {
await loadQualityEvidence(quality.quality_check_id)
}
setStatus(
quality
? `Analyse klaar: ${detection.detection_count.toLocaleString('nl-BE')} kandidaten, ${quality.matches.toLocaleString('nl-BE')} gekoppeld aan GRB. Precision ${formatQualityPercentage(quality.precision)}, recall ${formatQualityPercentage(quality.recall)}.`
? `Controle klaar: ${quality.matches.toLocaleString('nl-BE')} door GRB bevestigde AI-kandidaten, ${quality.false_positives.toLocaleString('nl-BE')} onbevestigde AI-kandidaten en ${quality.false_negatives.toLocaleString('nl-BE')} officiële GRB-gebouwen gemist door AI. AI-precision ${formatQualityPercentage(quality.precision)}, herkenningsgraad ${formatQualityPercentage(quality.recall)}.`
: `Analyse klaar: ${detection.detection_count.toLocaleString('nl-BE')} kandidaten; kwaliteitscontrole kon niet afronden.`,
)
} else {
@@ -0,0 +1,141 @@
#!/usr/bin/env python3
"""Compose legacy rehearsal and fresh remediation tiles for an experiment."""
from __future__ import annotations
import argparse
import json
import sys
from pathlib import Path
SCRIPT_DIR = Path(__file__).resolve().parent
if str(SCRIPT_DIR) not in sys.path:
sys.path.insert(0, str(SCRIPT_DIR))
from export_experimental_yolo_train_shard import EXPERIMENTAL_ROOT, file_sha256 # noqa: E402
def _inside(path: Path, root: Path) -> bool:
try:
path.resolve().relative_to(root.resolve())
return True
except ValueError:
return False
def validate_sources(rehearsal_summary: Path, remediation_summary: Path, output_dir: Path) -> tuple[dict, dict]:
if not _inside(output_dir, EXPERIMENTAL_ROOT):
raise ValueError(f"output must remain below {EXPERIMENTAL_ROOT}")
rehearsal = json.loads(rehearsal_summary.read_text(encoding="utf-8"))
remediation = json.loads(remediation_summary.read_text(encoding="utf-8"))
marker_path = remediation_summary.parent / "EXPERIMENTAL_ONLY.json"
if not marker_path.is_file():
raise ValueError("fresh remediation source has no EXPERIMENTAL_ONLY marker")
marker = json.loads(marker_path.read_text(encoding="utf-8"))
if marker.get("promotion_allowed") is not False:
raise ValueError("fresh remediation marker does not prohibit promotion")
if remediation.get("source_manifest_sha256") != marker.get("source_manifest_sha256"):
raise ValueError("fresh remediation marker/summary binding mismatch")
rehearsal_tiles = [tile for tile in rehearsal.get("tiles") or [] if tile.get("kept", True)]
remediation_tiles = [tile for tile in remediation.get("tiles") or [] if tile.get("kept", True)]
if not rehearsal_tiles or not remediation_tiles:
raise ValueError("both rehearsal and remediation summaries require retained tiles")
if any(tile.get("split") not in {"train", "val"} for tile in rehearsal_tiles):
raise ValueError("rehearsal source contains a protected or unsupported split")
if any(tile.get("split") != "train" for tile in remediation_tiles):
raise ValueError("fresh remediation source must be train-only")
return rehearsal, remediation
def parse_args() -> argparse.Namespace:
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument("--rehearsal-summary", type=Path, required=True)
parser.add_argument("--remediation-summary", type=Path, required=True)
parser.add_argument("--output-dir", type=Path, required=True)
parser.add_argument("--remediation-repeat", type=int, default=2)
return parser.parse_args()
def main() -> int:
args = parse_args()
if args.remediation_repeat < 1 or args.remediation_repeat > 4:
raise SystemExit("remediation-repeat must be between 1 and 4")
if args.output_dir.exists():
raise SystemExit(f"refusing to overwrite rehearsal dataset: {args.output_dir}")
try:
rehearsal, remediation = validate_sources(
args.rehearsal_summary, args.remediation_summary, args.output_dir
)
except (OSError, ValueError, json.JSONDecodeError) as exc:
raise SystemExit(str(exc)) from exc
rehearsal_yaml = Path(str(rehearsal["dataset_yaml"]))
remediation_yaml = Path(str(remediation["dataset_yaml"]))
rehearsal_root = rehearsal_yaml.parent
remediation_root = remediation_yaml.parent
for directory in (
rehearsal_root / "images" / "train",
rehearsal_root / "images" / "val",
remediation_root / "images" / "train",
):
if not directory.is_dir():
raise SystemExit(f"rehearsal dataset directory is missing: {directory}")
args.output_dir.mkdir(parents=True)
train_sources = [str(rehearsal_root / "images" / "train")] + [
str(remediation_root / "images" / "train")
] * args.remediation_repeat
yaml_path = args.output_dir / "dataset.yaml"
yaml_path.write_text(
"\n".join(
[
"path: /",
"train:",
*[f" - {path}" for path in train_sources],
f"val: {rehearsal_root / 'images' / 'val'}",
"names:",
" 0: building",
"",
]
),
encoding="utf-8",
)
summary = {
"schema_version": 1,
"status": "experimental_rehearsal_only",
"promotion_allowed": False,
"release_claim_allowed": False,
"human_review_pending": True,
"dataset_yaml": str(yaml_path),
"dataset_yaml_sha256": file_sha256(yaml_path),
"rehearsal_summary": str(args.rehearsal_summary),
"rehearsal_summary_sha256": file_sha256(args.rehearsal_summary),
"remediation_summary": str(args.remediation_summary),
"remediation_summary_sha256": file_sha256(args.remediation_summary),
"remediation_repeat": args.remediation_repeat,
"rehearsal_train_tile_count": int(rehearsal.get("train_tile_count") or 0),
"remediation_unique_train_tile_count": int(remediation.get("tile_count") or 0),
"protected_v72_used": False,
}
(args.output_dir / "experimental_rehearsal_summary.json").write_text(
json.dumps(summary, indent=2, sort_keys=True) + "\n", encoding="utf-8"
)
marker = {
key: summary[key]
for key in (
"schema_version",
"status",
"promotion_allowed",
"release_claim_allowed",
"dataset_yaml_sha256",
"rehearsal_summary_sha256",
"remediation_summary_sha256",
)
}
(args.output_dir / "EXPERIMENTAL_ONLY.json").write_text(
json.dumps(marker, indent=2, sort_keys=True) + "\n", encoding="utf-8"
)
print(json.dumps(summary, indent=2))
return 0
if __name__ == "__main__":
raise SystemExit(main())
@@ -0,0 +1,211 @@
#!/usr/bin/env python3
"""Train a non-promotable second-stage building/background proposal filter."""
from __future__ import annotations
import argparse
import json
import random
import shutil
import sys
from pathlib import Path
SCRIPT_DIR = Path(__file__).resolve().parent
if str(SCRIPT_DIR) not in sys.path:
sys.path.insert(0, str(SCRIPT_DIR))
from train_building_proposal_filter import ( # noqa: E402
choose_threshold,
materialize_split,
sha256,
)
EXPERIMENTAL_ROOT = Path("/app/storage/training/experimental")
def _inside(path: Path, root: Path = EXPERIMENTAL_ROOT) -> bool:
try:
path.resolve().relative_to(root.resolve())
return True
except ValueError:
return False
def validate_inputs(summary_path: Path, output_dir: Path) -> dict:
if not _inside(summary_path) or not _inside(output_dir):
raise ValueError(f"summary and output must remain below {EXPERIMENTAL_ROOT}")
marker_path = summary_path.parent / "EXPERIMENTAL_ONLY.json"
if not marker_path.is_file():
raise ValueError("experimental source marker is missing")
marker = json.loads(marker_path.read_text(encoding="utf-8"))
if marker.get("promotion_allowed") is not False or marker.get("release_claim_allowed") is not False:
raise ValueError("experimental marker does not prohibit promotion")
summary = json.loads(summary_path.read_text(encoding="utf-8"))
if marker.get("dataset_yaml_sha256") != summary.get("dataset_yaml_sha256"):
raise ValueError("experimental marker/summary binding mismatch")
if summary.get("status") != "experimental_only_human_review_pending":
raise ValueError("source summary is not an experimental train shard")
return summary
def parse_args() -> argparse.Namespace:
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument("--summary", type=Path, required=True)
parser.add_argument("--proposal-model", type=Path, required=True)
parser.add_argument("--output-dir", type=Path, required=True)
parser.add_argument("--val-sample", action="append", required=True)
parser.add_argument("--device", default="cuda:0")
parser.add_argument("--proposal-confidence", type=float, default=0.01)
parser.add_argument("--crop-scale", type=float, default=1.4)
parser.add_argument("--negative-match-iou", type=float, default=0.05)
parser.add_argument("--max-positive-per-tile", type=int, default=40)
parser.add_argument("--max-negative-per-tile", type=int, default=40)
parser.add_argument("--epochs", type=int, default=8)
parser.add_argument("--batch", type=int, default=64)
parser.add_argument("--seed", type=int, default=74)
parser.add_argument("--force", action="store_true")
return parser.parse_args()
def main() -> int:
args = parse_args()
try:
summary = validate_inputs(args.summary, args.output_dir)
except (OSError, ValueError, json.JSONDecodeError) as exc:
raise SystemExit(str(exc)) from exc
if not args.proposal_model.is_file():
raise SystemExit(f"proposal model is unavailable: {args.proposal_model}")
val_samples = {slug.strip() for slug in args.val_sample if slug.strip()}
sample_slugs = {str(tile["sample_slug"]) for tile in summary["tiles"]}
unknown = val_samples - sample_slugs
if unknown:
raise SystemExit(f"unknown validation samples: {', '.join(sorted(unknown))}")
if not val_samples or val_samples == sample_slugs:
raise SystemExit("proposal filter requires disjoint non-empty train and validation AOIs")
if args.output_dir.exists():
if not args.force:
raise SystemExit(f"output already exists: {args.output_dir}")
shutil.rmtree(args.output_dir)
random.seed(args.seed)
import torch
from torch import nn
from torch.utils.data import DataLoader
from torchvision import datasets
from torchvision.models import ResNet18_Weights, resnet18
from ultralytics import YOLO
if not torch.cuda.is_available() or not args.device.startswith("cuda"):
raise SystemExit("CUDA is required for experimental proposal-filter training")
torch.manual_seed(args.seed)
tiles = [tile for tile in summary["tiles"] if tile.get("kept", True)]
split_tiles = {
"val": [dict(tile, split="val") for tile in tiles if tile["sample_slug"] in val_samples],
"train": [dict(tile, split="train") for tile in tiles if tile["sample_slug"] not in val_samples],
}
proposal_model = YOLO(str(args.proposal_model))
counts: dict[str, dict[str, int]] = {}
for split, selected in split_tiles.items():
results = proposal_model.predict(
[tile["image_path"] for tile in selected],
conf=args.proposal_confidence,
imgsz=640,
max_det=1000,
device=args.device,
verbose=False,
)
counts[split] = materialize_split(
tiles=selected,
results=results,
output_dir=args.output_dir / "crops",
split=split,
crop_scale=args.crop_scale,
max_positives_per_tile=args.max_positive_per_tile,
max_negatives_per_tile=args.max_negative_per_tile,
negative_match_iou=args.negative_match_iou,
)
del results
torch.cuda.empty_cache()
del proposal_model
torch.cuda.empty_cache()
if any(counts[split][label] == 0 for split in ("train", "val") for label in ("positive", "negative")):
raise SystemExit(f"proposal crop class is empty: {counts}")
weights = ResNet18_Weights.DEFAULT
transform = weights.transforms()
data = {
split: datasets.ImageFolder(args.output_dir / "crops" / split, transform=transform)
for split in ("train", "val")
}
loaders = {
split: DataLoader(dataset, batch_size=args.batch, shuffle=split == "train", num_workers=0)
for split, dataset in data.items()
}
model = resnet18(weights=weights)
model.fc = nn.Linear(model.fc.in_features, 1)
model.to(args.device)
positives = counts["train"]["positive"]
negatives = counts["train"]["negative"]
criterion = nn.BCEWithLogitsLoss(
pos_weight=torch.tensor([negatives / positives], device=args.device)
)
optimizer = torch.optim.AdamW(model.parameters(), lr=1e-4, weight_decay=1e-4)
history = []
for epoch in range(1, args.epochs + 1):
model.train()
loss_sum = 0.0
for images, labels in loaders["train"]:
images = images.to(args.device)
labels = labels.float().to(args.device)
optimizer.zero_grad(set_to_none=True)
loss = criterion(model(images).flatten(), labels)
loss.backward()
optimizer.step()
loss_sum += float(loss.detach()) * len(images)
row = {"epoch": epoch, "train_loss": loss_sum / len(data["train"])}
history.append(row)
print(json.dumps(row), flush=True)
model.eval()
probabilities: list[float] = []
labels: list[int] = []
with torch.inference_mode():
for images, batch_labels in loaders["val"]:
probabilities.extend(torch.sigmoid(model(images.to(args.device)).flatten()).cpu().tolist())
labels.extend(batch_labels.tolist())
threshold, validation_metrics = choose_threshold(probabilities, labels)
args.output_dir.mkdir(parents=True, exist_ok=True)
model_path = args.output_dir / "proposal-filter.experimental.torchscript.pt"
torch.jit.script(model.cpu()).save(str(model_path))
evidence = {
"schema_version": 1,
"status": "trained_experimental_only",
"promotion_allowed": False,
"release_claim_allowed": False,
"human_review_pending": True,
"architecture": "resnet18_binary_proposal_filter",
"source_summary": str(args.summary),
"source_summary_sha256": sha256(args.summary),
"proposal_model": str(args.proposal_model),
"proposal_model_sha256": sha256(args.proposal_model),
"train_samples": sorted(sample_slugs - val_samples),
"validation_samples": sorted(val_samples),
"counts": counts,
"epochs": args.epochs,
"history": history,
"selected_threshold_source": "internal_v73_validation_only",
"selected_threshold": threshold,
"validation_metrics": validation_metrics,
"model": str(model_path),
"model_sha256": sha256(model_path),
"required_next_gate": "independent V72 detector-plus-filter calibration",
}
(args.output_dir / "proposal-filter.experimental.json").write_text(
json.dumps(evidence, indent=2, sort_keys=True) + "\n", encoding="utf-8"
)
print(json.dumps(evidence, indent=2))
return 0
if __name__ == "__main__":
raise SystemExit(main())
@@ -84,6 +84,7 @@ def main() -> int:
seed=73,
amp=False,
val=False,
optimizer="AdamW",
lr0=args.learning_rate,
lrf=0.1,
freeze=args.freeze,
@@ -114,6 +115,7 @@ def main() -> int:
"imgsz": args.imgsz,
"batch": args.batch,
"learning_rate": args.learning_rate,
"optimizer": "AdamW",
"freeze": args.freeze,
"workers": args.workers,
"device": torch.cuda.get_device_name(0),
+12
View File
@@ -7,6 +7,8 @@ from scripts.export_experimental_yolo_train_shard import (
validate_experimental_request,
)
from scripts.train_experimental_yolo_candidate import validate_paths
from scripts.train_experimental_building_proposal_filter import validate_inputs
from scripts.compose_experimental_yolo_rehearsal_dataset import validate_sources
def test_export_refuses_non_experimental_output(tmp_path: Path) -> None:
@@ -26,3 +28,13 @@ def test_train_shard_rejects_near_duplicate_edge_cover_windows() -> None:
edge_cover = {"row_off": 513, "col_off": 0, "height": 512, "width": 512}
assert is_canonical_train_window(canonical, 512)
assert not is_canonical_train_window(edge_cover, 512)
def test_proposal_filter_refuses_non_experimental_paths(tmp_path: Path) -> None:
with pytest.raises(ValueError, match="must remain"):
validate_inputs(tmp_path / "summary.json", tmp_path / "output")
def test_rehearsal_composer_refuses_non_experimental_output(tmp_path: Path) -> None:
with pytest.raises(ValueError, match="output must remain"):
validate_sources(tmp_path / "old.json", tmp_path / "new.json", tmp_path / "out")