Spaces:
Sleeping
Sleeping
import copy | |
from typing import List | |
from mmdet.registry import DATASETS | |
from mmdet.datasets.coco_panoptic import CocoPanopticDataset | |
from mmengine import get_local_path | |
class CocoPanopticOVDataset(CocoPanopticDataset): | |
"""Coco Open Vocabulary dataset for Panoptic segmentation. | |
The class names are changed. | |
""" | |
METAINFO = { | |
'classes': | |
('person,child,girl,boy,woman,man,people,children,girls,boys,women,men,lady,guy,ladies,guys,clothes', | |
'bicycle,bicycles,bike,bikes', | |
'car,cars', | |
'motorcycle,motorcycles', | |
'airplane,airplanes', | |
'bus,buses', | |
'train,trains,locomotive,locomotives,freight train', | |
'truck,trucks', | |
'boat,boats', | |
'traffic light', | |
'fire hydrant', | |
'stop sign', | |
'parking meter', | |
'bench,benches', | |
'bird,birds', | |
'cat,cats,kitties,kitty', | |
'dog,dogs,puppy,puppies', | |
'horse,horses,foal', | |
'sheep', | |
'cow,cows,calf', | |
'elephant,elephants', | |
'bear,bears', | |
'zebra,zebras', | |
'giraffe,giraffes', | |
'backpack,backpacks', | |
'umbrella,umbrellas', | |
'handbag,handbags', | |
'tie', | |
'suitcase,suitcases', | |
'frisbee', | |
'skis', | |
'snowboard', | |
'sports ball', | |
'kite,kites', | |
'baseball bat', | |
'baseball glove', | |
'skateboard', | |
'surfboard', | |
'tennis racket', | |
'bottle,bottles,water bottle', | |
'wine glass,wine glasses,wineglass', | |
'cup,cups,water cup,water glass', | |
'fork,forks', | |
'knife,knives', | |
'spoon,spoons', | |
'bowl,bowls', | |
'banana,bananas', | |
'apple,apples,apple fruit', | |
'sandwich,sandwiches', | |
'orange fruit', | |
'broccoli', | |
'carrot,carrots', | |
'hot dog', | |
'pizza', | |
'donut,donuts', | |
'cake,cakes', | |
'chair,chairs', | |
'couch,sofa,sofas', | |
'potted plant,potted plants,pottedplant,pottedplants,planter,planters', | |
'bed,beds', | |
'dining table,dining tables,diningtable,diningtables,plate,plates,diningtable tablecloth', | |
'toilet', | |
'tv', | |
'laptop', | |
'mouse', | |
'tv remote,remote control', | |
'keyboard', | |
'cell phone,mobile', | |
'microwave', | |
'oven,ovens', | |
'toaster', | |
'sink,sinks', | |
'refrigerator,fridge', | |
'book,books', | |
'clock', | |
'vase,vases', | |
'scissor,scissors', | |
'teddy bear,teddy bears', | |
'hair drier', | |
'toothbrush,toothbrushes', | |
'banner,banners', | |
'blanket,blankets', | |
'bridge', | |
'cardboard', | |
'counter', | |
'curtain,curtains', | |
'door,doors', | |
'wood floor', | |
'flower,flowers', | |
'fruit,fruits', | |
'gravel', | |
'house', | |
'lamp,bulb,lamps,bulbs', | |
'mirror', | |
'tennis net', | |
'pillow,pillows', | |
'platform', | |
'playingfield,tennis court,baseball field,soccer field,tennis field', | |
'railroad', | |
'river', | |
'road', | |
'roof', | |
'sand', | |
'sea,sea wave,wave,waves', | |
'shelf', | |
'snow', | |
'stairs', | |
'tent', | |
'towel', | |
'brick wall', | |
'stone wall', | |
'tile wall', | |
'wood wall', | |
'water', | |
'window blind', | |
'window', | |
'tree,trees,palm tree,bushes', | |
'fence,fences', | |
'ceiling', | |
'sky,clouds', | |
'cabinet,cabinets', | |
'table', | |
'floor,flooring,tile floor', | |
'pavement', | |
'mountain,mountains', | |
'grass', | |
'dirt', | |
'paper', | |
'food', | |
'building,buildings', | |
'rock', | |
'wall,walls', | |
'rug', | |
), | |
'thing_classes': | |
('person,child,girl,boy,woman,man,people,children,girls,boys,women,men,lady,guy,ladies,guys,clothes', | |
'bicycle,bicycles,bike,bikes', | |
'car,cars', | |
'motorcycle,motorcycles', | |
'airplane,airplanes', | |
'bus,buses', | |
'train,trains,locomotive,locomotives,freight train', | |
'truck,trucks', | |
'boat,boats', | |
'traffic light', | |
'fire hydrant', | |
'stop sign', | |
'parking meter', | |
'bench,benches', | |
'bird,birds', | |
'cat,cats,kitties,kitty', | |
'dog,dogs,puppy,puppies', | |
'horse,horses,foal', | |
'sheep', | |
'cow,cows,calf', | |
'elephant,elephants', | |
'bear,bears', | |
'zebra,zebras', | |
'giraffe,giraffes', | |
'backpack,backpacks', | |
'umbrella,umbrellas', | |
'handbag,handbags', | |
'tie', | |
'suitcase,suitcases', | |
'frisbee', | |
'skis', | |
'snowboard', | |
'sports ball', | |
'kite,kites', | |
'baseball bat', | |
'baseball glove', | |
'skateboard', | |
'surfboard', | |
'tennis racket', | |
'bottle,bottles,water bottle', | |
'wine glass,wine glasses,wineglass', | |
'cup,cups,water cup,water glass', | |
'fork,forks', | |
'knife,knives', | |
'spoon,spoons', | |
'bowl,bowls', | |
'banana,bananas', | |
'apple,apples,apple fruit', | |
'sandwich,sandwiches', | |
'orange fruit', | |
'broccoli', | |
'carrot,carrots', | |
'hot dog', | |
'pizza', | |
'donut,donuts', | |
'cake,cakes', | |
'chair,chairs', | |
'couch,sofa,sofas', | |
'potted plant,potted plants,pottedplant,pottedplants,planter,planters', | |
'bed,beds', | |
'dining table,dining tables,diningtable,diningtables,plate,plates,diningtable tablecloth', | |
'toilet', | |
'tv', | |
'laptop', | |
'mouse', | |
'tv remote,remote control', | |
'keyboard', | |
'cell phone,mobile', | |
'microwave', | |
'oven,ovens', | |
'toaster', | |
'sink,sinks', | |
'refrigerator,fridge', | |
'book,books', | |
'clock', | |
'vase,vases', | |
'scissor,scissors', | |
'teddy bear,teddy bears', | |
'hair drier', | |
'toothbrush,toothbrushes', | |
), | |
'stuff_classes': | |
('banner,banners', | |
'blanket,blankets', | |
'bridge', | |
'cardboard', | |
'counter', | |
'curtain,curtains', | |
'door,doors', | |
'wood floor', | |
'flower,flowers', | |
'fruit,fruits', | |
'gravel', | |
'house', | |
'lamp,bulb,lamps,bulbs', | |
'mirror', | |
'tennis net', | |
'pillow,pillows', | |
'platform', | |
'playingfield,tennis court,baseball field,soccer field,tennis field', | |
'railroad', | |
'river', | |
'road', | |
'roof', | |
'sand', | |
'sea,sea wave,wave,waves', | |
'shelf', | |
'snow', | |
'stairs', | |
'tent', | |
'towel', | |
'brick wall', | |
'stone wall', | |
'tile wall', | |
'wood wall', | |
'water', | |
'window blind', | |
'window', | |
'tree,trees,palm tree,bushes', | |
'fence,fences', | |
'ceiling', | |
'sky,clouds', | |
'cabinet,cabinets', | |
'table', | |
'floor,flooring,tile floor', | |
'pavement', | |
'mountain,mountains', | |
'grass', | |
'dirt', | |
'paper', | |
'food', | |
'building,buildings', | |
'rock', | |
'wall,walls', | |
'rug' | |
), | |
'palette': | |
[(220, 20, 60), (119, 11, 32), (0, 0, 142), (0, 0, 230), (106, 0, 228), | |
(0, 60, 100), (0, 80, 100), (0, 0, 70), (0, 0, 192), (250, 170, 30), | |
(100, 170, 30), (220, 220, 0), (175, 116, 175), (250, 0, 30), | |
(165, 42, 42), (255, 77, 255), (0, 226, 252), (182, 182, 255), | |
(0, 82, 0), (120, 166, 157), (110, 76, 0), (174, 57, 255), | |
(199, 100, 0), (72, 0, 118), (255, 179, 240), (0, 125, 92), | |
(209, 0, 151), (188, 208, 182), (0, 220, 176), (255, 99, 164), | |
(92, 0, 73), (133, 129, 255), (78, 180, 255), (0, 228, 0), | |
(174, 255, 243), (45, 89, 255), (134, 134, 103), (145, 148, 174), | |
(255, 208, 186), (197, 226, 255), (171, 134, 1), (109, 63, 54), | |
(207, 138, 255), (151, 0, 95), (9, 80, 61), (84, 105, 51), | |
(74, 65, 105), (166, 196, 102), (208, 195, 210), (255, 109, 65), | |
(0, 143, 149), (179, 0, 194), (209, 99, 106), (5, 121, 0), | |
(227, 255, 205), (147, 186, 208), (153, 69, 1), (3, 95, 161), | |
(163, 255, 0), (119, 0, 170), (0, 182, 199), (0, 165, 120), | |
(183, 130, 88), (95, 32, 0), (130, 114, 135), (110, 129, 133), | |
(166, 74, 118), (219, 142, 185), (79, 210, 114), (178, 90, 62), | |
(65, 70, 15), (127, 167, 115), (59, 105, 106), (142, 108, 45), | |
(196, 172, 0), (95, 54, 80), (128, 76, 255), (201, 57, 1), | |
(246, 0, 122), (191, 162, 208), (255, 255, 128), (147, 211, 203), | |
(150, 100, 100), (168, 171, 172), (146, 112, 198), (210, 170, 100), | |
(92, 136, 89), (218, 88, 184), (241, 129, 0), (217, 17, 255), | |
(124, 74, 181), (70, 70, 70), (255, 228, 255), (154, 208, 0), | |
(193, 0, 92), (76, 91, 113), (255, 180, 195), (106, 154, 176), | |
(230, 150, 140), (60, 143, 255), (128, 64, 128), (92, 82, 55), | |
(254, 212, 124), (73, 77, 174), (255, 160, 98), (255, 255, 255), | |
(104, 84, 109), (169, 164, 131), (225, 199, 255), (137, 54, 74), | |
(135, 158, 223), (7, 246, 231), (107, 255, 200), (58, 41, 149), | |
(183, 121, 142), (255, 73, 97), (107, 142, 35), (190, 153, 153), | |
(146, 139, 141), (70, 130, 180), (134, 199, 156), (209, 226, 140), | |
(96, 36, 108), (96, 96, 96), (64, 170, 64), (152, 251, 152), | |
(208, 229, 228), (206, 186, 171), (152, 161, 64), (116, 112, 0), | |
(0, 114, 143), (102, 102, 156), (250, 141, 255)] | |
} | |
def load_data_list(self) -> List[dict]: | |
"""Load annotations from an annotation file named as ``self.ann_file`` | |
Returns: | |
List[dict]: A list of annotation. | |
""" # noqa: E501 | |
with get_local_path( | |
self.ann_file, backend_args=self.backend_args) as local_path: | |
self.coco = self.COCOAPI(local_path) | |
# use all classes, cannot use self.metainfo anymore. | |
self.cat_ids = self.coco.get_cat_ids() | |
self.cat2label = {cat_id: i for i, cat_id in enumerate(self.cat_ids)} | |
self.cat_img_map = copy.deepcopy(self.coco.cat_img_map) | |
img_ids = self.coco.get_img_ids() | |
data_list = [] | |
total_ann_ids = [] | |
for img_id in img_ids: | |
raw_img_info = self.coco.load_imgs([img_id])[0] | |
raw_img_info['img_id'] = img_id | |
ann_ids = self.coco.get_ann_ids(img_ids=[img_id]) | |
raw_ann_info = self.coco.load_anns(ann_ids) | |
total_ann_ids.extend(ann_ids) | |
parsed_data_info = self.parse_data_info({ | |
'raw_ann_info': | |
raw_ann_info, | |
'raw_img_info': | |
raw_img_info | |
}) | |
data_list.append(parsed_data_info) | |
if self.ANN_ID_UNIQUE: | |
assert len(set(total_ann_ids)) == len( | |
total_ann_ids | |
), f"Annotation ids in '{self.ann_file}' are not unique!" | |
del self.coco | |
return data_list | |