{"cells":[{"metadata":{"trusted":true},"cell_type":"code","source":"from __future__ import print_function, division\nimport os\nimport torch\nimport pandas as pd\nfrom skimage import io, transform\nimport numpy as np\nimport matplotlib.pyplot as plt\nfrom torch.utils.data import Dataset, DataLoader\nfrom torchvision import transforms, utils\nimport random","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Ignore warnings\nimport warnings\nwarnings.filterwarnings(\"ignore\")\nimport cv2","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from tqdm import tqdm_notebook, tqdm","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"! cat /usr/local/cuda/version.txt","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"!ls /kaggle/input/understanding_cloud_organization","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"DIR_TRAIN_IMAGES = \"/kaggle/input/understanding_cloud_organization/train_images/\"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df_train = pd.read_csv(\"/kaggle/input/understanding_cloud_organization/train.csv\")\ndf_train[\"Label\"] = [i.split(\"_\")[1] for i in df_train.Image_Label.values.tolist()]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df_train.head(20)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df_train_grp = df_train.dropna().groupby(\"Label\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"idx_fish = df_train_grp.get_group(\"Fish\").index.values.tolist()\nidx_flower = df_train_grp.get_group(\"Flower\").index.values.tolist()\nidx_gravel = df_train_grp.get_group(\"Gravel\").index.values.tolist()\nidx_sugar = df_train_grp.get_group(\"Sugar\").index.values.tolist()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Generating Mask from Encoded Pixels\n\n- [Medium Blog](https://medium.com/@sumanthmeenan/generating-masks-from-encoded-pixels-semantic-segmentation-18635e834ad0)"},{"metadata":{"trusted":true},"cell_type":"code","source":"def get_mask(idx:int):\n    n = idx\n    name_tuple = df_train.iloc[n, 0].split(\"_\")\n    img_name, img_label = name_tuple[0], name_tuple[1] \n    encoded_pixels = df_train.iloc[n,1]\n\n    enc_pix =  list(map(int,encoded_pixels.split(\" \")))\n    pix, pix_count = [], []\n    for i in tqdm(range(0, len(enc_pix))):\n        if i%2==0:\n            pix.append(enc_pix[i])\n        else:\n            pix_count.append(enc_pix[i])\n\n    rle_pixels = [list(range(pix[i],pix[i]+pix_count[i])) for i in range(0, len(pix))]\n    rle_mask_pixels = sum(rle_pixels,[]) \n\n    img_loc = DIR_TRAIN_IMAGES+img_name\n    img = cv2.imread(img_loc)\n    mask_img = np.zeros((img.shape[0]*img.shape[1],1), dtype=int)\n    mask_img[rle_mask_pixels] = 255\n    height,width=img.shape[0], img.shape[1]\n    mask = np.reshape(mask_img, (width, height)).T\n\n    return mask, img_name, img_label\n\n\n\n#plt.imshow(mask);","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def disp_image(idx:int):\n    mask,img_name, img_label = get_mask(idx)\n    img_loc = DIR_TRAIN_IMAGES+img_name\n    img = cv2.imread(img_loc)\n    img_to_disp = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)\n    img_to_disp[mask==0,1] = 255\n    return img_to_disp, img_label","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def disp_sample(category:str, ls_idx:list):\n    fig=plt.figure(figsize=(20, 10))\n    fig.subplots_adjust(hspace=0.9, wspace=0.4)\n    columns = 3\n    rows = 2\n    for i in range(1,7):\n        ax = fig.add_subplot(rows, columns, i)\n        img2disp, _ = disp_image(random.choice(ls_idx))\n        ax.set_title(category)\n        plt.imshow(img2disp)\n\n    plt.tight_layout()\n    plt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"disp_sample(\"fish\", idx_fish)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"disp_sample(\"flower\", idx_flower)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"disp_sample(\"sugar\", idx_sugar)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"disp_sample(\"gravel\", idx_gravel)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def disp_sample_assorted():\n    fig=plt.figure(figsize=(18, 12))\n    #fig.subplots_adjust(hspace=0.9, wspace=0.4)\n    columns = 3\n    rows = 3\n    for i in range(1,10):\n        ax = fig.add_subplot(rows, columns, i)\n        img2disp, img_label = disp_image(random.choice(idx_fish+idx_flower+idx_sugar+idx_gravel))\n        ax.set_title(img_label)\n        plt.imshow(img2disp)\n\n    plt.tight_layout()\n    plt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"disp_sample_assorted()","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":1}