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), ]), ])
def __iter__(self): return iter([ DatasetItem(id='2007_000001', subset='train', annotations=[ 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 should be excluded # as soon as correct merge is implemented ), Bbox(5.5, 6, 2, 2, label=self._label( VOC.VocBodyPart(1).name), group=2 ) ] ), DatasetItem(id='2007_000002', subset='test') ])
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))), ])
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