{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"gpu","dataSources":[{"sourceId":9988,"databundleVersionId":868324,"sourceType":"competition"},{"sourceId":85051,"sourceType":"modelInstanceVersion","modelInstanceId":71437,"modelId":96426}],"dockerImageVersionId":30747,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import tensorflow as tf\nimport glob\nimport cv2\nimport os\n\n# Enable mixed precision if supported\ntf.keras.mixed_precision.set_global_policy('mixed_float16')\n\n# Set custom configurations\ngpu_devices = tf.config.experimental.list_physical_devices('GPU')\nfor device in gpu_devices:\n    tf.config.experimental.set_memory_growth(device, True)\n\n# Set environment variables to manage cuDNN behavior\n\nos.environ['TF_CUDNN_DETERMINISTIC'] = '1'\nos.environ['TF_FORCE_GPU_ALLOW_GROWTH'] = 'true'\n\n# Define data paths\n\ntest_images_folder_path = '/kaggle/input/airbus-ship-detection/test_v2'\ntest_images_filenames = [os.path.basename(filename) for filename in glob.glob(test_images_folder_path + '/*')]\n\nunet_weights_path = '/kaggle/input/unet_model_sr08_dc_046/keras/default/1/unet_model_sr08_dc_046.weights.h5'","metadata":{"execution":{"iopub.status.busy":"2024-07-30T07:29:16.938192Z","iopub.execute_input":"2024-07-30T07:29:16.939245Z","iopub.status.idle":"2024-07-30T07:29:30.327140Z","shell.execute_reply.started":"2024-07-30T07:29:16.939192Z","shell.execute_reply":"2024-07-30T07:29:30.326093Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import numpy as np\nfrom tensorflow.keras.models import load_model\nfrom tensorflow.keras.preprocessing.image import load_img, img_to_array\nfrom skimage.transform import resize\nfrom tensorflow.keras.models import Model\nfrom tensorflow.keras.layers import Input, Conv2D, MaxPooling2D, Dropout, concatenate, Conv2DTranspose, BatchNormalization\n\ndef UNet(input_shape=(256, 256, 3)):\n    inputs = Input(input_shape)\n    \n    # Downsampling path\n    conv1 = Conv2D(16, (3, 3), activation='relu', padding='same')(inputs)\n    conv1 = BatchNormalization()(conv1)\n    conv1 = Conv2D(16, (3, 3), activation='relu', padding='same')(conv1)\n    conv1 = BatchNormalization()(conv1)\n    pool1 = MaxPooling2D((2, 2))(conv1)\n    \n    conv2 = Conv2D(32, (3, 3), activation='relu', padding='same')(pool1)\n    conv2 = BatchNormalization()(conv2)\n    conv2 = Conv2D(32, (3, 3), activation='relu', padding='same')(conv2)\n    conv2 = BatchNormalization()(conv2)\n    pool2 = MaxPooling2D((2, 2))(conv2)\n    \n    conv3 = Conv2D(64, (3, 3), activation='relu', padding='same')(pool2)\n    conv3 = BatchNormalization()(conv3)\n    conv3 = Conv2D(64, (3, 3), activation='relu', padding='same')(conv3)\n    conv3 = BatchNormalization()(conv3)\n    pool3 = MaxPooling2D((2, 2))(conv3)\n    \n    conv4 = Conv2D(128, (3, 3), activation='relu', padding='same')(pool3)\n    conv4 = BatchNormalization()(conv4)\n    conv4 = Conv2D(128, (3, 3), activation='relu', padding='same')(conv4)\n    conv4 = BatchNormalization()(conv4)\n    drop4 = Dropout(0.5)(conv4)\n    pool4 = MaxPooling2D((2, 2))(drop4)\n    \n    # Upsampling path\n    up5 = Conv2DTranspose(128, (2, 2), strides=(2, 2), padding='same')(pool4)\n    up5 = concatenate([up5, drop4], axis=3)\n    conv5 = Conv2D(128, (3, 3), activation='relu', padding='same')(up5)\n    conv5 = BatchNormalization()(conv5)\n    conv5 = Conv2D(128, (3, 3), activation='relu', padding='same')(conv5)\n    conv5 = BatchNormalization()(conv5)\n    \n    up6 = Conv2DTranspose(64, (2, 2), strides=(2, 2), padding='same')(conv5)\n    up6 = concatenate([up6, conv3], axis=3)\n    conv6 = Conv2D(64, (3, 3), activation='relu', padding='same')(up6)\n    conv6 = BatchNormalization()(conv6)\n    conv6 = Conv2D(64, (3, 3), activation='relu', padding='same')(conv6)\n    conv6 = BatchNormalization()(conv6)\n    \n    up7 = Conv2DTranspose(32, (2, 2), strides=(2, 2), padding='same')(conv6)\n    up7 = concatenate([up7, conv2], axis=3)\n    conv7 = Conv2D(32, (3, 3), activation='relu', padding='same')(up7)\n    conv7 = BatchNormalization()(conv7)\n    conv7 = Conv2D(32, (3, 3), activation='relu', padding='same')(conv7)\n    conv7 = BatchNormalization()(conv7)\n    \n    up8 = Conv2DTranspose(16, (2, 2), strides=(2, 2), padding='same')(conv7)\n    up8 = concatenate([up8, conv1], axis=3)\n    conv8 = Conv2D(16, (3, 3), activation='relu', padding='same')(up8)\n    conv8 = BatchNormalization()(conv8)\n    conv8 = Conv2D(16, (3, 3), activation='relu', padding='same')(conv8)\n    conv8 = BatchNormalization()(conv8)\n    \n    # Final convolutional layer\n    outputs = Conv2D(1, (1, 1), activation='sigmoid')(conv8)\n    \n    model = Model(inputs=[inputs], outputs=[outputs])\n    \n    return model\n\nmodel = UNet()\nmodel.load_weights(unet_weights_path)","metadata":{"execution":{"iopub.status.busy":"2024-07-30T07:29:30.329050Z","iopub.execute_input":"2024-07-30T07:29:30.329574Z","iopub.status.idle":"2024-07-30T07:29:31.150696Z","shell.execute_reply.started":"2024-07-30T07:29:30.329550Z","shell.execute_reply":"2024-07-30T07:29:31.149876Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import matplotlib.pyplot as plt\n\ndef image_from_path(img_dir, img_name):\n    img_path = os.path.join(img_dir, img_name)\n    image = cv2.imread(img_path)\n    image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)\n    image = cv2.resize(image, (256, 256)) \n    image = image / 255.0  \n    return np.expand_dims(image, axis=0)\n\ndef make_prediction(model, image):\n    prediction = model.predict(image).squeeze(0)\n    return prediction\n\ndef display_image_and_prediction(image, prediction):\n    fig, ax = plt.subplots(ncols=2, figsize=(15, 15))\n    ax[0].imshow(image.squeeze(0))\n    ax[1].imshow(prediction, cmap='rainbow')\n    plt.show()\n\nnum_pairs = 12\n\n# Loop through the first `num_pairs` images\nfor i in range(num_pairs):\n    img_name = test_images_filenames[i]\n    some_image = image_from_path(test_images_folder_path, img_name)\n    some_prediction = make_prediction(model, some_image)\n    display_image_and_prediction(some_image, some_prediction)","metadata":{"execution":{"iopub.status.busy":"2024-07-30T07:30:01.872992Z","iopub.execute_input":"2024-07-30T07:30:01.873362Z","iopub.status.idle":"2024-07-30T07:30:10.025396Z","shell.execute_reply.started":"2024-07-30T07:30:01.873333Z","shell.execute_reply":"2024-07-30T07:30:10.024482Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}