Пример #1
0
    def test_can_batch_launch_custom_model(self):
        class TestExtractor(Extractor):
            def __iter__(self):
                for i in range(5):
                    yield DatasetItem(id=i,
                                      subset='train',
                                      image=np.array([i]))

        class TestLauncher(Launcher):
            def launch(self, inputs):
                for i, inp in enumerate(inputs):
                    yield [Label(attributes={'idx': i, 'data': inp.item()})]

        model_name = 'model'
        launcher_name = 'custom_launcher'

        project = Project()
        project.env.launchers.register(launcher_name, TestLauncher)
        project.add_model(model_name, {'launcher': launcher_name})
        model = project.make_executable_model(model_name)
        extractor = TestExtractor()

        batch_size = 3
        executor = InferenceWrapper(extractor, model, batch_size=batch_size)

        for item in executor:
            self.assertEqual(1, len(item.annotations))
            self.assertEqual(
                int(item.id) % batch_size,
                item.annotations[0].attributes['idx'])
            self.assertEqual(int(item.id),
                             item.annotations[0].attributes['data'])
Пример #2
0
    def test_can_batch_launch_custom_model(self):
        dataset = Dataset.from_iterable([
            DatasetItem(id=i, subset='train', image=np.array([i]))
            for i in range(5)
        ],
                                        categories=['label'])

        class TestLauncher(Launcher):
            def launch(self, inputs):
                for i, inp in enumerate(inputs):
                    yield [Label(0, attributes={'idx': i, 'data': inp.item()})]

        model_name = 'model'
        launcher_name = 'custom_launcher'

        project = Project()
        project.env.launchers.register(launcher_name, TestLauncher)
        project.add_model(model_name, {'launcher': launcher_name})
        model = project.make_executable_model(model_name)

        batch_size = 3
        executor = ModelTransform(dataset, model, batch_size=batch_size)

        for item in executor:
            self.assertEqual(1, len(item.annotations))
            self.assertEqual(
                int(item.id) % batch_size,
                item.annotations[0].attributes['idx'])
            self.assertEqual(int(item.id),
                             item.annotations[0].attributes['data'])
Пример #3
0
    def test_can_batch_launch_custom_model(self):
        class TestExtractor(Extractor):
            def __init__(self, url, n=0):
                super().__init__(length=n)
                self.n = n

            def __iter__(self):
                for i in range(self.n):
                    yield DatasetItem(id=i, subset='train', image=i)

            def subsets(self):
                return ['train']

        class TestLauncher(Launcher):
            def __init__(self, **kwargs):
                pass

            def launch(self, inputs):
                for i, inp in enumerate(inputs):
                    yield [LabelObject(attributes={'idx': i, 'data': inp})]

        model_name = 'model'
        launcher_name = 'custom_launcher'

        project = Project()
        project.env.launchers.register(launcher_name, TestLauncher)
        project.add_model(model_name, {'launcher': launcher_name})
        model = project.make_executable_model(model_name)
        extractor = TestExtractor('', n=5)

        batch_size = 3
        executor = InferenceWrapper(extractor, model, batch_size=batch_size)

        for item in executor:
            self.assertEqual(1, len(item.annotations))
            self.assertEqual(
                int(item.id) % batch_size,
                item.annotations[0].attributes['idx'])
            self.assertEqual(int(item.id),
                             item.annotations[0].attributes['data'])