{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import os\n\nprint(\"CE: \", len(os.listdir(\"../input/mayo-clinic/First Experiment/train/CE\")))\nprint(\"LAA: \", len(os.listdir(\"../input/mayo-clinic/First Experiment/train/LAA\")))","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2022-10-06T21:15:53.764199Z","iopub.execute_input":"2022-10-06T21:15:53.764666Z","iopub.status.idle":"2022-10-06T21:15:53.855017Z","shell.execute_reply.started":"2022-10-06T21:15:53.764621Z","shell.execute_reply":"2022-10-06T21:15:53.853842Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"directory = \"../input/mayo-clinic/First Experiment/train\"\nmodel_path = \"./mayo_eff_net_mdl_wts.hdf5\"\n\n# https://tfhub.dev/google/collections/efficientnet_v2/1\nIMG_SIZE = 300\nBATCH_SIZE = 32\nEPOCHS = 20","metadata":{"execution":{"iopub.status.busy":"2022-10-06T21:15:53.860431Z","iopub.execute_input":"2022-10-06T21:15:53.863279Z","iopub.status.idle":"2022-10-06T21:15:53.871704Z","shell.execute_reply.started":"2022-10-06T21:15:53.863227Z","shell.execute_reply":"2022-10-06T21:15:53.870348Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from IPython.display import clear_output\n\n!pip install -q tensorflow==2.4.1\n\nclear_output()","metadata":{"execution":{"iopub.status.busy":"2022-10-06T21:15:53.878311Z","iopub.execute_input":"2022-10-06T21:15:53.881044Z","iopub.status.idle":"2022-10-06T21:15:54.719589Z","shell.execute_reply.started":"2022-10-06T21:15:53.880997Z","shell.execute_reply":"2022-10-06T21:15:54.713202Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import tensorflow as tf\n\n# train_dataset = tf.keras.preprocessing.image_dataset_from_directory(\n#    directory,\n#    labels=\"inferred\",\n#    label_mode=\"categorical\",\n#    class_names=[\"CE\", \"LAA\"],\n#     color_mode=\"rgb\",\n#     batch_size=32,\n#     image_size=(IMG_SIZE, IMG_SIZE),\n#     shuffle=True,\n#     seed=1,\n#     validation_split=0.2,\n#     subset=\"training\",\n#     interpolation=\"bilinear\",\n#     follow_links=False\n# )\n\n# val_dataset = tf.keras.preprocessing.image_dataset_from_directory(\n#     directory,\n#     labels=\"inferred\",\n#     label_mode=\"categorical\",\n#     class_names=[\"CE\", \"LAA\"],\n#     color_mode=\"rgb\",\n#     batch_size=32,\n#     image_size=(IMG_SIZE, IMG_SIZE),\n#     shuffle=True,\n#     seed=1,\n#     validation_split=0.2,\n#     subset=\"validation\",\n#     interpolation=\"bilinear\",\n#     follow_links=False\n# )","metadata":{"execution":{"iopub.status.busy":"2022-10-06T21:15:54.72212Z","iopub.status.idle":"2022-10-06T21:15:54.723302Z","shell.execute_reply.started":"2022-10-06T21:15:54.72294Z","shell.execute_reply":"2022-10-06T21:15:54.722989Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Upsample data","metadata":{}},{"cell_type":"code","source":"def augment_images(image, label):\n    image = tf.image.random_flip_left_right(image)\n    return image, label\n\n# result = train_dataset.filter(lambda image, label: tf.math.reduce_all(tf.math.equal(label, [0., 1.]))).map(augment_images)\n# train_dataset = train_dataset.concatenate(result)","metadata":{"execution":{"iopub.status.busy":"2022-10-06T21:15:54.724976Z","iopub.status.idle":"2022-10-06T21:15:54.725744Z","shell.execute_reply.started":"2022-10-06T21:15:54.725491Z","shell.execute_reply":"2022-10-06T21:15:54.725515Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# from tensorflow.keras.applications.efficientnet_v2 import *\nfrom tensorflow.keras.applications.efficientnet import EfficientNetB3\nfrom tensorflow.keras import layers\n\ndef build_model():\n    inputs = layers.Input(shape=(IMG_SIZE, IMG_SIZE, 3))\n#     model = tf.keras.applications.efficientnet_v2.EfficientNetV2B3(include_top=False, input_tensor=inputs, weights=\"imagenet\")\n    model = EfficientNetB3(include_top=False, input_tensor=inputs, weights=None)\n    x = layers.GlobalAveragePooling2D(name=\"avg_pool\")(model.output)\n    x = layers.BatchNormalization()(x)\n    top_dropout_rate = 0.1\n    x = layers.Dropout(top_dropout_rate, name=\"top_dropout\")(x)\n    outputs = layers.Dense(2, activation=\"sigmoid\", name=\"pred\")(x)\n    model = tf.keras.Model(inputs, outputs, name=\"EfficientNet\")\n    optimizer = tf.keras.optimizers.Adam(learning_rate=1e-2)\n    model.compile(optimizer=optimizer, loss=\"binary_crossentropy\", metrics=[\"binary_accuracy\"])\n    return model","metadata":{"execution":{"iopub.status.busy":"2022-10-06T21:15:54.727256Z","iopub.status.idle":"2022-10-06T21:15:54.728041Z","shell.execute_reply.started":"2022-10-06T21:15:54.727766Z","shell.execute_reply":"2022-10-06T21:15:54.727806Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from tensorflow.keras.callbacks import ModelCheckpoint\n\nmodel = build_model()\nepochs = 25\nmodel_checkpoint_callback = ModelCheckpoint(\n    filepath=model_path,\n    save_weights_only=True,\n    monitor='val_loss',\n    mode='min',\n    save_best_only=True)\n\nmodel.load_weights(\"../input/mayo-effnet-weights-v1/mayo_eff_net_mdl_wts.hdf5\")\n# model.fit(train_dataset, batch_size=BATCH_SIZE, epochs=EPOCHS, validation_data=val_dataset, verbose=1, callbacks=[model_checkpoint_callback], shuffle=False)","metadata":{"execution":{"iopub.status.busy":"2022-10-06T21:15:54.729699Z","iopub.status.idle":"2022-10-06T21:15:54.730937Z","shell.execute_reply.started":"2022-10-06T21:15:54.730557Z","shell.execute_reply":"2022-10-06T21:15:54.730593Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# model.save(\"./mayo_eff_net_mdl_wts.hdf5\")","metadata":{"execution":{"iopub.status.busy":"2022-10-06T21:15:54.733123Z","iopub.status.idle":"2022-10-06T21:15:54.734341Z","shell.execute_reply.started":"2022-10-06T21:15:54.73394Z","shell.execute_reply":"2022-10-06T21:15:54.733978Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import pandas as pd\nfrom tqdm import tqdm\nimport numpy as np\n\ntest_directory = \"../input/tiling-example/usable\"\ndf = pd.DataFrame(columns=[\"patient_id\", \"CE\", \"LAA\"])\nfor patient_id in tqdm(os.listdir(test_directory)):\n#     print(test_directory + \"/\" + patient_id + \"/\")\n    test_dataset = tf.keras.preprocessing.image_dataset_from_directory(\n        test_directory + \"/\" + patient_id + \"/\",\n        label_mode=None,\n        class_names=None,\n        color_mode=\"rgb\",\n        batch_size=32,\n        image_size=(IMG_SIZE, IMG_SIZE),\n        shuffle=False,\n        seed=None,\n        validation_split=None,\n        subset=None,\n        interpolation=\"bilinear\",\n        follow_links=False\n    )\n    preds = model.predict(test_dataset)\n    df.loc[len(df.index)] = [patient_id, np.float64(preds.mean(axis=0)[0].round(6)), np.float64(preds.mean(axis=0)[1].round(6))]","metadata":{"execution":{"iopub.status.busy":"2022-10-06T21:24:33.31036Z","iopub.execute_input":"2022-10-06T21:24:33.31129Z","iopub.status.idle":"2022-10-06T21:24:47.783564Z","shell.execute_reply.started":"2022-10-06T21:24:33.31124Z","shell.execute_reply":"2022-10-06T21:24:47.782497Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df = df.sort_values(\"patient_id\")\ndf = df.reset_index(drop=True)\ndisplay(df)\ndf.to_csv(\"submission.csv\", index=False)\n\ntest_csv  = pd.read_csv('../input/mayo-clinic-strip-ai/sample_submission.csv')\ndisplay(test_csv)\nsubmission = test_csv\nsubmission = submission.sort_values(\"patient_id\")\nsubmission[\"CE\"] = df[\"CE\"]\nsubmission[\"LAA\"] = df[\"LAA\"]\n# submission = submission.groupby(\"patient_id\").mean()\ndisplay(submission)\n\nsubmission.to_csv(\"submission.csv\", index=False)","metadata":{"execution":{"iopub.status.busy":"2022-10-06T21:26:28.409596Z","iopub.execute_input":"2022-10-06T21:26:28.40999Z","iopub.status.idle":"2022-10-06T21:26:28.424488Z","shell.execute_reply.started":"2022-10-06T21:26:28.409955Z","shell.execute_reply":"2022-10-06T21:26:28.423271Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# print(df[\"patient_id\"])\n# print(df[\"CE\"])\n# print(df[\"LAA\"])","metadata":{"execution":{"iopub.status.busy":"2022-10-06T21:32:25.715178Z","iopub.execute_input":"2022-10-06T21:32:25.715945Z","iopub.status.idle":"2022-10-06T21:32:25.724889Z","shell.execute_reply.started":"2022-10-06T21:32:25.715902Z","shell.execute_reply":"2022-10-06T21:32:25.723801Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# print(test_csv[\"patient_id\"])\n# print(test_csv[\"CE\"])\n# print(test_csv[\"LAA\"])","metadata":{"execution":{"iopub.status.busy":"2022-10-06T21:32:52.683507Z","iopub.execute_input":"2022-10-06T21:32:52.683909Z","iopub.status.idle":"2022-10-06T21:32:52.69558Z","shell.execute_reply.started":"2022-10-06T21:32:52.683873Z","shell.execute_reply":"2022-10-06T21:32:52.691186Z"},"trusted":true},"execution_count":null,"outputs":[]}]}