diff --git a/backend/tests/test_belgium_training_portfolio.py b/backend/tests/test_belgium_training_portfolio.py index 41a6421f..124a05b8 100644 --- a/backend/tests/test_belgium_training_portfolio.py +++ b/backend/tests/test_belgium_training_portfolio.py @@ -19,7 +19,7 @@ def test_portfolio_covers_every_region_split_and_context_family() -> None: assert len({aoi.slug for aoi in module.AOIS}) == len(module.AOIS) counts = Counter((aoi.region, aoi.split) for aoi in module.AOIS) for region in module.REGION_CONTRACT: - assert counts[(region, "train")] >= 10 + assert counts[(region, "train")] >= 15 assert counts[(region, "val")] >= 2 assert counts[(region, "calibration")] >= 3 assert counts[(region, "test")] >= 3 diff --git a/docs/BELGIUM_BUILDING_TRAINING_LOOP.md b/docs/BELGIUM_BUILDING_TRAINING_LOOP.md index e4885bbe..0316a568 100644 --- a/docs/BELGIUM_BUILDING_TRAINING_LOOP.md +++ b/docs/BELGIUM_BUILDING_TRAINING_LOOP.md @@ -28,7 +28,7 @@ data. A new iteration adds independent training AOIs instead. | --- | --- | | Runtime | CUDA required; NVIDIA device visible; no CPU fallback | | Corpus | Immutable manifest and artifacts with SHA-256 evidence | -| Geographic composition | Each land region has at least 10 train, 2 val, 3 calibration, 3 test and 2 background-test AOIs | +| Geographic composition | Each land region has at least 15 train, 2 val, 3 calibration, 3 test and 2 background-test AOIs | | Contexts | Dense urban, suburban, rural, industrial and difficult negative contexts represented | | Leakage | No intersecting AOIs across protected split roles | | Label integrity | No malformed rows; sub-resolution labels explicitly rejected | diff --git a/scripts/provision_belgium_building_training_portfolio.py b/scripts/provision_belgium_building_training_portfolio.py index ff7635c9..4b653aab 100644 --- a/scripts/provision_belgium_building_training_portfolio.py +++ b/scripts/provision_belgium_building_training_portfolio.py @@ -37,6 +37,11 @@ AOIS = ( Aoi("roeselare-industry-train", "flanders", "industrial", "train", 3.120, 50.945), Aoi("dendermonde-suburban-train", "flanders", "suburban", "train", 4.100, 51.030), Aoi("houthalen-forest-train-bg", "flanders", "forest-negative", "train", 5.380, 51.030, "background_candidate"), + Aoi("lier-urban-train", "flanders", "historic-urban", "train", 4.570, 51.130), + Aoi("lokeren-ribbon-train", "flanders", "ribbon-development", "train", 3.990, 51.100), + Aoi("tienen-urban-train", "flanders", "mixed-urban", "train", 4.940, 50.810), + Aoi("deinze-suburban-train", "flanders", "suburban", "train", 3.530, 50.980), + Aoi("lommel-industry-train", "flanders", "industrial", "train", 5.310, 51.230), Aoi("bruges-val", "flanders", "historic-urban", "val", 3.224, 51.209), Aoi("turnhout-val", "flanders", "suburban", "val", 4.944, 51.322), Aoi("hasselt-cal", "flanders", "suburban", "calibration", 5.340, 50.930), @@ -58,6 +63,11 @@ AOIS = ( Aoi("marche-smallcity-train", "wallonia", "small-city", "train", 5.340, 50.230), Aoi("ath-rural-train", "wallonia", "rural-town", "train", 3.780, 50.630), Aoi("condroz-field-train-bg", "wallonia", "farmland-negative", "train", 4.700, 50.300, "background_candidate"), + Aoi("la-louviere-train", "wallonia", "dense-urban", "train", 4.190, 50.480), + Aoi("huy-valley-train", "wallonia", "valley-urban", "train", 5.240, 50.520), + Aoi("eupen-train", "wallonia", "regional-architecture", "train", 6.030, 50.630), + Aoi("ciney-train", "wallonia", "rural-town", "train", 5.100, 50.290), + Aoi("couvin-train", "wallonia", "forest-town", "train", 4.500, 50.050), Aoi("tournai-val", "wallonia", "historic-urban", "val", 3.389, 50.606), Aoi("arlon-val", "wallonia", "small-city", "val", 5.817, 49.683), Aoi("verviers-cal", "wallonia", "suburban", "calibration", 5.860, 50.590), @@ -79,6 +89,11 @@ AOIS = ( Aoi("ixelles-dense-train", "brussels", "dense-urban", "train", 4.370, 50.830), Aoi("forest-residential-train", "brussels", "residential", "train", 4.320, 50.810), Aoi("woluwe-park-train-hard", "brussels", "park-hard-negative", "train", 4.440, 50.840, "background_candidate"), + Aoi("evere-train", "brussels", "dense-residential", "train", 4.400, 50.870), + Aoi("berchem-train", "brussels", "suburban", "train", 4.290, 50.860), + Aoi("watermael-train", "brussels", "forest-edge-residential", "train", 4.400, 50.810), + Aoi("neder-over-heembeek-train", "brussels", "mixed-urban", "train", 4.380, 50.900), + Aoi("brussels-canal-south-train-hard", "brussels", "canal-hard-negative", "train", 4.320, 50.820, "background_candidate"), Aoi("woluwe-val", "brussels", "suburban", "val", 4.430, 50.845), Aoi("molenbeek-val", "brussels", "mixed-urban", "val", 4.325, 50.855), Aoi("brussels-park-cal", "brussels", "park-edge", "calibration", 4.380, 50.820),