segmodels-keras 0.1.0.dev1__tar.gz → 0.1.0.dev3__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.dev1 → segmodels_keras-0.1.0.dev3}/PKG-INFO +1 -1
  2. {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras/_version.py +1 -1
  3. {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras/backbones/backbones_factory.py +10 -8
  4. {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras/backbones/inception_resnet_v2.py +25 -30
  5. {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras.egg-info/PKG-INFO +1 -1
  6. {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/LICENSE +0 -0
  7. {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/MANIFEST.in +0 -0
  8. {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/README.rst +0 -0
  9. {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/pyproject.toml +0 -0
  10. {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras/__init__.py +0 -0
  11. {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras/_compat.py +0 -0
  12. {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras/backbones/__init__.py +0 -0
  13. {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras/backbones/inception_v3.py +0 -0
  14. {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras/base/__init__.py +0 -0
  15. {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras/base/functional.py +0 -0
  16. {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras/base/objects.py +0 -0
  17. {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras/losses.py +0 -0
  18. {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras/metrics.py +0 -0
  19. {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras/models/__init__.py +0 -0
  20. {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras/models/_common_blocks.py +0 -0
  21. {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras/models/_utils.py +0 -0
  22. {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras/models/fpn.py +0 -0
  23. {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras/models/linknet.py +0 -0
  24. {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras/models/pspnet.py +0 -0
  25. {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras/models/unet.py +0 -0
  26. {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras/utils.py +0 -0
  27. {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras.egg-info/SOURCES.txt +0 -0
  28. {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras.egg-info/dependency_links.txt +0 -0
  29. {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras.egg-info/requires.txt +0 -0
  30. {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras.egg-info/top_level.txt +0 -0
  31. {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/setup.cfg +0 -0
  32. {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/setup.py +0 -0
  33. {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/tests/test_backbones.py +0 -0
  34. {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/tests/test_metrics.py +0 -0
  35. {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/tests/test_models.py +0 -0
  36. {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/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.dev1
3
+ Version: 0.1.0.dev3
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
@@ -1,2 +1,2 @@
1
- __versioninfo__ = (0, 1, 0, "dev1")
1
+ __versioninfo__ = (0, 1, 0, "dev3")
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
@@ -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,8 +28,10 @@ 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.
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.
33
+ - Keep using the Lambda layer instead of CustomScaleLayer to avoid having to pass it in
34
+ with `custom_objects` when loading the model.
29
35
  """
30
36
 
31
37
  import warnings
@@ -308,20 +314,6 @@ def conv2d_bn(
308
314
  return x
309
315
 
310
316
 
311
- class CustomScaleLayer(Layer):
312
- def __init__(self, scale, **kwargs):
313
- super().__init__(**kwargs)
314
- self.scale = scale
315
-
316
- def get_config(self):
317
- config = super().get_config()
318
- config.update({"scale": self.scale})
319
- return config
320
-
321
- def call(self, inputs):
322
- return inputs[0] + inputs[1] * self.scale
323
-
324
-
325
317
  def inception_resnet_block(x, scale, block_type, block_idx, activation="relu"):
326
318
  """Adds a Inception-ResNet block.
327
319
 
@@ -398,9 +390,16 @@ def inception_resnet_block(x, scale, block_type, block_idx, activation="relu"):
398
390
  name=f"{block_name}_conv",
399
391
  )
400
392
 
401
- x = CustomScaleLayer(scale)([x, up])
393
+ x = layers.Lambda(
394
+ lambda inputs, scale: inputs[0] + inputs[1] * scale,
395
+ output_shape=x.shape[1:],
396
+ arguments={"scale": scale},
397
+ name=block_name,
398
+ )([x, up])
399
+
402
400
  if activation is not None:
403
401
  x = layers.Activation(activation, name=f"{block_name}_ac")(x)
402
+
404
403
  return x
405
404
 
406
405
 
@@ -502,17 +501,15 @@ def _obtain_input_shape(
502
501
  if data_format == "channels_first":
503
502
  if input_shape is not None:
504
503
  if len(input_shape) != 3:
505
- raise ValueError(
506
- "`input_shape` must be a tuple of three integers."
507
- )
504
+ raise ValueError("`input_shape` must be a tuple of three integers.")
508
505
  if input_shape[0] != 3 and weights == "imagenet":
509
506
  raise ValueError(
510
507
  "The input must have 3 channels; Received "
511
508
  f"`input_shape={input_shape}`"
512
509
  )
513
- if (
514
- input_shape[1] is not None and input_shape[1] < min_size
515
- ) or (input_shape[2] is not None and input_shape[2] < min_size):
510
+ if (input_shape[1] is not None and input_shape[1] < min_size) or (
511
+ input_shape[2] is not None and input_shape[2] < min_size
512
+ ):
516
513
  raise ValueError(
517
514
  f"Input size must be at least {min_size}"
518
515
  f"x{min_size}; Received: "
@@ -521,17 +518,15 @@ def _obtain_input_shape(
521
518
  else:
522
519
  if input_shape is not None:
523
520
  if len(input_shape) != 3:
524
- raise ValueError(
525
- "`input_shape` must be a tuple of three integers."
526
- )
521
+ raise ValueError("`input_shape` must be a tuple of three integers.")
527
522
  if input_shape[-1] != 3 and weights == "imagenet":
528
523
  raise ValueError(
529
524
  "The input must have 3 channels; Received "
530
525
  f"`input_shape={input_shape}`"
531
526
  )
532
- if (
533
- input_shape[0] is not None and input_shape[0] < min_size
534
- ) or (input_shape[1] is not None and input_shape[1] < min_size):
527
+ if (input_shape[0] is not None and input_shape[0] < min_size) or (
528
+ input_shape[1] is not None and input_shape[1] < min_size
529
+ ):
535
530
  raise ValueError(
536
531
  "Input size must be at least "
537
532
  f"{min_size}x{min_size}; Received: "
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: segmodels_keras
3
- Version: 0.1.0.dev1
3
+ Version: 0.1.0.dev3
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