def test_ava_dataset(self): target_keys = [ 'frame_dir', 'video_id', 'timestamp', 'img_key', 'shot_info', 'fps', 'ann' ] ann_keys = ['labels', 'entity_boxes', 'entity_ids'] pkl_keys = ['0f39OWEqJ24,0902', '0f39OWEqJ24,0903', '_-Z6wFjXtGQ,0902'] ava_dataset = AVADataset(self.ann_file, self.exclude_file, self.pipeline, data_prefix=self.data_prefix, proposal_file=self.proposal_file) ava_infos = ava_dataset.video_infos assert check_keys_contain(ava_dataset.proposals.keys(), pkl_keys) assert check_keys_contain(ava_infos[0].keys(), target_keys) assert check_keys_contain(ava_infos[0]['ann'].keys(), ann_keys) assert len(ava_infos) == 1 assert ava_infos[0]['frame_dir'] == osp.join(self.data_prefix, '0f39OWEqJ24') assert ava_infos[0]['video_id'] == '0f39OWEqJ24' assert ava_infos[0]['timestamp'] == 902 assert ava_infos[0]['img_key'] == '0f39OWEqJ24,0902' assert ava_infos[0]['shot_info'] == (0, 26880) assert ava_infos[0]['fps'] == 30 assert len(ava_infos[0]['ann']) == 3 target_labels = np.array([12, 17, 79] + [ -1, ] * 78) target_labels = target_labels[None, ...] assert_array_equal(ava_infos[0]['ann']['labels'], target_labels) assert_array_equal(ava_infos[0]['ann']['entity_boxes'], np.array([[0.031, 0.162, 0.67, 0.995]])) assert_array_equal(ava_infos[0]['ann']['entity_ids'], np.array([0])) ava_dataset = AVADataset(self.ann_file, None, self.pipeline, data_prefix=self.data_prefix, proposal_file=self.proposal_file) ava_infos = ava_dataset.video_infos assert len(ava_infos) == 3 ava_dataset = AVADataset(self.ann_file, None, self.pipeline, test_mode=True, data_prefix=self.data_prefix, proposal_file=self.proposal_file) ava_infos = ava_dataset.video_infos assert len(ava_infos) == 3 ava_dataset = AVADataset(self.ann_file, None, self.pipeline, test_mode=True, data_prefix=self.data_prefix, proposal_file=None) assert ava_dataset.proposals is None
def test_ava_evaluate(self): data_prefix = osp.join( osp.dirname(__file__), '../data/test_eval_detection') ann_file = osp.join(data_prefix, 'gt.csv') label_file = osp.join(data_prefix, 'action_list.txt') ava_dataset = AVADataset( ann_file, None, [], label_file=label_file, num_classes=4) fake_result = [[ np.array([[0.362, 0.156, 0.969, 0.666, 0.106], [0.442, 0.083, 0.721, 0.947, 0.162]]), np.array([[0.288, 0.365, 0.766, 0.551, 0.706], [0.178, 0.296, 0.707, 0.995, 0.223]]), np.array([[0.417, 0.167, 0.843, 0.939, 0.015], [0.35, 0.421, 0.57, 0.689, 0.427]]) ], [ np.array([[0.256, 0.338, 0.726, 0.799, 0.563], [0.071, 0.256, 0.64, 0.75, 0.297]]), np.array([[0.326, 0.036, 0.513, 0.991, 0.405], [0.351, 0.035, 0.729, 0.936, 0.945]]), np.array([[0.051, 0.005, 0.975, 0.942, 0.424], [0.347, 0.05, 0.97, 0.944, 0.396]]) ], [ np.array([[0.39, 0.087, 0.833, 0.616, 0.447], [0.461, 0.212, 0.627, 0.527, 0.036]]), np.array([[0.022, 0.394, 0.93, 0.527, 0.109], [0.208, 0.462, 0.874, 0.948, 0.954]]), np.array([[0.206, 0.456, 0.564, 0.725, 0.685], [0.106, 0.445, 0.782, 0.673, 0.367]]) ]] res = ava_dataset.evaluate(fake_result) assert_array_almost_equal(res['[email protected]@100'], 0.33333333) assert_array_almost_equal(res['AR@100'], 0.15833333) assert_array_almost_equal(res['[email protected]'], 0.027777778)
def test_ava_dataset(self): target_keys = [ 'frame_dir', 'video_id', 'timestamp', 'img_key', 'shot_info', 'fps', 'ann' ] ann_keys = ['gt_labels', 'gt_bboxes', 'entity_ids'] pkl_keys = ['0f39OWEqJ24,0902', '0f39OWEqJ24,0903', '_-Z6wFjXtGQ,0902'] ava_dataset = AVADataset(self.ann_file, self.exclude_file, self.pipeline, data_prefix=self.data_prefix, proposal_file=self.proposal_file) ava_infos = ava_dataset.video_infos assert assert_dict_has_keys(ava_dataset.proposals, pkl_keys) assert assert_dict_has_keys(ava_infos[0], target_keys) assert assert_dict_has_keys(ava_infos[0]['ann'], ann_keys) assert len(ava_infos) == 1 assert ava_infos[0]['frame_dir'] == osp.join(self.data_prefix, '0f39OWEqJ24') assert ava_infos[0]['video_id'] == '0f39OWEqJ24' assert ava_infos[0]['timestamp'] == 902 assert ava_infos[0]['img_key'] == '0f39OWEqJ24,0902' assert ava_infos[0]['shot_info'] == (0, 27000) assert ava_infos[0]['fps'] == 30 assert len(ava_infos[0]['ann']) == 3 target_labels = np.array([12, 17, 79]) labels = np.zeros([81]) labels[target_labels] = 1. target_labels = labels[None, ...] assert_array_equal(ava_infos[0]['ann']['gt_labels'], target_labels) assert_array_equal(ava_infos[0]['ann']['gt_bboxes'], np.array([[0.031, 0.162, 0.67, 0.995]])) assert_array_equal(ava_infos[0]['ann']['entity_ids'], np.array([0])) ava_dataset = AVADataset(self.ann_file, None, self.pipeline, data_prefix=self.data_prefix, proposal_file=self.proposal_file) ava_infos = ava_dataset.video_infos assert len(ava_infos) == 3 ava_dataset = AVADataset(self.ann_file, None, self.pipeline, test_mode=True, data_prefix=self.data_prefix, proposal_file=self.proposal_file) ava_infos = ava_dataset.video_infos assert len(ava_infos) == 3 ava_dataset = AVADataset(self.ann_file, None, self.pipeline, test_mode=True, data_prefix=self.data_prefix, proposal_file=self.proposal_file)
def test_ava_pipeline(self): target_keys = [ 'frame_dir', 'video_id', 'timestamp', 'img_key', 'shot_info', 'fps', 'ann', 'filename_tmpl', 'modality', 'start_index', 'timestamp_start', 'timestamp_end', 'proposals', 'frame_inds', 'clip_len', 'frame_interval' ] ann_keys = ['labels', 'entity_boxes', 'entity_ids'] ava_dataset = AVADataset(self.ann_file, self.exclude_file, self.pipeline, data_prefix=self.data_prefix, proposal_file=self.proposal_file) result = ava_dataset[0] assert check_keys_contain(result.keys(), target_keys) assert check_keys_contain(result['ann'].keys(), ann_keys) assert result['filename_tmpl'] == 'img_{:05}.jpg' assert result['modality'] == 'RGB' assert result['start_index'] == 1 assert result['timestamp_start'] == 902 assert result['timestamp_end'] == 1798 assert_array_equal(result['proposals'], np.array([[0.011, 0.157, 0.655, 0.983, 0.998163]])) assert result['clip_len'] == 32 assert result['frame_interval'] == 2 assert len(result['frame_inds']) == 32
def test_assigner_sampler(): try: from mmdet.core.bbox import build_assigner, build_sampler except (ImportError, ModuleNotFoundError): raise ImportError( 'Failed to import `build_assigner` and `build_sampler` ' 'from `mmdet.core.bbox`. The two APIs are required for ' 'the testing in `test_bbox.py`! ') data_prefix = osp.normpath( osp.join(osp.dirname(__file__), '../data/eval_detection')) ann_file = osp.join(data_prefix, 'gt.csv') label_file = osp.join(data_prefix, 'action_list.txt') proposal_file = osp.join(data_prefix, 'proposal.pkl') dataset = AVADataset(ann_file=ann_file, exclude_file=None, pipeline=[], label_file=label_file, proposal_file=proposal_file, num_classes=4) assigner = dict(type='MaxIoUAssignerAVA', pos_iou_thr=0.5, neg_iou_thr=0.5, min_pos_iou=0.5) assigner = build_assigner(assigner) proposal = torch.tensor(dataset[0]['proposals']) gt_bboxes = torch.tensor(dataset[0]['gt_bboxes']) gt_labels = torch.tensor(dataset[0]['gt_labels']) assign_result = assigner.assign(bboxes=proposal, gt_bboxes=gt_bboxes, gt_bboxes_ignore=None, gt_labels=gt_labels) assert assign_result.num_gts == 4 assert torch.all( assign_result.gt_inds == torch.tensor([0, 0, 3, 3, 0, 0, 0, 1, 0, 0])) assert torch.all( torch.isclose( assign_result.max_overlaps, torch.tensor([ 0.40386841, 0.47127257, 0.53544776, 0.58797631, 0.29281288, 0.40979504, 0.45902917, 0.50093938, 0.21560125, 0.32948171 ], dtype=torch.float64))) assert torch.all( torch.isclose( assign_result.labels, torch.tensor([[0., 0., 0., 0.], [0., 0., 0., 0.], [0., 1., 0., 0.], [0., 1., 0., 0.], [0., 0., 0., 0.], [0., 0., 0., 0.], [0., 0., 0., 0.], [0., 0., 0., 1.], [0., 0., 0., 0.], [0., 0., 0., 0.]]))) sampler = dict(type='RandomSampler', num=32, pos_fraction=1) sampler = build_sampler(sampler) sampling_result = sampler.sample(assign_result, proposal, gt_bboxes, gt_labels) assert (sampling_result.pos_inds.shape[0] == sampling_result.pos_bboxes.shape[0]) assert (sampling_result.neg_inds.shape[0] == sampling_result.neg_bboxes.shape[0]) return sampling_result
def test_ava_pipeline(self): target_keys = [ 'frame_dir', 'video_id', 'timestamp', 'img_key', 'shot_info', 'fps', 'filename_tmpl', 'modality', 'start_index', 'timestamp_start', 'timestamp_end', 'proposals', 'scores', 'frame_inds', 'clip_len', 'frame_interval', 'gt_labels', 'gt_bboxes', 'entity_ids' ] ava_dataset = AVADataset( self.ann_file, self.exclude_file, self.pipeline, data_prefix=self.data_prefix, proposal_file=self.proposal_file) result = ava_dataset[0] assert assert_dict_has_keys(result, target_keys) assert result['filename_tmpl'] == 'img_{:05}.jpg' assert result['modality'] == 'RGB' assert result['start_index'] == 1 assert result['timestamp_start'] == 900 assert result['timestamp_end'] == 1800 assert_array_equal(result['proposals'], np.array([[0.011, 0.157, 0.655, 0.983]])) assert_array_equal(result['scores'], np.array([0.998163])) assert result['clip_len'] == 32 assert result['frame_interval'] == 2 assert len(result['frame_inds']) == 32 ava_dataset = AVADataset( self.ann_file, None, self.pipeline, test_mode=True, data_prefix=self.data_prefix, proposal_file=self.proposal_file) # Try to get a sample result = ava_dataset[0] assert result['filename_tmpl'] == 'img_{:05}.jpg' assert result['modality'] == 'RGB' assert result['start_index'] == 1 assert result['timestamp_start'] == 900 assert result['timestamp_end'] == 1800
def test_assigner_sampler(): data_prefix = osp.join(osp.dirname(__file__), 'data/test_eval_detection') ann_file = osp.join(data_prefix, 'gt.csv') label_file = osp.join(data_prefix, 'action_list.txt') proposal_file = osp.join(data_prefix, 'proposal.pkl') dataset = AVADataset(ann_file=ann_file, exclude_file=None, pipeline=[], label_file=label_file, proposal_file=proposal_file, num_classes=4) assigner = dict(type='MaxIoUAssignerAVA', pos_iou_thr=0.5, neg_iou_thr=0.5, min_pos_iou=0.5) assigner = build_assigner(assigner) proposal = torch.tensor(dataset[0]['proposals']) gt_bboxes = torch.tensor(dataset[0]['gt_bboxes']) gt_labels = torch.tensor(dataset[0]['gt_labels']) assign_result = assigner.assign(bboxes=proposal, gt_bboxes=gt_bboxes, gt_bboxes_ignore=None, gt_labels=gt_labels) assert assign_result.num_gts == 4 assert torch.all( assign_result.gt_inds == torch.tensor([0, 0, 3, 3, 0, 0, 0, 1, 0, 0])) assert torch.all( torch.isclose( assign_result.max_overlaps, torch.tensor([ 0.40386841, 0.47127257, 0.53544776, 0.58797631, 0.29281288, 0.40979504, 0.45902917, 0.50093938, 0.21560125, 0.32948171 ], dtype=torch.float64))) assert torch.all( torch.isclose( assign_result.labels, torch.tensor([[0., 0., 0., 0.], [0., 0., 0., 0.], [0., 1., 0., 0.], [0., 1., 0., 0.], [0., 0., 0., 0.], [0., 0., 0., 0.], [0., 0., 0., 0.], [0., 0., 0., 1.], [0., 0., 0., 0.], [0., 0., 0., 0.]]))) sampler = dict(type='RandomSampler', num=32, pos_fraction=1) sampler = build_sampler(sampler) sampling_result = sampler.sample(assign_result, proposal, gt_bboxes, gt_labels) assert (sampling_result.pos_inds.shape[0] == sampling_result.pos_bboxes.shape[0]) assert (sampling_result.neg_inds.shape[0] == sampling_result.neg_bboxes.shape[0]) return sampling_result