{"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":"markdown","source":"# Import all the libraries","metadata":{"_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","papermill":{"duration":0.022738,"end_time":"2022-11-25T01:43:50.180306","exception":false,"start_time":"2022-11-25T01:43:50.157568","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-01-31T09:30:19.679933Z","iopub.execute_input":"2023-01-31T09:30:19.680857Z","iopub.status.idle":"2023-01-31T09:30:19.686897Z","shell.execute_reply.started":"2023-01-31T09:30:19.680804Z","shell.execute_reply":"2023-01-31T09:30:19.685857Z"}}},{"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nfrom PIL import Image\nimport tensorflow as tf\nfrom sklearn.model_selection import train_test_split\nimport cv2\nimport gc\nimport os\nimport tensorflow as tf\nfrom openslide import open_slide\nimport keras\nfrom openslide.deepzoom import DeepZoomGenerator\nimport matplotlib.pyplot as plt\nfrom tensorflow import keras\nfrom tensorflow.keras import layers\nfrom tensorflow.keras import applications\n","metadata":{"papermill":{"duration":7.712145,"end_time":"2022-11-25T01:43:57.896485","exception":false,"start_time":"2022-11-25T01:43:50.18434","status":"completed"},"tags":[],"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"inp_size=512\n\neff_res_stacked = '/kaggle/input/final-dataset/final_effb0_res152_stacked.h5'\neff_vgg_stacked='/kaggle/input/final-dataset/final_effb0_vgg19_stacked.h5'\nvgg_res_stacked='/kaggle/input/final-dataset/final_res152_vgg19_stacked.h5'\nvgg='/kaggle/input/final-dataset/final_vgg19.h5'\nall_three_stacked='/kaggle/input/final-dataset/final_effb0_res151_vgg19_stacked.h5'\nres='/kaggle/input/final-dataset/final_res152.h5'\neff='/kaggle/input/final-dataset/final_effb0.h5'","metadata":{"execution":{"iopub.status.busy":"2023-02-09T15:12:19.011012Z","iopub.execute_input":"2023-02-09T15:12:19.011785Z","iopub.status.idle":"2023-02-09T15:12:19.023285Z","shell.execute_reply.started":"2023-02-09T15:12:19.01174Z","shell.execute_reply":"2023-02-09T15:12:19.021391Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Hyper Parameters to be Tuned","metadata":{}},{"cell_type":"code","source":"models=[]\nmodel_list = [eff]\nepochs=60\nbatch_size=16\nlearning_rate = 1e-3\noptimizer = tf.keras.optimizers.Adam(learning_rate=learning_rate)  #adam or sgd\n\n","metadata":{"execution":{"iopub.status.busy":"2023-02-09T15:12:19.025031Z","iopub.execute_input":"2023-02-09T15:12:19.025471Z","iopub.status.idle":"2023-02-09T15:12:19.055451Z","shell.execute_reply.started":"2023-02-09T15:12:19.025426Z","shell.execute_reply":"2023-02-09T15:12:19.054247Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Fixed Parameters and paths","metadata":{}},{"cell_type":"code","source":"color_normalized = 'yes'\nif color_normalized == 'yes':\n    dataset_directory='/kaggle/input/mayo-512720-dataset/DATASET/norm'\nelse:\n    dataset_directory='/kaggle/input/mayo-512720-dataset/DATASET/original'\n\n#----------------------\nclassMode = 'categorical'\nloss = 'categorical_crossentropy'\nval_split = 0\nNum_tiles_to_consider_for_prediction = 3\nvalidation_steps= 10\nsteps_per_epoch = 10\nval_batch_size=16\n\ntrain_csv='/kaggle/input/mayo-clinic-strip-ai/train.csv'\ntest_csv = '/kaggle/input/mayo-clinic-strip-ai/test.csv'\nsample_sub_csv='/kaggle/input/mayo-clinic-strip-ai/sample_submission.csv'\n\ntrain_imgs_dir = '/kaggle/input/mayo-clinic-strip-ai/train'\ntest_imgs_dir='/kaggle/input/mayo-clinic-strip-ai/test'","metadata":{"execution":{"iopub.status.busy":"2023-02-09T15:12:19.058062Z","iopub.execute_input":"2023-02-09T15:12:19.058432Z","iopub.status.idle":"2023-02-09T15:12:19.064868Z","shell.execute_reply.started":"2023-02-09T15:12:19.058396Z","shell.execute_reply":"2023-02-09T15:12:19.063856Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Load and compile the models","metadata":{"execution":{"iopub.status.busy":"2023-01-31T12:01:09.513945Z","iopub.execute_input":"2023-01-31T12:01:09.514398Z","iopub.status.idle":"2023-01-31T12:01:09.520352Z","shell.execute_reply.started":"2023-01-31T12:01:09.514366Z","shell.execute_reply":"2023-01-31T12:01:09.518836Z"}}},{"cell_type":"code","source":"for i in model_list:\n    models.append(keras.models.load_model(i))","metadata":{"execution":{"iopub.status.busy":"2023-02-09T15:12:19.066521Z","iopub.execute_input":"2023-02-09T15:12:19.067631Z","iopub.status.idle":"2023-02-09T15:12:32.498568Z","shell.execute_reply.started":"2023-02-09T15:12:19.067591Z","shell.execute_reply":"2023-02-09T15:12:32.49755Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for i in models:\n    i.compile(\n        optimizer=optimizer,\n        loss=loss,\n        metrics=['accuracy'])","metadata":{"execution":{"iopub.status.busy":"2023-02-09T15:12:32.50062Z","iopub.execute_input":"2023-02-09T15:12:32.500942Z","iopub.status.idle":"2023-02-09T15:12:32.524394Z","shell.execute_reply.started":"2023-02-09T15:12:32.500912Z","shell.execute_reply":"2023-02-09T15:12:32.523226Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"models","metadata":{"execution":{"iopub.status.busy":"2023-02-09T15:12:32.526271Z","iopub.execute_input":"2023-02-09T15:12:32.526689Z","iopub.status.idle":"2023-02-09T15:12:32.536365Z","shell.execute_reply.started":"2023-02-09T15:12:32.526646Z","shell.execute_reply":"2023-02-09T15:12:32.535293Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from tensorflow.keras.preprocessing.image import ImageDataGenerator\n\ndatagen = ImageDataGenerator(\n    rescale=1./255,\n    rotation_range=45, \n    validation_split=val_split,\n    width_shift_range=0.3,\n    height_shift_range=0.3,\n    brightness_range=[0.5,2.0],\n    zoom_range = [0.5,2.0],\n    horizontal_flip=True,\n    vertical_flip=True\n)\n\nprint(dataset_directory)\ntrain_generator = datagen.flow_from_directory(\n    dataset_directory,\n    target_size=(inp_size, inp_size),\n    batch_size=batch_size,\n    shuffle=True,\n    class_mode=classMode,\n    subset='training',\n)\n\nvalidation_generator = datagen.flow_from_directory(\n    dataset_directory,\n    target_size=(inp_size, inp_size),\n    batch_size=val_batch_size,\n    shuffle=True,\n    class_mode=classMode,\n    subset='validation',\n)\n\nclass_indices = train_generator.class_indices\nprint(class_indices)","metadata":{"execution":{"iopub.status.busy":"2023-02-09T15:12:32.538866Z","iopub.execute_input":"2023-02-09T15:12:32.539335Z","iopub.status.idle":"2023-02-09T15:12:38.725089Z","shell.execute_reply.started":"2023-02-09T15:12:32.539292Z","shell.execute_reply":"2023-02-09T15:12:38.723957Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for i in models:\n    i.fit(\n        train_generator,\n        steps_per_epoch=steps_per_epoch,\n        validation_steps=validation_steps,\n        epochs=epochs,\n#         validation_data=validation_generator,\n    )    ","metadata":{"execution":{"iopub.status.busy":"2023-02-09T15:12:38.726682Z","iopub.execute_input":"2023-02-09T15:12:38.727053Z","iopub.status.idle":"2023-02-09T15:18:51.424682Z","shell.execute_reply.started":"2023-02-09T15:12:38.727017Z","shell.execute_reply":"2023-02-09T15:18:51.420884Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# model testing","metadata":{"execution":{"iopub.status.busy":"2023-01-29T18:16:04.829109Z","iopub.execute_input":"2023-01-29T18:16:04.829525Z","iopub.status.idle":"2023-01-29T18:16:05.01789Z","shell.execute_reply.started":"2023-01-29T18:16:04.829491Z","shell.execute_reply":"2023-01-29T18:16:05.016405Z"}}},{"cell_type":"code","source":"def make_test_file(x):\n    return os.path.join(test_imgs_dir,x+'.tif')\ntest = pd.read_csv(test_csv)\ntest_data = pd.DataFrame({'image_id': test.image_id.apply(make_test_file)})\ntest_data.head()","metadata":{"execution":{"iopub.status.busy":"2023-02-09T15:18:57.396687Z","iopub.execute_input":"2023-02-09T15:18:57.397053Z","iopub.status.idle":"2023-02-09T15:18:57.426958Z","shell.execute_reply.started":"2023-02-09T15:18:57.39702Z","shell.execute_reply":"2023-02-09T15:18:57.4259Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"preds=[]\nfor x in range(int(test_data.size)):\n    img_path = test_data.image_id[x]\n    slide = open_slide(img_path)\n    tiles=DeepZoomGenerator(slide,tile_size=inp_size,overlap=0,limit_bounds=False)\n    cols,rows = tiles.level_tiles[tiles.level_count-1]\n    print(x)\n    temp_preds=[]\n    count=0\n    \n    for row in range(0,rows,5):\n        for col in range(0,cols,5):\n            tile=tiles.get_tile(tiles.level_count-1,(col,row))\n            tile=tile.convert(\"RGB\")\n            tile=np.array(tile)\n            try:\n                if tile.mean()<180 and tile.std()>50:                    \n                    tile = np.reshape(tile, [1,inp_size, inp_size, 3])\n                    p=[i.predict(tile/255) for i in models]\n                    t_p = sum(p)/len(p)                    \n                    temp_preds.append(t_p)\n                    count+=1\n                    if count>Num_tiles_to_consider_for_prediction:break\n            except :\n                pass        \n            if count>Num_tiles_to_consider_for_prediction:break\n    if len(temp_preds) > 0:\n        preds.append(sum(temp_preds)/len(temp_preds))\n    else:\n        preds.append([[0.5,0.5]])\n    del slide\n    del tiles\n    gc.collect()","metadata":{"execution":{"iopub.status.busy":"2023-02-09T15:18:58.089136Z","iopub.execute_input":"2023-02-09T15:18:58.090073Z","iopub.status.idle":"2023-02-09T15:19:16.906289Z","shell.execute_reply.started":"2023-02-09T15:18:58.090022Z","shell.execute_reply":"2023-02-09T15:19:16.905242Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"preds","metadata":{"execution":{"iopub.status.busy":"2023-02-09T15:19:16.909245Z","iopub.execute_input":"2023-02-09T15:19:16.909741Z","iopub.status.idle":"2023-02-09T15:19:16.918033Z","shell.execute_reply.started":"2023-02-09T15:19:16.909702Z","shell.execute_reply":"2023-02-09T15:19:16.916907Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"preds = pd.DataFrame(np.concatenate(preds))\nsubmission = pd.read_csv('/kaggle/input/mayo-clinic-strip-ai/sample_submission.csv')\nsubmission.CE = preds.iloc[ : , : 1]\nsubmission.LAA = preds.iloc[ : , 1: 2]\nsubmission = submission.groupby(\"patient_id\").mean()\nsubmission = submission[[\"CE\", \"LAA\"]].round(6).reset_index()\nsubmission.fillna(0.5)\nsubmission","metadata":{"papermill":{"duration":0.231203,"end_time":"2022-11-25T02:39:25.804291","exception":false,"start_time":"2022-11-25T02:39:25.573088","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-02-09T15:19:16.919389Z","iopub.execute_input":"2023-02-09T15:19:16.920559Z","iopub.status.idle":"2023-02-09T15:19:16.9573Z","shell.execute_reply.started":"2023-02-09T15:19:16.920501Z","shell.execute_reply":"2023-02-09T15:19:16.956375Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission[[\"patient_id\", \"CE\", \"LAA\"]].to_csv(\"submission.csv\", index=False)\n!head submission.csv","metadata":{"papermill":{"duration":1.394655,"end_time":"2022-11-25T02:39:27.379861","exception":false,"start_time":"2022-11-25T02:39:25.985206","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-02-09T15:19:16.959749Z","iopub.execute_input":"2023-02-09T15:19:16.96012Z","iopub.status.idle":"2023-02-09T15:19:18.087973Z","shell.execute_reply.started":"2023-02-09T15:19:16.960084Z","shell.execute_reply":"2023-02-09T15:19:18.08669Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}