|
- # -*- coding: utf-8 -*-
- # MegEngine is Licensed under the Apache License, Version 2.0 (the "License")
- #
- # Copyright (c) 2014-2020 Megvii Inc. All rights reserved.
- #
- # Unless required by applicable law or agreed to in writing,
- # software distributed under the License is distributed on an
- # "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- # ---------------------------------------------------------------------
- # Part of the following code in this file refs to maskrcnn-benchmark
- # MIT License
- #
- # Copyright (c) 2018 Facebook
- # ---------------------------------------------------------------------
- import json
- import os
- from collections import defaultdict
-
- import cv2
- import numpy as np
-
- from .meta_vision import VisionDataset
-
-
- class Objects365(VisionDataset):
- r"""`Objects365 <https://www.objects365.org/overview.html>`_ Dataset.
- """
-
- supported_order = (
- "image",
- "boxes",
- "boxes_category",
- "info",
- )
-
- def __init__(
- self, root, ann_file, remove_images_without_annotations=False, *, order=None
- ):
- super().__init__(root, order=order, supported_order=self.supported_order)
-
- with open(ann_file, "r") as f:
- dataset = json.load(f)
-
- self.imgs = dict()
- for img in dataset["images"]:
- self.imgs[img["id"]] = img
-
- self.img_to_anns = defaultdict(list)
- for ann in dataset["annotations"]:
- # for saving memory
- if (
- "boxes" not in self.order
- and "boxes_category" not in self.order
- and "bbox" in ann
- ):
- del ann["bbox"]
- self.img_to_anns[ann["image_id"]].append(ann)
-
- self.cats = dict()
- for cat in dataset["categories"]:
- self.cats[cat["id"]] = cat
-
- self.ids = list(sorted(self.imgs.keys()))
-
- # filter images without detection annotations
- if remove_images_without_annotations:
- ids = []
- for img_id in self.ids:
- anno = self.img_to_anns[img_id]
- # filter crowd annotations
- anno = [obj for obj in anno if obj["iscrowd"] == 0]
- anno = [obj for obj in anno if obj["bbox"][2] > 0 and obj["bbox"][3] > 0]
- if len(anno) > 0:
- ids.append(img_id)
- self.img_to_anns[img_id] = anno
- else:
- del self.imgs[img_id]
- del self.img_to_anns[img_id]
- self.ids = ids
-
- self.json_category_id_to_contiguous_id = {
- v: i + 1 for i, v in enumerate(self.cats.keys())
- }
-
- self.contiguous_category_id_to_json_id = {
- v: k for k, v in self.json_category_id_to_contiguous_id.items()
- }
-
- def __getitem__(self, index):
- img_id = self.ids[index]
- anno = self.img_to_anns[img_id]
-
- target = []
- for k in self.order:
- if k == "image":
- file_name = self.imgs[img_id]["file_name"]
- path = os.path.join(self.root, file_name)
- image = cv2.imread(path, cv2.IMREAD_COLOR)
- target.append(image)
- elif k == "boxes":
- boxes = [obj["bbox"] for obj in anno]
- boxes = np.array(boxes, dtype=np.float32).reshape(-1, 4)
- # transfer boxes from xywh to xyxy
- boxes[:, 2:] += boxes[:, :2]
- target.append(boxes)
- elif k == "boxes_category":
- boxes_category = [obj["category_id"] for obj in anno]
- boxes_category = [
- self.json_category_id_to_contiguous_id[c] for c in boxes_category
- ]
- boxes_category = np.array(boxes_category, dtype=np.int32)
- target.append(boxes_category)
- elif k == "info":
- info = self.imgs[img_id]
- info = [info["height"], info["width"], info["file_name"]]
- target.append(info)
- else:
- raise NotImplementedError
-
- return tuple(target)
-
- def __len__(self):
- return len(self.ids)
-
- def get_img_info(self, index):
- img_id = self.ids[index]
- img_info = self.imgs[img_id]
- return img_info
-
- class_name = (
- "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",
- )
|