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.
- {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/PKG-INFO +1 -1
- {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/segmodels_keras/__init__.py +2 -2
- {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/segmodels_keras/_version.py +1 -1
- {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/segmodels_keras/backbones/backbones_factory.py +15 -8
- {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/segmodels_keras/backbones/inception_resnet_v2.py +26 -13
- {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/segmodels_keras.egg-info/PKG-INFO +1 -1
- {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/LICENSE +0 -0
- {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/MANIFEST.in +0 -0
- {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/README.rst +0 -0
- {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/pyproject.toml +0 -0
- {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/segmodels_keras/_compat.py +0 -0
- {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/segmodels_keras/backbones/__init__.py +0 -0
- {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/segmodels_keras/backbones/inception_v3.py +0 -0
- {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/segmodels_keras/base/__init__.py +0 -0
- {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/segmodels_keras/base/functional.py +0 -0
- {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/segmodels_keras/base/objects.py +0 -0
- {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/segmodels_keras/losses.py +0 -0
- {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/segmodels_keras/metrics.py +0 -0
- {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/segmodels_keras/models/__init__.py +0 -0
- {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/segmodels_keras/models/_common_blocks.py +0 -0
- {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/segmodels_keras/models/_utils.py +0 -0
- {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/segmodels_keras/models/fpn.py +0 -0
- {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/segmodels_keras/models/linknet.py +0 -0
- {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/segmodels_keras/models/pspnet.py +0 -0
- {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/segmodels_keras/models/unet.py +0 -0
- {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/segmodels_keras/utils.py +0 -0
- {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/segmodels_keras.egg-info/SOURCES.txt +0 -0
- {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/segmodels_keras.egg-info/dependency_links.txt +0 -0
- {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/segmodels_keras.egg-info/requires.txt +0 -0
- {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/segmodels_keras.egg-info/top_level.txt +0 -0
- {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/setup.cfg +0 -0
- {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/setup.py +0 -0
- {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/tests/test_backbones.py +0 -0
- {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/tests/test_metrics.py +0 -0
- {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/tests/test_models.py +0 -0
- {segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/tests/test_utils.py +0 -0
|
@@ -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
|
|
5
|
+
from ._version import __version__
|
|
6
6
|
|
|
7
|
-
from
|
|
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, "
|
|
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
|
-
|
|
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
|
|
@@ -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
|
-
|
|
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
|
|
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 =
|
|
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,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/segmodels_keras/backbones/__init__.py
RENAMED
|
File without changes
|
{segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/segmodels_keras/backbones/inception_v3.py
RENAMED
|
File without changes
|
|
File without changes
|
{segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/segmodels_keras/base/functional.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/segmodels_keras/models/__init__.py
RENAMED
|
File without changes
|
{segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/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.dev2 → segmodels_keras-0.1.0.dev4}/segmodels_keras.egg-info/SOURCES.txt
RENAMED
|
File without changes
|
|
File without changes
|
{segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/segmodels_keras.egg-info/requires.txt
RENAMED
|
File without changes
|
{segmodels_keras-0.1.0.dev2 → segmodels_keras-0.1.0.dev4}/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
|