Exemplo n.º 1
0
    def get_samples(cls, roots, ids_dataset=None):
        train_samples = []
        val_samples = []
        test_samples = []

        for split in ["train", "val", "test"]:
            if isinstance(roots[split]["cap"], tuple):
                coco_dataset = (
                    pyCOCO(roots[split]["cap"][0]),
                    pyCOCO(roots[split]["cap"][1]),
                )
                root = roots[split]["img"]
            else:
                coco_dataset = (pyCOCO(roots[split]["cap"]), )
                root = (roots[split]["img"], )

            if ids_dataset is None:
                ids = list(coco_dataset.anns.keys())
            else:
                ids = ids_dataset[split]

            if isinstance(ids, tuple):
                bp = len(ids[0])
                ids = list(ids[0]) + list(ids[1])
            else:
                bp = len(ids)

            for index in range(len(ids)):
                if index < bp:
                    coco = coco_dataset[0]
                    img_root = root[0]
                else:
                    coco = coco_dataset[1]
                    img_root = root[1]

                ann_id = ids[index]
                caption = coco.anns[ann_id]["caption"]
                img_id = coco.anns[ann_id]["image_id"]
                filename = coco.loadImgs(img_id)[0]["file_name"]

                example = Example.fromdict({
                    "image":
                    os.path.join(img_root, filename),
                    "text":
                    caption
                })

                if split == "train":
                    train_samples.append(example)
                elif split == "val":
                    val_samples.append(example)
                elif split == "test":
                    test_samples.append(example)

        return train_samples, val_samples, test_samples
Exemplo n.º 2
0
    def get_samples(cls, roots, ids_dataset=None):
        train_samples = []
        val_samples = []
        test_samples = []

        for split in ['train', 'val', 'test']:
            if isinstance(roots[split]['cap'], tuple):
                coco_dataset = (pyCOCO(roots[split]['cap'][0]),
                                pyCOCO(roots[split]['cap'][1]))
                root = roots[split]['img']
            else:
                coco_dataset = (pyCOCO(roots[split]['cap']), )
                root = (roots[split]['img'], )

            if ids_dataset is None:
                ids = list(coco_dataset.anns.keys())
            else:
                ids = ids_dataset[split]

            if isinstance(ids, tuple):
                bp = len(ids[0])
                ids = list(ids[0]) + list(ids[1])
            else:
                bp = len(ids)

            for index in range(len(ids)):
                if index < bp:
                    coco = coco_dataset[0]
                    img_root = root[0]
                else:
                    coco = coco_dataset[1]
                    img_root = root[1]

                ann_id = ids[index]
                caption = coco.anns[ann_id]['caption']
                img_id = coco.anns[ann_id]['image_id']
                filename = coco.loadImgs(img_id)[0]['file_name']

                example = Example.fromdict({
                    'image':
                    os.path.join(img_root, filename),
                    'text':
                    caption
                })

                if split == 'train':
                    train_samples.append(example)
                elif split == 'val':
                    val_samples.append(example)
                elif split == 'test':
                    test_samples.append(example)

        return train_samples, val_samples, test_samples
Exemplo n.º 3
0
    def get_samples(cls, roots, imgids_dataset, imgid2captions):
        train_samples = []
        val_samples = []
        test_samples = []

        for split in ['train', 'val', 'test']:
            coco = pyCOCO(roots[split]['cap'])
            img_root = roots[split]['img']

            ids = list(coco.anns.keys())
            img_ids = imgids_dataset[split]
            imgid2count = {i: 0 for i in img_ids}

            for index in range(len(ids)):
                ann_id = ids[index]
                img_id = coco.anns[ann_id]['image_id']
                if img_id in img_ids and imgid2count[img_id] < 5:
                    caption = imgid2captions[str(img_id)][imgid2count[
                        img_id]]  # one caption of that image (preprocessed)
                    imgid2count[img_id] += 1
                    filename = coco.loadImgs(img_id)[0]['file_name']

                    example = Example.fromdict({
                        'image':
                        os.path.join(img_root, filename),
                        'text':
                        caption
                    })

                    if split == 'train':
                        train_samples.append(example)
                    elif split == 'val':
                        val_samples.append(example)
                    elif split == 'test':
                        test_samples.append(example)

        return train_samples, val_samples, test_samples