Team Ai
Apppublic

Arulkumar03/Fox_Sheep_Detector_Computer_Vision_model

sourceHugging Facemitupdated 3y agoView on Hugging Face
0likes
builtin.py260 linesDownload Raw Back to datasets
1# -*- coding: utf-8 -*-2# Copyright (c) Facebook, Inc. and its affiliates.3 4 5"""6This file registers pre-defined datasets at hard-coded paths, and their metadata.7 8We hard-code metadata for common datasets. This will enable:91. Consistency check when loading the datasets102. Use models on these standard datasets directly and run demos,11   without having to download the dataset annotations12 13We hard-code some paths to the dataset that's assumed to14exist in "./datasets/".15 16Users SHOULD NOT use this file to create new dataset / metadata for new dataset.17To add new dataset, refer to the tutorial "docs/DATASETS.md".18"""19 20import os21 22from detectron2.data import DatasetCatalog, MetadataCatalog23 24from .builtin_meta import ADE20K_SEM_SEG_CATEGORIES, _get_builtin_metadata25from .cityscapes import load_cityscapes_instances, load_cityscapes_semantic26from .cityscapes_panoptic import register_all_cityscapes_panoptic27from .coco import load_sem_seg, register_coco_instances28from .coco_panoptic import register_coco_panoptic, register_coco_panoptic_separated29from .lvis import get_lvis_instances_meta, register_lvis_instances30from .pascal_voc import register_pascal_voc31 32# ==== Predefined datasets and splits for COCO ==========33 34_PREDEFINED_SPLITS_COCO = {}35_PREDEFINED_SPLITS_COCO["coco"] = {36    "coco_2014_train": ("coco/train2014", "coco/annotations/instances_train2014.json"),37    "coco_2014_val": ("coco/val2014", "coco/annotations/instances_val2014.json"),38    "coco_2014_minival": ("coco/val2014", "coco/annotations/instances_minival2014.json"),39    "coco_2014_valminusminival": (40        "coco/val2014",41        "coco/annotations/instances_valminusminival2014.json",42    ),43    "coco_2017_train": ("coco/train2017", "coco/annotations/instances_train2017.json"),44    "coco_2017_val": ("coco/val2017", "coco/annotations/instances_val2017.json"),45    "coco_2017_test": ("coco/test2017", "coco/annotations/image_info_test2017.json"),46    "coco_2017_test-dev": ("coco/test2017", "coco/annotations/image_info_test-dev2017.json"),47    "coco_2017_val_100": ("coco/val2017", "coco/annotations/instances_val2017_100.json"),48}49 50_PREDEFINED_SPLITS_COCO["coco_person"] = {51    "keypoints_coco_2014_train": (52        "coco/train2014",53        "coco/annotations/person_keypoints_train2014.json",54    ),55    "keypoints_coco_2014_val": ("coco/val2014", "coco/annotations/person_keypoints_val2014.json"),56    "keypoints_coco_2014_minival": (57        "coco/val2014",58        "coco/annotations/person_keypoints_minival2014.json",59    ),60    "keypoints_coco_2014_valminusminival": (61        "coco/val2014",62        "coco/annotations/person_keypoints_valminusminival2014.json",63    ),64    "keypoints_coco_2017_train": (65        "coco/train2017",66        "coco/annotations/person_keypoints_train2017.json",67    ),68    "keypoints_coco_2017_val": ("coco/val2017", "coco/annotations/person_keypoints_val2017.json"),69    "keypoints_coco_2017_val_100": (70        "coco/val2017",71        "coco/annotations/person_keypoints_val2017_100.json",72    ),73}74 75 76_PREDEFINED_SPLITS_COCO_PANOPTIC = {77    "coco_2017_train_panoptic": (78        # This is the original panoptic annotation directory79        "coco/panoptic_train2017",80        "coco/annotations/panoptic_train2017.json",81        # This directory contains semantic annotations that are82        # converted from panoptic annotations.83        # It is used by PanopticFPN.84        # You can use the script at detectron2/datasets/prepare_panoptic_fpn.py85        # to create these directories.86        "coco/panoptic_stuff_train2017",87    ),88    "coco_2017_val_panoptic": (89        "coco/panoptic_val2017",90        "coco/annotations/panoptic_val2017.json",91        "coco/panoptic_stuff_val2017",92    ),93    "coco_2017_val_100_panoptic": (94        "coco/panoptic_val2017_100",95        "coco/annotations/panoptic_val2017_100.json",96        "coco/panoptic_stuff_val2017_100",97    ),98}99 100 101def register_all_coco(root):102    for dataset_name, splits_per_dataset in _PREDEFINED_SPLITS_COCO.items():103        for key, (image_root, json_file) in splits_per_dataset.items():104            # Assume pre-defined datasets live in `./datasets`.105            register_coco_instances(106                key,107                _get_builtin_metadata(dataset_name),108                os.path.join(root, json_file) if "://" not in json_file else json_file,109                os.path.join(root, image_root),110            )111 112    for (113        prefix,114        (panoptic_root, panoptic_json, semantic_root),115    ) in _PREDEFINED_SPLITS_COCO_PANOPTIC.items():116        prefix_instances = prefix[: -len("_panoptic")]117        instances_meta = MetadataCatalog.get(prefix_instances)118        image_root, instances_json = instances_meta.image_root, instances_meta.json_file119        # The "separated" version of COCO panoptic segmentation dataset,120        # e.g. used by Panoptic FPN121        register_coco_panoptic_separated(122            prefix,123            _get_builtin_metadata("coco_panoptic_separated"),124            image_root,125            os.path.join(root, panoptic_root),126            os.path.join(root, panoptic_json),127            os.path.join(root, semantic_root),128            instances_json,129        )130        # The "standard" version of COCO panoptic segmentation dataset,131        # e.g. used by Panoptic-DeepLab132        register_coco_panoptic(133            prefix,134            _get_builtin_metadata("coco_panoptic_standard"),135            image_root,136            os.path.join(root, panoptic_root),137            os.path.join(root, panoptic_json),138            instances_json,139        )140 141 142# ==== Predefined datasets and splits for LVIS ==========143 144 145_PREDEFINED_SPLITS_LVIS = {146    "lvis_v1": {147        "lvis_v1_train": ("coco/", "lvis/lvis_v1_train.json"),148        "lvis_v1_val": ("coco/", "lvis/lvis_v1_val.json"),149        "lvis_v1_test_dev": ("coco/", "lvis/lvis_v1_image_info_test_dev.json"),150        "lvis_v1_test_challenge": ("coco/", "lvis/lvis_v1_image_info_test_challenge.json"),151    },152    "lvis_v0.5": {153        "lvis_v0.5_train": ("coco/", "lvis/lvis_v0.5_train.json"),154        "lvis_v0.5_val": ("coco/", "lvis/lvis_v0.5_val.json"),155        "lvis_v0.5_val_rand_100": ("coco/", "lvis/lvis_v0.5_val_rand_100.json"),156        "lvis_v0.5_test": ("coco/", "lvis/lvis_v0.5_image_info_test.json"),157    },158    "lvis_v0.5_cocofied": {159        "lvis_v0.5_train_cocofied": ("coco/", "lvis/lvis_v0.5_train_cocofied.json"),160        "lvis_v0.5_val_cocofied": ("coco/", "lvis/lvis_v0.5_val_cocofied.json"),161    },162}163 164 165def register_all_lvis(root):166    for dataset_name, splits_per_dataset in _PREDEFINED_SPLITS_LVIS.items():167        for key, (image_root, json_file) in splits_per_dataset.items():168            register_lvis_instances(169                key,170                get_lvis_instances_meta(dataset_name),171                os.path.join(root, json_file) if "://" not in json_file else json_file,172                os.path.join(root, image_root),173            )174 175 176# ==== Predefined splits for raw cityscapes images ===========177_RAW_CITYSCAPES_SPLITS = {178    "cityscapes_fine_{task}_train": ("cityscapes/leftImg8bit/train/", "cityscapes/gtFine/train/"),179    "cityscapes_fine_{task}_val": ("cityscapes/leftImg8bit/val/", "cityscapes/gtFine/val/"),180    "cityscapes_fine_{task}_test": ("cityscapes/leftImg8bit/test/", "cityscapes/gtFine/test/"),181}182 183 184def register_all_cityscapes(root):185    for key, (image_dir, gt_dir) in _RAW_CITYSCAPES_SPLITS.items():186        meta = _get_builtin_metadata("cityscapes")187        image_dir = os.path.join(root, image_dir)188        gt_dir = os.path.join(root, gt_dir)189 190        inst_key = key.format(task="instance_seg")191        DatasetCatalog.register(192            inst_key,193            lambda x=image_dir, y=gt_dir: load_cityscapes_instances(194                x, y, from_json=True, to_polygons=True195            ),196        )197        MetadataCatalog.get(inst_key).set(198            image_dir=image_dir, gt_dir=gt_dir, evaluator_type="cityscapes_instance", **meta199        )200 201        sem_key = key.format(task="sem_seg")202        DatasetCatalog.register(203            sem_key, lambda x=image_dir, y=gt_dir: load_cityscapes_semantic(x, y)204        )205        MetadataCatalog.get(sem_key).set(206            image_dir=image_dir,207            gt_dir=gt_dir,208            evaluator_type="cityscapes_sem_seg",209            ignore_label=255,210            **meta,211        )212 213 214# ==== Predefined splits for PASCAL VOC ===========215def register_all_pascal_voc(root):216    SPLITS = [217        ("voc_2007_trainval", "VOC2007", "trainval"),218        ("voc_2007_train", "VOC2007", "train"),219        ("voc_2007_val", "VOC2007", "val"),220        ("voc_2007_test", "VOC2007", "test"),221        ("voc_2012_trainval", "VOC2012", "trainval"),222        ("voc_2012_train", "VOC2012", "train"),223        ("voc_2012_val", "VOC2012", "val"),224    ]225    for name, dirname, split in SPLITS:226        year = 2007 if "2007" in name else 2012227        register_pascal_voc(name, os.path.join(root, dirname), split, year)228        MetadataCatalog.get(name).evaluator_type = "pascal_voc"229 230 231def register_all_ade20k(root):232    root = os.path.join(root, "ADEChallengeData2016")233    for name, dirname in [("train", "training"), ("val", "validation")]:234        image_dir = os.path.join(root, "images", dirname)235        gt_dir = os.path.join(root, "annotations_detectron2", dirname)236        name = f"ade20k_sem_seg_{name}"237        DatasetCatalog.register(238            name, lambda x=image_dir, y=gt_dir: load_sem_seg(y, x, gt_ext="png", image_ext="jpg")239        )240        MetadataCatalog.get(name).set(241            stuff_classes=ADE20K_SEM_SEG_CATEGORIES[:],242            image_root=image_dir,243            sem_seg_root=gt_dir,244            evaluator_type="sem_seg",245            ignore_label=255,246        )247 248 249# True for open source;250# Internally at fb, we register them elsewhere251if __name__.endswith(".builtin"):252    # Assume pre-defined datasets live in `./datasets`.253    _root = os.path.expanduser(os.getenv("DETECTRON2_DATASETS", "datasets"))254    register_all_coco(_root)255    register_all_lvis(_root)256    register_all_cityscapes(_root)257    register_all_cityscapes_panoptic(_root)258    register_all_pascal_voc(_root)259    register_all_ade20k(_root)260