|
|
|
import copy |
|
import os.path as osp |
|
from typing import List |
|
|
|
from mmengine.fileio import get_local_path |
|
|
|
from mmdet.registry import DATASETS |
|
from .api_wrappers import COCO |
|
from .coco import CocoDataset |
|
|
|
|
|
objv2_ignore_list = [ |
|
osp.join('patch16', 'objects365_v2_00908726.jpg'), |
|
osp.join('patch6', 'objects365_v1_00320532.jpg'), |
|
osp.join('patch6', 'objects365_v1_00320534.jpg'), |
|
] |
|
|
|
|
|
@DATASETS.register_module() |
|
class Objects365V1Dataset(CocoDataset): |
|
"""Objects365 v1 dataset for detection.""" |
|
|
|
METAINFO = { |
|
'classes': |
|
('person', 'sneakers', 'chair', 'hat', 'lamp', 'bottle', |
|
'cabinet/shelf', 'cup', 'car', 'glasses', 'picture/frame', 'desk', |
|
'handbag', 'street lights', 'book', 'plate', 'helmet', |
|
'leather shoes', 'pillow', 'glove', 'potted plant', 'bracelet', |
|
'flower', 'tv', 'storage box', 'vase', 'bench', 'wine glass', 'boots', |
|
'bowl', 'dining table', 'umbrella', 'boat', 'flag', 'speaker', |
|
'trash bin/can', 'stool', 'backpack', 'couch', 'belt', 'carpet', |
|
'basket', 'towel/napkin', 'slippers', 'barrel/bucket', 'coffee table', |
|
'suv', 'toy', 'tie', 'bed', 'traffic light', 'pen/pencil', |
|
'microphone', 'sandals', 'canned', 'necklace', 'mirror', 'faucet', |
|
'bicycle', 'bread', 'high heels', 'ring', 'van', 'watch', 'sink', |
|
'horse', 'fish', 'apple', 'camera', 'candle', 'teddy bear', 'cake', |
|
'motorcycle', 'wild bird', 'laptop', 'knife', 'traffic sign', |
|
'cell phone', 'paddle', 'truck', 'cow', 'power outlet', 'clock', |
|
'drum', 'fork', 'bus', 'hanger', 'nightstand', 'pot/pan', 'sheep', |
|
'guitar', 'traffic cone', 'tea pot', 'keyboard', 'tripod', 'hockey', |
|
'fan', 'dog', 'spoon', 'blackboard/whiteboard', 'balloon', |
|
'air conditioner', 'cymbal', 'mouse', 'telephone', 'pickup truck', |
|
'orange', 'banana', 'airplane', 'luggage', 'skis', 'soccer', |
|
'trolley', 'oven', 'remote', 'baseball glove', 'paper towel', |
|
'refrigerator', 'train', 'tomato', 'machinery vehicle', 'tent', |
|
'shampoo/shower gel', 'head phone', 'lantern', 'donut', |
|
'cleaning products', 'sailboat', 'tangerine', 'pizza', 'kite', |
|
'computer box', 'elephant', 'toiletries', 'gas stove', 'broccoli', |
|
'toilet', 'stroller', 'shovel', 'baseball bat', 'microwave', |
|
'skateboard', 'surfboard', 'surveillance camera', 'gun', 'life saver', |
|
'cat', 'lemon', 'liquid soap', 'zebra', 'duck', 'sports car', |
|
'giraffe', 'pumpkin', 'piano', 'stop sign', 'radiator', 'converter', |
|
'tissue ', 'carrot', 'washing machine', 'vent', 'cookies', |
|
'cutting/chopping board', 'tennis racket', 'candy', |
|
'skating and skiing shoes', 'scissors', 'folder', 'baseball', |
|
'strawberry', 'bow tie', 'pigeon', 'pepper', 'coffee machine', |
|
'bathtub', 'snowboard', 'suitcase', 'grapes', 'ladder', 'pear', |
|
'american football', 'basketball', 'potato', 'paint brush', 'printer', |
|
'billiards', 'fire hydrant', 'goose', 'projector', 'sausage', |
|
'fire extinguisher', 'extension cord', 'facial mask', 'tennis ball', |
|
'chopsticks', 'electronic stove and gas stove', 'pie', 'frisbee', |
|
'kettle', 'hamburger', 'golf club', 'cucumber', 'clutch', 'blender', |
|
'tong', 'slide', 'hot dog', 'toothbrush', 'facial cleanser', 'mango', |
|
'deer', 'egg', 'violin', 'marker', 'ship', 'chicken', 'onion', |
|
'ice cream', 'tape', 'wheelchair', 'plum', 'bar soap', 'scale', |
|
'watermelon', 'cabbage', 'router/modem', 'golf ball', 'pine apple', |
|
'crane', 'fire truck', 'peach', 'cello', 'notepaper', 'tricycle', |
|
'toaster', 'helicopter', 'green beans', 'brush', 'carriage', 'cigar', |
|
'earphone', 'penguin', 'hurdle', 'swing', 'radio', 'CD', |
|
'parking meter', 'swan', 'garlic', 'french fries', 'horn', 'avocado', |
|
'saxophone', 'trumpet', 'sandwich', 'cue', 'kiwi fruit', 'bear', |
|
'fishing rod', 'cherry', 'tablet', 'green vegetables', 'nuts', 'corn', |
|
'key', 'screwdriver', 'globe', 'broom', 'pliers', 'volleyball', |
|
'hammer', 'eggplant', 'trophy', 'dates', 'board eraser', 'rice', |
|
'tape measure/ruler', 'dumbbell', 'hamimelon', 'stapler', 'camel', |
|
'lettuce', 'goldfish', 'meat balls', 'medal', 'toothpaste', |
|
'antelope', 'shrimp', 'rickshaw', 'trombone', 'pomegranate', |
|
'coconut', 'jellyfish', 'mushroom', 'calculator', 'treadmill', |
|
'butterfly', 'egg tart', 'cheese', 'pig', 'pomelo', 'race car', |
|
'rice cooker', 'tuba', 'crosswalk sign', 'papaya', 'hair drier', |
|
'green onion', 'chips', 'dolphin', 'sushi', 'urinal', 'donkey', |
|
'electric drill', 'spring rolls', 'tortoise/turtle', 'parrot', |
|
'flute', 'measuring cup', 'shark', 'steak', 'poker card', |
|
'binoculars', 'llama', 'radish', 'noodles', 'yak', 'mop', 'crab', |
|
'microscope', 'barbell', 'bread/bun', 'baozi', 'lion', 'red cabbage', |
|
'polar bear', 'lighter', 'seal', 'mangosteen', 'comb', 'eraser', |
|
'pitaya', 'scallop', 'pencil case', 'saw', 'table tennis paddle', |
|
'okra', 'starfish', 'eagle', 'monkey', 'durian', 'game board', |
|
'rabbit', 'french horn', 'ambulance', 'asparagus', 'hoverboard', |
|
'pasta', 'target', 'hotair balloon', 'chainsaw', 'lobster', 'iron', |
|
'flashlight'), |
|
'palette': |
|
None |
|
} |
|
|
|
COCOAPI = COCO |
|
|
|
ANN_ID_UNIQUE = True |
|
|
|
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. |
|
""" |
|
with get_local_path( |
|
self.ann_file, backend_args=self.backend_args) as local_path: |
|
self.coco = self.COCOAPI(local_path) |
|
|
|
|
|
|
|
cats = self.coco.cats |
|
sorted_cats = {i: cats[i] for i in sorted(cats)} |
|
self.coco.cats = sorted_cats |
|
categories = self.coco.dataset['categories'] |
|
sorted_categories = sorted(categories, key=lambda i: i['id']) |
|
self.coco.dataset['categories'] = sorted_categories |
|
|
|
|
|
self.cat_ids = self.coco.get_cat_ids( |
|
cat_names=self.metainfo['classes']) |
|
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 |
|
|
|
|
|
@DATASETS.register_module() |
|
class Objects365V2Dataset(CocoDataset): |
|
"""Objects365 v2 dataset for detection.""" |
|
METAINFO = { |
|
'classes': |
|
('Person', 'Sneakers', 'Chair', 'Other Shoes', 'Hat', 'Car', 'Lamp', |
|
'Glasses', 'Bottle', 'Desk', 'Cup', 'Street Lights', 'Cabinet/shelf', |
|
'Handbag/Satchel', 'Bracelet', 'Plate', 'Picture/Frame', 'Helmet', |
|
'Book', 'Gloves', 'Storage box', 'Boat', 'Leather Shoes', 'Flower', |
|
'Bench', 'Potted Plant', 'Bowl/Basin', 'Flag', 'Pillow', 'Boots', |
|
'Vase', 'Microphone', 'Necklace', 'Ring', 'SUV', 'Wine Glass', 'Belt', |
|
'Moniter/TV', 'Backpack', 'Umbrella', 'Traffic Light', 'Speaker', |
|
'Watch', 'Tie', 'Trash bin Can', 'Slippers', 'Bicycle', 'Stool', |
|
'Barrel/bucket', 'Van', 'Couch', 'Sandals', 'Bakset', 'Drum', |
|
'Pen/Pencil', 'Bus', 'Wild Bird', 'High Heels', 'Motorcycle', |
|
'Guitar', 'Carpet', 'Cell Phone', 'Bread', 'Camera', 'Canned', |
|
'Truck', 'Traffic cone', 'Cymbal', 'Lifesaver', 'Towel', |
|
'Stuffed Toy', 'Candle', 'Sailboat', 'Laptop', 'Awning', 'Bed', |
|
'Faucet', 'Tent', 'Horse', 'Mirror', 'Power outlet', 'Sink', 'Apple', |
|
'Air Conditioner', 'Knife', 'Hockey Stick', 'Paddle', 'Pickup Truck', |
|
'Fork', 'Traffic Sign', 'Ballon', 'Tripod', 'Dog', 'Spoon', 'Clock', |
|
'Pot', 'Cow', 'Cake', 'Dinning Table', 'Sheep', 'Hanger', |
|
'Blackboard/Whiteboard', 'Napkin', 'Other Fish', 'Orange/Tangerine', |
|
'Toiletry', 'Keyboard', 'Tomato', 'Lantern', 'Machinery Vehicle', |
|
'Fan', 'Green Vegetables', 'Banana', 'Baseball Glove', 'Airplane', |
|
'Mouse', 'Train', 'Pumpkin', 'Soccer', 'Skiboard', 'Luggage', |
|
'Nightstand', 'Tea pot', 'Telephone', 'Trolley', 'Head Phone', |
|
'Sports Car', 'Stop Sign', 'Dessert', 'Scooter', 'Stroller', 'Crane', |
|
'Remote', 'Refrigerator', 'Oven', 'Lemon', 'Duck', 'Baseball Bat', |
|
'Surveillance Camera', 'Cat', 'Jug', 'Broccoli', 'Piano', 'Pizza', |
|
'Elephant', 'Skateboard', 'Surfboard', 'Gun', |
|
'Skating and Skiing shoes', 'Gas stove', 'Donut', 'Bow Tie', 'Carrot', |
|
'Toilet', 'Kite', 'Strawberry', 'Other Balls', 'Shovel', 'Pepper', |
|
'Computer Box', 'Toilet Paper', 'Cleaning Products', 'Chopsticks', |
|
'Microwave', 'Pigeon', 'Baseball', 'Cutting/chopping Board', |
|
'Coffee Table', 'Side Table', 'Scissors', 'Marker', 'Pie', 'Ladder', |
|
'Snowboard', 'Cookies', 'Radiator', 'Fire Hydrant', 'Basketball', |
|
'Zebra', 'Grape', 'Giraffe', 'Potato', 'Sausage', 'Tricycle', |
|
'Violin', 'Egg', 'Fire Extinguisher', 'Candy', 'Fire Truck', |
|
'Billards', 'Converter', 'Bathtub', 'Wheelchair', 'Golf Club', |
|
'Briefcase', 'Cucumber', 'Cigar/Cigarette ', 'Paint Brush', 'Pear', |
|
'Heavy Truck', 'Hamburger', 'Extractor', 'Extention Cord', 'Tong', |
|
'Tennis Racket', 'Folder', 'American Football', 'earphone', 'Mask', |
|
'Kettle', 'Tennis', 'Ship', 'Swing', 'Coffee Machine', 'Slide', |
|
'Carriage', 'Onion', 'Green beans', 'Projector', 'Frisbee', |
|
'Washing Machine/Drying Machine', 'Chicken', 'Printer', 'Watermelon', |
|
'Saxophone', 'Tissue', 'Toothbrush', 'Ice cream', 'Hotair ballon', |
|
'Cello', 'French Fries', 'Scale', 'Trophy', 'Cabbage', 'Hot dog', |
|
'Blender', 'Peach', 'Rice', 'Wallet/Purse', 'Volleyball', 'Deer', |
|
'Goose', 'Tape', 'Tablet', 'Cosmetics', 'Trumpet', 'Pineapple', |
|
'Golf Ball', 'Ambulance', 'Parking meter', 'Mango', 'Key', 'Hurdle', |
|
'Fishing Rod', 'Medal', 'Flute', 'Brush', 'Penguin', 'Megaphone', |
|
'Corn', 'Lettuce', 'Garlic', 'Swan', 'Helicopter', 'Green Onion', |
|
'Sandwich', 'Nuts', 'Speed Limit Sign', 'Induction Cooker', 'Broom', |
|
'Trombone', 'Plum', 'Rickshaw', 'Goldfish', 'Kiwi fruit', |
|
'Router/modem', 'Poker Card', 'Toaster', 'Shrimp', 'Sushi', 'Cheese', |
|
'Notepaper', 'Cherry', 'Pliers', 'CD', 'Pasta', 'Hammer', 'Cue', |
|
'Avocado', 'Hamimelon', 'Flask', 'Mushroon', 'Screwdriver', 'Soap', |
|
'Recorder', 'Bear', 'Eggplant', 'Board Eraser', 'Coconut', |
|
'Tape Measur/ Ruler', 'Pig', 'Showerhead', 'Globe', 'Chips', 'Steak', |
|
'Crosswalk Sign', 'Stapler', 'Campel', 'Formula 1 ', 'Pomegranate', |
|
'Dishwasher', 'Crab', 'Hoverboard', 'Meat ball', 'Rice Cooker', |
|
'Tuba', 'Calculator', 'Papaya', 'Antelope', 'Parrot', 'Seal', |
|
'Buttefly', 'Dumbbell', 'Donkey', 'Lion', 'Urinal', 'Dolphin', |
|
'Electric Drill', 'Hair Dryer', 'Egg tart', 'Jellyfish', 'Treadmill', |
|
'Lighter', 'Grapefruit', 'Game board', 'Mop', 'Radish', 'Baozi', |
|
'Target', 'French', 'Spring Rolls', 'Monkey', 'Rabbit', 'Pencil Case', |
|
'Yak', 'Red Cabbage', 'Binoculars', 'Asparagus', 'Barbell', 'Scallop', |
|
'Noddles', 'Comb', 'Dumpling', 'Oyster', 'Table Teniis paddle', |
|
'Cosmetics Brush/Eyeliner Pencil', 'Chainsaw', 'Eraser', 'Lobster', |
|
'Durian', 'Okra', 'Lipstick', 'Cosmetics Mirror', 'Curling', |
|
'Table Tennis '), |
|
'palette': |
|
None |
|
} |
|
|
|
COCOAPI = COCO |
|
|
|
ANN_ID_UNIQUE = True |
|
|
|
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. |
|
""" |
|
with get_local_path( |
|
self.ann_file, backend_args=self.backend_args) as local_path: |
|
self.coco = self.COCOAPI(local_path) |
|
|
|
|
|
self.cat_ids = self.coco.get_cat_ids( |
|
cat_names=self.metainfo['classes']) |
|
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) |
|
|
|
|
|
file_name = osp.join( |
|
osp.split(osp.split(raw_img_info['file_name'])[0])[-1], |
|
osp.split(raw_img_info['file_name'])[-1]) |
|
|
|
if file_name in objv2_ignore_list: |
|
continue |
|
|
|
raw_img_info['file_name'] = file_name |
|
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 |
|
|