File size: 3,335 Bytes
34d1f8b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# Copyright (c) OpenMMLab. All rights reserved.
from unittest import TestCase
from unittest.mock import Mock

from mmengine.dataset import BaseDataset

from mmdet3d.datasets.transforms import ObjectSample
from mmdet3d.engine.hooks import DisableObjectSampleHook


class TestDisableObjectSampleHook(TestCase):

    runner = Mock()
    runner.train_dataloader = Mock()
    runner.train_dataloader.dataset = Mock(spec=BaseDataset)
    runner.train_dataloader.dataset.pipeline = Mock()
    runner.train_dataloader._DataLoader__initialized = True
    runner.train_dataloader.dataset.pipeline.transforms = [
        ObjectSample(
            db_sampler=dict(
                data_root='tests/data/waymo/kitti_format',
                info_path=  # noqa
                'tests/data/waymo/kitti_format/waymo_dbinfos_train.pkl',
                rate=1.0,
                prepare=dict(
                    filter_by_difficulty=[-1],
                    filter_by_min_points=dict(Car=5)),
                classes=['Car'],
                sample_groups=dict(Car=15),
            ))
    ]

    def test_is_model_wrapper_and_persistent_workers_on(self):
        self.runner.train_dataloader.dataset.pipeline.transforms[
            0].disabled = False
        self.runner.train_dataloader.persistent_workers = True
        hook = DisableObjectSampleHook(disable_after_epoch=15)
        self.runner.epoch = 14
        hook.before_train_epoch(self.runner)
        self.assertFalse(self.runner.train_dataloader.dataset.pipeline.
                         transforms[0].disabled)  # noqa: E501

        self.runner.epoch = 15
        hook.before_train_epoch(self.runner)
        self.assertTrue(self.runner.train_dataloader.dataset.pipeline.
                        transforms[0].disabled)  # noqa: E501
        self.assertTrue(hook._restart_dataloader)
        self.assertFalse(self.runner.train_dataloader._DataLoader__initialized)

        self.runner.epoch = 16
        hook.before_train_epoch(self.runner)
        self.assertTrue(self.runner.train_dataloader._DataLoader__initialized)
        self.assertTrue(self.runner.train_dataloader.dataset.pipeline.
                        transforms[0].disabled)  # noqa: E501

    def test_not_model_wrapper_and_persistent_workers_off(self):
        self.runner.train_dataloader.dataset.pipeline.transforms[
            0].disabled = False
        self.runner.train_dataloader.persistent_workers = False
        hook = DisableObjectSampleHook(disable_after_epoch=15)
        self.runner.epoch = 14
        hook.before_train_epoch(self.runner)
        self.assertFalse(self.runner.train_dataloader.dataset.pipeline.
                         transforms[0].disabled)  # noqa: E501

        self.runner.epoch = 15
        hook.before_train_epoch(self.runner)
        self.assertTrue(self.runner.train_dataloader.dataset.pipeline.
                        transforms[0].disabled)  # noqa: E501
        self.assertFalse(hook._restart_dataloader)
        self.assertTrue(self.runner.train_dataloader._DataLoader__initialized)

        self.runner.epoch = 16
        hook.before_train_epoch(self.runner)
        self.assertTrue(self.runner.train_dataloader._DataLoader__initialized)
        self.assertTrue(self.runner.train_dataloader.dataset.pipeline.
                        transforms[0].disabled)  # noqa: E501