Skip to content

Commit ce979af

Browse files
Add LCNet and fix model serialization (#10)
* Merge `apply_depthwise_separation_block` * Add `LCNet` * Speed up gpu test * Cleanup * Update `add_model_to_registry` * Fix model serialization
1 parent 7a0f2e7 commit ce979af

22 files changed

+776
-201
lines changed

conftest.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,13 @@
22

33

44
def pytest_configure():
5+
import tensorflow as tf
6+
7+
# disable tensorflow gpu memory preallocation
8+
physical_devices = tf.config.list_physical_devices("GPU")
9+
for device in physical_devices:
10+
tf.config.experimental.set_memory_growth(device, True)
11+
512
# disable jax gpu memory preallocation
613
# https://jax.readthedocs.io/en/latest/gpu_memory_allocation.html
714
os.environ["XLA_PYTHON_CLIENT_PREALLOCATE"] = "false"

kimm/blocks/__init__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
from kimm.blocks.base_block import apply_activation
22
from kimm.blocks.base_block import apply_conv2d_block
33
from kimm.blocks.base_block import apply_se_block
4+
from kimm.blocks.depthwise_separation_block import (
5+
apply_depthwise_separation_block,
6+
)
47
from kimm.blocks.inverted_residual_block import apply_inverted_residual_block
58
from kimm.blocks.transformer_block import apply_mlp_block
69
from kimm.blocks.transformer_block import apply_transformer_block
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
from keras import layers
2+
3+
from kimm.blocks.base_block import apply_conv2d_block
4+
from kimm.blocks.base_block import apply_se_block
5+
6+
7+
def apply_depthwise_separation_block(
8+
inputs,
9+
output_channels,
10+
depthwise_kernel_size=3,
11+
pointwise_kernel_size=1,
12+
strides=1,
13+
se_ratio=0.0,
14+
activation="swish",
15+
se_activation="relu",
16+
se_gate_activation="sigmoid",
17+
se_make_divisible_number=None,
18+
pw_activation=None,
19+
skip=True,
20+
bn_epsilon=1e-5,
21+
padding=None,
22+
name="depthwise_separation_block",
23+
):
24+
input_channels = inputs.shape[-1]
25+
has_skip = skip and (strides == 1 and input_channels == output_channels)
26+
27+
x = inputs
28+
x = apply_conv2d_block(
29+
x,
30+
kernel_size=depthwise_kernel_size,
31+
strides=strides,
32+
activation=activation,
33+
use_depthwise=True,
34+
bn_epsilon=bn_epsilon,
35+
padding=padding,
36+
name=f"{name}_conv_dw",
37+
)
38+
if se_ratio > 0:
39+
x = apply_se_block(
40+
x,
41+
se_ratio,
42+
activation=se_activation,
43+
gate_activation=se_gate_activation,
44+
make_divisible_number=se_make_divisible_number,
45+
name=f"{name}_se",
46+
)
47+
x = apply_conv2d_block(
48+
x,
49+
output_channels,
50+
pointwise_kernel_size,
51+
1,
52+
activation=pw_activation,
53+
bn_epsilon=bn_epsilon,
54+
padding=padding,
55+
name=f"{name}_conv_pw",
56+
)
57+
if has_skip:
58+
x = layers.Add()([x, inputs])
59+
return x

0 commit comments

Comments
 (0)