diff --git a/model_server/base/session.py b/model_server/base/session.py index 4aa88a1e212fc5e7b759fd82c3ef69f2e45d1ff3..be4911f09d3e20982328cbe465815225050b56f2 100644 --- a/model_server/base/session.py +++ b/model_server/base/session.py @@ -251,7 +251,7 @@ class _Session(object): :param params: optional parameters that are passed to the model's construct :return: model_id of loaded model """ - mi = ModelClass(params=params.dict()) + mi = ModelClass(params=params.dict() if params else None) assert mi.loaded, f'Error loading instance of {ModelClass.__name__}' ii = 0 diff --git a/model_server/extensions/ilastik/models.py b/model_server/extensions/ilastik/models.py index dccb269ade99d677fc22336979ccd98c61a1076e..5e45bab4d6e9077c1799a957f041edcf60f1baed 100644 --- a/model_server/extensions/ilastik/models.py +++ b/model_server/extensions/ilastik/models.py @@ -137,7 +137,7 @@ class IlastikPixelClassifierModel(IlastikModel, SemanticSegmentationModel): [1, 2, 3, 0], [0, 1, 2, 3] ) - return InMemoryDataAccessor(data=yxcz), {'success': True} + return InMemoryDataAccessor(data=yxcz) def infer_patch_stack(self, img: PatchStack, **kwargs) -> (np.ndarray, dict): """ @@ -150,13 +150,13 @@ class IlastikPixelClassifierModel(IlastikModel, SemanticSegmentationModel): for i in range(0, img.count): sl = img.get_slice_at(i) try: - data[i][sl[0], sl[1], :, sl[3]] = self.infer(img.iat(i, crop=True))[0].data + data[i][sl[0], sl[1], :, sl[3]] = self.infer(img.iat(i, crop=True)).data except FeatureSelectionConstraintError: # occurs occasionally on small patches continue - return PatchStack(data), {'success': True} + return PatchStack(data) def label_pixel_class(self, img: GenericImageDataAccessor, **kwargs): - pxmap, _ = self.infer(img) + pxmap = self.infer(img) mask = pxmap.get_mono(self.params['px_class']).apply(lambda x: x > self.params['px_prob_threshold']) return mask @@ -219,19 +219,18 @@ class IlastikObjectClassifierFromSegmentationModel(IlastikModel, InstanceSegment [0, 1, 2, 3, 4], [0, 4, 1, 2, 3] ) - return PatchStack(data=pyxcz), {'success': True} + return PatchStack(data=pyxcz) else: yxcz = np.moveaxis( obmaps[0], [1, 2, 3, 0], [0, 1, 2, 3] ) - return InMemoryDataAccessor(data=yxcz), {'success': True} + return InMemoryDataAccessor(data=yxcz) def label_instance_class(self, img: GenericImageDataAccessor, mask: GenericImageDataAccessor, **kwargs): super(IlastikObjectClassifierFromSegmentationModel, self).label_instance_class(img, mask, **kwargs) - obmap, _ = self.infer(img, mask) - return obmap + return self.infer(img, mask) class IlastikObjectClassifierFromPixelPredictionsModel(IlastikModel, ImageToImageModel): @@ -277,14 +276,14 @@ class IlastikObjectClassifierFromPixelPredictionsModel(IlastikModel, ImageToImag [0, 1, 2, 3, 4], [0, 4, 1, 2, 3] ) - return PatchStack(data=pyxcz), {'success': True} + return PatchStack(data=pyxcz) else: yxcz = np.moveaxis( obmaps[0], [1, 2, 3, 0], [0, 1, 2, 3] ) - return InMemoryDataAccessor(data=yxcz), {'success': True} + return InMemoryDataAccessor(data=yxcz) def label_instance_class(self, img: GenericImageDataAccessor, pxmap: GenericImageDataAccessor, **kwargs): @@ -305,8 +304,7 @@ class IlastikObjectClassifierFromPixelPredictionsModel(IlastikModel, ImageToImag pxch = kwargs.get('pixel_classification_channel', 0) pxtr = kwargs.get('pixel_classification_threshold', 0.5) mask = InMemoryDataAccessor(pxmap.get_one_channel_data(pxch).data > pxtr) - obmap, _ = self.infer(img, mask) - return obmap + return self.infer(img, mask) class Error(Exception): diff --git a/model_server/extensions/ilastik/pipelines/px_then_ob.py b/model_server/extensions/ilastik/pipelines/px_then_ob.py index 1aa64615479cad29f01b7d7e416d1fec2f3c9568..2e9fd6e46d6be10e9b0cdfbdac6bebe506019c68 100644 --- a/model_server/extensions/ilastik/pipelines/px_then_ob.py +++ b/model_server/extensions/ilastik/pipelines/px_then_ob.py @@ -57,8 +57,8 @@ def pixel_then_object_classification_pipeline( else: channels = range(0, d['input'].chroma) d['select_channels'] = d.last.get_channels(channels, mip=k.get('mip', False)) - d['pxmap'], _ = models['px_model'].infer(d.last) - d['ob_map'], _ = models['ob_model'].infer(d['select_channels'], d['pxmap']) + d['pxmap'] = models['px_model'].infer(d.last) + d['ob_map'] = models['ob_model'].infer(d['select_channels'], d['pxmap']) return d diff --git a/tests/test_ilastik/test_ilastik.py b/tests/test_ilastik/test_ilastik.py index a6f467f9b7da2c30f14f07c09fc1a5f32db40f4a..4eedf981452b7771d9e1b6aa5c61f0fa72368633 100644 --- a/tests/test_ilastik/test_ilastik.py +++ b/tests/test_ilastik/test_ilastik.py @@ -148,7 +148,7 @@ class TestIlastikPixelClassification(unittest.TestCase): self.assertEqual(mask.nz, acc.nz) self.assertEqual(mask.count, acc.count) - pxmap, _ = self.model.infer_patch_stack(acc) + pxmap = self.model.infer_patch_stack(acc) self.assertEqual(pxmap.dtype, float) self.assertEqual(pxmap.chroma, len(self.model.labels)) self.assertEqual(pxmap.hw, acc.hw) @@ -162,7 +162,7 @@ class TestIlastikPixelClassification(unittest.TestCase): params={'project_file': ilastik_classifiers['pxmap_to_obj']['path'].__str__()} ) mask = self.model.label_pixel_class(self.mono_image) - objmap, _ = model.infer(self.mono_image, mask) + objmap = model.infer(self.mono_image, mask) self.assertTrue( write_accessor_data_to_file( @@ -333,7 +333,7 @@ class TestIlastikOnMultichannelInputs(TestServerTestCase): img = generate_file_accessor(self.pa_input_image) self.assertGreater(img.chroma, 1) mod = ilm.IlastikPixelClassifierModel({'project_file': self.pa_px_classifier.__str__()}) - pxmap = mod.infer(img)[0] + pxmap = mod.infer(img) self.assertEqual(pxmap.hw, img.hw) self.assertEqual(pxmap.nz, img.nz) return pxmap diff --git a/tests/test_ilastik/test_roiset_workflow.py b/tests/test_ilastik/test_roiset_workflow.py index 5f799089a54306fe3f2b5a03d4a1fa030e81a3fe..4adf24bb25a13e9a72bbad1bd0fbf9f0983b88ca 100644 --- a/tests/test_ilastik/test_roiset_workflow.py +++ b/tests/test_ilastik/test_roiset_workflow.py @@ -72,18 +72,14 @@ class BaseTestRoiSetMonoProducts(object): 'name': 'ilastik_px_mod', 'project_file': fp_px, 'model': ilm.IlastikPixelClassifierModel( - ilm.IlastikPixelClassifierParams( - project_file=fp_px, - ) + {'project_file': fp_px}, ) }, 'object_classifier': { 'name': 'ilastik_ob_mod', 'project_file': fp_ob, 'model': ilm.IlastikObjectClassifierFromSegmentationModel( - ilm.IlastikParams( - project_file=fp_ob - ) + {'project_file': fp_ob}, ) }, }