{"cells":[{"metadata":{},"cell_type":"markdown","source":"# A. Exploratory Data Analysis"},{"metadata":{},"cell_type":"markdown","source":"<img src='https://i2.wp.com/hubmapconsortium.org/wp-content/uploads/2020/11/imageofweek.png?w=1200&ssl=1'>\n<h1><center>HuBMAP: Hacking the Kidney - EDA</center></h1>\n    \n# 1. <a id='Introduction'>Introduction</a>\n\n###  1.1 What is HuBMAP?\nThe [Human BioMolecular Atlas Program](https://hubmapconsortium.org/what-is-hubmap/) is a major endeavour working to catalyze the development of a framework for mapping the human body at single cell resolution.One component of this overarching goal is to identify medically relevant functional tissue units (FTUs) within whole slide microscopy images of human tissues. Once these FTUs are detected, information on size, shape, variability in number and location within the tissue samples can be used to help build a spatially accurate and semantically explicit model of the human body."},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"from IPython.display import HTML\nHTML('<center><iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/yCh4XnD7rEE\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe></center>')","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"###  1.2 What is HuBMAP:Hacking the Kidney Competition?\n- This compeition starts by mapping the human kidney at single cell resolution. We will detect the [functional tissue units](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4126067/)(FTU) accross different tissue preparation pipelines.By this we will implement a successful and robust glomeruli FTU detector.\n- We also have the opportunity to present our findings to a panel of judges of this competition for additional consideration\n\n\n### 1.3 What is FTU?\n- An [FTU](https://pubmed.ncbi.nlm.nih.gov/24103658/) is defined as a “three-dimensional block of cells centered around a capillary, such that each cell in this block is within diffusion distance from any other cell in the same block”.Bernard de Bono and his team coined the term “functional tissue unit” in 2013 as: “...a three-dimensional block of cells centered around a capillary, such that each cell in this block is within diffusion distance from any other cell in the same block” [(de Bono, 2013)](https://www.ncbi.nlm.nih.gov/pubmed/24103658) One example of an FTU is the glomerulus found in the outer layer of  kidney tissue known as the cortex, which in humans has an area of about 800 mm<sup>2</sup> and average depth of about 9 mm [(Mounier-Vehier, 2002)](https://doi.org/10.1046/j.1523-1755.2002.00167.x). \n- Glomeruli consist of capillaries that facilitate filtration of waste products out of blood. Normal glomeruli typically range from 100-350 μm in diameter with a roughly spherical shape [(Kannan, 2019)](https://www.kireports.org/article/S2468-0249(19)30155-X/abstract). Refer to Figure 1 for a zoom sequence from the human body to single-cell level for kidney. Figure 2 highlights the cortex region of a tissue sample in green. Glomeruli contain four cell types: Parietal epithelial cells that form Bowman’s capsule, podocytes cover the outer layer of the filtration barrier, fenestrated endothelial cells that are coated with a glycolipid and glycoprotein matrix called glycocalyx that are in direct contact with blood and mesangial cells that occupy the space between the capillary blood vessel loops and are stained by the colorimetric histological stain called Periodic acid-Schiff (PAS) stain [(Vaughan, 2008)](https://doi.org/10.1681/ASN.2007040471). PAS stains polysaccharides (complex sugars like glycogen) such as those found in and around the glomeruli making it a favored stain for delineating them in tissue sections [(Agarwal, 2013)](https://doi.org/10.4103/0971-4065.114462). The periodic acid oxidizes the sugars to expose aldehyde free tips of the broken monosaccharide rings that react with the Schiff reagent to give a magenta color. Figure 3 is a light microscopy image that contains a glomerulus from a subsection of human kidney tissue stained with a PAS. One nucleus (spherical in shape) per cell, containing the genetic material for a cell (its chromosomes composed of nucleic acids) is stained dark bluish purple in the PAS stained images. The magenta stained regions in PAS stained tissue are the stained polysaccharides.\n\n### 1.4 What do we need to do?\n- We will develop segmentation algorithms that identify glomeruli in the PAS stained microscopy data. Yes, external data is allowed and/or pre-trained machine learning models in support of FTU segmentation.\n- The leaderboard of this competition is calculated with approximately 42% of the test data.The final results will be based on the other 58%, so the final standings may be different.\n\n### 1.5 Metric: Dice Coefficient.\n\n![](https://miro.medium.com/max/858/1*yUd5ckecHjWZf6hGrdlwzA.png)\n\n- Image Credits: https://en.wikipedia.org/wiki/S%C3%B8rensen%E2%80%93Dice_coefficient\n- The evaluation metric of this competition is Dice Coefficient. \nThe Dice coefficient can be used to compare the pixel-wise agreement between a predicted segmentation and its corresponding ground truth. The formula is given by:\n  \n<center>   $\\Large  \\frac{2*|X ∩ Y|}{|X|+|Y|}$   </center>\n\nwhere X is the predicted set of pixels and Y is the ground truth.\n\n- Dice coefficient, is a statistical tool which measures the similarity between two sets of data. This index has become arguably the most broadly used tool in the validation of image segmentation algorithms created with AI, but it is a much more general concept which can be applied sets of data for a variety of applications including NLP.\n- Read more about it on the [Evaluation Page](https://www.kaggle.com/c/hubmap-kidney-segmentation/overview/supervised-ml-evaluation)\n\n### 1.6 Relation between Dice Coefficient and Jaccard Score.\n\n<center>   $\\Large  D   =   \\frac{2*|X ∩ Y|}{|X|+|Y|}$   </center>\n<br>\n<center>   $\\Large  J =      \\frac{|X ∩ Y|}{|X|+|Y|-|X ∩ Y|}$   </center>\n<br>\n<center>   $\\Large  D = \\frac{2J}{J+1}$   </center>\n<br>\n<center>   $\\Large  J = \\frac{D}{2-D}$   </center>\n\n### 1.7 What has been achieved so far?\n\n### *Automatic glomerular identification and quantification of histological phenotypes using image analysis and machine learning (Sheehan and Korstanje 2018)*\n\nCurrent methods of scoring histological kidney samples, specifically glomeruli, do not allow for collection of quantitative data in a high-throughput and consistent manner. Neither untrained individuals nor computers are presently capable of identifying glomerular features, so expert pathologists must do the identification and score using a categorical matrix, complicating statistical analysis. Critical information regarding overall health and physiology is encoded in these samples. Rapid comprehensive histological scoring could be used, in combination with other physiological measures, to significantly advance renal research. Therefore, we used machine learning to develop a high-throughput method to automatically identify and collect quantitative data from glomeruli. Our method requires minimal human interaction between steps and provides quantifiable data independent of user bias. The method uses free existing software and is usable without extensive image analysis training. Validation of the classifier and feature scores in mice is highlighted in this work and shows the power of applying this method in murine research. Preliminary results indicate that the method can be applied to data sets from different species after training on relevant data, allowing for fast glomerular identification and quantitative measurements of glomerular features. Validation of the classifier and feature scores are highlighted in this work and show the power of applying this method. The resulting data are free from user bias. Continuous data, such that statistical analysis can be performed, allows for more precise and comprehensive interrogation of samples. These data can then be combined with other physiological data to broaden our overall understanding of renal function.\n\n### *Glomerulus Classification and Detection Based on Convolutional Neural Networks (Gallego et al. 2018)*\n\nGlomerulus classification and detection in kidney tissue segments are key processes in nephropathology used for the correct diagnosis of the diseases. In this paper, we deal with the challenge of automating Glomerulus classification and detection from digitized kidney slide segments using a deep learning framework. The proposed method applies Convolutional Neural Networks (CNNs) between two classes: Glomerulus and Non-Glomerulus, to detect the image segments belonging to Glomerulus regions. We configure the CNN with the public pre-trained AlexNet model and adapt it to our system by learning from Glomerulus and Non-Glomerulus regions extracted from training slides. Once the model is trained, labeling is performed by applying the CNN classification to the image blocks under analysis. The results of the method indicate that this technique is suitable for correct Glomerulus detection in Whole Slide Images (WSI), showing robustness while reducing false positive and false negative detections.\n\n### *Region-Based Convolutional Neural Nets for Localization of Glomeruli in Trichrome-Stained Whole Kidney Sections (Bukowy et al. 2018)*\n\nBackground Histologic examination of fixed renal tissue is widely used to assess morphology and the progression of disease. Commonly reported metrics include glomerular number and injury. However, characterization of renal histology is a time-consuming and user-dependent process. To accelerate and improve the process, we have developed a glomerular localization pipeline for trichrome-stained kidney sections using a machine learning image classification algorithm.\n\nMethods We prepared 4-μm slices of kidneys from rats of various genetic backgrounds that were subjected to different experimental protocols and mounted the slices on glass slides. All sections used in this analysis were trichrome stained and imaged in bright field at a minimum resolution of 0.92 μm per pixel. The training and test datasets for the algorithm comprised 74 and 13 whole renal sections, respectively, totaling over 28,000 glomeruli manually localized. Additionally, because this localizer will be ultimately used for automated assessment of glomerular injury, we assessed bias of the localizer for preferentially identifying healthy or damaged glomeruli.\n\nResults Localizer performance achieved an average precision and recall of 96.94% and 96.79%, respectively, on whole kidney sections without evidence of bias for or against glomerular injury or the need for manual preprocessing.\n\nConclusions This study presents a novel and robust application of convolutional neural nets for the localization of glomeruli in healthy and damaged trichrome-stained whole-renal section mounts and lays the groundwork for automated glomerular injury scoring.\n\n### *Segmentation of Glomeruli Within Trichrome Images Using Deep Learning (Kannan et al. 2019)*\n\n\n Introduction The number of glomeruli and glomerulosclerosis evaluated on kidney biopsy slides constitute standard components of a renal pathology report. Prevailing methods for glomerular assessment remain manual, labor intensive, and nonstandardized. We developed a deep learning framework to accurately identify and segment glomeruli from digitized images of human kidney biopsies. Methods Trichrome-stained images (n = 275) from renal biopsies of 171 patients with chronic kidney disease treated at the Boston Medical Center from 2009 to 2012 were analyzed. A sliding window operation was defined to crop each original image to smaller images. Each cropped image was then evaluated by at least 3 experts into 3 categories: (i) no glomerulus, (ii) normal or partially sclerosed (NPS) glomerulus, and (iii) globally sclerosed (GS) glomerulus. This led to identification of 751 unique images representing nonglomerular regions, 611 images with NPS glomeruli, and 134 images with GS glomeruli. A convolutional neural network (CNN) was trained with cropped images as inputs and corresponding labels as output. Using this model, an image processing routine was developed to scan the test images to segment the GS glomeruli. Results The CNN model was able to accurately discriminate nonglomerular images from NPS and GS images (performance on test data: Accuracy: 92.67% ± 2.02% and Kappa: 0.8681 ± 0.0392). The segmentation model that was based on the CNN multilabel classifier accurately marked the GS glomeruli on the test data (Matthews correlation coefficient = 0.628). Conclusion This work demonstrates the power of deep learning for assessing complex histologic structures from digitized human kidney biopsies."},{"metadata":{},"cell_type":"markdown","source":"# 2. <a id='importing'>Importing the necessary libraries📗</a> "},{"metadata":{"_kg_hide-output":true,"trusted":true},"cell_type":"code","source":"import os\nfrom os import listdir\nimport pandas as pd\nimport numpy as np\nimport glob\nimport tqdm\nfrom typing import Dict\nimport matplotlib.pyplot as plt\nimport pandas_profiling as pdp\nimport json\n%matplotlib inline\nimport shapely.geometry as sg\nimport shapely.ops as so\nimport zipfile\nimport cv2\n\n#plotly\n!pip install chart_studio\nimport plotly.express as px\nimport plotly.offline as pyo\nimport chart_studio.plotly as py\nimport plotly.graph_objs as go\nfrom plotly.offline import iplot\nimport cufflinks\ncufflinks.go_offline()\ncufflinks.set_config_file(world_readable=True, theme='pearl')\n\n#seaborn\nimport seaborn as sns\n\n#color\nfrom colorama import Fore, Back, Style\n\n#networkx\nimport networkx as nx\n\nimport seaborn as sns\nsns.set(style=\"whitegrid\")\n\n#tifffile\nfrom PIL import Image\nimport tifffile as tiff\nimport cv2\nfrom tqdm.notebook import tqdm\nimport zipfile\n\n# Suppress warnings \nimport warnings\nwarnings.filterwarnings('ignore')\n\n# Settings for pretty nice plots\nplt.style.use('fivethirtyeight')\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# 3. <a id='reading'>Reading the train.csv 📚</a>"},{"metadata":{"_kg_hide-input":true,"trusted":true},"cell_type":"code","source":"# List files available\nlist(os.listdir(\"../input/hubmap-kidney-segmentation\"))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"IMAGE_PATH = \"../input/hubmap-kidney-segmentation/\"\n\ntrain_df = pd.read_csv('../input/hubmap-kidney-segmentation/train.csv')\nhubmap_df = pd.read_csv('../input/hubmap-kidney-segmentation/HuBMAP-20-dataset_information.csv')\ntest_df = pd.read_csv('../input/hubmap-kidney-segmentation/sample_submission.csv')\n\nprint(Fore.YELLOW + 'Training data shape: ',Style.RESET_ALL,train_df.shape)\nprint(Fore.YELLOW + 'HubMap data shape: ',Style.RESET_ALL,hubmap_df.shape)\nprint(Fore.YELLOW + 'Test data shape: ',Style.RESET_ALL,test_df.shape)\n\ntrain_df.head(5)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"hubmap_df.head(5)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"hubmap_df.groupby(['race']).count()['sex'].to_frame()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# 4.<a id='basic'>Basic Data Exploration 🏕️</a> "},{"metadata":{},"cell_type":"markdown","source":"## General Information"},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"# Null values and Data types\nprint(Fore.YELLOW + 'Train Set !!',Style.RESET_ALL)\nprint(train_df.info())\nprint('-------------')\nprint(Fore.BLUE + 'Test Set !!',Style.RESET_ALL)\nprint(test_df.info())\nprint('-------------')\nprint(Fore.GREEN + 'HuBMAP Set !!',Style.RESET_ALL)\nprint(hubmap_df.info())","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### Missing values"},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"hubmap_df.isna().sum()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"train_df.isna().sum()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"There are 3 missing values in hubmap_df and no missing values in train_df"},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"! ls ../input/hubmap-kidney-segmentation/train/","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"We can see that there are `16` json files and `8` tiff files"},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"# Total number of Patient in the dataset(train+test)\n\nprint(Fore.YELLOW +\"Total Patients in Train set: \",Style.RESET_ALL,train_df['id'].count())\nprint(Fore.BLUE +\"Total Patients in Test set: \",Style.RESET_ALL,test_df['id'].count())","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"`5` : Patients in Test Set\n\n`8` : Patients in Train Set"},{"metadata":{},"cell_type":"markdown","source":"## Unique Patients(Ids)"},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"print(Fore.YELLOW + \"The total patient ids are\",Style.RESET_ALL,f\"{train_df['id'].count()},\", Fore.BLUE + \"from those the unique ids are\", Style.RESET_ALL, f\"{train_df['id'].value_counts().shape[0]}.\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"train_patient_ids = set(train_df['id'].unique())\ntest_patient_ids = set(test_df['id'].unique())\n\ntrain_patient_ids.intersection(test_patient_ids)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"We see `none` patients in test set that can be found in train set."},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"columns = train_df.keys()\ncolumns = list(columns)\nprint(columns)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### Patient Counts"},{"metadata":{"trusted":true,"_kg_hide-input":false},"cell_type":"code","source":"train_df['id'].value_counts().max()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test_df['id'].value_counts().max()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"In train and test sets, we can see one Patient and it mean Patient id is unique"},{"metadata":{},"cell_type":"markdown","source":"## Number of Patients and Files in Training Images Folder"},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"files = folders = 0\nfolder_names = {'a'}\nfolder_names.remove('a')\n\npath = \"../input/hubmap-kidney-segmentation/train\"\n\nfor _, dirnames, filenames in os.walk(path):\n  # ^ this idiom means \"we won't be using this value\"\n    files += len(filenames)\n    for j in range(files):\n        folder_names.add(filenames[j][:9])\n    folders = len(folder_names)\n#print(Fore.YELLOW +\"Total Patients in Train set: \",Style.RESET_ALL,train_df['Patient'].count())\nprint(Fore.YELLOW +f'{files:,}',Style.RESET_ALL,\"files, \" + Fore.BLUE + f'{folders:,}',Style.RESET_ALL ,'patients/ids')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"files = folders = 0\nfolder_names = {'a'}\nfolder_names.remove('a')\n\npath = \"../input/hubmap-kidney-segmentation/test\"\n\nfor _, dirnames, filenames in os.walk(path):\n  # ^ this idiom means \"we won't be using this value\"\n    files += len(filenames)\n    for j in range(files):\n        folder_names.add(filenames[j][:9])\n    folders = len(folder_names)\n#print(Fore.YELLOW +\"Total Patients in Train set: \",Style.RESET_ALL,train_df['Patient'].count())\nprint(Fore.YELLOW +f'{files:,}',Style.RESET_ALL,\"files, \" + Fore.BLUE + f'{folders:,}',Style.RESET_ALL ,'patients/ids')","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## JSON FILES COUNT"},{"metadata":{"_kg_hide-input":true,"trusted":true},"cell_type":"code","source":"files = folders = 0\nfolder_names = {'a'}\nfolder_names.remove('a')\n\npath = \"../input/hubmap-kidney-segmentation/train\"\n\nfor _, dirnames, filenames in os.walk(path):\n  # ^ this idiom means \"we won't be using this value\"\n    files += len(filenames)\n    for j in range(files):\n        if filenames[j][-4:]=='json':\n            folder_names.add(filenames[j][:9])\n    folders = len(folder_names)\n#print(Fore.YELLOW +\"Total Patients in Train set: \",Style.RESET_ALL,train_df['Patient'].count())\nprint(Fore.YELLOW +f'{folders:,}',Style.RESET_ALL,\" json-files\")","execution_count":null,"outputs":[]},{"metadata":{"_kg_hide-input":true,"trusted":true},"cell_type":"code","source":"files = folders = 0\nfolder_names = {'a'}\nfolder_names.remove('a')\n\npath = \"../input/hubmap-kidney-segmentation/test\"\n\nfor _, dirnames, filenames in os.walk(path):\n  # ^ this idiom means \"we won't be using this value\"\n    files += len(filenames)\n    for j in range(files):\n        if filenames[j][-4:]=='json':\n            folder_names.add(filenames[j][:9])\n    folders = len(folder_names)\n#print(Fore.YELLOW +\"Total Patients in Train set: \",Style.RESET_ALL,train_df['Patient'].count())\nprint(Fore.YELLOW +f'{folders:,}',Style.RESET_ALL,\" json-files\")","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Reading Normal json files"},{"metadata":{"_kg_hide-input":true,"trusted":true},"cell_type":"code","source":"files = 0\npath = \"../input/hubmap-kidney-segmentation/train\"\n\nfor _, dirnames, filenames in os.walk(path):\n  # ^ this idiom means \"we won't be using this value\"\n    files += len(filenames)\n    for j in range(files):\n        if filenames[j][-4:]=='json' and len(filenames[j])<15:\n            df = pd.read_json(f'../input/hubmap-kidney-segmentation/train/{filenames[j]}')\n            print(Fore.RED + f'{df.shape[0]}',Style.RESET_ALL, \"rows and \"+ Fore.GREEN + f'{df.shape[1]}',Style.RESET_ALL,f\" columns in the {filenames[j][:-5]} json file\")","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"We can see that there are no normal json files in the test set."},{"metadata":{"_kg_hide-input":true,"trusted":true},"cell_type":"code","source":"files = 0\npath = \"../input/hubmap-kidney-segmentation\"\ni = 0\n\nfor _, dirnames, filenames in os.walk(path):\n  # ^ this idiom means \"we won't be using this value\"\n    if i==0:\n        i += 1\n        files += len(filenames)\n        for j in range(files):\n            if filenames[j][-4:]=='json' and len(filenames[j])<15:\n                df = pd.read_json(f'../input/hubmap-kidney-segmentation/{filenames[j]}')\n                print(Fore.RED + f'{df.shape[0]}',Style.RESET_ALL, \"rows and \"+ Fore.GREEN + f'{df.shape[1]}',Style.RESET_ALL,f\" columns in the {filenames[j][:-5]} json file\")","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Reading anatomical-structure json files"},{"metadata":{"_kg_hide-input":true,"trusted":true},"cell_type":"code","source":"files = 0\npath = \"../input/hubmap-kidney-segmentation/train\"\n\nfor _, dirnames, filenames in os.walk(path):\n  # ^ this idiom means \"we won't be using this value\"\n    files += len(filenames)\n    for j in range(files):\n        if filenames[j][-4:]=='json' and len(filenames[j])>15:\n            df = pd.read_json(f'../input/hubmap-kidney-segmentation/train/{filenames[j]}')\n            print(Fore.RED + f'{df.shape[0]}',Style.RESET_ALL, \"rows and \"+ Fore.GREEN + f'{df.shape[1]}',Style.RESET_ALL,f\" columns in the {filenames[j][:-5]} json file\")","execution_count":null,"outputs":[]},{"metadata":{"_kg_hide-input":true,"trusted":true},"cell_type":"code","source":"files = 0\npath = \"../input/hubmap-kidney-segmentation/test\"\n\nfor _, dirnames, filenames in os.walk(path):\n  # ^ this idiom means \"we won't be using this value\"\n    files += len(filenames)\n    for j in range(files):\n        if filenames[j][-4:]=='json' and len(filenames[j])>15:\n            df = pd.read_json(f'../input/hubmap-kidney-segmentation/test/{filenames[j]}')\n            print(Fore.RED + f'{df.shape[0]}',Style.RESET_ALL, \"rows and \"+ Fore.GREEN + f'{df.shape[1]}',Style.RESET_ALL,f\" columns in the {filenames[j][:-5]} json file\")","execution_count":null,"outputs":[]},{"metadata":{"_kg_hide-input":true,"trusted":true},"cell_type":"code","source":"files = 0\npath = \"../input/hubmap-kidney-segmentation\"\ni = 0\n\nfor _, dirnames, filenames in os.walk(path):\n  # ^ this idiom means \"we won't be using this value\"\n    if i==0:\n        i += 1\n        files += len(filenames)\n        for j in range(files):\n            if filenames[j][-4:]=='json' and len(filenames[j])>15:\n                df = pd.read_json(f'../input/hubmap-kidney-segmentation/{filenames[j]}')\n                print(Fore.RED + f'{df.shape[0]}',Style.RESET_ALL, \"rows and \"+ Fore.GREEN + f'{df.shape[1]}',Style.RESET_ALL,f\" columns in the {filenames[j][:-5]} json file\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_df.head()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"We see some encoding column over there. This encoding column is RLE-encoded representation of the mask for the objects in the image."},{"metadata":{},"cell_type":"markdown","source":"## What is this RLE Encoding?"},{"metadata":{},"cell_type":"markdown","source":"[Run-length encoding](https://en.wikipedia.org/wiki/Run-length_encoding) (RLE) is a form of lossless data compression in which runs of data (sequences in which the same data value occurs in many consecutive data elements) are stored as a single data value and count, rather than as the original run. This is most useful on data that contains many such runs. Consider, for example, simple graphic images such as icons, line drawings, Conway's Game of Life, and animations. It is not useful with files that don't have many runs as it could greatly increase the file size. "},{"metadata":{},"cell_type":"markdown","source":"![](https://i.ytimg.com/vi/mX4tdOEpFXw/hqdefault.jpg)"},{"metadata":{},"cell_type":"markdown","source":"## Sample code for RLE Encoding"},{"metadata":{"trusted":true},"cell_type":"code","source":"# Perform Run Length Encoding (RLE) data compression algorithm on string\ndef encode(s):\n\n    encoding = \"\" \n    i = 0\n    while i < len(s):\n        # count occurrences of character at index i\n        count = 1\n\n        while i + 1 < len(s) and s[i] == s[i + 1]:\n            count = count + 1\n            i = i + 1\n        encoding += str(count) + s[i]\n        i = i + 1\n\n    return encoding\ns = \"ABBCCCD\"\nprint(encode(s))\n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Advantages and Disadvantages Of RLE:"},{"metadata":{},"cell_type":"markdown","source":"This [algorithm](https://www.prepressure.com/library/compression-algorithm/rle) is very easy to implement and does not require much CPU horsepower. RLE compression is only efficient with files that contain lots of repetitive data. These can be text files if they contain lots of spaces for indenting but line-art images that contain large white or black areas are far more suitable. Computer-generated color images (e.g. architectural drawings) can also give fair compression ratios. And this is used to compress Tiff and Pdf files."},{"metadata":{},"cell_type":"markdown","source":"## How Run Length Encoding is used Here"},{"metadata":{},"cell_type":"markdown","source":"In order to reduce the submission file size, we must submit segmentation results using run-length encoding on the pixel values. That is, instead of submitting an exhaustive list of indices for your segmentation, you will submit pairs of values that contain a start position and a run length. E.g. '0 3' implies starting at pixel 0 and running a total of 3 pixels (0,1,2). The competition format requires a space delimited list of pairs. For example, '0 3 10 5' implies pixels 0,1,2, and 10,11,12,13,14 are to be included in the mask. The metric checks that the pairs are sorted, positive, and the decoded pixel values are not duplicated. The pixels are numbered from top to bottom, then left to right: 0 is pixel (0,0), 1 is pixel (1,0), and 2 is pixel (2,0) etc., see Figure 1.\n\n![](data:image/png;base64,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)\n\n\n\n![](https://image.slidesharecdn.com/runlengthencoding-130119224310-phpapp01/95/run-length-encoding-11-638.jpg?cb=1358635426)"},{"metadata":{},"cell_type":"markdown","source":"# 5. <a id='details'>Data Exploration in Details 🎠</a>"},{"metadata":{},"cell_type":"markdown","source":"Getting the columns in hubmap_df"},{"metadata":{"trusted":true},"cell_type":"code","source":"hubmap_df[\"split\"] = \"test\"\nhubmap_df.loc[hubmap_df[\"image_file\"].isin(os.listdir(os.path.join(IMAGE_PATH, \"train\"))), \"split\"] = \"train\"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"hubmap_df.columns","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Parallel Category Diagram"},{"metadata":{"_kg_hide-input":true,"trusted":true},"cell_type":"code","source":"parallel_diagram = hubmap_df[['patient_number','age','sex','race','percent_cortex']]\nfig = px.parallel_categories(parallel_diagram, color_continuous_scale=px.colors.sequential.Inferno)\nfig.update_layout(title='Parallel category diagram 1 on hubmap set')\nfig.show()","execution_count":null,"outputs":[]},{"metadata":{"_kg_hide-input":true,"trusted":true},"cell_type":"code","source":"parallel_diagram = hubmap_df[['patient_number','age','sex','race','percent_medulla']]\nfig = px.parallel_categories(parallel_diagram, color_continuous_scale=px.colors.sequential.Inferno)\nfig.update_layout(title='Parallel category diagram 2 on hubmap set')\nfig.show()","execution_count":null,"outputs":[]},{"metadata":{"_kg_hide-input":true,"trusted":true},"cell_type":"code","source":"def dist(df,column,color):\n    sns.distplot(df[column],label=column,color=color)\n    plt.legend()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Exploring the 'race' columns"},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"hubmap_df[['race','split']].value_counts()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"hubmap_df[['race','split']].value_counts().iplot(kind='bar',\n                                              yTitle='Counts', \n                                              linecolor='black', \n                                              opacity=0.7,\n                                              color='blue',\n                                              theme='pearl',\n                                              bargap=0.5,\n                                              gridcolor='white',\n                                              title='Distribution of the race column in the HuBMAP-20 Set')","execution_count":null,"outputs":[]},{"metadata":{"_kg_hide-input":true,"trusted":true},"cell_type":"code","source":"df = hubmap_df.groupby(['race','split'])['race'].count().reset_index(name = 'counts')\ndf['race_split'] = df['race']+'_'+df['split']\nfig = px.pie(df, values='counts', names='race_split', title='Patient Race Count')\nfig.update_layout(\n    autosize=False,\n    width=800,\n    height=650,\n    margin=dict(\n        l=50,\n        r=50,\n        b=50,\n        t=50,\n        pad=4\n    ),\n    paper_bgcolor=\"LightSteelBlue\",\n)\nfig.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df = hubmap_df.groupby(['race','split'])['race'].count().reset_index(name = 'counts')\nplt.figure(figsize=(10,10))\ndist(df,\"counts\",\"red\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"white = hubmap_df[hubmap_df['race']=='White']\nblack = hubmap_df[hubmap_df['race']=='Black or African American']\ncount_white = white['split'].value_counts().reset_index()\ncount_black = black['split'].value_counts().reset_index()\npie_white = go.Pie(labels=count_white['index'],values=count_white['split'],name=\"White\",hole=0.4,domain={'x': [0,0.46]})\npie_black = go.Pie(labels=count_black['index'],values=count_black['split'],name=\"Black or African American\",hole=0.5,domain={'x': [0.52,1]})\nlayout = dict(title = 'Race', font=dict(size=10), legend=dict(orientation=\"h\"),\n              annotations = [dict(x=0.2, y=0.5, text='White', showarrow=False, font=dict(size=20)),\n                             dict(x=0.8, y=0.5, text='Black or African American', showarrow=False, font=dict(size=20)) ])\n\nfig = dict(data=[pie_white, pie_black], layout=layout)\npyo.iplot(fig)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"`9` : White - `5` : Train, `4` : Test\n\n`4` : Black or African American  `3` : Train, `1` : Test"},{"metadata":{},"cell_type":"markdown","source":"### Network Graph"},{"metadata":{"trusted":true},"cell_type":"code","source":"fig, ax = plt.subplots(figsize = (20, 12))\nfor i, t in enumerate(hubmap_df['race'].unique()):\n    hubmap_df_type = hubmap_df.loc[hubmap_df['race'] == t]\n    bad_weight = list(hubmap_df_type['weight_kilograms'].value_counts(normalize=True)[hubmap_df_type['weight_kilograms'].value_counts(normalize=True) < 0.01].index)\n    bad_height = list(hubmap_df_type['height_centimeters'].value_counts(normalize=True)[hubmap_df_type['height_centimeters'].value_counts(normalize=True) < 0.01].index)\n    bad_mes = list(set(bad_weight + bad_height))\n    hubmap_df_type = hubmap_df_type.loc[(hubmap_df_type['weight_kilograms'].isin(bad_weight) == False) & (hubmap_df_type['height_centimeters'].isin(bad_height) == False)]\n    G = nx.from_pandas_edgelist(hubmap_df_type, 'weight_kilograms', 'height_centimeters', ['bmi_kg/m^2'])\n    plt.subplot(2, 1, i + 1);\n    nx.draw(G, with_labels=True);\n    plt.title(f'Network Graph for race {t}')","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Exploring the Patient Number Columns"},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"hubmap_df[['patient_number','split']].value_counts()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"hubmap_df[['patient_number','split']].value_counts().iplot(kind='bar',\n                                              yTitle='Counts', \n                                              linecolor='black', \n                                              opacity=0.7,\n                                              color='red',\n                                              theme='pearl',\n                                              bargap=0.5,\n                                              gridcolor='white',\n                                              title='Distribution of the patient_number column in the HuBMAP-20 Set')","execution_count":null,"outputs":[]},{"metadata":{"_kg_hide-input":true,"trusted":true},"cell_type":"code","source":"df = hubmap_df.groupby(['patient_number','split'])['patient_number'].count().reset_index(name = 'counts')\ndf['patient_number_split'] = df['patient_number'].astype('str')+'_'+df['split']\nfig = px.pie(df, values='counts', names='patient_number_split', title='Patient Number Count')\nfig.update_layout(\n    autosize=False,\n    width=800,\n    height=650,\n    margin=dict(\n        l=50,\n        r=50,\n        b=50,\n        t=50,\n        pad=4\n    ),\n    paper_bgcolor=\"LightSteelBlue\",\n)\nfig.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### Network Graph"},{"metadata":{"trusted":true},"cell_type":"code","source":"fig, ax = plt.subplots(figsize = (20, 12))\nfor i, t in enumerate(hubmap_df['patient_number'].unique()):\n    hubmap_df_type = hubmap_df.loc[hubmap_df['patient_number'] == t]\n    bad_weight = list(hubmap_df_type['weight_kilograms'].value_counts(normalize=True)[hubmap_df_type['weight_kilograms'].value_counts(normalize=True) < 0.01].index)\n    bad_height = list(hubmap_df_type['height_centimeters'].value_counts(normalize=True)[hubmap_df_type['height_centimeters'].value_counts(normalize=True) < 0.01].index)\n    bad_mes = list(set(bad_weight + bad_height))\n    hubmap_df_type = hubmap_df_type.loc[(hubmap_df_type['weight_kilograms'].isin(bad_weight) == False) & (hubmap_df_type['height_centimeters'].isin(bad_height) == False)]\n    G = nx.from_pandas_edgelist(hubmap_df_type, 'weight_kilograms', 'height_centimeters', ['bmi_kg/m^2'])\n    plt.subplot(5, 2, i + 1);\n    nx.draw(G, with_labels=True);\n    plt.title(f'Network Graph for patient_number {t}')","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Exploring the Ethinicity Column"},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"hubmap_df[['ethnicity','split']].value_counts()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"hubmap_df[['ethnicity','split']].value_counts().iplot(kind='bar',\n                                              yTitle='Counts', \n                                              linecolor='black', \n                                              opacity=0.7,\n                                              color='green',\n                                              theme='pearl',\n                                              bargap=0.5,\n                                              gridcolor='white',\n                                              title='Distribution of the Ethnicity column in the HuBMAP-20 Set')","execution_count":null,"outputs":[]},{"metadata":{"_kg_hide-input":true,"trusted":true},"cell_type":"code","source":"df = hubmap_df.groupby(['ethnicity','split'])['ethnicity'].count().reset_index(name = 'counts')\ndf['ethnicity_split'] = df['ethnicity']+'_'+df['split']\nfig = px.pie(df, values='counts', names='ethnicity_split', title='Patient Ethnicity Count')\nfig.update_layout(\n    autosize=False,\n    width=800,\n    height=650,\n    margin=dict(\n        l=50,\n        r=50,\n        b=50,\n        t=50,\n        pad=4\n    ),\n    paper_bgcolor=\"LightSteelBlue\",\n)\nfig.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Exploring the sex columns"},{"metadata":{"trusted":true,"_kg_hide-input":true,"_kg_hide-output":true},"cell_type":"code","source":"hubmap_df[['sex','split']].value_counts()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"hubmap_df[['sex','split']].value_counts().iplot(kind='bar',\n                                              yTitle='Counts', \n                                              linecolor='black', \n                                              opacity=0.7,\n                                              color='yellow',\n                                              theme='pearl',\n                                              bargap=0.5,\n                                              gridcolor='white',\n                                              title='Distribution of the Sex column in the HuBMAP-20 Set')","execution_count":null,"outputs":[]},{"metadata":{"_kg_hide-input":true,"trusted":true},"cell_type":"code","source":"df = hubmap_df.groupby(['sex','split'])['sex'].count().reset_index(name = 'counts')\ndf['sex_split'] = df['sex']+'_'+df['split']\nfig = px.pie(df, values='counts', names='sex_split', title='Patient Gender Count')\nfig.update_layout(\n    autosize=False,\n    width=800,\n    height=650,\n    margin=dict(\n        l=50,\n        r=50,\n        b=50,\n        t=50,\n        pad=4\n    ),\n    paper_bgcolor=\"LightSteelBlue\",\n)\nfig.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"male = hubmap_df[hubmap_df['sex']=='Male']\nfemale = hubmap_df[hubmap_df['sex']== 'Female']\ncount_male = male['split'].value_counts().reset_index()\ncount_female = female['split'].value_counts().reset_index()\npie_male = go.Pie(labels=count_male['index'],values=count_male['split'],name=\"Male\",hole=0.4,domain={'x': [0,0.46]})\npie_female = go.Pie(labels=count_female['index'],values=count_female['split'],name=\"Female\",hole=0.5,domain={'x': [0.52,1]})\nlayout = dict(title = 'Sex', font=dict(size=10), legend=dict(orientation=\"h\"),\n              annotations = [dict(x=0.2, y=0.5, text='Male', showarrow=False, font=dict(size=20)),\n                             dict(x=0.8, y=0.5, text='Female', showarrow=False, font=dict(size=20)) ])\n\nfig = dict(data=[pie_male, pie_female], layout=layout)\npyo.iplot(fig)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Exploring the age columns"},{"metadata":{"trusted":true,"_kg_hide-input":true,"_kg_hide-output":true},"cell_type":"code","source":"hubmap_df[['age','split']].value_counts()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"hubmap_df[['age','split']].value_counts().iplot(kind='bar',\n                                              yTitle='Counts', \n                                              linecolor='black', \n                                              opacity=0.7,\n                                              color='orange',\n                                              theme='pearl',\n                                              bargap=0.5,\n                                              gridcolor='white',\n                                              title='Distribution of the Age column in the HuBMAP-20 Set')","execution_count":null,"outputs":[]},{"metadata":{"_kg_hide-input":true,"trusted":true},"cell_type":"code","source":"df = hubmap_df.groupby(['age','split'])['age'].count().reset_index(name = 'counts')\ndf['age_split'] = df['age'].astype('str')+'_'+df['split']\nfig = px.pie(df, values='counts', names='age_split', title='Patient Ages Count')\nfig.update_layout(\n    autosize=False,\n    width=800,\n    height=650,\n    margin=dict(\n        l=50,\n        r=50,\n        b=50,\n        t=50,\n        pad=4\n    ),\n    paper_bgcolor=\"LightSteelBlue\",\n)\nfig.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Exploring the Laterality Column"},{"metadata":{"trusted":true,"_kg_hide-input":true,"_kg_hide-output":true},"cell_type":"code","source":"hubmap_df[['laterality','split']].value_counts()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"hubmap_df[['laterality','split']].value_counts().iplot(kind='bar',\n                                              yTitle='Counts', \n                                              linecolor='black', \n                                              opacity=0.7,\n                                              color='purple',\n                                              theme='pearl',\n                                              bargap=0.5,\n                                              gridcolor='white',\n                                              title='Distribution of the Laterality column in the HuBMAP-20 Set')","execution_count":null,"outputs":[]},{"metadata":{"_kg_hide-input":true,"trusted":true},"cell_type":"code","source":"df = hubmap_df.groupby(['laterality','split'])['laterality'].count().reset_index(name = 'counts')\ndf['laterality_split'] = df['laterality']+'_'+df['split']\nfig = px.pie(df, values='counts', names='laterality_split', title='Patient Laterality Count')\nfig.update_layout(\n    autosize=False,\n    width=800,\n    height=650,\n    margin=dict(\n        l=50,\n        r=50,\n        b=50,\n        t=50,\n        pad=4\n    ),\n    paper_bgcolor=\"LightSteelBlue\",\n)\nfig.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Exploring the Percent Medulla Column"},{"metadata":{"trusted":true,"_kg_hide-input":true,"_kg_hide-output":true},"cell_type":"code","source":"hubmap_df[['percent_medulla','split']].value_counts()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"hubmap_df[['percent_medulla','split']].value_counts().iplot(kind='bar',\n                                              yTitle='Counts', \n                                              linecolor='black', \n                                              opacity=0.7,\n                                              color='pink',\n                                              theme='pearl',\n                                              bargap=0.5,\n                                              gridcolor='white',\n                                              title='Distribution of the Medulla column in the HuBMAP-20 Set')","execution_count":null,"outputs":[]},{"metadata":{"_kg_hide-input":true,"trusted":true},"cell_type":"code","source":"df = hubmap_df.groupby(['percent_medulla','split'])['percent_medulla'].count().reset_index(name = 'counts')\ndf['percent_medulla_split'] = df['percent_medulla'].astype('str')+'_'+df['split']\nfig = px.pie(df, values='counts', names='percent_medulla_split', title='Patient Percent_Medulla Count')\nfig.update_layout(\n    autosize=False,\n    width=800,\n    height=650,\n    margin=dict(\n        l=50,\n        r=50,\n        b=50,\n        t=50,\n        pad=4\n    ),\n    paper_bgcolor=\"LightSteelBlue\",\n)\nfig.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Exploring the Percent Cortex column"},{"metadata":{"trusted":true,"_kg_hide-input":true,"_kg_hide-output":true},"cell_type":"code","source":"hubmap_df[['percent_cortex','split']].value_counts()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"hubmap_df[['percent_cortex','split']].value_counts().iplot(kind='bar',\n                                              yTitle='Counts', \n                                              linecolor='black', \n                                              opacity=0.7,\n                                              color='cyan',\n                                              theme='pearl',\n                                              bargap=0.5,\n                                              gridcolor='white',\n                                              title='Distribution of the Medulla column in the HuBMAP-20 Set')","execution_count":null,"outputs":[]},{"metadata":{"_kg_hide-input":true,"trusted":true},"cell_type":"code","source":"df = hubmap_df.groupby(['percent_cortex','split'])['percent_cortex'].count().reset_index(name = 'counts')\ndf['percent_cortex_split'] = df['percent_cortex'].astype('str')+'_'+df['split']\nfig = px.pie(df, values='counts', names='percent_cortex_split', title='Patient Percent_Cortex Count')\nfig.update_layout(\n    autosize=False,\n    width=800,\n    height=650,\n    margin=dict(\n        l=50,\n        r=50,\n        b=50,\n        t=50,\n        pad=4\n    ),\n    paper_bgcolor=\"LightSteelBlue\",\n)\nfig.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Distribution Of Age Over Race"},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"df = hubmap_df\nfig = px.violin(df, y='age', x='race', box=True, color='sex', points=\"all\",\n               hover_data=hubmap_df.columns)\nfig.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"plt.figure(figsize=(16, 6))\nsns.kdeplot(df.loc[df['race'] == 'White', 'age'], label = 'White',shade=True)\nsns.kdeplot(df.loc[df['race'] == 'Black or African American', 'age'], label = 'Black or African American',shade=True)\n\n\n# Labeling of plot\nplt.xlabel('Age (years)'); plt.ylabel('Density'); plt.title('Distribution of Ages')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"plt.figure(figsize=(16, 6))\nax = sns.violinplot(x = df['age'], y = df['race'], palette = 'Reds')\nax.set_xlabel(xlabel = 'age', fontsize = 15)\nax.set_ylabel(ylabel = 'race', fontsize = 15)\nax.set_title(label = 'Distribution of age over race', fontsize = 20)\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"_kg_hide-input":true,"trusted":true},"cell_type":"code","source":"df = hubmap_df.groupby(['age','race'])['age'].count().reset_index(name = 'counts')\ndf['age_race'] = df['age'].astype('str')+'_'+df['race']\nfig = px.pie(df, values='counts', names='age_race', title='Distribution Of Age Over Race')\nfig.update_layout(\n    autosize=False,\n    width=800,\n    height=650,\n    margin=dict(\n        l=50,\n        r=50,\n        b=50,\n        t=50,\n        pad=4\n    ),\n    paper_bgcolor=\"LightSteelBlue\",\n)\nfig.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Distribution of race over Medulla"},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"df = hubmap_df\nfig = px.violin(df, x='race', y='percent_medulla', box=True, color='sex', points=\"all\",\n               hover_data=hubmap_df.columns)\nfig.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"plt.figure(figsize=(16, 6))\nax = sns.violinplot(x = df['race'], y = df['percent_medulla'], palette = 'Reds')\nax.set_xlabel(xlabel = 'race', fontsize = 15)\nax.set_ylabel(ylabel = 'percent_medulla', fontsize = 15)\nax.set_title(label = 'Distribution of race over medulla', fontsize = 20)\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"_kg_hide-input":true,"trusted":true},"cell_type":"code","source":"df = hubmap_df.groupby(['race','percent_medulla'])['race'].count().reset_index(name = 'counts')\ndf['race_percent_medulla'] = df['race']+'_'+df['percent_medulla'].astype('str')\nfig = px.pie(df, values='counts', names='race_percent_medulla', title='Distribution Of Race Over Percent Medulla')\nfig.update_layout(\n    autosize=False,\n    width=800,\n    height=650,\n    margin=dict(\n        l=50,\n        r=50,\n        b=50,\n        t=50,\n        pad=4\n    ),\n    paper_bgcolor=\"LightSteelBlue\",\n)\nfig.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Distiribution of age over percent medulla"},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"df = hubmap_df\nplt.figure(figsize=(16, 6))\nsns.kdeplot(df.loc[df['percent_medulla'] == 20, 'age'], label = 20,shade=True)\nsns.kdeplot(df.loc[df['percent_medulla'] == 25, 'age'], label = 25,shade=True)\nsns.kdeplot(df.loc[df['percent_medulla'] == 35, 'age'], label = 35,shade=True)\nsns.kdeplot(df.loc[df['percent_medulla'] == 45, 'age'], label = 45,shade=True)\n\n\n# Labeling of plot\nplt.xlabel('Age (years)'); plt.ylabel('Density'); plt.title('Distribution of Ages')","execution_count":null,"outputs":[]},{"metadata":{"_kg_hide-input":true,"trusted":true},"cell_type":"code","source":"df = hubmap_df.groupby(['age','percent_medulla'])['age'].count().reset_index(name = 'counts')\ndf['age_percent_medulla'] = df['age'].astype('str')+'_'+df['percent_medulla'].astype('str')\nfig = px.pie(df, values='counts', names='age_percent_medulla', title='Distribution Of Age Over Percent Medulla')\nfig.update_layout(\n    autosize=False,\n    width=800,\n    height=650,\n    margin=dict(\n        l=50,\n        r=50,\n        b=50,\n        t=50,\n        pad=4\n    ),\n    paper_bgcolor=\"LightSteelBlue\",\n)\nfig.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Distribution of age over percent cortex"},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"df = hubmap_df\nplt.figure(figsize=(16, 6))\nsns.kdeplot(df.loc[df['percent_cortex'] == 80, 'age'], label = 20,shade=True)\nsns.kdeplot(df.loc[df['percent_cortex'] == 75, 'age'], label = 25,shade=True)\nsns.kdeplot(df.loc[df['percent_cortex'] == 65, 'age'], label = 35,shade=True)\nsns.kdeplot(df.loc[df['percent_cortex'] == 55, 'age'], label = 45,shade=True)\n\n\n# Labeling of plot\nplt.xlabel('Age (years)'); plt.ylabel('Density'); plt.title('Distribution of Ages')","execution_count":null,"outputs":[]},{"metadata":{"_kg_hide-input":true,"trusted":true},"cell_type":"code","source":"df = hubmap_df.groupby(['age','percent_cortex'])['age'].count().reset_index(name = 'counts')\ndf['age_percent_cortex'] = df['age'].astype('str')+'_'+df['percent_cortex'].astype('str')\nfig = px.pie(df, values='counts', names='age_percent_cortex', title='Distribution Of Age Over Percent Cortex')\nfig.update_layout(\n    autosize=False,\n    width=800,\n    height=650,\n    margin=dict(\n        l=50,\n        r=50,\n        b=50,\n        t=50,\n        pad=4\n    ),\n    paper_bgcolor=\"LightSteelBlue\",\n)\nfig.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"From the above graphs we infer that the sum of percent medulla and percent cortex is 100. Let's verify it below."},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"(hubmap_df['percent_medulla']+hubmap_df['percent_cortex']).unique()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Sex vs Race"},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"plt.figure(figsize=(16, 6))\na = sns.countplot(data=hubmap_df, x='race', hue='sex')\n\nfor p in a.patches:\n    a.annotate(format(p.get_height(), ','), \n           (p.get_x() + p.get_width() / 2., \n            p.get_height()), ha = 'center', va = 'center', \n           xytext = (0, 4), textcoords = 'offset points')\n\nplt.title('Sex split by Race', fontsize=16)\nsns.despine(left=True, bottom=True)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"fig = px.box(hubmap_df, x=\"sex\", y=\"age\", points=\"all\")\nfig.show()","execution_count":null,"outputs":[]},{"metadata":{"_kg_hide-input":true,"trusted":true},"cell_type":"code","source":"df = hubmap_df.groupby(['sex','race'])['sex'].count().reset_index(name = 'counts')\ndf['sex_race'] = df['sex'].astype('str')+'_'+df['race'].astype('str')\nfig = px.pie(df, values='counts', names='sex_race', title='Sex Versus Race')\nfig.update_layout(\n    autosize=False,\n    width=800,\n    height=650,\n    margin=dict(\n        l=50,\n        r=50,\n        b=50,\n        t=50,\n        pad=4\n    ),\n    paper_bgcolor=\"LightSteelBlue\",\n)\nfig.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"male = hubmap_df[hubmap_df['sex']=='Male']\nfemale = hubmap_df[hubmap_df['sex']== 'Female']\ncount_male = male[['race','split']].value_counts().reset_index()\ncount_female = female[['race','split']].value_counts().reset_index()\npie_male = go.Pie(labels=count_male[['race','split']],values=count_male[0],name=\"Male\",hole=0.4,domain={'x': [0,0.46]})\npie_female = go.Pie(labels=count_female[['race','split']],values=count_female[0],name=\"Female\",hole=0.5,domain={'x': [0.52,1]})\nlayout = dict(title = 'Sex_Race', font=dict(size=10), legend=dict(orientation=\"h\"),\n              annotations = [dict(x=0.2, y=0.5, text='Male', showarrow=False, font=dict(size=20)),\n                             dict(x=0.8, y=0.5, text='Female', showarrow=False, font=dict(size=20)) ])\n\nfig = dict(data=[pie_male, pie_female], layout=layout)\npyo.iplot(fig)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"male = hubmap_df[hubmap_df['sex']=='Male']\nfemale = hubmap_df[hubmap_df['sex']== 'Female']\ncount_male = male['race'].value_counts().reset_index()\ncount_female = female['race'].value_counts().reset_index()\npie_male = go.Pie(labels=count_male['index'],values=count_male['race'],name=\"Male\",hole=0.4,domain={'x': [0,0.46]})\npie_female = go.Pie(labels=count_female['index'],values=count_female['race'],name=\"Female\",hole=0.5,domain={'x': [0.52,1]})\nlayout = dict(title = 'Sex_Race', font=dict(size=10), legend=dict(orientation=\"h\"),\n              annotations = [dict(x=0.2, y=0.5, text='Male', showarrow=False, font=dict(size=20)),\n                             dict(x=0.8, y=0.5, text='Female', showarrow=False, font=dict(size=20)) ])\n\nfig = dict(data=[pie_male, pie_female], layout=layout)\npyo.iplot(fig)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"From the above graphs we can infer that there is no female black in the test set."},{"metadata":{},"cell_type":"markdown","source":"## HeatMap for hubmap"},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"corrmat = hubmap_df.corr() \nf, ax = plt.subplots(figsize =(9, 8)) \nsns.heatmap(corrmat, ax = ax, cmap = 'RdYlBu_r', linewidths = 0.5)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# 6. <a id='visual'>Visualising Images : Tiff 🗺️</a>  "},{"metadata":{"trusted":true,"_kg_hide-input":true,"_kg_hide-output":true},"cell_type":"code","source":"print(Fore.YELLOW + 'Train .tiff number of images:',Style.RESET_ALL, len(list(os.listdir('../input/hubmap-kidney-segmentation/train')))/3, '\\n' +\n      Fore.BLUE + 'Test .tiff number of images:',Style.RESET_ALL, len(list(os.listdir('../input/hubmap-kidney-segmentation/test')))/2)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_kg_hide-input":true,"_kg_hide-output":true},"cell_type":"code","source":"IMAGE_PATH = '../input/hubmap-kidney-segmentation'\nos.path.join(IMAGE_PATH, 'train/095bf7a1f.tiff')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"im = tiff.imread(\n    os.path.join(IMAGE_PATH, \"train/0486052bb.tiff\")\n)\nplt.figure(figsize=(10, 10))\nplt.imshow(im)\nplt.axis(\"off\")\ndel im","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Credit goes to https://www.kaggle.com/iafoss/256x256-images/data"},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"sz = 256   #the size of tiles\nreduce = 4 #reduce the original images by 4 times \nMASKS = '../input/hubmap-kidney-segmentation/train.csv'\nDATA = '../input/hubmap-kidney-segmentation/train/'\nOUT_TRAIN = 'train.zip'\nOUT_MASKS = 'masks.zip'\ndef enc2mask(encs, shape):\n    img = np.zeros(shape[0]*shape[1], dtype=np.uint8)\n    for m,enc in enumerate(encs):\n        if isinstance(enc,np.float) and np.isnan(enc): continue\n        s = enc.split()\n        for i in range(len(s)//2):\n            start = int(s[2*i]) - 1\n            length = int(s[2*i+1])\n            img[start:start+length] = 1 + m\n    return img.reshape(shape).T\n\ndef mask2enc(mask, shape, n=1):\n    pixels = mask.T.flatten()\n    encs = []\n    for i in range(1,n+1):\n        p = (pixels == i).astype(np.int8)\n        if p.sum() == 0: encs.append(np.nan)\n        else:\n            p = np.concatenate([[0], p, [0]])\n            runs = np.where(p[1:] != p[:-1])[0] + 1\n            runs[1::2] -= runs[::2]\n            encs.append(' '.join(str(x) for x in runs))\n    return encs\ndf_masks = pd.read_csv(MASKS).set_index('id')\nx_tot,x2_tot = [],[]\nwith zipfile.ZipFile(OUT_TRAIN, 'w') as img_out,\\\n zipfile.ZipFile(OUT_MASKS, 'w') as mask_out:\n    for index, encs in tqdm(df_masks.iterrows(),total=len(df_masks)):\n        #read image and generate the mask\n        img = tiff.imread(os.path.join(DATA,index+'.tiff'))\n        if len(img.shape) == 5:img = np.transpose(img.squeeze(), (1,2,0))\n        mask = enc2mask(encs,(img.shape[1],img.shape[0]))\n\n        #add padding to make the image dividable into tiles\n        shape = img.shape\n        pad0,pad1 = (reduce*sz - shape[0]%(reduce*sz))%(reduce*sz), (reduce*sz - shape[1]%(reduce*sz))%(reduce*sz)\n        img = np.pad(img,[[pad0//2,pad0-pad0//2],[pad1//2,pad1-pad1//2],[0,0]],constant_values=0)\n        mask = np.pad(mask,[[pad0//2,pad0-pad0//2],[pad1//2,pad1-pad1//2]],constant_values=0)\n\n        #split image and mask into tiles using the reshape+transpose trick\n        img = cv2.resize(img,(img.shape[0]//reduce,img.shape[1]//reduce),interpolation = cv2.INTER_AREA)\n        img = img.reshape(img.shape[0]//sz,sz,img.shape[1]//sz,sz,3)\n        img = img.transpose(0,2,1,3,4).reshape(-1,sz,sz,3)\n\n        mask = cv2.resize(mask,(mask.shape[0]//reduce,mask.shape[1]//reduce),interpolation = cv2.INTER_NEAREST)\n        mask = mask.reshape(mask.shape[0]//sz,sz,mask.shape[1]//sz,sz)\n        mask = mask.transpose(0,2,1,3).reshape(-1,sz,sz)\n\n        #write data\n        for i,(im,m) in enumerate(zip(img,mask)):\n            if im.sum() == 0: continue\n            \n            x_tot.append((im/255.0).reshape(-1,3).mean(0))\n            x2_tot.append(((im/255.0)**2).reshape(-1,3).mean(0))\n            \n            im = cv2.imencode('.png',cv2.cvtColor(im, cv2.COLOR_RGB2BGR))[1]\n            img_out.writestr(f'{index}_{i}.png', im)\n            m = cv2.imencode('.png',m)[1]\n            mask_out.writestr(f'{index}_{i}.png', m)\n\n#image stats\nimg_avr =  np.array(x_tot).mean(0)\nimg_std =  np.sqrt(np.array(x2_tot).mean(0) - img_avr**2)\nprint('mean:',img_avr, ', std:', img_std)\ncolumns, rows = 4,4\nidx0 = 870\nfig=plt.figure(figsize=(columns*4, rows*4))\nwith zipfile.ZipFile(OUT_TRAIN, 'r') as img_arch, \\\n     zipfile.ZipFile(OUT_MASKS, 'r') as msk_arch:\n    fnames = sorted(img_arch.namelist())[8:]\n    for i in range(rows):\n        for j in range(columns):\n            idx = i+j*columns\n            flags = cv2.IMREAD_COLOR\n            img = cv2.imdecode(np.frombuffer(img_arch.read(fnames[idx0+idx]), np.uint8), flags)\n            flags = cv2.IMREAD_GRAYSCALE\n            mask = cv2.imdecode(np.frombuffer(msk_arch.read(fnames[idx0+idx]), np.uint8), flags)\n    \n            fig.add_subplot(rows, columns, idx+1)\n            plt.axis('off')\n            plt.imshow(Image.fromarray(img))\n            plt.imshow(Image.fromarray(mask), alpha=0.2)\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# 8. <a id= 'json_images'>Plot polygon from JSON Files</a>"},{"metadata":{},"cell_type":"markdown","source":"Credits : https://www.kaggle.com/subbuvolvosekar/plot-ploygon-from-json-using-shapely"},{"metadata":{"_kg_hide-input":true,"trusted":true},"cell_type":"code","source":"TRAIN_PATH = '/kaggle/input/hubmap-kidney-segmentation/train/'","execution_count":null,"outputs":[]},{"metadata":{"_kg_hide-input":true,"trusted":true},"cell_type":"code","source":"file = sorted(os.listdir(TRAIN_PATH))\nfor i in range(0,len(file),3):\n    with open(TRAIN_PATH+file[i]) as f:\n        data = json.load(f)\n\n    r1 = sg.Polygon([tuple(i) for i in data[0]['geometry']['coordinates'][0]])\n    r2 = sg.box(0.5,0.5,1.5,1.5)\n    r3 = sg.box(4,4,5,5)\n\n    new_shape = so.cascaded_union([r1, r2, r3])\n    fig, axs = plt.subplots()\n    axs.set_aspect('equal', 'datalim')\n\n    for geom in new_shape.geoms:    \n        xs, ys = geom.exterior.xy    \n        axs.fill(xs, ys, alpha=0.5, fc='r', ec='none')\n\n    plt.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# 9. <a id='pandas_profiling'>Pandas Profiling 🌤️</a>"},{"metadata":{"_kg_hide-output":true,"trusted":true,"_kg_hide-input":false},"cell_type":"code","source":"profile_hubmap_df = pdp.ProfileReport(hubmap_df)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"profile_hubmap_df","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# B.Modelling"},{"metadata":{},"cell_type":"markdown","source":"![](https://lmb.informatik.uni-freiburg.de/people/ronneber/u-net/u-net-architecture.png)"},{"metadata":{},"cell_type":"markdown","source":"### We are using **pytorch** implementation of **UNet** Model implemented in **https://github.com/qubvel/segmentation_models.pytorch** and this is getting installed offline."},{"metadata":{},"cell_type":"markdown","source":"![](https://camo.githubusercontent.com/88abf70c26a0eda1d22062e84053f8c72883623cb38b523c1e447a6a6930b4c5/68747470733a2f2f692e6962622e636f2f646331586468542f5365676d656e746174696f6e2d4d6f64656c732d56322d536964652d312d312e706e67)"},{"metadata":{"trusted":true,"_kg_hide-input":true,"_kg_hide-output":true},"cell_type":"code","source":"!mkdir -p /tmp/pip/cache/\n!cp ../input/segmentationmodelspytorch/segmentation_models/efficientnet_pytorch-0.6.3.xyz /tmp/pip/cache/efficientnet_pytorch-0.6.3.tar.gz\n!cp ../input/segmentationmodelspytorch/segmentation_models/pretrainedmodels-0.7.4.xyz /tmp/pip/cache/pretrainedmodels-0.7.4.tar.gz\n!cp ../input/segmentationmodelspytorch/segmentation_models/segmentation-models-pytorch-0.1.2.xyz /tmp/pip/cache/segmentation_models_pytorch-0.1.2.tar.gz\n!cp ../input/segmentationmodelspytorch/segmentation_models/timm-0.1.20-py3-none-any.whl /tmp/pip/cache/\n!cp ../input/segmentationmodelspytorch/segmentation_models/timm-0.2.1-py3-none-any.whl /tmp/pip/cache/\n!pip install --no-index --find-links /tmp/pip/cache/ efficientnet-pytorch\n!pip install --no-index --find-links /tmp/pip/cache/ segmentation-models-pytorch","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Necessary Imports"},{"metadata":{"trusted":true,"_kg_hide-input":true,"_kg_hide-output":true},"cell_type":"code","source":"from sklearn.model_selection import GroupKFold\nimport torch\nfrom torch import nn\nimport torchvision\nimport cv2\nfrom torchvision import transforms\nfrom torch.utils.data import Dataset,DataLoader\nfrom torch.utils.data.sampler import SequentialSampler, RandomSampler\nfrom torch.optim import Adam\nfrom torch.optim.lr_scheduler import ReduceLROnPlateau\nfrom scipy.ndimage.interpolation import zoom\nimport albumentations as A\nfrom torch.nn import functional as F\n\nimport time\nimport random\nfrom albumentations.pytorch import ToTensorV2\nfrom segmentation_models_pytorch.unet import Unet","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"![Pytorch](https://miro.medium.com/max/1200/1*4br4WmxNo0jkcsY796jGDQ.jpeg)"},{"metadata":{"trusted":true,"_kg_hide-input":true,"_kg_hide-output":true},"cell_type":"code","source":"!mkdir -p /root/.cache/torch/hub/checkpoints/\n!cp ../input/efficientnet-pytorch-b0-b7/efficientnet-b0-355c32eb.pth /root/.cache/torch/hub/checkpoints/\n!cp ../input/efficientnet-pytorch-b0-b7/efficientnet-b1-f1951068.pth /root/.cache/torch/hub/checkpoints/\n!cp ../input/efficientnet-pytorch-b0-b7/efficientnet-b2-8bb594d6.pth /root/.cache/torch/hub/checkpoints/\n!cp ../input/efficientnet-pytorch-b0-b7/efficientnet-b3-5fb5a3c3.pth /root/.cache/torch/hub/checkpoints/\n!cp ../input/efficientnet-pytorch-b0-b7/efficientnet-b4-6ed6700e.pth /root/.cache/torch/hub/checkpoints/\n!cp ../input/efficientnet-pytorch-b0-b7/efficientnet-b5-b6417697.pth /root/.cache/torch/hub/checkpoints/\n!cp ../input/efficientnet-pytorch-b0-b7/efficientnet-b6-c76e70fd.pth /root/.cache/torch/hub/checkpoints/\n!cp ../input/efficientnet-pytorch-b0-b7/efficientnet-b7-dcc49843.pth /root/.cache/torch/hub/checkpoints/","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def seed_everything(seed):\n    random.seed(seed)\n    os.environ['PYTHONHASHSEED'] = str(seed)\n    np.random.seed(seed)\n    torch.manual_seed(seed)\nseed_everything(42)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Dataset"},{"metadata":{"trusted":true},"cell_type":"code","source":"class HuBMAPDataset(Dataset):\n    def __init__(self, ids, phase):\n        self.ids = ids\n        if phase=='train':\n            self.transform = get_train_transform()\n        else:\n            self.transform = get_val_transform()\n        \n    def __getitem__(self, idx):\n        name = self.ids[idx]\n        img = cv2.imread(f\"../input/256256-hubmap/train/{name}\").astype(\"float32\")\n        img /= 255.\n        mask = cv2.imread(f\"../input/256256-hubmap/masks/{name}\")[:,:,0:1]\n\n        transformed = self.transform(image=img, mask=mask)\n        img = transformed['image']\n        mask = transformed['mask']\n        img = img.transpose(2,0,1).astype('float32')\n        mask = mask.transpose(2,0,1).astype('float32')\n        return img, mask\n\n    def __len__(self):\n        return len(self.ids)\n\n    \ndef get_train_transform():\n    return A.Compose([\n        A.HorizontalFlip(),\n            A.OneOf([\n                A.RandomContrast(),\n                A.RandomGamma(),\n                A.RandomBrightness(),\n                ], p=0.3),\n            A.OneOf([\n                A.ElasticTransform(alpha=120, sigma=120 * 0.05, alpha_affine=120 * 0.03),\n                A.GridDistortion(),\n                A.OpticalDistortion(distort_limit=2, shift_limit=0.5),\n                ], p=0.3),\n            A.ShiftScaleRotate(p=0.2),\n            A.Resize(256,256,always_apply=True),\n    ],p=1.)\n\ndef get_val_transform():\n    return A.Compose([\n        A.Resize(256,256,always_apply=True),\n    ],p=1.)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## DataLoader"},{"metadata":{"trusted":true},"cell_type":"code","source":"directory_list = os.listdir('../input/256256-hubmap/train')\ndir_df = pd.DataFrame(directory_list, columns=['Image_Paths'])\ndir_df","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def prepare_train_valid_dataloader(df, fold):\n    train_ids = df.loc[~df.Folds.isin(fold), \"Image_Paths\"].values\n    val_ids = df.loc[df.Folds.isin(fold), \"Image_Paths\"].values\n    train_ds = HuBMAPDataset(train_ids, \"train\")\n    val_ds = HuBMAPDataset(val_ids, \"val\")\n    train_loader = DataLoader(train_ds, batch_size=16, pin_memory=True, shuffle=True, num_workers=4)\n    val_loader = DataLoader(val_ds, batch_size=4, pin_memory=True, shuffle=False, num_workers=4)\n    return train_loader, val_loader","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Model"},{"metadata":{"trusted":true},"cell_type":"code","source":"class HuBMAP(nn.Module):\n    def __init__(self):\n        super(HuBMAP, self).__init__()\n        self.cnn_model = Unet('efficientnet-b5', encoder_weights=\"imagenet\", classes=1, activation=None)\n        #self.cnn_model.decoder.blocks.append(self.cnn_model.decoder.blocks[-1])\n        #self.cnn_model.decoder.blocks[-2] = self.cnn_model.decoder.blocks[-3]\n    \n    def forward(self, imgs):\n        img_segs = self.cnn_model(imgs)\n        return img_segs","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Loss Function"},{"metadata":{},"cell_type":"markdown","source":"<img src = 'https://wikimedia.org/api/rest_v1/media/math/render/svg/80f87a71d3a616a0939f5360cec24d702d2593a2'>"},{"metadata":{"trusted":true},"cell_type":"code","source":"class DiceLoss(nn.Module):\n    def __init__(self, weight=None, size_average=True):\n        super(DiceLoss, self).__init__()\n\n    def forward(self, inputs, targets, smooth=1):\n        \n        #comment out if your model contains a sigmoid or equivalent activation layer\n        inputs = F.sigmoid(inputs)       \n        \n        #flatten label and prediction tensors\n        inputs = inputs.view(-1)\n        targets = targets.view(-1)\n        \n        intersection = (inputs * targets).sum()                            \n        dice = (2.*intersection + smooth)/(inputs.sum() + targets.sum() + smooth)  \n        \n        return 1 - dice\n    \n    \n    \nclass DiceBCELoss(nn.Module):\n    # Formula Given above.\n    def __init__(self, weight=None, size_average=True):\n        super(DiceBCELoss, self).__init__()\n\n    def forward(self, inputs, targets, smooth=1):\n        \n        #comment out if your model contains a sigmoid or equivalent activation layer\n        inputs = F.sigmoid(inputs)       \n        \n        #flatten label and prediction tensors\n        inputs = inputs.view(-1)\n        targets = targets.view(-1)\n        \n        intersection = (inputs * targets).sum()                            \n        dice_loss = 1 - (2.*intersection + smooth)/(inputs.sum() + targets.sum() + smooth)  \n        BCE = F.binary_cross_entropy(inputs, targets, reduction='mean')\n        Dice_BCE = BCE + dice_loss\n        \n        return Dice_BCE","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Train Function"},{"metadata":{"trusted":true},"cell_type":"code","source":"def HuBMAPLoss(images, targets, model, device):\n    model.to(device)\n    images = images.to(device)\n    targets = targets.to(device)\n    outputs = model(images)\n    criterion = DiceBCELoss()\n    loss = criterion(outputs, targets)\n    return loss, outputs","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def train_one_epoch(epoch, model, device, optimizer, scheduler, trainloader):\n    model.train()\n    t = time.time()\n    total_loss = 0\n    for step, (images, targets) in enumerate(trainloader):\n        loss, outputs = HuBMAPLoss(images, targets, model, device)\n        loss.backward()\n        if ((step+1)%4==0 or (step+1)==len(trainloader)):\n            optimizer.step()\n            scheduler.step()\n            optimizer.zero_grad()\n        loss = loss.detach().item()\n        total_loss += loss\n        if ((step+1)%10==0 or (step+1)==len(trainloader)):\n            print(\n                    f'epoch {epoch} train step {step+1}/{len(trainloader)}, ' + \\\n                    f'loss: {total_loss/len(trainloader):.4f}, ' + \\\n                    f'time: {(time.time() - t):.4f}', end= '\\r' if (step + 1) != len(trainloader) else '\\n'\n                )\n\n            \n        \ndef valid_one_epoch(epoch, model, device, optimizer, scheduler, validloader):\n    model.eval()\n    t = time.time()\n    total_loss = 0\n    for step, (images, targets) in enumerate(validloader):\n        loss, outputs = HuBMAPLoss(images, targets, model, device)\n        loss = loss.detach().item()\n        total_loss += loss\n        if ((step+1)%4==0 or (step+1)==len(validloader)):\n            scheduler.step(total_loss/len(validloader))\n        if ((step+1)%10==0 or (step+1)==len(validloader)):\n            print(\n                    f'epoch {epoch} valid step {step+1}/{len(validloader)}, ' + \\\n                    f'loss: {total_loss/len(validloader):.4f}, ' + \\\n                    f'time: {(time.time() - t):.4f}', end= '\\r' if (step + 1) != len(validloader) else '\\n'\n                )","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Creating Folds Column"},{"metadata":{"trusted":true},"cell_type":"code","source":"FOLDS = 5\ngkf = GroupKFold(FOLDS)\ndir_df['Folds'] = 0\nfor fold, (tr_idx, val_idx) in enumerate(gkf.split(dir_df, groups=dir_df[dir_df.columns[0]].values)):\n    dir_df.loc[val_idx, 'Folds'] = fold","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## The Real Training"},{"metadata":{"trusted":true},"cell_type":"code","source":"for fold, (tr_idx, val_idx) in enumerate(gkf.split(dir_df, groups=dir_df[dir_df.columns[0]].values)):\n    if fold>0:\n        break\n    trainloader, validloader = prepare_train_valid_dataloader(dir_df, [fold])\n    device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n    model = HuBMAP().to(device)\n    optimizer = Adam(model.parameters(), lr=5e-4)\n    scheduler = torch.optim.lr_scheduler.StepLR(optimizer, gamma=0.1, step_size=1)\n    #num_epochs = 15\n    num_epochs = 1\n    for epoch in range(num_epochs):\n        train_one_epoch(epoch, model, device, optimizer, scheduler, trainloader)\n        with torch.no_grad():\n            valid_one_epoch(epoch, model, device, optimizer, scheduler, validloader)\n    torch.save(model.state_dict(),f'FOLD-{fold}-model.pth')\n    break","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Since EDA alone took more space while running on gpu..I have made the training and inference for same model in my another [kernel](https://www.kaggle.com/vineeth1999/hubmap-pytorch-efficientunet-offline). Dont forget to see that kernel too. TPU version of my kernel has been written by [Kishan](https://www.kaggle.com/joshi98kishan) which is [here](https://www.kaggle.com/joshi98kishan/training-pytorch-tpu-8-cores)\n\n`GPU` - [vineeth](https://www.kaggle.com/vineeth1999/hubmap-pytorch-efficientunet-offline)\n\n`TPU` - [kishan](https://www.kaggle.com/joshi98kishan/training-pytorch-tpu-8-cores)"},{"metadata":{},"cell_type":"markdown","source":"## Thank you for Reading My kernel."}],"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}