Spaces:
Sleeping
Sleeping
File size: 1,609 Bytes
7a5bb5d | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | import tensorflow as tf
from tensorflow.keras import layers, models
def conv_block(input_tensor, num_filters):
x = layers.Conv2D(num_filters, (3, 3), padding="same")(input_tensor)
x = layers.BatchNormalization()(x)
x = layers.Activation("relu")(x)
x = layers.Conv2D(num_filters, (3, 3), padding="same")(x)
x = layers.BatchNormalization()(x)
x = layers.Activation("relu")(x)
return x
def encoder_block(input_tensor, num_filters):
x = conv_block(input_tensor, num_filters)
p = layers.MaxPooling2D((2, 2))(x)
return x, p
def decoder_block(input_tensor, concat_tensor, num_filters):
x = layers.Conv2DTranspose(num_filters, (2, 2), strides=(2, 2), padding="same")(input_tensor)
x = layers.concatenate([x, concat_tensor])
x = conv_block(x, num_filters)
return x
def build_unet(input_shape=(256, 256, 3)):
"""Builds a U-Net architecture for image segmentation."""
inputs = layers.Input(shape=input_shape)
# Encoder
e1, p1 = encoder_block(inputs, 64)
e2, p2 = encoder_block(p1, 128)
e3, p3 = encoder_block(p2, 256)
e4, p4 = encoder_block(p3, 512)
# Bridge
b = conv_block(p4, 1024)
# Decoder
d1 = decoder_block(b, e4, 512)
d2 = decoder_block(d1, e3, 256)
d3 = decoder_block(d2, e2, 128)
d4 = decoder_block(d3, e1, 64)
# Output (1 class for Oil Spill vs Background)
outputs = layers.Conv2D(1, (1, 1), padding="same", activation="sigmoid")(d4)
model = models.Model(inputs, outputs, name="U-Net")
return model
if __name__ == "__main__":
model = build_unet()
model.summary()
|