Add hard-negative proposal classifier pipeline
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import importlib.util
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
|
||||
|
||||
def load(name: str):
|
||||
path = ROOT / "scripts" / f"{name}.py"
|
||||
spec = importlib.util.spec_from_file_location(name, path)
|
||||
assert spec and spec.loader
|
||||
module = importlib.util.module_from_spec(spec)
|
||||
spec.loader.exec_module(module)
|
||||
return module
|
||||
|
||||
|
||||
miner = load("build_building_proposal_classifier_dataset")
|
||||
trainer = load("train_building_proposal_classifier")
|
||||
|
||||
|
||||
def test_classify_proposals_consumes_reference_once() -> None:
|
||||
reference = [(0.0, 0.0, 10.0, 10.0)]
|
||||
proposals = [((0.0, 0.0, 10.0, 10.0), 0.9), ((0.0, 0.0, 10.0, 10.0), 0.8)]
|
||||
assert [item[0] for item in miner.classify_proposals(proposals, reference, 0.25)] == ["positive", "negative"]
|
||||
|
||||
|
||||
def test_eligible_tiles_rejects_protected_manifest_split() -> None:
|
||||
manifest = {"samples": [{"sample_slug": "x", "region": "flanders", "split": "test"}]}
|
||||
summary = {"tiles": [{"sample_slug": "x", "split": "train", "image_path": "x.png"}]}
|
||||
with pytest.raises(ValueError, match="protected"):
|
||||
miner.eligible_tiles(summary, manifest, "flanders")
|
||||
|
||||
|
||||
def test_binary_metrics() -> None:
|
||||
result = trainer.binary_metrics([0.9, 0.8, 0.2, 0.1], [1, 0, 1, 0])
|
||||
assert result == {"tp": 1, "fp": 1, "fn": 1, "precision": 0.5, "recall": 0.5, "f1": 0.5}
|
||||
Reference in New Issue
Block a user