Ejemplo n.º 1
0
 def __iter__(self):
     return iter([
         DatasetItem(
             id='a/b/1',
             subset='a',
             annotations=[
                 Bbox(2,
                      3,
                      4,
                      5,
                      label=2,
                      id=1,
                      group=1,
                      attributes={
                          'pose': VOC.VocPose(1).name,
                          'truncated': True,
                          'difficult': False,
                          'occluded': False,
                      }),
                 Bbox(2,
                      3,
                      1,
                      1,
                      label=self._label(VOC.VocBodyPart(1).name),
                      group=1),
                 Bbox(5,
                      4,
                      3,
                      2,
                      label=self._label(VOC.VocBodyPart(2).name),
                      group=1),
             ]),
     ])
Ejemplo n.º 2
0
            def __iter__(self):
                return iter([
                    DatasetItem(id='2007_000001', subset='train',
                        annotations=[
                            Bbox(1, 2, 2, 2, label=self._label('cat'),
                                attributes={
                                    'pose': VOC.VocPose(1).name,
                                    'truncated': True,
                                    'difficult': False,
                                    'occluded': False,
                                },
                                id=1, group=1,
                            ),
                            Bbox(4, 5, 2, 2, label=self._label('person'),
                                attributes={
                                    'truncated': False,
                                    'difficult': False,
                                    'occluded': False,
                                    **{
                                        a.name: a.value % 2 == 1
                                        for a in VOC.VocAction
                                    }
                                },
                                id=2, group=2,
                                # TODO: Actions and group should be excluded
                                # as soon as correct merge is implemented
                            ),
                        ]
                    ),

                    DatasetItem(id='2007_000002', subset='test')
                ])
Ejemplo n.º 3
0
 def __iter__(self):
     return iter([
         DatasetItem(
             id='2007_000001',
             subset='train',
             image=Image(path='2007_000001.jpg', size=(10, 20)),
             annotations=[
                 Label(self._label(l.name))
                 for l in VOC.VocLabel if l.value % 2 == 1
             ] + [
                 Bbox(
                     1,
                     2,
                     2,
                     2,
                     label=self._label('cat'),
                     attributes={
                         'pose': VOC.VocPose(1).name,
                         'truncated': True,
                         'difficult': False,
                         'occluded': False,
                     },
                     id=1,
                     group=1,
                 ),
                 Bbox(
                     4,
                     5,
                     2,
                     2,
                     label=self._label('person'),
                     attributes={
                         'truncated': False,
                         'difficult': False,
                         'occluded': False,
                         **{
                             a.name: a.value % 2 == 1
                             for a in VOC.VocAction
                         }
                     },
                     id=2,
                     group=2,
                 ),
                 Bbox(5.5,
                      6,
                      2,
                      2,
                      label=self._label(VOC.VocBodyPart(1).name),
                      group=2),
                 Mask(
                     image=np.ones([5, 10]),
                     label=self._label(VOC.VocLabel(2).name),
                     group=1,
                 ),
             ]),
         DatasetItem(id='2007_000002',
                     subset='test',
                     image=np.ones((10, 20, 3))),
     ])
Ejemplo n.º 4
0
    def test_label_projection_with_masks(self):
        expected_dataset = Dataset.from_iterable([
            DatasetItem(id='2007_000001', subset='train',
                image=np.ones((10, 20, 3)),
                annotations=[
                    Bbox(1, 2, 2, 2, label=3,
                        attributes={
                            'pose': VOC.VocPose(1).name,
                            'truncated': True,
                            'difficult': False,
                            'occluded': False,
                        },
                        id=1, group=1,
                    ),
                ]
            ),

            DatasetItem(id='2007_000002', subset='test',
                image=np.ones((10, 20, 3))),
        ], categories=VOC.make_voc_categories({
            'background': [(0, 0, 0), [], []], # Added on export
            'a': [(128, 0, 0), [], []], # Generated by the transform
            'b': [(0, 128, 0), [], []], # Generated by the transform
            'cat': [(64, 0, 0), [], []] # Original
        }))

        dataset_path = osp.join(DUMMY_DATASETS_DIR, 'voc_dataset1')

        with TestDir() as test_dir:
            run(self, 'create', '-o', test_dir)
            run(self, 'import', '-p', test_dir, '-f', 'voc', dataset_path)

            run(self, 'transform', '-p', test_dir,
                '-t', 'project_labels', '--', '-l', 'a', '-l', 'b', '-l', 'cat')

            parsed_dataset = Dataset.import_from(
                osp.join(test_dir, 'source-1'), 'voc')
            compare_datasets(self, expected_dataset, parsed_dataset)
