This commit is contained in:
Lukáš Trkan
2026-05-01 21:42:32 +02:00
parent 8df624f568
commit 2bd731620c
5 changed files with 435 additions and 185 deletions

View File

@@ -23,6 +23,16 @@
"| bus | modrá |"
]
},
{
"cell_type": "markdown",
"id": "md-83b798",
"metadata": {},
"source": [
"## Načtení modelů\n",
"\n",
"Načteme oba modely: `best_finetuned.pt` (po fine-tuningu na Vrchlabí) a `best_before_finetune.pt` (pouze VisDrone). Porovnání obou modelů ukáže, jak moc fine-tuning zlepšil detekci na českých datech."
]
},
{
"cell_type": "code",
"execution_count": 1,
@@ -59,9 +69,19 @@
"print(f\"Base: {MODEL_BASE}\")"
]
},
{
"cell_type": "markdown",
"id": "md-dc5c89",
"metadata": {},
"source": [
"## Konfigurace inference\n",
"\n",
"Nastavíme vstupní a výstupní adresáře, barevné kódování tříd (zelená=car, žlutá=van, červená=truck, modrá=bus), confidence threshold a velikost dávky. Dlaždice jsou 256×256 px odpovídající zoom level 18 mapových dlaždic."
]
},
{
"cell_type": "code",
"execution_count": 2,
"execution_count": null,
"metadata": {},
"outputs": [
{
@@ -82,9 +102,6 @@
"ANNOTATED_DIR_FINETUNED.mkdir(exist_ok=True)\n",
"ANNOTATED_DIR_BASE.mkdir(exist_ok=True)\n",
"\n",
"# Zpětná kompatibilita — hlavní vrstva je finetuned\n",
"ANNOTATED_DIR = ANNOTATED_DIR_FINETUNED\n",
"\n",
"# Barvy pro každou třídu (RGB)\n",
"CLASS_COLORS = {\n",
" 0: (0, 220, 0), # car — zelená\n",
@@ -110,9 +127,19 @@
"print(f\"Zařízení: {DEVICE}\")"
]
},
{
"cell_type": "markdown",
"id": "md-452ad1",
"metadata": {},
"source": [
"## Inferenční smyčka\n",
"\n",
"Pro každou dlaždici spustíme detekci objektů oběma modely. Detekovaná vozidla vyznačíme barevnými rámečky přímo do obrázku dlaždice a výsledky uložíme ve formátu JSON pro pozdější sestavení mapy."
]
},
{
"cell_type": "code",
"execution_count": 3,
"execution_count": null,
"metadata": {},
"outputs": [
{
@@ -189,7 +216,6 @@
"\n",
"\n",
"def run_inference(model, annotated_dir: Path, label: str) -> dict:\n",
" \"\"\"Spustí inferenci na všech dlaždicích, uloží anotované obrázky a vrátí dict detekcí.\"\"\"\n",
" detections = {}\n",
" vehicle_counts = defaultdict(int)\n",
"\n",
@@ -234,6 +260,16 @@
"all_detections_base = run_inference(model_base, ANNOTATED_DIR_BASE, \"base\")"
]
},
{
"cell_type": "markdown",
"id": "md-3e6ffd",
"metadata": {},
"source": [
"## Uložení výsledků detekcí\n",
"\n",
"Detekce z obou modelů uložíme do JSON souborů. Každý záznam obsahuje název dlaždice a seznam detekcí s třídou, souřadnicemi rámečku a confidence score."
]
},
{
"cell_type": "code",
"execution_count": 4,
@@ -265,9 +301,19 @@
"print(f\" detections_base.json ({len(all_detections_base)} dlaždic)\")"
]
},
{
"cell_type": "markdown",
"id": "md-95a7d7",
"metadata": {},
"source": [
"## Vizualizace ukázkových dlaždic\n",
"\n",
"Náhodně vybereme 6 dlaždic s detekcemi a zobrazíme je — tak si ověříme kvalitu výsledků finetuned modelu."
]
},
{
"cell_type": "code",
"execution_count": 5,
"execution_count": null,
"metadata": {},
"outputs": [
{
@@ -298,7 +344,6 @@
"print(f\"[Finetuned] Dlaždice s detekcemi: {len(tiles_with_detections_ft)} / {len(all_detections_finetuned)}\")\n",
"print(f\"[Base] Dlaždice s detekcemi: {len(tiles_with_detections_base)} / {len(all_detections_base)}\")\n",
"\n",
"# Ukázkové dlaždice — finetuned model\n",
"samples = random.sample(tiles_with_detections_ft, min(6, len(tiles_with_detections_ft)))\n",
"fig, axes = plt.subplots(2, 3, figsize=(15, 10))\n",
"\n",
@@ -314,6 +359,16 @@
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "md-960e2d",
"metadata": {},
"source": [
"## Heatmapa hustoty vozidel\n",
"\n",
"Z detekcí sestavíme heatmapu — každý pixel odpovídá jedné dlaždici a jeho barva udává počet detekovaných vozidel. Porovnáme oba modely vedle sebe."
]
},
{
"cell_type": "code",
"execution_count": 6,