|
import tensorflow as tf |
|
policy = tf.keras.mixed_precision.Policy("mixed_float16") |
|
tf.keras.mixed_precision.set_global_policy(policy) |
|
from tensorflow import keras |
|
from tensorflow.keras import layers |
|
from keras_cv_attention_models import efficientnet |
|
|
|
input_shape = (image_frames, None, None, 3) |
|
image_frames = 60 |
|
image_size = 384 |
|
|
|
backbone_path = 'efficientnetv2-s-21k-ft1k.h5' |
|
backbone = efficientnet.EfficientNetV2S(pretrained=backbone_path,dropout=1e-6, num_classes=0, include_preprocessing = True) |
|
backbone.summary() |
|
backbone.trainable = False |
|
|
|
inputs = keras.Input(shape=input_shape) |
|
backbone_inputs = keras.Input(shape=(None, None, 3)) |
|
y = backbone(backbone_inputs) |
|
y = layers.Flatten()(y) |
|
y = layers.Dense(32, activation="relu")(y) |
|
y = layers.Dropout(0.1)(y) |
|
x = layers.TimeDistributed(keras.Model(backbone_inputs, y))(inputs) |
|
x = layers.Dropout(0.1)(x) |
|
x = layers.LSTM(128, return_sequences=True)(x) |
|
x = layers.Dropout(0.1)(x) |
|
x = layers.LSTM(128, return_sequences=False)(x) |
|
x = layers.Dropout(0.1)(x) |
|
x = layers.Dense(128, activation="relu")(x) |
|
x = layers.Dropout(0.1)(x) |
|
x = layers.Dense(64, activation="relu")(x) |
|
x = layers.Dropout(0.1)(x) |
|
x = layers.Dense(48, activation="relu")(x) |
|
x = layers.Dropout(0.1)(x) |
|
x = layers.Dense(32, activation="relu")(x) |
|
x = layers.Dropout(0.1)(x) |
|
outputs = layers.Dense(9, activation="relu")(x) |
|
model = keras.Model(inputs, outputs) |
|
model.compile( |
|
optimizer=keras.optimizers.Adam(1e-3), |
|
loss="mean_squared_error", |
|
metrics=["mean_squared_error", "mean_absolute_error"] |
|
) |