예제 #1
0
    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
예제 #2
0
 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)
예제 #3
0
    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)
예제 #4
0
    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
예제 #5
0
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
예제 #6
0
    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
예제 #7
0
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