Ejemplo n.º 5
0
def generate_dummy_voc(path):
    cls_subsets_dir = osp.join(path, 'ImageSets', 'Main')
    action_subsets_dir = osp.join(path, 'ImageSets', 'Action')
    layout_subsets_dir = osp.join(path, 'ImageSets', 'Layout')
    segm_subsets_dir = osp.join(path, 'ImageSets', 'Segmentation')
    ann_dir = osp.join(path, 'Annotations')
    img_dir = osp.join(path, 'JPEGImages')
    segm_dir = osp.join(path, 'SegmentationClass')
    inst_dir = osp.join(path, 'SegmentationObject')

    os.makedirs(cls_subsets_dir)
    os.makedirs(ann_dir)
    os.makedirs(img_dir)
    os.makedirs(segm_dir)
    os.makedirs(inst_dir)

    subsets = {
        'train': ['2007_000001'],
        'test': ['2007_000002'],
    }

    # Subsets
    for subset_name, subset in subsets.items():
        for item in subset:
            with open(osp.join(cls_subsets_dir, subset_name + '.txt'), 'w') as f:
                for item in subset:
                    f.write('%s\n' % item)
    shutil.copytree(cls_subsets_dir, action_subsets_dir)
    shutil.copytree(cls_subsets_dir, layout_subsets_dir)
    shutil.copytree(cls_subsets_dir, segm_subsets_dir)

    # Classification
    subset_name = 'train'
    subset = subsets[subset_name]
    for label in VOC.VocLabel:
        with open(osp.join(cls_subsets_dir, '%s_%s.txt' % \
                (label.name, subset_name)), 'w') as f:
            for item in subset:
                presence = label.value % 2
                f.write('%s %2d\n' % (item, 1 if presence else -1))

    # Detection + Action + Layout
    subset_name = 'train'
    subset = subsets[subset_name]
    for item in subset:
        root_elem = ET.Element('annotation')
        ET.SubElement(root_elem, 'folder').text = 'VOC' + item.split('_')[0]
        ET.SubElement(root_elem, 'filename').text = item + '.jpg'

        size_elem = ET.SubElement(root_elem, 'size')
        ET.SubElement(size_elem, 'width').text = '10'
        ET.SubElement(size_elem, 'height').text = '20'
        ET.SubElement(size_elem, 'depth').text = '3'

        ET.SubElement(root_elem, 'segmented').text = '1'

        obj1_elem = ET.SubElement(root_elem, 'object')
        ET.SubElement(obj1_elem, 'name').text = 'cat'
        ET.SubElement(obj1_elem, 'pose').text = VOC.VocPose(1).name
        ET.SubElement(obj1_elem, 'truncated').text = '1'
        ET.SubElement(obj1_elem, 'difficult').text = '0'
        obj1bb_elem = ET.SubElement(obj1_elem, 'bndbox')
        ET.SubElement(obj1bb_elem, 'xmin').text = '1'
        ET.SubElement(obj1bb_elem, 'ymin').text = '2'
        ET.SubElement(obj1bb_elem, 'xmax').text = '3'
        ET.SubElement(obj1bb_elem, 'ymax').text = '4'

        obj2_elem = ET.SubElement(root_elem, 'object')
        ET.SubElement(obj2_elem, 'name').text = 'person'
        obj2bb_elem = ET.SubElement(obj2_elem, 'bndbox')
        ET.SubElement(obj2bb_elem, 'xmin').text = '4'
        ET.SubElement(obj2bb_elem, 'ymin').text = '5'
        ET.SubElement(obj2bb_elem, 'xmax').text = '6'
        ET.SubElement(obj2bb_elem, 'ymax').text = '7'
        obj2head_elem = ET.SubElement(obj2_elem, 'part')
        ET.SubElement(obj2head_elem, 'name').text = VOC.VocBodyPart(1).name
        obj2headbb_elem = ET.SubElement(obj2head_elem, 'bndbox')
        ET.SubElement(obj2headbb_elem, 'xmin').text = '5.5'
        ET.SubElement(obj2headbb_elem, 'ymin').text = '6'
        ET.SubElement(obj2headbb_elem, 'xmax').text = '7.5'
        ET.SubElement(obj2headbb_elem, 'ymax').text = '8'
        obj2act_elem = ET.SubElement(obj2_elem, 'actions')
        for act in VOC.VocAction:
            ET.SubElement(obj2act_elem, act.name).text = '%s' % (act.value % 2)

        with open(osp.join(ann_dir, item + '.xml'), 'w') as f:
            f.write(ET.tostring(root_elem, encoding='unicode'))

    # Segmentation + Instances
    subset_name = 'train'
    subset = subsets[subset_name]
    for item in subset:
        save_image(osp.join(segm_dir, item + '.png'),
            np.tile(VOC.VocColormap[2][::-1], (5, 10, 1))
        )
        save_image(osp.join(inst_dir, item + '.png'),
            np.tile(1, (5, 10, 1)))

    # Test images
    subset_name = 'test'
    subset = subsets[subset_name]
    for item in subset:
        save_image(osp.join(img_dir, item + '.jpg'),
            np.ones([10, 20, 3]))

    return subsets