|
import tensorflow as tf |
|
from tensorflow.keras import backend as K |
|
from adabelief_tf import AdaBeliefOptimizer |
|
|
|
def iou_coef(y_true, y_pred): |
|
y_true = tf.cast(y_true, tf.float32) |
|
y_pred = tf.cast(y_pred, tf.float32) |
|
intersection = K.sum(K.abs(y_true * y_pred), axis=[1, 2, 3]) |
|
union = K.sum(y_true, axis=[1, 2, 3]) + K.sum(y_pred, axis=[1, 2, 3]) - intersection |
|
return K.mean((intersection + 1e-6) / (union + 1e-6)) |
|
|
|
def dice_coef(y_true, y_pred): |
|
y_true = tf.cast(y_true, tf.float32) |
|
y_pred = tf.cast(y_pred, tf.float32) |
|
intersection = K.sum(K.abs(y_true * y_pred), axis=[1, 2, 3]) |
|
return K.mean((2. * intersection + 1e-6) / (K.sum(y_true, axis=[1, 2, 3]) + K.sum(y_pred, axis=[1, 2, 3]) + 1e-6)) |
|
|
|
def boundary_loss(y_true, y_pred): |
|
y_true = tf.cast(y_true, tf.float32) |
|
y_pred = tf.cast(y_pred, tf.float32) |
|
dy_true, dx_true = tf.image.image_gradients(y_true) |
|
dy_pred, dx_pred = tf.image.image_gradients(y_pred) |
|
loss = tf.reduce_mean(tf.abs(dy_pred - dy_true) + tf.abs(dx_pred - dx_true)) |
|
return loss * 0.5 |
|
|
|
def enhanced_binary_crossentropy(y_true, y_pred): |
|
y_true = tf.cast(y_true, tf.float32) |
|
y_pred = tf.cast(y_pred, tf.float32) |
|
bce = tf.keras.losses.binary_crossentropy(y_true, y_pred) |
|
boundary = boundary_loss(y_true, y_pred) |
|
return bce + boundary |
|
|
|
def hard_swish(x): |
|
return x * tf.nn.relu6(x + 3) * (1. / 6.) |
|
|
|
|
|
keras_path = 'runs/b32_c-conv_d-|root|meye|data|NN_human_mouse_eyes|_g1.5_l0.001_num_c1_num_f16_num_s5_r128_se23_sp-random_up-relu_us0/best_model.keras' |
|
|
|
|
|
custom_objects = { |
|
'AdaBeliefOptimizer': AdaBeliefOptimizer, |
|
'iou_coef': iou_coef, |
|
'dice_coef': dice_coef, |
|
'hard_swish': hard_swish, |
|
'enhanced_binary_crossentropy': enhanced_binary_crossentropy, |
|
'boundary_loss': boundary_loss |
|
} |
|
|
|
print("Loading model from:", keras_path) |
|
model = tf.keras.models.load_model(keras_path, custom_objects=custom_objects) |
|
|
|
|
|
h5_path = keras_path.replace('.keras', '.h5') |
|
print("Saving model to:", h5_path) |
|
model.save(h5_path, save_format='h5') |
|
print("Conversion complete!") |