Files
yolov26_3d/eval_tools/class_config.py
2026-06-24 09:35:46 +08:00

107 lines
3.6 KiB
Python
Executable File

"""
Class configuration for the eval_tools evaluation framework.
This is the single source of truth for all class definitions.
To adapt the evaluator to a different class taxonomy, only edit this file.
Current taxonomy matches ultralytics/cfg/datasets/mono3d_ground.yaml class_map.
"""
# ---------------------------------------------------------------------------
# ID → display name (used by GT parser, reports, logging)
# Keep this aligned with the first-seen canonical name for each ID in
# ultralytics/cfg/datasets/mono3d_ground.yaml:class_map.
# ---------------------------------------------------------------------------
CLASS_NAMES: dict[int, str] = {
0: "car",
1: "suv",
2: "pickup",
3: "medium_car",
4: "van",
5: "bus",
6: "truck",
7: "special_vehicle",
8: "unknown",
9: "pedestrian",
10: "bicyclist",
11: "bicycle",
12: "tricycle",
13: "traffic_sign",
14: "wheel",
15: "plate",
16: "face",
}
# Total number of classes
NUM_CLASSES: int = len(CLASS_NAMES)
# ---------------------------------------------------------------------------
# Raw label string → ID (used by detection result parser)
# Supports all original annotation names that map to the same ID in
# ultralytics/cfg/datasets/mono3d_ground.yaml:class_map.
# ---------------------------------------------------------------------------
CLASS_NAME_TO_ID: dict[str, int] = {
"car": 0,
"suv": 1,
"pickup": 2,
"medium_car": 3,
"van": 4,
"bus": 5,
"truck": 6,
"tanker": 6,
"large_truck": 6,
"construction_vehicle": 6,
"special_vehicle": 7,
"unknown": 8,
"pedestrian": 9,
"bicyclist": 10,
"motorcyclist": 10,
"bicycle": 11,
"motorcycle": 11,
"tricycle": 12,
"tricyclist": 12,
"traffic_sign": 13,
"wheel": 14,
"plate": 15,
"face": 16,
}
# ---------------------------------------------------------------------------
# 3D-annotated class IDs
# face_3d_classes [0-8]: vehicle-like classes with 4-face annotations
# (51-col / full JSON face fields)
# complete_3d_classes[9-12]: pedestrian / rider / bike / trike classes with
# whole-box 3D only (19-col labels)
# ---------------------------------------------------------------------------
FACE_3D_CLASSES: list[int] = [0, 1, 2, 3, 4, 5, 6, 7, 8]
COMPLETE_3D_CLASSES: list[int] = [9, 10, 11, 12]
CLASSES_3D: list[int] = FACE_3D_CLASSES + COMPLETE_3D_CLASSES
# ---------------------------------------------------------------------------
# Report labels: which 3D classes appear in evaluation reports, and how they
# are labelled. vehicle_large / vehicle_small are legacy synthetic keys from
# Metrics3D's class-0 size split; under the current taxonomy they are displayed
# as CAR_LARGE / CAR_SMALL.
# ---------------------------------------------------------------------------
REPORT_3D_CLASS_LABELS: dict[str, str] = {
"car": "CAR",
"vehicle_large": "CAR_LARGE",
"vehicle_small": "CAR_SMALL",
"suv": "SUV",
"pickup": "PICKUP",
"medium_car": "MEDIUM_CAR",
"van": "VAN",
"bus": "BUS",
"truck": "TRUCK",
"special_vehicle": "SPECIAL_VEHICLE",
"unknown": "UNKNOWN",
"pedestrian": "PEDESTRIAN",
"bicyclist": "BICYCLIST",
"bicycle": "BICYCLE",
"tricycle": "TRICYCLE",
}
# Ordered list of 3D class keys for iteration in comparison/report scripts.
# Includes the legacy size-split sub-buckets immediately after "car".
REPORT_3D_CLASS_KEYS: list[str] = list(REPORT_3D_CLASS_LABELS.keys())