Spaces:
Paused
Paused
# -*- coding: utf-8 -*- | |
# Copyright (c) Facebook, Inc. and its affiliates. | |
""" | |
Note: | |
For your custom dataset, there is no need to hard-code metadata anywhere in the code. | |
For example, for COCO-format dataset, metadata will be obtained automatically | |
when calling `load_coco_json`. For other dataset, metadata may also be obtained in other ways | |
during loading. | |
However, we hard-coded metadata for a few common dataset here. | |
The only goal is to allow users who don't have these dataset to use pre-trained models. | |
Users don't have to download a COCO json (which contains metadata), in order to visualize a | |
COCO model (with correct class names and colors). | |
""" | |
# All coco categories, together with their nice-looking visualization colors | |
# It's from https://github.com/cocodataset/panopticapi/blob/master/panoptic_coco_categories.json | |
COCO_CATEGORIES = [ | |
{"color": [220, 20, 60], "isthing": 1, "id": 1, "name": "person"}, | |
{"color": [119, 11, 32], "isthing": 1, "id": 2, "name": "bicycle"}, | |
{"color": [0, 0, 142], "isthing": 1, "id": 3, "name": "car"}, | |
{"color": [0, 0, 230], "isthing": 1, "id": 4, "name": "motorcycle"}, | |
{"color": [106, 0, 228], "isthing": 1, "id": 5, "name": "airplane"}, | |
{"color": [0, 60, 100], "isthing": 1, "id": 6, "name": "bus"}, | |
{"color": [0, 80, 100], "isthing": 1, "id": 7, "name": "train"}, | |
{"color": [0, 0, 70], "isthing": 1, "id": 8, "name": "truck"}, | |
{"color": [0, 0, 192], "isthing": 1, "id": 9, "name": "boat"}, | |
{"color": [250, 170, 30], "isthing": 1, "id": 10, "name": "traffic light"}, | |
{"color": [100, 170, 30], "isthing": 1, "id": 11, "name": "fire hydrant"}, | |
{"color": [220, 220, 0], "isthing": 1, "id": 13, "name": "stop sign"}, | |
{"color": [175, 116, 175], "isthing": 1, "id": 14, "name": "parking meter"}, | |
{"color": [250, 0, 30], "isthing": 1, "id": 15, "name": "bench"}, | |
{"color": [165, 42, 42], "isthing": 1, "id": 16, "name": "bird"}, | |
{"color": [255, 77, 255], "isthing": 1, "id": 17, "name": "cat"}, | |
{"color": [0, 226, 252], "isthing": 1, "id": 18, "name": "dog"}, | |
{"color": [182, 182, 255], "isthing": 1, "id": 19, "name": "horse"}, | |
{"color": [0, 82, 0], "isthing": 1, "id": 20, "name": "sheep"}, | |
{"color": [120, 166, 157], "isthing": 1, "id": 21, "name": "cow"}, | |
{"color": [110, 76, 0], "isthing": 1, "id": 22, "name": "elephant"}, | |
{"color": [174, 57, 255], "isthing": 1, "id": 23, "name": "bear"}, | |
{"color": [199, 100, 0], "isthing": 1, "id": 24, "name": "zebra"}, | |
{"color": [72, 0, 118], "isthing": 1, "id": 25, "name": "giraffe"}, | |
{"color": [255, 179, 240], "isthing": 1, "id": 27, "name": "backpack"}, | |
{"color": [0, 125, 92], "isthing": 1, "id": 28, "name": "umbrella"}, | |
{"color": [209, 0, 151], "isthing": 1, "id": 31, "name": "handbag"}, | |
{"color": [188, 208, 182], "isthing": 1, "id": 32, "name": "tie"}, | |
{"color": [0, 220, 176], "isthing": 1, "id": 33, "name": "suitcase"}, | |
{"color": [255, 99, 164], "isthing": 1, "id": 34, "name": "frisbee"}, | |
{"color": [92, 0, 73], "isthing": 1, "id": 35, "name": "skis"}, | |
{"color": [133, 129, 255], "isthing": 1, "id": 36, "name": "snowboard"}, | |
{"color": [78, 180, 255], "isthing": 1, "id": 37, "name": "sports ball"}, | |
{"color": [0, 228, 0], "isthing": 1, "id": 38, "name": "kite"}, | |
{"color": [174, 255, 243], "isthing": 1, "id": 39, "name": "baseball bat"}, | |
{"color": [45, 89, 255], "isthing": 1, "id": 40, "name": "baseball glove"}, | |
{"color": [134, 134, 103], "isthing": 1, "id": 41, "name": "skateboard"}, | |
{"color": [145, 148, 174], "isthing": 1, "id": 42, "name": "surfboard"}, | |
{"color": [255, 208, 186], "isthing": 1, "id": 43, "name": "tennis racket"}, | |
{"color": [197, 226, 255], "isthing": 1, "id": 44, "name": "bottle"}, | |
{"color": [171, 134, 1], "isthing": 1, "id": 46, "name": "wine glass"}, | |
{"color": [109, 63, 54], "isthing": 1, "id": 47, "name": "cup"}, | |
{"color": [207, 138, 255], "isthing": 1, "id": 48, "name": "fork"}, | |
{"color": [151, 0, 95], "isthing": 1, "id": 49, "name": "knife"}, | |
{"color": [9, 80, 61], "isthing": 1, "id": 50, "name": "spoon"}, | |
{"color": [84, 105, 51], "isthing": 1, "id": 51, "name": "bowl"}, | |
{"color": [74, 65, 105], "isthing": 1, "id": 52, "name": "banana"}, | |
{"color": [166, 196, 102], "isthing": 1, "id": 53, "name": "apple"}, | |
{"color": [208, 195, 210], "isthing": 1, "id": 54, "name": "sandwich"}, | |
{"color": [255, 109, 65], "isthing": 1, "id": 55, "name": "orange"}, | |
{"color": [0, 143, 149], "isthing": 1, "id": 56, "name": "broccoli"}, | |
{"color": [179, 0, 194], "isthing": 1, "id": 57, "name": "carrot"}, | |
{"color": [209, 99, 106], "isthing": 1, "id": 58, "name": "hot dog"}, | |
{"color": [5, 121, 0], "isthing": 1, "id": 59, "name": "pizza"}, | |
{"color": [227, 255, 205], "isthing": 1, "id": 60, "name": "donut"}, | |
{"color": [147, 186, 208], "isthing": 1, "id": 61, "name": "cake"}, | |
{"color": [153, 69, 1], "isthing": 1, "id": 62, "name": "chair"}, | |
{"color": [3, 95, 161], "isthing": 1, "id": 63, "name": "couch"}, | |
{"color": [163, 255, 0], "isthing": 1, "id": 64, "name": "potted plant"}, | |
{"color": [119, 0, 170], "isthing": 1, "id": 65, "name": "bed"}, | |
{"color": [0, 182, 199], "isthing": 1, "id": 67, "name": "dining table"}, | |
{"color": [0, 165, 120], "isthing": 1, "id": 70, "name": "toilet"}, | |
{"color": [183, 130, 88], "isthing": 1, "id": 72, "name": "tv"}, | |
{"color": [95, 32, 0], "isthing": 1, "id": 73, "name": "laptop"}, | |
{"color": [130, 114, 135], "isthing": 1, "id": 74, "name": "mouse"}, | |
{"color": [110, 129, 133], "isthing": 1, "id": 75, "name": "remote"}, | |
{"color": [166, 74, 118], "isthing": 1, "id": 76, "name": "keyboard"}, | |
{"color": [219, 142, 185], "isthing": 1, "id": 77, "name": "cell phone"}, | |
{"color": [79, 210, 114], "isthing": 1, "id": 78, "name": "microwave"}, | |
{"color": [178, 90, 62], "isthing": 1, "id": 79, "name": "oven"}, | |
{"color": [65, 70, 15], "isthing": 1, "id": 80, "name": "toaster"}, | |
{"color": [127, 167, 115], "isthing": 1, "id": 81, "name": "sink"}, | |
{"color": [59, 105, 106], "isthing": 1, "id": 82, "name": "refrigerator"}, | |
{"color": [142, 108, 45], "isthing": 1, "id": 84, "name": "book"}, | |
{"color": [196, 172, 0], "isthing": 1, "id": 85, "name": "clock"}, | |
{"color": [95, 54, 80], "isthing": 1, "id": 86, "name": "vase"}, | |
{"color": [128, 76, 255], "isthing": 1, "id": 87, "name": "scissors"}, | |
{"color": [201, 57, 1], "isthing": 1, "id": 88, "name": "teddy bear"}, | |
{"color": [246, 0, 122], "isthing": 1, "id": 89, "name": "hair drier"}, | |
{"color": [191, 162, 208], "isthing": 1, "id": 90, "name": "toothbrush"}, | |
{"color": [255, 255, 128], "isthing": 0, "id": 92, "name": "banner"}, | |
{"color": [147, 211, 203], "isthing": 0, "id": 93, "name": "blanket"}, | |
{"color": [150, 100, 100], "isthing": 0, "id": 95, "name": "bridge"}, | |
{"color": [168, 171, 172], "isthing": 0, "id": 100, "name": "cardboard"}, | |
{"color": [146, 112, 198], "isthing": 0, "id": 107, "name": "counter"}, | |
{"color": [210, 170, 100], "isthing": 0, "id": 109, "name": "curtain"}, | |
{"color": [92, 136, 89], "isthing": 0, "id": 112, "name": "door-stuff"}, | |
{"color": [218, 88, 184], "isthing": 0, "id": 118, "name": "floor-wood"}, | |
{"color": [241, 129, 0], "isthing": 0, "id": 119, "name": "flower"}, | |
{"color": [217, 17, 255], "isthing": 0, "id": 122, "name": "fruit"}, | |
{"color": [124, 74, 181], "isthing": 0, "id": 125, "name": "gravel"}, | |
{"color": [70, 70, 70], "isthing": 0, "id": 128, "name": "house"}, | |
{"color": [255, 228, 255], "isthing": 0, "id": 130, "name": "light"}, | |
{"color": [154, 208, 0], "isthing": 0, "id": 133, "name": "mirror-stuff"}, | |
{"color": [193, 0, 92], "isthing": 0, "id": 138, "name": "net"}, | |
{"color": [76, 91, 113], "isthing": 0, "id": 141, "name": "pillow"}, | |
{"color": [255, 180, 195], "isthing": 0, "id": 144, "name": "platform"}, | |
{"color": [106, 154, 176], "isthing": 0, "id": 145, "name": "playingfield"}, | |
{"color": [230, 150, 140], "isthing": 0, "id": 147, "name": "railroad"}, | |
{"color": [60, 143, 255], "isthing": 0, "id": 148, "name": "river"}, | |
{"color": [128, 64, 128], "isthing": 0, "id": 149, "name": "road"}, | |
{"color": [92, 82, 55], "isthing": 0, "id": 151, "name": "roof"}, | |
{"color": [254, 212, 124], "isthing": 0, "id": 154, "name": "sand"}, | |
{"color": [73, 77, 174], "isthing": 0, "id": 155, "name": "sea"}, | |
{"color": [255, 160, 98], "isthing": 0, "id": 156, "name": "shelf"}, | |
{"color": [255, 255, 255], "isthing": 0, "id": 159, "name": "snow"}, | |
{"color": [104, 84, 109], "isthing": 0, "id": 161, "name": "stairs"}, | |
{"color": [169, 164, 131], "isthing": 0, "id": 166, "name": "tent"}, | |
{"color": [225, 199, 255], "isthing": 0, "id": 168, "name": "towel"}, | |
{"color": [137, 54, 74], "isthing": 0, "id": 171, "name": "wall-brick"}, | |
{"color": [135, 158, 223], "isthing": 0, "id": 175, "name": "wall-stone"}, | |
{"color": [7, 246, 231], "isthing": 0, "id": 176, "name": "wall-tile"}, | |
{"color": [107, 255, 200], "isthing": 0, "id": 177, "name": "wall-wood"}, | |
{"color": [58, 41, 149], "isthing": 0, "id": 178, "name": "water-other"}, | |
{"color": [183, 121, 142], "isthing": 0, "id": 180, "name": "window-blind"}, | |
{"color": [255, 73, 97], "isthing": 0, "id": 181, "name": "window-other"}, | |
{"color": [107, 142, 35], "isthing": 0, "id": 184, "name": "tree-merged"}, | |
{"color": [190, 153, 153], "isthing": 0, "id": 185, "name": "fence-merged"}, | |
{"color": [146, 139, 141], "isthing": 0, "id": 186, "name": "ceiling-merged"}, | |
{"color": [70, 130, 180], "isthing": 0, "id": 187, "name": "sky-other-merged"}, | |
{"color": [134, 199, 156], "isthing": 0, "id": 188, "name": "cabinet-merged"}, | |
{"color": [209, 226, 140], "isthing": 0, "id": 189, "name": "table-merged"}, | |
{"color": [96, 36, 108], "isthing": 0, "id": 190, "name": "floor-other-merged"}, | |
{"color": [96, 96, 96], "isthing": 0, "id": 191, "name": "pavement-merged"}, | |
{"color": [64, 170, 64], "isthing": 0, "id": 192, "name": "mountain-merged"}, | |
{"color": [152, 251, 152], "isthing": 0, "id": 193, "name": "grass-merged"}, | |
{"color": [208, 229, 228], "isthing": 0, "id": 194, "name": "dirt-merged"}, | |
{"color": [206, 186, 171], "isthing": 0, "id": 195, "name": "paper-merged"}, | |
{"color": [152, 161, 64], "isthing": 0, "id": 196, "name": "food-other-merged"}, | |
{"color": [116, 112, 0], "isthing": 0, "id": 197, "name": "building-other-merged"}, | |
{"color": [0, 114, 143], "isthing": 0, "id": 198, "name": "rock-merged"}, | |
{"color": [102, 102, 156], "isthing": 0, "id": 199, "name": "wall-other-merged"}, | |
{"color": [250, 141, 255], "isthing": 0, "id": 200, "name": "rug-merged"}, | |
] | |
# fmt: off | |
COCO_PERSON_KEYPOINT_NAMES = ( | |
"nose", | |
"left_eye", "right_eye", | |
"left_ear", "right_ear", | |
"left_shoulder", "right_shoulder", | |
"left_elbow", "right_elbow", | |
"left_wrist", "right_wrist", | |
"left_hip", "right_hip", | |
"left_knee", "right_knee", | |
"left_ankle", "right_ankle", | |
) | |
# fmt: on | |
# Pairs of keypoints that should be exchanged under horizontal flipping | |
COCO_PERSON_KEYPOINT_FLIP_MAP = ( | |
("left_eye", "right_eye"), | |
("left_ear", "right_ear"), | |
("left_shoulder", "right_shoulder"), | |
("left_elbow", "right_elbow"), | |
("left_wrist", "right_wrist"), | |
("left_hip", "right_hip"), | |
("left_knee", "right_knee"), | |
("left_ankle", "right_ankle"), | |
) | |
# rules for pairs of keypoints to draw a line between, and the line color to use. | |
KEYPOINT_CONNECTION_RULES = [ | |
# face | |
("left_ear", "left_eye", (102, 204, 255)), | |
("right_ear", "right_eye", (51, 153, 255)), | |
("left_eye", "nose", (102, 0, 204)), | |
("nose", "right_eye", (51, 102, 255)), | |
# upper-body | |
("left_shoulder", "right_shoulder", (255, 128, 0)), | |
("left_shoulder", "left_elbow", (153, 255, 204)), | |
("right_shoulder", "right_elbow", (128, 229, 255)), | |
("left_elbow", "left_wrist", (153, 255, 153)), | |
("right_elbow", "right_wrist", (102, 255, 224)), | |
# lower-body | |
("left_hip", "right_hip", (255, 102, 0)), | |
("left_hip", "left_knee", (255, 255, 77)), | |
("right_hip", "right_knee", (153, 255, 204)), | |
("left_knee", "left_ankle", (191, 255, 128)), | |
("right_knee", "right_ankle", (255, 195, 77)), | |
] | |
# All Cityscapes categories, together with their nice-looking visualization colors | |
# It's from https://github.com/mcordts/cityscapesScripts/blob/master/cityscapesscripts/helpers/labels.py # noqa | |
CITYSCAPES_CATEGORIES = [ | |
{"color": (128, 64, 128), "isthing": 0, "id": 7, "trainId": 0, "name": "road"}, | |
{"color": (244, 35, 232), "isthing": 0, "id": 8, "trainId": 1, "name": "sidewalk"}, | |
{"color": (70, 70, 70), "isthing": 0, "id": 11, "trainId": 2, "name": "building"}, | |
{"color": (102, 102, 156), "isthing": 0, "id": 12, "trainId": 3, "name": "wall"}, | |
{"color": (190, 153, 153), "isthing": 0, "id": 13, "trainId": 4, "name": "fence"}, | |
{"color": (153, 153, 153), "isthing": 0, "id": 17, "trainId": 5, "name": "pole"}, | |
{"color": (250, 170, 30), "isthing": 0, "id": 19, "trainId": 6, "name": "traffic light"}, | |
{"color": (220, 220, 0), "isthing": 0, "id": 20, "trainId": 7, "name": "traffic sign"}, | |
{"color": (107, 142, 35), "isthing": 0, "id": 21, "trainId": 8, "name": "vegetation"}, | |
{"color": (152, 251, 152), "isthing": 0, "id": 22, "trainId": 9, "name": "terrain"}, | |
{"color": (70, 130, 180), "isthing": 0, "id": 23, "trainId": 10, "name": "sky"}, | |
{"color": (220, 20, 60), "isthing": 1, "id": 24, "trainId": 11, "name": "person"}, | |
{"color": (255, 0, 0), "isthing": 1, "id": 25, "trainId": 12, "name": "rider"}, | |
{"color": (0, 0, 142), "isthing": 1, "id": 26, "trainId": 13, "name": "car"}, | |
{"color": (0, 0, 70), "isthing": 1, "id": 27, "trainId": 14, "name": "truck"}, | |
{"color": (0, 60, 100), "isthing": 1, "id": 28, "trainId": 15, "name": "bus"}, | |
{"color": (0, 80, 100), "isthing": 1, "id": 31, "trainId": 16, "name": "train"}, | |
{"color": (0, 0, 230), "isthing": 1, "id": 32, "trainId": 17, "name": "motorcycle"}, | |
{"color": (119, 11, 32), "isthing": 1, "id": 33, "trainId": 18, "name": "bicycle"}, | |
] | |
# fmt: off | |
ADE20K_SEM_SEG_CATEGORIES = [ | |
"wall", "building", "sky", "floor", "tree", "ceiling", "road, route", "bed", "window ", "grass", "cabinet", "sidewalk, pavement", "person", "earth, ground", "door", "table", "mountain, mount", "plant", "curtain", "chair", "car", "water", "painting, picture", "sofa", "shelf", "house", "sea", "mirror", "rug", "field", "armchair", "seat", "fence", "desk", "rock, stone", "wardrobe, closet, press", "lamp", "tub", "rail", "cushion", "base, pedestal, stand", "box", "column, pillar", "signboard, sign", "chest of drawers, chest, bureau, dresser", "counter", "sand", "sink", "skyscraper", "fireplace", "refrigerator, icebox", "grandstand, covered stand", "path", "stairs", "runway", "case, display case, showcase, vitrine", "pool table, billiard table, snooker table", "pillow", "screen door, screen", "stairway, staircase", "river", "bridge, span", "bookcase", "blind, screen", "coffee table", "toilet, can, commode, crapper, pot, potty, stool, throne", "flower", "book", "hill", "bench", "countertop", "stove", "palm, palm tree", "kitchen island", "computer", "swivel chair", "boat", "bar", "arcade machine", "hovel, hut, hutch, shack, shanty", "bus", "towel", "light", "truck", "tower", "chandelier", "awning, sunshade, sunblind", "street lamp", "booth", "tv", "plane", "dirt track", "clothes", "pole", "land, ground, soil", "bannister, banister, balustrade, balusters, handrail", "escalator, moving staircase, moving stairway", "ottoman, pouf, pouffe, puff, hassock", "bottle", "buffet, counter, sideboard", "poster, posting, placard, notice, bill, card", "stage", "van", "ship", "fountain", "conveyer belt, conveyor belt, conveyer, conveyor, transporter", "canopy", "washer, automatic washer, washing machine", "plaything, toy", "pool", "stool", "barrel, cask", "basket, handbasket", "falls", "tent", "bag", "minibike, motorbike", "cradle", "oven", "ball", "food, solid food", "step, stair", "tank, storage tank", "trade name", "microwave", "pot", "animal", "bicycle", "lake", "dishwasher", "screen", "blanket, cover", "sculpture", "hood, exhaust hood", "sconce", "vase", "traffic light", "tray", "trash can", "fan", "pier", "crt screen", "plate", "monitor", "bulletin board", "shower", "radiator", "glass, drinking glass", "clock", "flag", # noqa | |
] | |
# After processed by `prepare_ade20k_sem_seg.py`, id 255 means ignore | |
# fmt: on | |
def _get_coco_instances_meta(): | |
thing_ids = [k["id"] for k in COCO_CATEGORIES if k["isthing"] == 1] | |
thing_colors = [k["color"] for k in COCO_CATEGORIES if k["isthing"] == 1] | |
assert len(thing_ids) == 80, len(thing_ids) | |
# Mapping from the incontiguous COCO category id to an id in [0, 79] | |
thing_dataset_id_to_contiguous_id = {k: i for i, k in enumerate(thing_ids)} | |
thing_classes = [k["name"] for k in COCO_CATEGORIES if k["isthing"] == 1] | |
ret = { | |
"thing_dataset_id_to_contiguous_id": thing_dataset_id_to_contiguous_id, | |
"thing_classes": thing_classes, | |
"thing_colors": thing_colors, | |
} | |
return ret | |
def _get_coco_panoptic_separated_meta(): | |
""" | |
Returns metadata for "separated" version of the panoptic segmentation dataset. | |
""" | |
stuff_ids = [k["id"] for k in COCO_CATEGORIES if k["isthing"] == 0] | |
assert len(stuff_ids) == 53, len(stuff_ids) | |
# For semantic segmentation, this mapping maps from contiguous stuff id | |
# (in [0, 53], used in models) to ids in the dataset (used for processing results) | |
# The id 0 is mapped to an extra category "thing". | |
stuff_dataset_id_to_contiguous_id = {k: i + 1 for i, k in enumerate(stuff_ids)} | |
# When converting COCO panoptic annotations to semantic annotations | |
# We label the "thing" category to 0 | |
stuff_dataset_id_to_contiguous_id[0] = 0 | |
# 54 names for COCO stuff categories (including "things") | |
stuff_classes = ["things"] + [ | |
k["name"].replace("-other", "").replace("-merged", "") | |
for k in COCO_CATEGORIES | |
if k["isthing"] == 0 | |
] | |
# NOTE: I randomly picked a color for things | |
stuff_colors = [[82, 18, 128]] + [k["color"] for k in COCO_CATEGORIES if k["isthing"] == 0] | |
ret = { | |
"stuff_dataset_id_to_contiguous_id": stuff_dataset_id_to_contiguous_id, | |
"stuff_classes": stuff_classes, | |
"stuff_colors": stuff_colors, | |
} | |
ret.update(_get_coco_instances_meta()) | |
return ret | |
def _get_builtin_metadata(dataset_name): | |
if dataset_name == "coco": | |
return _get_coco_instances_meta() | |
if dataset_name == "coco_panoptic_separated": | |
return _get_coco_panoptic_separated_meta() | |
elif dataset_name == "coco_panoptic_standard": | |
meta = {} | |
# The following metadata maps contiguous id from [0, #thing categories + | |
# #stuff categories) to their names and colors. We have to replica of the | |
# same name and color under "thing_*" and "stuff_*" because the current | |
# visualization function in D2 handles thing and class classes differently | |
# due to some heuristic used in Panoptic FPN. We keep the same naming to | |
# enable reusing existing visualization functions. | |
thing_classes = [k["name"] for k in COCO_CATEGORIES] | |
thing_colors = [k["color"] for k in COCO_CATEGORIES] | |
stuff_classes = [k["name"] for k in COCO_CATEGORIES] | |
stuff_colors = [k["color"] for k in COCO_CATEGORIES] | |
meta["thing_classes"] = thing_classes | |
meta["thing_colors"] = thing_colors | |
meta["stuff_classes"] = stuff_classes | |
meta["stuff_colors"] = stuff_colors | |
# Convert category id for training: | |
# category id: like semantic segmentation, it is the class id for each | |
# pixel. Since there are some classes not used in evaluation, the category | |
# id is not always contiguous and thus we have two set of category ids: | |
# - original category id: category id in the original dataset, mainly | |
# used for evaluation. | |
# - contiguous category id: [0, #classes), in order to train the linear | |
# softmax classifier. | |
thing_dataset_id_to_contiguous_id = {} | |
stuff_dataset_id_to_contiguous_id = {} | |
for i, cat in enumerate(COCO_CATEGORIES): | |
if cat["isthing"]: | |
thing_dataset_id_to_contiguous_id[cat["id"]] = i | |
else: | |
stuff_dataset_id_to_contiguous_id[cat["id"]] = i | |
meta["thing_dataset_id_to_contiguous_id"] = thing_dataset_id_to_contiguous_id | |
meta["stuff_dataset_id_to_contiguous_id"] = stuff_dataset_id_to_contiguous_id | |
return meta | |
elif dataset_name == "coco_person": | |
return { | |
"thing_classes": ["person"], | |
"keypoint_names": COCO_PERSON_KEYPOINT_NAMES, | |
"keypoint_flip_map": COCO_PERSON_KEYPOINT_FLIP_MAP, | |
"keypoint_connection_rules": KEYPOINT_CONNECTION_RULES, | |
} | |
elif dataset_name == "cityscapes": | |
# fmt: off | |
CITYSCAPES_THING_CLASSES = [ | |
"person", "rider", "car", "truck", | |
"bus", "train", "motorcycle", "bicycle", | |
] | |
CITYSCAPES_STUFF_CLASSES = [ | |
"road", "sidewalk", "building", "wall", "fence", "pole", "traffic light", | |
"traffic sign", "vegetation", "terrain", "sky", "person", "rider", "car", | |
"truck", "bus", "train", "motorcycle", "bicycle", | |
] | |
# fmt: on | |
return { | |
"thing_classes": CITYSCAPES_THING_CLASSES, | |
"stuff_classes": CITYSCAPES_STUFF_CLASSES, | |
} | |
raise KeyError("No built-in metadata for dataset {}".format(dataset_name)) | |