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.
- {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/PKG-INFO +1 -1
- {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras/_version.py +1 -1
- {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras/backbones/backbones_factory.py +10 -8
- {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras/backbones/inception_resnet_v2.py +25 -30
- {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras.egg-info/PKG-INFO +1 -1
- {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/LICENSE +0 -0
- {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/MANIFEST.in +0 -0
- {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/README.rst +0 -0
- {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/pyproject.toml +0 -0
- {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras/__init__.py +0 -0
- {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras/_compat.py +0 -0
- {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras/backbones/__init__.py +0 -0
- {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras/backbones/inception_v3.py +0 -0
- {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras/base/__init__.py +0 -0
- {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras/base/functional.py +0 -0
- {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras/base/objects.py +0 -0
- {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras/losses.py +0 -0
- {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras/metrics.py +0 -0
- {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras/models/__init__.py +0 -0
- {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras/models/_common_blocks.py +0 -0
- {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras/models/_utils.py +0 -0
- {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras/models/fpn.py +0 -0
- {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras/models/linknet.py +0 -0
- {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras/models/pspnet.py +0 -0
- {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras/models/unet.py +0 -0
- {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras/utils.py +0 -0
- {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras.egg-info/SOURCES.txt +0 -0
- {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras.egg-info/dependency_links.txt +0 -0
- {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras.egg-info/requires.txt +0 -0
- {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras.egg-info/top_level.txt +0 -0
- {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/setup.cfg +0 -0
- {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/setup.py +0 -0
- {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/tests/test_backbones.py +0 -0
- {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/tests/test_metrics.py +0 -0
- {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/tests/test_models.py +0 -0
- {segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/tests/test_utils.py +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
__versioninfo__ = (0, 1, 0, "
|
|
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
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
#
|
|
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
|
-
|
|
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
|
|
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 =
|
|
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[
|
|
515
|
-
)
|
|
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[
|
|
534
|
-
)
|
|
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: "
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras/backbones/__init__.py
RENAMED
|
File without changes
|
{segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras/backbones/inception_v3.py
RENAMED
|
File without changes
|
|
File without changes
|
{segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras/base/functional.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras/models/__init__.py
RENAMED
|
File without changes
|
{segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras/models/_common_blocks.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras.egg-info/SOURCES.txt
RENAMED
|
File without changes
|
|
File without changes
|
{segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras.egg-info/requires.txt
RENAMED
|
File without changes
|
{segmodels_keras-0.1.0.dev1 → segmodels_keras-0.1.0.dev3}/segmodels_keras.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|