{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\n# You can write up to 5GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"!unzip ../input/carvana-image-masking-challenge/train.zip -d ./\n!unzip ../input/carvana-image-masking-challenge/train_masks.zip -d ./","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import matplotlib.pyplot as plt\nfrom PIL import Image\nimport cv2\nfrom tensorflow.keras.layers import Conv2D, Conv2DTranspose, Input, concatenate, MaxPooling2D, UpSampling2D\nfrom tensorflow.keras import Model\nimport tensorflow as tf","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"image_names= os.listdir(\"./train\")\nmask_names= os.listdir(\"./train_masks\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"image_names.sort()\nmask_names.sort()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"rel_image= []\nrel_mask= []","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"for i in image_names:\n    \n    p= os.path.join(\"./train\", i)\n    rel_image.append(p)\n    \nfor i in mask_names:\n    \n    p= os.path.join(\"./train_masks\", i)\n    rel_mask.append(p)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def load_data(data_path):\n    \n    images= []\n    \n    for i in data_path:\n        x= Image.open(i)\n        x= x.resize((256, 256))\n        x= np.array(x)\n        images.append(x)\n        \n    images= np.array(images)\n    print(\"Done\")\n    return images","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"x_train= load_data(rel_image[:2000])\ny_train= load_data(rel_mask[: 2000])\nx_test= load_data(rel_image[2000: 2200])\ny_test= load_data(rel_mask[2000: 2200])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"plt.imshow(x_train[0])\nplt.show()\nplt.imshow(y_train[0, :, :, 0], cmap= \"gray\")\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"y_test.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"y_train= y_train.reshape((2000, 256, 256, 1))\ny_test= y_test.reshape((200, 256, 256, 1))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"y_test.shape, y_train.shape","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Model Building"},{"metadata":{"trusted":true},"cell_type":"code","source":"def build_unet(shape):\n    input_layer = Input(shape = shape)\n    \n    conv1 = Conv2D(32, (3, 3), activation = 'relu', padding = 'same')(input_layer)\n    conv1 = Conv2D(32, (3, 3), activation = 'relu', padding = 'same')(conv1)\n    pool1 = MaxPooling2D(pool_size = (2, 2))(conv1)\n    \n    conv2 = Conv2D(64, (3, 3), activation = 'relu', padding = 'same')(pool1)\n    conv2 = Conv2D(64, (3, 3), activation = 'relu', padding = 'same')(conv2)\n    pool2 = MaxPooling2D(pool_size = (2, 2))(conv2)\n\n    conv3 = Conv2D(128, (3, 3), activation = 'relu', padding = 'same')(pool2)\n    conv3 = Conv2D(128, (3, 3), activation = 'relu', padding = 'same')(conv3)\n    pool3 = MaxPooling2D(pool_size = (2, 2))(conv3)\n\n    conv4 = Conv2D(256, (3, 3), activation = 'relu', padding = 'same')(pool3)\n    conv4 = Conv2D(256, (3, 3), activation = 'relu', padding = 'same')(conv4)\n    pool4 = MaxPooling2D(pool_size = (2, 2))(conv4)\n\n    conv5 = Conv2D(512, (3, 3), activation = 'relu', padding = 'same')(pool4)\n    conv5 = Conv2D(512, (3, 3), activation = 'relu', padding = 'same')(conv5)\n    \n    up6 = concatenate([Conv2DTranspose(256, (2, 2), strides = (2, 2), padding = 'same')(conv5), conv4], axis = 3)\n    conv6 = Conv2D(256, (3, 3), activation = 'relu', padding = 'same')(up6)\n    conv6 = Conv2D(256, (3, 3), activation = 'relu', padding = 'same')(conv6)\n\n    up7 = concatenate([Conv2DTranspose(128, (2, 2), strides = (2, 2), padding = 'same')(conv6), conv3], axis = 3)\n    conv7 = Conv2D(128, (3, 3), activation = 'relu', padding = 'same')(up7)\n    conv7 = Conv2D(128, (3, 3), activation = 'relu', padding = 'same')(conv7)\n\n    up8 = concatenate([Conv2DTranspose(64, (2, 2), strides = (2, 2), padding = 'same')(conv7), conv2], axis = 3)\n    conv8 = Conv2D(64, (3, 3), activation = 'relu', padding = 'same')(up8)\n    conv8 = Conv2D(64, (3, 3), activation = 'relu', padding = 'same')(conv8)\n\n    up9 = concatenate([Conv2DTranspose(32, (2, 2), strides = (2, 2), padding = 'same')(conv8), conv1], axis = 3)\n    conv9 = Conv2D(32, (3, 3), activation = 'relu', padding = 'same')(up9)\n    conv9 = Conv2D(32, (3, 3), activation = 'relu', padding = 'same')(conv9)\n\n    conv10 = Conv2D(1, (1, 1), activation = 'sigmoid')(conv9)\n    \n    return Model(input_layer, conv10)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model= build_unet((256, 256, 3))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model.summary()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model.compile(optimizer= \"adam\", loss= \"binary_crossentropy\", metrics= [\"acc\"])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"batchSize= 64\nh = model.fit(x_train, y_train, epochs= 10, batch_size= batchSize, validation_data= (x_test, y_test))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def load_image(image_name):\n    \n    img= Image.open(image_name)\n    img= img.resize((256, 256))\n    img= np.array(img)\n    \n    return img","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test_img= load_image(rel_image[3406])\nactual_mask= load_image(rel_mask[3406])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"img= test_img.reshape((1, 256, 256, 3))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"pred= model.predict(img)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def plotting(img, title, gray= True):\n    \n    if gray== True:\n        plt.imshow(img[0, : , :, 0], cmap= \"gray\")\n        plt.title(title)\n        plt.show()\n        \n    else:\n        plt.imshow(img)\n        plt.title(title)\n        plt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"plotting(test_img, \"Actual Image\", False)\nplotting(pred, \"Predicted Msk\")\nplt.imshow(actual_mask, cmap= \"gray\")\nplt.title(\"Actual Mask\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"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":4,"nbformat_minor":4}