segmodels-keras 0.1.0.dev2__tar.gz → 0.1.0.dev4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/PKG-INFO +1 -1
  2. {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/segmodels_keras/__init__.py +2 -2
  3. {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/segmodels_keras/_version.py +1 -1
  4. {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/segmodels_keras/backbones/backbones_factory.py +15 -8
  5. {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/segmodels_keras/backbones/inception_resnet_v2.py +26 -13
  6. {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/segmodels_keras.egg-info/PKG-INFO +1 -1
  7. {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/LICENSE +0 -0
  8. {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/MANIFEST.in +0 -0
  9. {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/README.rst +0 -0
  10. {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/pyproject.toml +0 -0
  11. {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/segmodels_keras/_compat.py +0 -0
  12. {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/segmodels_keras/backbones/__init__.py +0 -0
  13. {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/segmodels_keras/backbones/inception_v3.py +0 -0
  14. {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/segmodels_keras/base/__init__.py +0 -0
  15. {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/segmodels_keras/base/functional.py +0 -0
  16. {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/segmodels_keras/base/objects.py +0 -0
  17. {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/segmodels_keras/losses.py +0 -0
  18. {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/segmodels_keras/metrics.py +0 -0
  19. {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/segmodels_keras/models/__init__.py +0 -0
  20. {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/segmodels_keras/models/_common_blocks.py +0 -0
  21. {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/segmodels_keras/models/_utils.py +0 -0
  22. {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/segmodels_keras/models/fpn.py +0 -0
  23. {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/segmodels_keras/models/linknet.py +0 -0
  24. {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/segmodels_keras/models/pspnet.py +0 -0
  25. {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/segmodels_keras/models/unet.py +0 -0
  26. {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/segmodels_keras/utils.py +0 -0
  27. {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/segmodels_keras.egg-info/SOURCES.txt +0 -0
  28. {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/segmodels_keras.egg-info/dependency_links.txt +0 -0
  29. {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/segmodels_keras.egg-info/requires.txt +0 -0
  30. {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/segmodels_keras.egg-info/top_level.txt +0 -0
  31. {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/setup.cfg +0 -0
  32. {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/setup.py +0 -0
  33. {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/tests/test_backbones.py +0 -0
  34. {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/tests/test_metrics.py +0 -0
  35. {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/tests/test_models.py +0 -0
  36. {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/tests/test_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: segmodels_keras
3
- Version: 0.1.0.dev2
3
+ Version: 0.1.0.dev4
4
4
  Summary: Image segmentation models with pre-trained backbones with Keras.
5
5
  Home-page: https://github.com/orthoseg/segmodels_keras
6
6
  Author: Pieter Roggemans
@@ -2,9 +2,9 @@ import functools # noqa: I001
2
2
  import os
3
3
 
4
4
  # __version__ should be defined as soon as possible
5
- from segmodels_keras._version import __version__
5
+ from ._version import __version__
6
6
 
7
- from segmodels_keras import base
7
+ from . import base
8
8
 
9
9
  _KERAS_FRAMEWORK_NAME = "keras"
10
10
  _TF_KERAS_FRAMEWORK_NAME = "tf.keras"
@@ -1,2 +1,2 @@
1
- __versioninfo__ = (0, 1, 0, "dev2")
1
+ __versioninfo__ = (0, 1, 0, "dev4")
2
2
  __version__ = ".".join(map(str, __versioninfo__))
@@ -125,14 +125,16 @@ class BackbonesFactory:
125
125
  "inceptionresnetv2": (
126
126
  irv2.InceptionResNetV2,
127
127
  irv2.preprocess_input,
128
- (
129
- "activation_161",
130
- "activation_74",
131
- "activation_3",
132
- "activation",
133
- # "input_1",
134
- ),
135
- # (594, 260, 16, 9),
128
+ # Use the layer indexes instead of names because otherwise loading weights
129
+ # saved with keras 2 cannot be loaded with keras 3.
130
+ # (
131
+ # "activation_161",
132
+ # "activation_74",
133
+ # "activation_3",
134
+ # "activation",
135
+ # # "input_1",
136
+ # ),
137
+ (594, 260, 16, 9),
136
138
  ),
137
139
  "inceptionv3": (iv3.InceptionV3, iv3.preprocess_input, (228, 86, 16, 9)),
138
140
  # MobileNet
@@ -272,5 +274,10 @@ class BackbonesFactory:
272
274
  def get_preprocessing(self, name):
273
275
  return self._models.get(name)[1]
274
276
 
277
+ def get_custom_objects(self, name):
278
+ if name == "inceptionresnetv2":
279
+ return irv2.get_custom_objects()
280
+ return {}
281
+
275
282
 
276
283
  Backbones = BackbonesFactory()
@@ -13,7 +13,11 @@ https://github.com/tensorflow/models/tree/master/research/slim#pre-trained-model
13
13
  - [Inception-v4, Inception-ResNet and the Impact of
14
14
  Residual Connections on Learning](https://arxiv.org/abs/1602.07261) (AAAI 2017)
15
15
 
16
- Differences with the original implementation in keras.applications:
16
+ The differences retained from the segmentation_models version
17
+ (https://github.com/qubvel/segmentation_models/blob/master/segmentation_models/backbones/inception_resnet_v2.py)
18
+ compared to the most recent version in keras.applications
19
+ (https://github.com/keras-team/keras/blob/86d7deacb0ac2baa3e41db4bcd61775065b5a301/keras/src/applications/inception_resnet_v2.py)
20
+ are the following:
17
21
  - For e.g. in the `conv2d_bn` blocks, padding="same" is used instead of "valid". This is
18
22
  to make the sizes of the outputs of the layers the correct size for the skip
19
23
  connections for the decoders in the segmentation models. It does not affect the
@@ -24,11 +28,8 @@ Differences with the original implementation in keras.applications:
24
28
  also give issues when loading weights that were saved with an older version. An
25
29
  example where this solution is used/shown can be found here:
26
30
  https://github.com/ayushdabra/dubai-satellite-imagery-segmentation/blob/9446e16134e752dda080ba9d65be18ea47fa26a9/get_activations.py#L40
27
- - The original implementation uses different imports as it is internal in keras, and
28
- here we need to use the public API of keras.
29
- - Use Lambda layer instead of CustomScaleLayer because:
30
- - it avoids having to define + pass in a custom layer when loading the model
31
- - otherwise "old" weights cannot be loaded when using keras 3
31
+ - The keras.applications implementation uses different imports as it is internal in
32
+ keras, and here we need to use the public API of keras.
32
33
  """
33
34
 
34
35
  import warnings
@@ -36,7 +37,6 @@ from pathlib import Path
36
37
 
37
38
  from keras import backend, layers, models
38
39
  from keras.applications import imagenet_utils
39
- from keras.layers import Layer
40
40
  from keras.utils import get_file, get_source_inputs
41
41
 
42
42
  BASE_WEIGHT_URL = (
@@ -311,6 +311,20 @@ def conv2d_bn(
311
311
  return x
312
312
 
313
313
 
314
+ class CustomScaleLayer(layers.Layer):
315
+ def __init__(self, scale, **kwargs):
316
+ super().__init__(**kwargs)
317
+ self.scale = scale
318
+
319
+ def get_config(self):
320
+ config = super().get_config()
321
+ config.update({"scale": self.scale})
322
+ return config
323
+
324
+ def call(self, inputs):
325
+ return inputs[0] + inputs[1] * self.scale
326
+
327
+
314
328
  def inception_resnet_block(x, scale, block_type, block_idx, activation="relu"):
315
329
  """Adds a Inception-ResNet block.
316
330
 
@@ -387,12 +401,7 @@ def inception_resnet_block(x, scale, block_type, block_idx, activation="relu"):
387
401
  name=f"{block_name}_conv",
388
402
  )
389
403
 
390
- x = layers.Lambda(
391
- lambda inputs, scale: inputs[0] + inputs[1] * scale,
392
- output_shape=x.shape[1:],
393
- arguments={"scale": scale},
394
- name=block_name,
395
- )([x, up])
404
+ x = CustomScaleLayer(scale)([x, up])
396
405
 
397
406
  if activation is not None:
398
407
  x = layers.Activation(activation, name=f"{block_name}_ac")(x)
@@ -431,6 +440,10 @@ def decode_predictions(preds, top=5):
431
440
  return imagenet_utils.decode_predictions(preds, top=top)
432
441
 
433
442
 
443
+ def get_custom_objects():
444
+ return {"CustomScaleLayer": CustomScaleLayer}
445
+
446
+
434
447
  def _obtain_input_shape(
435
448
  input_shape,
436
449
  default_size,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: segmodels_keras
3
- Version: 0.1.0.dev2
3
+ Version: 0.1.0.dev4
4
4
  Summary: Image segmentation models with pre-trained backbones with Keras.
5
5
  Home-page: https://github.com/orthoseg/segmodels_keras
6
6
  Author: Pieter Roggemans