Spaces:
Sleeping
Sleeping
File size: 4,178 Bytes
d1ac326 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 | interface Row {
model: string;
params: string;
f1: string;
iou: string;
ap: string;
note?: string;
}
// Real LEVIR-CD test results (threshold selected on val, applied to test) — from the committed
// comparison in docs/results/. This is the genuine project story; the served ONNX may be a
// placeholder until the trained bundles are staged.
const ROWS: Row[] = [
{ model: "FC-Siam-diff (baseline)", params: "0.83M", f1: "0.886", iou: "0.796", ap: "0.932" },
{
model: "Siamese-SegFormer / MiT-b2 (diff)",
params: "24.72M",
f1: "0.911",
iou: "0.836",
ap: "0.943",
note: "ImageNet-pretrained strong model",
},
{
model: "DINOv2-base frozen linear-probe",
params: "1.64M",
f1: "0.889",
iou: "0.800",
ap: "0.924",
note: "frozen FM features only",
},
{
model: "DINOv2-base + LoRA",
params: "2.82M",
f1: "0.913",
iou: "0.839",
ap: "0.946",
note: "foundation-model tier — headline",
},
];
export default function ModelCard() {
return (
<div className="card-page">
<div className="card-inner">
<p className="card-eyebrow">Model card · Track A · high-res aerial</p>
<h2>Siamese change detection on LEVIR-CD</h2>
<p className="card-lead">
Weight-shared Siamese change-detection models on 0.5 m RGB aerial imagery. Two dates of
the same place go in; a per-pixel building-change map comes out. Three tiers are compared on
the identical LEVIR-CD test split through one evaluation harness.
</p>
<table className="metrics-table">
<thead>
<tr>
<th>Model</th>
<th>Trainable</th>
<th>F1</th>
<th>IoU</th>
<th>AP</th>
</tr>
</thead>
<tbody>
{ROWS.map((r) => (
<tr key={r.model} className={r.note?.includes("headline") ? "row-headline" : ""}>
<td>
{r.model}
{r.note && <span className="row-note">{r.note}</span>}
</td>
<td className="num">{r.params}</td>
<td className="num">{r.f1}</td>
<td className="num">{r.iou}</td>
<td className="num">{r.ap}</td>
</tr>
))}
</tbody>
</table>
<h3>The defensible claim — parameter efficiency</h3>
<p className="muted">
DINOv2-base + LoRA reaches F1 0.913 with only <strong>2.82M</strong> trainable
parameters versus the SegFormer strong model's <strong>24.72M</strong> at F1 0.911
— a statistical tie on accuracy (within noise) at ~9× fewer trainable params. The frozen
linear-probe (1.64M, decoder only) already ≈ the baseline, so the self-supervised
representation carries most of the change signal and LoRA supplies the adaptation lift.
</p>
<h3>Honest limitations</h3>
<ul className="muted">
<li>
Per-scene F1 has high variance (mean ≈ 0.77, std ≈ 0.31, min 0.00). The foundation model
lifts the mean but does <em>not</em> fix the hardest small/subtle-change tiles.
</li>
<li>
Overall pixel accuracy is deliberately not reported: change is a tiny pixel fraction, so
"predict no change" scores ~99% and is meaningless. Metrics are change-class only.
</li>
<li>Trained weights inherit LEVIR-CD research/non-commercial terms — showcase use only.</li>
</ul>
<h3>Domain gap — why the live mode is a different model</h3>
<div className="callout">
<p className="muted">
These models are trained on 0.5 m aerial imagery and do <strong>not</strong> transfer
to 10 m Sentinel-2. The live-AOI mode (a later milestone) uses a Sentinel-2-native
model so it produces meaningful output on satellite scenes — the domain split is a design
decision, not an afterthought.
</p>
</div>
</div>
</div>
);
}
|