{"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 numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\nimport os\nimport cv2\nimport skimage\nfrom zipfile import ZipFile\nfrom tqdm import tqdm\nfrom skimage.io import imread,imshow\nfrom skimage.transform import resize\nimport matplotlib.pyplot as plt\nimport random\nimport tensorflow as tf\n\n\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\n","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2021-06-13T11:07:08.074819Z","iopub.execute_input":"2021-06-13T11:07:08.075187Z","iopub.status.idle":"2021-06-13T11:07:13.975060Z","shell.execute_reply.started":"2021-06-13T11:07:08.075104Z","shell.execute_reply":"2021-06-13T11:07:13.974218Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Train_name = \"/kaggle/input/data-science-bowl-2018/stage1_train.zip\"\nTest_name = \"/kaggle/input/data-science-bowl-2018/stage1_test.zip\"\nTRAIN_PATH=\"stage1_train/\"\nTEST_PATH='stage1_test/'","metadata":{"execution":{"iopub.status.busy":"2021-06-13T11:07:13.976677Z","iopub.execute_input":"2021-06-13T11:07:13.977001Z","iopub.status.idle":"2021-06-13T11:07:13.983302Z","shell.execute_reply.started":"2021-06-13T11:07:13.976968Z","shell.execute_reply":"2021-06-13T11:07:13.982536Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"with ZipFile(Train_name,'r') as file:\n    print('Train file Extracted')\n    file.extractall(\"stage1_train\")\n    \nwith ZipFile(Test_name,'r') as test_file:\n    print('Test file Extracted')\n    test_file.extractall(\"stage1_test\")    \n    \n    ","metadata":{"execution":{"iopub.status.busy":"2021-06-13T11:07:13.986376Z","iopub.execute_input":"2021-06-13T11:07:13.986706Z","iopub.status.idle":"2021-06-13T11:07:19.618599Z","shell.execute_reply.started":"2021-06-13T11:07:13.986680Z","shell.execute_reply":"2021-06-13T11:07:19.617778Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_ids=next(os.walk(TRAIN_PATH))[1]\ntest_ids=next(os.walk(TEST_PATH))[1]","metadata":{"execution":{"iopub.status.busy":"2021-06-13T11:07:19.620241Z","iopub.execute_input":"2021-06-13T11:07:19.620597Z","iopub.status.idle":"2021-06-13T11:07:19.627479Z","shell.execute_reply.started":"2021-06-13T11:07:19.620561Z","shell.execute_reply":"2021-06-13T11:07:19.626536Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"IMG_HEIGHT=128\nIMG_WIDTH=128\nIMG_CHANNELS=3","metadata":{"execution":{"iopub.status.busy":"2021-06-13T11:07:19.628965Z","iopub.execute_input":"2021-06-13T11:07:19.629473Z","iopub.status.idle":"2021-06-13T11:07:19.730434Z","shell.execute_reply.started":"2021-06-13T11:07:19.629422Z","shell.execute_reply":"2021-06-13T11:07:19.729477Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train = np.zeros((len(train_ids), IMG_HEIGHT, IMG_WIDTH, IMG_CHANNELS), dtype=np.uint8)\nY_train = np.zeros((len(train_ids), IMG_HEIGHT, IMG_WIDTH, 1), dtype=np.bool)\n\nprint('Resizing training images and masks')\n\nfor n, id_ in tqdm(enumerate(train_ids), total=len(train_ids)):   \n    path = TRAIN_PATH + id_\n    img = imread(path + '/images/' + id_ + '.png')[:,:,:IMG_CHANNELS]  \n    img = resize(img, (IMG_HEIGHT, IMG_WIDTH), mode='constant', preserve_range=True)\n    X_train[n] = img  #Fill empty X_train with values from img\n    mask = np.zeros((IMG_HEIGHT, IMG_WIDTH, 1), dtype=np.bool)\n    for mask_file in next(os.walk(path + '/masks/'))[2]:\n        mask_ = imread(path + '/masks/' + mask_file)\n        mask_ = np.expand_dims(resize(mask_, (IMG_HEIGHT, IMG_WIDTH), mode='constant',  \n                                      preserve_range=True), axis=-1)\n        mask = np.maximum(mask, mask_)  \n            \n    Y_train[n] = mask   \n\n# test images\nX_test = np.zeros((len(test_ids), IMG_HEIGHT, IMG_WIDTH, IMG_CHANNELS), dtype=np.uint8)\nsizes_test = []\nprint('Resizing test images') \nfor n, id_ in tqdm(enumerate(test_ids), total=len(test_ids)):\n    path = TEST_PATH + id_\n    img = imread(path + '/images/' + id_ + '.png')[:,:,:IMG_CHANNELS]\n    sizes_test.append([img.shape[0], img.shape[1]])\n    img = resize(img, (IMG_HEIGHT, IMG_WIDTH), mode='constant', preserve_range=True)\n    X_test[n] = img\n\nprint('Done!')","metadata":{"execution":{"iopub.status.busy":"2021-06-13T11:07:19.731935Z","iopub.execute_input":"2021-06-13T11:07:19.733440Z","iopub.status.idle":"2021-06-13T11:14:41.225136Z","shell.execute_reply.started":"2021-06-13T11:07:19.733408Z","shell.execute_reply":"2021-06-13T11:14:41.221596Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"image_x=random.randint(0,len(train_ids))\nimshow(X_train[image_x])\nplt.show()\nimshow(np.squeeze(Y_train[image_x]))\n\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2021-06-13T11:14:41.226608Z","iopub.execute_input":"2021-06-13T11:14:41.226961Z","iopub.status.idle":"2021-06-13T11:14:41.641372Z","shell.execute_reply.started":"2021-06-13T11:14:41.226923Z","shell.execute_reply":"2021-06-13T11:14:41.640424Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"seed=42\nnp.random.seed=seed","metadata":{"execution":{"iopub.status.busy":"2021-06-13T11:14:41.646007Z","iopub.execute_input":"2021-06-13T11:14:41.646366Z","iopub.status.idle":"2021-06-13T11:14:41.654018Z","shell.execute_reply.started":"2021-06-13T11:14:41.646329Z","shell.execute_reply":"2021-06-13T11:14:41.653074Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#Build the model\ninputs = tf.keras.layers.Input((IMG_HEIGHT, IMG_WIDTH, IMG_CHANNELS))\ns = tf.keras.layers.Lambda(lambda x: x / 255)(inputs)\n\n#Contraction path\nc1 = tf.keras.layers.Conv2D(16, (3, 3), activation='relu', kernel_initializer='he_normal', padding='same')(s)\nc1 = tf.keras.layers.Dropout(0.1)(c1)\nc1 = tf.keras.layers.Conv2D(16, (3, 3), activation='relu', kernel_initializer='he_normal', padding='same')(c1)\np1 = tf.keras.layers.MaxPooling2D((2, 2))(c1)\n\nc2 = tf.keras.layers.Conv2D(32, (3, 3), activation='relu', kernel_initializer='he_normal', padding='same')(p1)\nc2 = tf.keras.layers.Dropout(0.1)(c2)\nc2 = tf.keras.layers.Conv2D(32, (3, 3), activation='relu', kernel_initializer='he_normal', padding='same')(c2)\np2 = tf.keras.layers.MaxPooling2D((2, 2))(c2)\n \nc3 = tf.keras.layers.Conv2D(64, (3, 3), activation='relu', kernel_initializer='he_normal', padding='same')(p2)\nc3 = tf.keras.layers.Dropout(0.2)(c3)\nc3 = tf.keras.layers.Conv2D(64, (3, 3), activation='relu', kernel_initializer='he_normal', padding='same')(c3)\np3 = tf.keras.layers.MaxPooling2D((2, 2))(c3)\n \nc4 = tf.keras.layers.Conv2D(128, (3, 3), activation='relu', kernel_initializer='he_normal', padding='same')(p3)\nc4 = tf.keras.layers.Dropout(0.2)(c4)\nc4 = tf.keras.layers.Conv2D(128, (3, 3), activation='relu', kernel_initializer='he_normal', padding='same')(c4)\np4 = tf.keras.layers.MaxPooling2D(pool_size=(2, 2))(c4)\n \nc5 = tf.keras.layers.Conv2D(256, (3, 3), activation='relu', kernel_initializer='he_normal', padding='same')(p4)\nc5 = tf.keras.layers.Dropout(0.3)(c5)\nc5 = tf.keras.layers.Conv2D(256, (3, 3), activation='relu', kernel_initializer='he_normal', padding='same')(c5)\n\n#Expansive path \nu6 = tf.keras.layers.Conv2DTranspose(128, (2, 2), strides=(2, 2), padding='same')(c5)\nu6 = tf.keras.layers.concatenate([u6, c4])\nc6 = tf.keras.layers.Conv2D(128, (3, 3), activation='relu', kernel_initializer='he_normal', padding='same')(u6)\nc6 = tf.keras.layers.Dropout(0.2)(c6)\nc6 = tf.keras.layers.Conv2D(128, (3, 3), activation='relu', kernel_initializer='he_normal', padding='same')(c6)\n \nu7 = tf.keras.layers.Conv2DTranspose(64, (2, 2), strides=(2, 2), padding='same')(c6)\nu7 = tf.keras.layers.concatenate([u7, c3])\nc7 = tf.keras.layers.Conv2D(64, (3, 3), activation='relu', kernel_initializer='he_normal', padding='same')(u7)\nc7 = tf.keras.layers.Dropout(0.2)(c7)\nc7 = tf.keras.layers.Conv2D(64, (3, 3), activation='relu', kernel_initializer='he_normal', padding='same')(c7)\n \nu8 = tf.keras.layers.Conv2DTranspose(32, (2, 2), strides=(2, 2), padding='same')(c7)\nu8 = tf.keras.layers.concatenate([u8, c2])\nc8 = tf.keras.layers.Conv2D(32, (3, 3), activation='relu', kernel_initializer='he_normal', padding='same')(u8)\nc8 = tf.keras.layers.Dropout(0.1)(c8)\nc8 = tf.keras.layers.Conv2D(32, (3, 3), activation='relu', kernel_initializer='he_normal', padding='same')(c8)\n \nu9 = tf.keras.layers.Conv2DTranspose(16, (2, 2), strides=(2, 2), padding='same')(c8)\nu9 = tf.keras.layers.concatenate([u9, c1], axis=3)\nc9 = tf.keras.layers.Conv2D(16, (3, 3), activation='relu', kernel_initializer='he_normal', padding='same')(u9)\nc9 = tf.keras.layers.Dropout(0.1)(c9)\nc9 = tf.keras.layers.Conv2D(16, (3, 3), activation='relu', kernel_initializer='he_normal', padding='same')(c9)\n \noutputs = tf.keras.layers.Conv2D(1, (1, 1), activation='sigmoid')(c9)\nmodel = tf.keras.Model(inputs=[inputs], outputs=[outputs])\nmodel.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])\nmodel.summary()\n","metadata":{"execution":{"iopub.status.busy":"2021-06-13T11:14:41.657712Z","iopub.execute_input":"2021-06-13T11:14:41.658031Z","iopub.status.idle":"2021-06-13T11:14:43.969823Z","shell.execute_reply.started":"2021-06-13T11:14:41.658002Z","shell.execute_reply":"2021-06-13T11:14:43.969075Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#callbacks\ncallbacks=[tf.keras.callbacks.EarlyStopping(patience=5,monitor='val_loss'),\n           tf.keras.callbacks.TensorBoard(log_dir='logs')]","metadata":{"execution":{"iopub.status.busy":"2021-06-13T11:14:43.971210Z","iopub.execute_input":"2021-06-13T11:14:43.971563Z","iopub.status.idle":"2021-06-13T11:14:44.302509Z","shell.execute_reply.started":"2021-06-13T11:14:43.971527Z","shell.execute_reply":"2021-06-13T11:14:44.301544Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"results=model.fit(X_train,Y_train,validation_split=0.1,batch_size=16,epochs=50,callbacks=callbacks)","metadata":{"execution":{"iopub.status.busy":"2021-06-13T11:17:51.420017Z","iopub.execute_input":"2021-06-13T11:17:51.420353Z","iopub.status.idle":"2021-06-13T11:18:36.562294Z","shell.execute_reply.started":"2021-06-13T11:17:51.420322Z","shell.execute_reply":"2021-06-13T11:18:36.561521Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"predict_test=model.predict(X_test,verbose=1)","metadata":{"execution":{"iopub.status.busy":"2021-06-13T11:18:36.563803Z","iopub.execute_input":"2021-06-13T11:18:36.564066Z","iopub.status.idle":"2021-06-13T11:18:36.961605Z","shell.execute_reply.started":"2021-06-13T11:18:36.564035Z","shell.execute_reply":"2021-06-13T11:18:36.960745Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"predict_test_t=(predict_test>0.5).astype(np.uint8)","metadata":{"execution":{"iopub.status.busy":"2021-06-13T11:18:36.963424Z","iopub.execute_input":"2021-06-13T11:18:36.963798Z","iopub.status.idle":"2021-06-13T11:18:36.968858Z","shell.execute_reply.started":"2021-06-13T11:18:36.963760Z","shell.execute_reply":"2021-06-13T11:18:36.967646Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"imshow(X_test[1])\nplt.show()\nimshow(np.squeeze(predict_test_t[1]))\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2021-06-13T11:18:36.970230Z","iopub.execute_input":"2021-06-13T11:18:36.970675Z","iopub.status.idle":"2021-06-13T11:18:37.421970Z","shell.execute_reply.started":"2021-06-13T11:18:36.970612Z","shell.execute_reply":"2021-06-13T11:18:37.421218Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"imshow(X_test[2])\nplt.show()\nimshow(np.squeeze(predict_test_t[2]))\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2021-06-13T11:18:37.423221Z","iopub.execute_input":"2021-06-13T11:18:37.423575Z","iopub.status.idle":"2021-06-13T11:18:37.862352Z","shell.execute_reply.started":"2021-06-13T11:18:37.423538Z","shell.execute_reply":"2021-06-13T11:18:37.861499Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}