update
This commit is contained in:
@@ -6,15 +6,25 @@
|
||||
"source": [
|
||||
"# 01 — Příprava datasetu VisDrone\n",
|
||||
"\n",
|
||||
"**VisDrone2019-DET** je veřejně dostupný dataset leteckých snímků s anotacemi vozidel.\n",
|
||||
"**VisDrone2019-DET** je veřejně dostupný dataset dronových snímků s anotacemi vozidel.\n",
|
||||
"Obsahuje třídy: `pedestrian, people, bicycle, car, van, truck, tricycle, awning-tricycle, bus, motor`.\n",
|
||||
"\n",
|
||||
"My použijeme pouze vozidlové třídy a převedeme anotace do formátu YOLO.\n",
|
||||
"Použijeme pouze vozidlové třídy a převedeme anotace do formátu YOLO.\n",
|
||||
"\n",
|
||||
"**Citace:**\n",
|
||||
"> Zhu, P., Wen, L., Du, D., et al. (2021). Detection and Tracking Meet Drones Challenge. *IEEE TPAMI*."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"id": "md-1d291f",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Instalace závislostí\n",
|
||||
"\n",
|
||||
"Nainstalujeme potřebné knihovny: `ultralytics` (YOLOv8), `Pillow`, `tqdm`, `pandas` a `matplotlib` pro analýzu a vizualizaci."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
@@ -36,9 +46,19 @@
|
||||
"%pip install ultralytics Pillow tqdm requests pyyaml pandas matplotlib --quiet"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"id": "md-75919d",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Stažení VisDrone datasetu\n",
|
||||
"\n",
|
||||
"VisDrone2019-DET je rozdělený na tři části (train/val/test). Každá část obsahuje letecké snímky a textové anotace."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"execution_count": 1,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
@@ -47,13 +67,13 @@
|
||||
"text": [
|
||||
"Stahuji train.zip ...\n",
|
||||
"Rozbaluji train.zip ...\n",
|
||||
" OK → data/visdrone/VisDrone2019-DET-train\n",
|
||||
" OK data/visdrone/VisDrone2019-DET-train\n",
|
||||
"Stahuji val.zip ...\n",
|
||||
"Rozbaluji val.zip ...\n",
|
||||
" OK → data/visdrone/VisDrone2019-DET-val\n",
|
||||
" OK data/visdrone/VisDrone2019-DET-val\n",
|
||||
"Stahuji test.zip ...\n",
|
||||
"Rozbaluji test.zip ...\n",
|
||||
" OK → data/visdrone/VisDrone2019-DET-test-dev\n",
|
||||
" OK data/visdrone/VisDrone2019-DET-test-dev\n",
|
||||
"Dataset připraven.\n"
|
||||
]
|
||||
}
|
||||
@@ -66,7 +86,6 @@
|
||||
"DATA_DIR = Path(\"data/visdrone\")\n",
|
||||
"DATA_DIR.mkdir(parents=True, exist_ok=True)\n",
|
||||
"\n",
|
||||
"# Mapování split → název složky (VisDrone používá plné názvy)\n",
|
||||
"SPLIT_DIRS = {\n",
|
||||
" \"train\": DATA_DIR / \"VisDrone2019-DET-train\",\n",
|
||||
" \"val\": DATA_DIR / \"VisDrone2019-DET-val\",\n",
|
||||
@@ -91,11 +110,19 @@
|
||||
" print(f\"Rozbaluji {zip_path.name} ...\")\n",
|
||||
" with zipfile.ZipFile(zip_path) as zf:\n",
|
||||
" zf.extractall(DATA_DIR)\n",
|
||||
" print(f\" OK → {split_dir}\")\n",
|
||||
" print(f\" OK {split_dir}\")\n",
|
||||
"\n",
|
||||
"print(\"Dataset připraven.\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"id": "md-c4fe96",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Ověření struktury datasetu"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
@@ -122,9 +149,19 @@
|
||||
" print(f\"{split}: CHYBÍ ({split_dir})\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"id": "md-f2ffb4",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Formát anotací VisDrone\n",
|
||||
"\n",
|
||||
"Každá řádka anotačního souboru obsahuje: `bbox_left, bbox_top, bbox_width, bbox_height, score, category, truncation, occlusion`."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
@@ -149,8 +186,6 @@
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"# Ukázkový anotační soubor\n",
|
||||
"# Formát: <bbox_left>,<bbox_top>,<bbox_width>,<bbox_height>,<score>,<category>,<truncation>,<occlusion>\n",
|
||||
"import pandas as pd\n",
|
||||
"\n",
|
||||
"ann_dir = SPLIT_DIRS[\"train\"] / \"annotations\"\n",
|
||||
@@ -162,9 +197,19 @@
|
||||
"print(\"\\nRozdělení tříd:\", df[\"cat\"].value_counts().to_dict())"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"id": "md-3f6c92",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Konverze anotací do formátu YOLO\n",
|
||||
"\n",
|
||||
"YOLO používá normalizované souřadnice středu ohraničovacího rámečku (cx, cy, w, h) v rozsahu 0–1. VisDrone má 10 tříd — my vybereme pouze 4 vozidlové: car, van, truck, bus. Pěší a cyklisté jsou pro tuto úlohu irelevantní."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
@@ -219,12 +264,11 @@
|
||||
"# 0=ignored, 1=pedestrian, 2=people, 3=bicycle, 4=car,\n",
|
||||
"# 5=van, 6=truck, 7=tricycle, 8=awning-tricycle, 9=bus, 10=motor, 11=others\n",
|
||||
"\n",
|
||||
"# Přemapování na 4 vozidlové třídy\n",
|
||||
"VISDRONE_TO_YOLO = {\n",
|
||||
" 4: 0, # car → car\n",
|
||||
" 5: 1, # van → van\n",
|
||||
" 6: 2, # truck → truck\n",
|
||||
" 9: 3, # bus → bus\n",
|
||||
" 4: 0, # car -> car\n",
|
||||
" 5: 1, # van -> van\n",
|
||||
" 6: 2, # truck -> truck\n",
|
||||
" 9: 3, # bus -> bus\n",
|
||||
"}\n",
|
||||
"CLASS_NAMES = [\"car\", \"van\", \"truck\", \"bus\"]\n",
|
||||
"\n",
|
||||
@@ -278,9 +322,19 @@
|
||||
"print(\"Konverze hotova!\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"id": "md-4b68ce",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Konfigurace datasetu (YAML)\n",
|
||||
"\n",
|
||||
"YOLOv8 potřebuje YAML soubor popisující cestu k datům a názvy tříd. "
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 6,
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
@@ -302,7 +356,6 @@
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"# Vytvoření YAML konfigurace pro YOLOv8\n",
|
||||
"import yaml\n",
|
||||
"\n",
|
||||
"cfg = {\n",
|
||||
@@ -321,9 +374,19 @@
|
||||
"print(yaml.dump(cfg, allow_unicode=True))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"id": "md-a00834",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Vizualizace anotací\n",
|
||||
"\n",
|
||||
"Vybereme několik trénovacích snímků a zobrazíme jejich anotace — každá třída je vyznačena jinou barvou rámečku."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 7,
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
@@ -345,7 +408,6 @@
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"# Vizualizace ukázkových anotací\n",
|
||||
"import matplotlib.pyplot as plt\n",
|
||||
"import matplotlib.patches as patches\n",
|
||||
"import random\n",
|
||||
@@ -397,9 +459,17 @@
|
||||
"show_sample()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"id": "md-663f41",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Statistiky datasetu"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 8,
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
@@ -424,7 +494,6 @@
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"# Statistiky datasetu\n",
|
||||
"from collections import Counter\n",
|
||||
"\n",
|
||||
"for split in [\"train\", \"val\"]:\n",
|
||||
|
||||
Reference in New Issue
Block a user