{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# **[Sartorius - Cell Instance Segmentation](https://www.kaggle.com/c/sartorius-cell-instance-segmentation)**\n**Detect single neuronal cells in microscopy images**","metadata":{"papermill":{"duration":0.028673,"end_time":"2021-10-17T04:43:47.767874","exception":false,"start_time":"2021-10-17T04:43:47.739201","status":"completed"},"tags":[]}},{"cell_type":"markdown","source":"Great thanks are due to [Yaroslav Isaienkov](https://www.kaggle.com/ihelon) for sharing [the notebook](https://www.kaggle.com/ihelon/cell-segmentation-run-length-decoding).","metadata":{"papermill":{"duration":0.02792,"end_time":"2021-10-17T04:43:47.824204","exception":false,"start_time":"2021-10-17T04:43:47.796284","status":"completed"},"tags":[]}},{"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport os\n\nimport cv2\nimport tifffile\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nimport json","metadata":{"_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","_kg_hide-input":true,"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","execution":{"iopub.execute_input":"2021-10-17T04:43:47.885212Z","iopub.status.busy":"2021-10-17T04:43:47.883995Z","iopub.status.idle":"2021-10-17T04:43:49.123372Z","shell.execute_reply":"2021-10-17T04:43:49.123925Z","shell.execute_reply.started":"2021-10-17T03:22:35.327274Z"},"papermill":{"duration":1.272035,"end_time":"2021-10-17T04:43:49.124257","exception":false,"start_time":"2021-10-17T04:43:47.852222","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# **Purpose**","metadata":{"papermill":{"duration":0.026991,"end_time":"2021-10-17T04:43:49.179734","exception":false,"start_time":"2021-10-17T04:43:49.152743","status":"completed"},"tags":[]}},{"cell_type":"markdown","source":"Purpose is to detedt neuronal cells in the phase contrast microscopy images.","metadata":{"papermill":{"duration":0.028001,"end_time":"2021-10-17T04:43:49.236132","exception":false,"start_time":"2021-10-17T04:43:49.208131","status":"completed"},"tags":[]}},{"cell_type":"markdown","source":"# **Data Exploration**","metadata":{"papermill":{"duration":0.027125,"end_time":"2021-10-17T04:43:49.291498","exception":false,"start_time":"2021-10-17T04:43:49.264373","status":"completed"},"tags":[]}},{"cell_type":"markdown","source":"In the data, there are four folders and two files. The two filea are \"sample_submission.csv\" and \"train.csv\". Let's explore the items one by one from simple one to complicated one.","metadata":{"papermill":{"duration":0.027398,"end_time":"2021-10-17T04:43:49.347193","exception":false,"start_time":"2021-10-17T04:43:49.319795","status":"completed"},"tags":[]}},{"cell_type":"code","source":"INPUT = '../input/sartorius-cell-instance-segmentation'\nos.listdir(INPUT)","metadata":{"_kg_hide-input":true,"execution":{"iopub.execute_input":"2021-10-17T04:43:49.408549Z","iopub.status.busy":"2021-10-17T04:43:49.407833Z","iopub.status.idle":"2021-10-17T04:43:49.418285Z","shell.execute_reply":"2021-10-17T04:43:49.418770Z","shell.execute_reply.started":"2021-10-17T03:20:51.9241Z"},"papermill":{"duration":0.044198,"end_time":"2021-10-17T04:43:49.418960","exception":false,"start_time":"2021-10-17T04:43:49.374762","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# **sample_submission.csv file**","metadata":{"papermill":{"duration":0.029988,"end_time":"2021-10-17T04:43:49.477767","exception":false,"start_time":"2021-10-17T04:43:49.447779","status":"completed"},"tags":[]}},{"cell_type":"markdown","source":"There are three image \"id\" names.","metadata":{"papermill":{"duration":0.028791,"end_time":"2021-10-17T04:43:49.536718","exception":false,"start_time":"2021-10-17T04:43:49.507927","status":"completed"},"tags":[]}},{"cell_type":"code","source":"df_sample_submission = pd.read_csv('../input/sartorius-cell-instance-segmentation/sample_submission.csv')","metadata":{"_kg_hide-input":true,"execution":{"iopub.execute_input":"2021-10-17T04:43:49.679924Z","iopub.status.busy":"2021-10-17T04:43:49.678802Z","iopub.status.idle":"2021-10-17T04:43:49.692759Z","shell.execute_reply":"2021-10-17T04:43:49.692228Z","shell.execute_reply.started":"2021-10-17T03:20:56.562893Z"},"papermill":{"duration":0.125971,"end_time":"2021-10-17T04:43:49.692915","exception":false,"start_time":"2021-10-17T04:43:49.566944","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def see_df(df):\n    print('shape: ', df.shape)\n    print('columns: ', df.columns)\n    display(df.head(3).style.set_properties(**{'background-color': 'black', 'color': 'lawngreen','border': '1.5px  solid white'}))\nsee_df(df_sample_submission)","metadata":{"_kg_hide-input":true,"execution":{"iopub.execute_input":"2021-10-17T04:43:49.763634Z","iopub.status.busy":"2021-10-17T04:43:49.762921Z","iopub.status.idle":"2021-10-17T04:43:49.831487Z","shell.execute_reply":"2021-10-17T04:43:49.832088Z","shell.execute_reply.started":"2021-10-17T03:20:57.1219Z"},"papermill":{"duration":0.103216,"end_time":"2021-10-17T04:43:49.832261","exception":false,"start_time":"2021-10-17T04:43:49.729045","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# **train.csv file**","metadata":{"papermill":{"duration":0.029457,"end_time":"2021-10-17T04:43:49.890749","exception":false,"start_time":"2021-10-17T04:43:49.861292","status":"completed"},"tags":[]}},{"cell_type":"markdown","source":"There are 606 unique image \"id\" names among the 73585 items in the file. There are three types of \"cell_type\" names: 'shsy5y', 'astro', and 'cort'.","metadata":{"papermill":{"duration":0.028108,"end_time":"2021-10-17T04:43:49.947584","exception":false,"start_time":"2021-10-17T04:43:49.919476","status":"completed"},"tags":[]}},{"cell_type":"code","source":"df_train = pd.read_csv('../input/sartorius-cell-instance-segmentation/train.csv')","metadata":{"_kg_hide-input":true,"execution":{"iopub.execute_input":"2021-10-17T04:43:50.011129Z","iopub.status.busy":"2021-10-17T04:43:50.010414Z","iopub.status.idle":"2021-10-17T04:43:50.603562Z","shell.execute_reply":"2021-10-17T04:43:50.602802Z","shell.execute_reply.started":"2021-10-17T03:20:59.12713Z"},"papermill":{"duration":0.627399,"end_time":"2021-10-17T04:43:50.603728","exception":false,"start_time":"2021-10-17T04:43:49.976329","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"see_df(df_train)","metadata":{"_kg_hide-input":true,"execution":{"iopub.execute_input":"2021-10-17T04:43:50.682438Z","iopub.status.busy":"2021-10-17T04:43:50.677354Z","iopub.status.idle":"2021-10-17T04:43:50.688192Z","shell.execute_reply":"2021-10-17T04:43:50.687686Z","shell.execute_reply.started":"2021-10-17T03:20:59.786627Z"},"papermill":{"duration":0.055451,"end_time":"2021-10-17T04:43:50.688360","exception":false,"start_time":"2021-10-17T04:43:50.632909","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print('the number of unique id: ', len(df_train['id'].unique()))\nprint('the number of unique width: ', len(df_train['width'].unique()))\nprint('the number of unique height: ', len(df_train['height'].unique()))\nprint('the number of unique cell_type: ', len(df_train['cell_type'].unique()))\nprint('the number of unique sample_id: ', len(df_train['sample_id'].unique()))","metadata":{"_kg_hide-input":true,"execution":{"iopub.execute_input":"2021-10-17T04:43:50.760752Z","iopub.status.busy":"2021-10-17T04:43:50.760006Z","iopub.status.idle":"2021-10-17T04:43:50.781352Z","shell.execute_reply":"2021-10-17T04:43:50.780658Z","shell.execute_reply.started":"2021-10-17T03:21:00.356555Z"},"papermill":{"duration":0.062974,"end_time":"2021-10-17T04:43:50.781510","exception":false,"start_time":"2021-10-17T04:43:50.718536","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print('unique cell_type items: ', df_train['cell_type'].unique())\ndf_train['cell_type'].hist()","metadata":{"_kg_hide-input":true,"execution":{"iopub.execute_input":"2021-10-17T04:43:50.853811Z","iopub.status.busy":"2021-10-17T04:43:50.853108Z","iopub.status.idle":"2021-10-17T04:43:51.230781Z","shell.execute_reply":"2021-10-17T04:43:51.229931Z","shell.execute_reply.started":"2021-10-17T03:21:02.156642Z"},"papermill":{"duration":0.418396,"end_time":"2021-10-17T04:43:51.230968","exception":false,"start_time":"2021-10-17T04:43:50.812572","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"unique_ids = df_train['id'].unique()\n\nunique_images = pd.DataFrame({\n    'id': unique_ids,\n    'shsy5y': unique_ids,\n    'astro': unique_ids,\n    'cort': unique_ids,\n    'total': unique_ids\n})\n\n\nfor i in range(len(unique_images)):\n    list = df_train[df_train[\"id\"] == unique_images.loc[i, 'id']][\"cell_type\"].tolist()\n#     print(list.count('shsy5y'), list.count('astro'), list.count('cort'))\n    unique_images.loc[i, 'shsy5y'] = list.count('shsy5y')\n    unique_images.loc[i, 'astro'] = list.count('astro')\n    unique_images.loc[i, 'cort'] = list.count('cort')\n    unique_images.loc[i, 'total'] = len(list)\n\nsee_df(unique_images)","metadata":{"_kg_hide-input":true,"execution":{"iopub.execute_input":"2021-10-17T04:43:51.308092Z","iopub.status.busy":"2021-10-17T04:43:51.306904Z","iopub.status.idle":"2021-10-17T04:43:54.823850Z","shell.execute_reply":"2021-10-17T04:43:54.823336Z","shell.execute_reply.started":"2021-10-17T03:28:05.21824Z"},"papermill":{"duration":3.560157,"end_time":"2021-10-17T04:43:54.824000","exception":false,"start_time":"2021-10-17T04:43:51.263843","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Each image has only one cell type. That is, there is no mixed cell-type image.","metadata":{"papermill":{"duration":0.031301,"end_time":"2021-10-17T04:43:54.887473","exception":false,"start_time":"2021-10-17T04:43:54.856172","status":"completed"},"tags":[]}},{"cell_type":"code","source":"sns.jointplot(x=unique_images['shsy5y']/unique_images['total'], y=unique_images['astro']/unique_images['total'], kind=\"kde\")\nsns.jointplot(x=unique_images['shsy5y']/unique_images['total'], y=unique_images['cort']/unique_images['total'], kind=\"kde\")\nsns.jointplot(x=unique_images['astro']/unique_images['total'], y=unique_images['cort']/unique_images['total'], kind=\"kde\")\n","metadata":{"_kg_hide-input":true,"execution":{"iopub.execute_input":"2021-10-17T04:43:54.958171Z","iopub.status.busy":"2021-10-17T04:43:54.957434Z","iopub.status.idle":"2021-10-17T04:43:58.387432Z","shell.execute_reply":"2021-10-17T04:43:58.387942Z","shell.execute_reply.started":"2021-10-17T03:39:18.342398Z"},"papermill":{"duration":3.46719,"end_time":"2021-10-17T04:43:58.388148","exception":false,"start_time":"2021-10-17T04:43:54.920958","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# **test folder**","metadata":{"papermill":{"duration":0.039602,"end_time":"2021-10-17T04:43:58.470026","exception":false,"start_time":"2021-10-17T04:43:58.430424","status":"completed"},"tags":[]}},{"cell_type":"markdown","source":"There are three png image files in the test folder. Of course the file names are consistent with the items in the sample_submission.csv file.","metadata":{"papermill":{"duration":0.039426,"end_time":"2021-10-17T04:43:58.550001","exception":false,"start_time":"2021-10-17T04:43:58.510575","status":"completed"},"tags":[]}},{"cell_type":"code","source":"content = ['LIVECell_dataset_2021', 'test', 'train', 'train_semi_supervised']\ni = 1\nprint(content[i], ': ', os.listdir(INPUT + '/' + content[i]))","metadata":{"_kg_hide-input":true,"execution":{"iopub.execute_input":"2021-10-17T04:43:58.634486Z","iopub.status.busy":"2021-10-17T04:43:58.632233Z","iopub.status.idle":"2021-10-17T04:43:58.646363Z","shell.execute_reply":"2021-10-17T04:43:58.645749Z","shell.execute_reply.started":"2021-10-17T03:44:40.048378Z"},"papermill":{"duration":0.056476,"end_time":"2021-10-17T04:43:58.646518","exception":false,"start_time":"2021-10-17T04:43:58.590042","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print('An exmaple image')\n(i, j) = (1, 2)\nimage = cv2.imread(INPUT + '/' + content[i] + '/' + os.listdir(INPUT + '/' + content[i])[j])\n\nplt.figure(figsize=(16, 32))\nplt.title(content[i] + '/' + os.listdir(INPUT + '/' + content[i])[j])\nplt.imshow(image)\nplt.axis(\"off\")\n    \nplt.show();","metadata":{"_kg_hide-input":true,"execution":{"iopub.execute_input":"2021-10-17T04:43:58.732691Z","iopub.status.busy":"2021-10-17T04:43:58.731984Z","iopub.status.idle":"2021-10-17T04:43:59.226549Z","shell.execute_reply":"2021-10-17T04:43:59.227087Z","shell.execute_reply.started":"2021-10-17T03:44:40.616897Z"},"papermill":{"duration":0.540896,"end_time":"2021-10-17T04:43:59.227274","exception":false,"start_time":"2021-10-17T04:43:58.686378","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# **train folder**","metadata":{"papermill":{"duration":0.050679,"end_time":"2021-10-17T04:43:59.328892","exception":false,"start_time":"2021-10-17T04:43:59.278213","status":"completed"},"tags":[]}},{"cell_type":"markdown","source":"In the train folder, there are 606 png files. The unique id items in the train.csv file matches the 606 file names.","metadata":{"papermill":{"duration":0.051357,"end_time":"2021-10-17T04:43:59.430803","exception":false,"start_time":"2021-10-17T04:43:59.379446","status":"completed"},"tags":[]}},{"cell_type":"code","source":"i = 2\n# print(content[i], ': ', os.listdir(INPUT + '/' + content[i]))\nprint(content[i], ': ', len(os.listdir(INPUT + '/' + content[i])))","metadata":{"_kg_hide-input":true,"execution":{"iopub.execute_input":"2021-10-17T04:43:59.538160Z","iopub.status.busy":"2021-10-17T04:43:59.537458Z","iopub.status.idle":"2021-10-17T04:43:59.597992Z","shell.execute_reply":"2021-10-17T04:43:59.598680Z","shell.execute_reply.started":"2021-10-17T03:44:42.356632Z"},"papermill":{"duration":0.116989,"end_time":"2021-10-17T04:43:59.598935","exception":false,"start_time":"2021-10-17T04:43:59.481946","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print('An exmaple image')\n(i, j) = (2, 605)\nimage = cv2.imread(INPUT + '/' + content[i] + '/' + os.listdir(INPUT + '/' + content[i])[j])\n\nplt.figure(figsize=(16, 32))\nplt.title(content[i] + '/' + os.listdir(INPUT + '/' + content[i])[j])\nplt.imshow(image)\nplt.axis(\"off\")\n    \nplt.show();","metadata":{"_kg_hide-input":true,"execution":{"iopub.execute_input":"2021-10-17T04:43:59.709209Z","iopub.status.busy":"2021-10-17T04:43:59.708479Z","iopub.status.idle":"2021-10-17T04:44:00.244364Z","shell.execute_reply":"2021-10-17T04:44:00.244847Z","shell.execute_reply.started":"2021-10-17T03:44:42.936844Z"},"papermill":{"duration":0.593931,"end_time":"2021-10-17T04:44:00.245050","exception":false,"start_time":"2021-10-17T04:43:59.651119","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# **train_semi_supervised folder**","metadata":{"papermill":{"duration":0.072594,"end_time":"2021-10-17T04:44:00.387740","exception":false,"start_time":"2021-10-17T04:44:00.315146","status":"completed"},"tags":[]}},{"cell_type":"markdown","source":"In the train_semi_supervised folder, there are 1972 png image files.","metadata":{"papermill":{"duration":0.070232,"end_time":"2021-10-17T04:44:00.528217","exception":false,"start_time":"2021-10-17T04:44:00.457985","status":"completed"},"tags":[]}},{"cell_type":"code","source":"i = 3\n# print(content[i], ': ', os.listdir(INPUT + '/' + content[i]))\nprint(content[i], ': ', len(os.listdir(INPUT + '/' + content[i])))","metadata":{"_kg_hide-input":true,"execution":{"iopub.execute_input":"2021-10-17T04:44:00.700706Z","iopub.status.busy":"2021-10-17T04:44:00.699969Z","iopub.status.idle":"2021-10-17T04:44:01.020671Z","shell.execute_reply":"2021-10-17T04:44:01.020134Z","shell.execute_reply.started":"2021-10-17T03:44:46.677027Z"},"papermill":{"duration":0.418995,"end_time":"2021-10-17T04:44:01.020817","exception":false,"start_time":"2021-10-17T04:44:00.601822","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print('An exmaple image')\n(i, j) = (3, 0)\nimage = cv2.imread(INPUT + '/' + content[i] + '/' + os.listdir(INPUT + '/' + content[i])[j])\n# image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)\n\nplt.figure(figsize=(16, 32))\nplt.title(content[i] + '/' + os.listdir(INPUT + '/' + content[i])[j])\nplt.imshow(image)\nplt.axis(\"off\")\n    \nplt.show();","metadata":{"_kg_hide-input":true,"execution":{"iopub.execute_input":"2021-10-17T04:44:01.168860Z","iopub.status.busy":"2021-10-17T04:44:01.168098Z","iopub.status.idle":"2021-10-17T04:44:01.632829Z","shell.execute_reply":"2021-10-17T04:44:01.633342Z","shell.execute_reply.started":"2021-10-17T03:44:47.956309Z"},"papermill":{"duration":0.542398,"end_time":"2021-10-17T04:44:01.633532","exception":false,"start_time":"2021-10-17T04:44:01.091134","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# **LIVECell_dataset_2021 folder**","metadata":{"papermill":{"duration":0.08584,"end_time":"2021-10-17T04:44:01.806455","exception":false,"start_time":"2021-10-17T04:44:01.720615","status":"completed"},"tags":[]}},{"cell_type":"markdown","source":"The sub-folder structure in the \"LIVECell_dataset_2021\" folder is as follows:","metadata":{"papermill":{"duration":0.087472,"end_time":"2021-10-17T04:44:01.979624","exception":false,"start_time":"2021-10-17T04:44:01.892152","status":"completed"},"tags":[]}},{"cell_type":"markdown","source":"![LIVECell.JPG](attachment:daa8c502-e043-42b1-b4e8-234bf9e5a27b.JPG)","metadata":{"papermill":{"duration":0.087019,"end_time":"2021-10-17T04:44:02.152405","exception":false,"start_time":"2021-10-17T04:44:02.065386","status":"completed"},"tags":[]},"attachments":{"daa8c502-e043-42b1-b4e8-234bf9e5a27b.JPG":{"image/jpeg":"/9j/4AAQSkZJRgABAQEAkACQAAD/4RDgRXhpZgAATU0AKgAAAAgABAE7AAIAAAAHAAAISodpAAQAAAABAAAIUpydAAEAAAAOAAAQyuocAAcAAAgMAAAAPgAAAAAc6gAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFRhcm81MwAAAAWQAwACAAAAFAAAEKCQBAACAAAAFAAAELSSkQACAAAAAzY4AACSkgACAAAAAzY4AADqHAAHAAAIDAAACJQAAAAAHOoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyMDIxOjEwOjE2IDIzOjI4OjQ5ADIwMjE6MTA6MTYgMjM6Mjg6NDkAAABUAGEAcgBvADUAMwAAAP/hCxlodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIi8+PHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9InV1aWQ6ZmFmNWJkZDUtYmEzZC0xMWRhLWFkMzEtZDMzZDc1MTgyZjFiIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iPjx4bXA6Q3JlYXRlRGF0ZT4yMDIxLTEwLTE2VDIzOjI4OjQ5LjY3NzwveG1wOkNyZWF0ZURhdGU+PC9yZGY6RGVzY3JpcHRpb24+PHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9InV1aWQ6ZmFmNWJkZDUtYmEzZC0xMWRhLWFkMzEtZDMzZDc1MTgyZjFiIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iPjxkYzpjcmVhdG9yPjxyZGY6U2VxIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+PHJkZjpsaT5UYXJvNTM8L3JkZjpsaT48L3JkZjpTZXE+DQoJCQk8L2RjOmNyZWF0b3I+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3hwYWNrZXQgZW5kPSd3Jz8+/9sAQwAHBQUGBQQHBgUG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ST+H60rjsef/AGO6+0i3+zTecekXlnd+XWo5YpIJDHPG0br1V1II/CvRdO1KO80PXtce/k02e4vhGbuKAyPHFgbVABBGemalt5NO1i98OJcXM+qSpcOpvLi0aITKFYhSTkMQwA607isecSWdzDCs01vLHE/3XZCFb6GiGzubiN5ILeWVE+8yISF+pHSunm8S+I7nUNWtWSS/ikDpLayRs6QqDjIAxtx6/nXR39zb6PHo1vaa/caXCltHKkFvZtIs5PUswYbs+houBwWnaN9v0fU7/wA/y/sCxts2Z8zcSOueMY96XxBov9hX0VsZ/P8AMgSbds243DpjJrr79rWS38ZSWMUkMciW7GOSIxlWJOflPI55/GsX4gf8h61/68If5UXAwtL0y41jUobK0A82VsAtnavucA4FJfaZdafqD2dxEwlVygwpw+DjK5HIPatPwVPLB4y07yZXj3zBH2MRuU9QfUe1dVo87XHiPxReXl7MJ7ESLbzspma3XzGBKqT2AFFwPPJ7ae1cJcwyQuRkLIhU4/GlazuVthcNbzCA9JSh2n8eldvfaha3fhN4mv7zX5oruNoJZrN12kkZjLknqO1aVxez69eXsejavcWty1sVk0a/tjsRQOQv8IP4Z5ouBw03hvUYdBh1dos28zsoUK29QP4iMYA981k12uoalff8Kr0z/TLj95dSRP8AvW+ZADhTzyPbpXFUIDUutMgSx097Gae5ubpSZIfszLtI/un+L8KpPZXSLGz20yrIcITGQHPoPWvQ9I/4/fA3/XKf+tV9M8RarPpXiiWa8kd7YK9uW58klivyf3ePSi4HAz281tJ5dzDJC+M7ZFKn8jT5bK6hhWaa2mjib7rvGQp+hruV+367o3hWXzkm1BrqVFnuhv4U5+bPXAFaVtOmoweIba41261dvsshkRrcxwwsOm0EnBz0wKLhY8zitLmeN5ILeWRE++yISF+pHSke2nimEUkMiSNjCMhDHPTiu213U9T0SLQLXQJZIbRrWOSMQ9LiQn5t2PvduPeulu44k8WazeyyfZrm20yIxyrF5hhzncwTPJFFwseST209q4S5hkhcjIWRCpx+NK1ncrbC4a3mEB6SlDtP49K7e+1C1u/CbxNf3mvzRXcbQSzWbrtJIzGXJPUdq0ri9n168vY9G1e4tblrYrJo1/bHYigchf4QfwzzRcDz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"}}},{"cell_type":"markdown","source":"* images folder","metadata":{"papermill":{"duration":0.086838,"end_time":"2021-10-17T04:44:02.325409","exception":false,"start_time":"2021-10-17T04:44:02.238571","status":"completed"},"tags":[]}},{"cell_type":"markdown","source":"In each of the \"livecell_test_images\" and \"livecell_train_val_images\" folders, there are nine sub-folders as follows.","metadata":{"papermill":{"duration":0.085722,"end_time":"2021-10-17T04:44:02.497080","exception":false,"start_time":"2021-10-17T04:44:02.411358","status":"completed"},"tags":[]}},{"cell_type":"code","source":"content_livecell_test_images = np.sort(os.listdir('../input/sartorius-cell-instance-segmentation/LIVECell_dataset_2021/images/livecell_test_images'))\ncontent_livecell_train_val_images = np.sort(os.listdir('../input/sartorius-cell-instance-segmentation/LIVECell_dataset_2021/images/livecell_train_val_images'))\nprint('livecell_test_images:      ', content_livecell_test_images)\nprint('livecell_train_val_images: ', content_livecell_train_val_images)","metadata":{"_kg_hide-input":true,"execution":{"iopub.execute_input":"2021-10-17T04:44:02.674622Z","iopub.status.busy":"2021-10-17T04:44:02.673907Z","iopub.status.idle":"2021-10-17T04:44:02.713054Z","shell.execute_reply":"2021-10-17T04:44:02.712434Z","shell.execute_reply.started":"2021-10-17T03:44:51.647697Z"},"papermill":{"duration":0.129749,"end_time":"2021-10-17T04:44:02.713223","exception":false,"start_time":"2021-10-17T04:44:02.583474","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print('livecell_test_images')\nfor i in range(9):\n    dir_name = '../input/sartorius-cell-instance-segmentation/LIVECell_dataset_2021/images/livecell_test_images/' + content_livecell_test_images[i]\n    print('    ', content_livecell_test_images[i], ': ', len(os.listdir(dir_name)), 'files')\n\nprint('    ')\nprint('livecell_train_val_images')\nfor i in range(9):\n    dir_name = '../input/sartorius-cell-instance-segmentation/LIVECell_dataset_2021/images/livecell_train_val_images/' + content_livecell_train_val_images[i]\n    print('    ', content_livecell_train_val_images[i], ': ', len(os.listdir(dir_name)), 'files')\n","metadata":{"_kg_hide-input":true,"execution":{"iopub.execute_input":"2021-10-17T04:44:02.892698Z","iopub.status.busy":"2021-10-17T04:44:02.891997Z","iopub.status.idle":"2021-10-17T04:44:04.850908Z","shell.execute_reply":"2021-10-17T04:44:04.850367Z","shell.execute_reply.started":"2021-10-17T03:44:53.171285Z"},"papermill":{"duration":2.050887,"end_time":"2021-10-17T04:44:04.851090","exception":false,"start_time":"2021-10-17T04:44:02.800203","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"dir_name = '../input/sartorius-cell-instance-segmentation/LIVECell_dataset_2021/images/livecell_test_images/' + content_livecell_test_images[6]\n\nprint('An exmaple image')\nimage = tifffile.imread(dir_name + '/' + os.listdir(dir_name)[0])\n\nplt.figure(figsize=(16, 32))\nplt.title(os.listdir(dir_name)[0])\nplt.imshow(image)\nplt.axis(\"off\")\n    \nplt.show();","metadata":{"_kg_hide-input":true,"execution":{"iopub.execute_input":"2021-10-17T04:44:05.034779Z","iopub.status.busy":"2021-10-17T04:44:05.034145Z","iopub.status.idle":"2021-10-17T04:44:05.683293Z","shell.execute_reply":"2021-10-17T04:44:05.683766Z","shell.execute_reply.started":"2021-10-17T03:44:54.720711Z"},"papermill":{"duration":0.743732,"end_time":"2021-10-17T04:44:05.683946","exception":false,"start_time":"2021-10-17T04:44:04.940214","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"* annotations folder","metadata":{"papermill":{"duration":0.13098,"end_time":"2021-10-17T04:44:05.928955","exception":false,"start_time":"2021-10-17T04:44:05.797975","status":"completed"},"tags":[]}},{"cell_type":"markdown","source":"In the annotations folder, there are two sub-folders: LIVECell and LIVECell_single_cells.","metadata":{"papermill":{"duration":0.114838,"end_time":"2021-10-17T04:44:06.158756","exception":false,"start_time":"2021-10-17T04:44:06.043918","status":"completed"},"tags":[]}},{"cell_type":"code","source":"os.listdir('../input/sartorius-cell-instance-segmentation/LIVECell_dataset_2021/annotations')","metadata":{"_kg_hide-input":true,"execution":{"iopub.execute_input":"2021-10-17T04:44:06.392561Z","iopub.status.busy":"2021-10-17T04:44:06.391809Z","iopub.status.idle":"2021-10-17T04:44:06.404312Z","shell.execute_reply":"2021-10-17T04:44:06.404797Z","shell.execute_reply.started":"2021-10-17T03:44:58.742355Z"},"papermill":{"duration":0.131861,"end_time":"2021-10-17T04:44:06.404988","exception":false,"start_time":"2021-10-17T04:44:06.273127","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"In the LIVECell folder, there are three filles as follows.","metadata":{"papermill":{"duration":0.117551,"end_time":"2021-10-17T04:44:06.638582","exception":false,"start_time":"2021-10-17T04:44:06.521031","status":"completed"},"tags":[]}},{"cell_type":"code","source":"os.listdir('../input/sartorius-cell-instance-segmentation/LIVECell_dataset_2021/annotations/LIVECell')","metadata":{"_kg_hide-input":true,"execution":{"iopub.execute_input":"2021-10-17T04:44:06.920496Z","iopub.status.busy":"2021-10-17T04:44:06.919803Z","iopub.status.idle":"2021-10-17T04:44:06.929129Z","shell.execute_reply":"2021-10-17T04:44:06.929677Z","shell.execute_reply.started":"2021-10-17T03:45:01.131552Z"},"papermill":{"duration":0.146074,"end_time":"2021-10-17T04:44:06.929848","exception":false,"start_time":"2021-10-17T04:44:06.783774","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"In the LIVECell_single_cells folder, there are eight sub-folders as follows.","metadata":{"papermill":{"duration":0.116043,"end_time":"2021-10-17T04:44:07.174256","exception":false,"start_time":"2021-10-17T04:44:07.058213","status":"completed"},"tags":[]}},{"cell_type":"code","source":"content_LIVECell_single_cells = os.listdir('../input/sartorius-cell-instance-segmentation/LIVECell_dataset_2021/annotations/LIVECell_single_cells')\nprint('LIVECell_single_cells:      ', content_LIVECell_single_cells)","metadata":{"_kg_hide-input":true,"execution":{"iopub.execute_input":"2021-10-17T04:44:07.414395Z","iopub.status.busy":"2021-10-17T04:44:07.413695Z","iopub.status.idle":"2021-10-17T04:44:07.423036Z","shell.execute_reply":"2021-10-17T04:44:07.423502Z","shell.execute_reply.started":"2021-10-17T03:45:05.337445Z"},"papermill":{"duration":0.132174,"end_time":"2021-10-17T04:44:07.423672","exception":false,"start_time":"2021-10-17T04:44:07.291498","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print('LIVECell_single_cells')\nfor i in range(8):\n    dir_name = '../input/sartorius-cell-instance-segmentation/LIVECell_dataset_2021/annotations/LIVECell_single_cells/' + content_LIVECell_single_cells[i]\n    print('    ', content_LIVECell_single_cells[i], ': ', len(os.listdir(dir_name)), 'files')\n","metadata":{"_kg_hide-input":true,"execution":{"iopub.execute_input":"2021-10-17T04:44:07.666156Z","iopub.status.busy":"2021-10-17T04:44:07.665341Z","iopub.status.idle":"2021-10-17T04:44:07.715112Z","shell.execute_reply":"2021-10-17T04:44:07.715845Z","shell.execute_reply.started":"2021-10-17T03:45:06.246749Z"},"papermill":{"duration":0.177108,"end_time":"2021-10-17T04:44:07.716100","exception":false,"start_time":"2021-10-17T04:44:07.538992","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# **Exploring the masks in the training images**\nref: https://www.kaggle.com/ihelon/cell-segmentation-run-length-decoding","metadata":{"papermill":{"duration":0.116438,"end_time":"2021-10-17T04:44:07.950781","exception":false,"start_time":"2021-10-17T04:44:07.834343","status":"completed"},"tags":[]}},{"cell_type":"markdown","source":"The following examples are SH-SY5Y, astrocytes, and cortex(?).","metadata":{"papermill":{"duration":0.118804,"end_time":"2021-10-17T04:44:08.188365","exception":false,"start_time":"2021-10-17T04:44:08.069561","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# ref: https://www.kaggle.com/ihelon/cell-segmentation-run-length-decoding\n# ref: https://www.kaggle.com/inversion/run-length-decoding-quick-start\ndef rle_decode(mask_rle, shape, color=1):\n    '''\n    mask_rle: run-length as string formated (start length)\n    shape: (height,width) of array to return \n    Returns numpy array, 1 - mask, 0 - background\n\n    '''\n    s = mask_rle.split()\n    starts, lengths = [np.asarray(x, dtype=int) for x in (s[0:][::2], s[1:][::2])]\n    starts -= 1\n    ends = starts + lengths\n    img = np.zeros((shape[0] * shape[1], shape[2]), dtype=np.float32)\n    for lo, hi in zip(starts, ends):\n        img[lo : hi] = color\n    return img.reshape(shape)","metadata":{"_kg_hide-input":true,"execution":{"iopub.execute_input":"2021-10-17T04:44:08.433726Z","iopub.status.busy":"2021-10-17T04:44:08.433053Z","iopub.status.idle":"2021-10-17T04:44:08.435981Z","shell.execute_reply":"2021-10-17T04:44:08.435471Z","shell.execute_reply.started":"2021-10-17T03:45:08.876929Z"},"papermill":{"duration":0.129275,"end_time":"2021-10-17T04:44:08.436154","exception":false,"start_time":"2021-10-17T04:44:08.306879","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# ref: https://www.kaggle.com/ihelon/cell-segmentation-run-length-decoding\n# slightly modified\ndef plot_masks(image_id, colors=True):\n    labels = df_train[df_train[\"id\"] == image_id][\"annotation\"].tolist()\n    cell_types = df_train[df_train[\"id\"] == image_id][\"cell_type\"].values # added\n    print('masked cells: ', len(labels), cell_types[0])                   # added\n\n    if colors:\n        mask = np.zeros((520, 704, 3))\n        for label in labels:\n            mask += rle_decode(label, shape=(520, 704, 3), color=np.random.rand(3))\n    else:\n        mask = np.zeros((520, 704, 1))\n        for label in labels:\n            mask += rle_decode(label, shape=(520, 704, 1))\n    mask = mask.clip(0, 1)\n\n    image = cv2.imread(f\"../input/sartorius-cell-instance-segmentation/train/{image_id}.png\")\n    image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)\n\n    plt.figure(figsize=(16, 32))\n    plt.subplot(3, 1, 1)\n    plt.imshow(image)\n    plt.axis(\"off\")\n    plt.subplot(3, 1, 2)\n    plt.imshow(image)\n    plt.imshow(mask, alpha=0.5)\n    plt.axis(\"off\")\n    plt.subplot(3, 1, 3)\n    plt.imshow(mask)\n    plt.axis(\"off\")\n    \n    plt.show();","metadata":{"_kg_hide-input":true,"execution":{"iopub.execute_input":"2021-10-17T04:44:08.686356Z","iopub.status.busy":"2021-10-17T04:44:08.685661Z","iopub.status.idle":"2021-10-17T04:44:08.688394Z","shell.execute_reply":"2021-10-17T04:44:08.687872Z","shell.execute_reply.started":"2021-10-17T03:53:44.303055Z"},"papermill":{"duration":0.134844,"end_time":"2021-10-17T04:44:08.688544","exception":false,"start_time":"2021-10-17T04:44:08.553700","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plot_masks(unique_images.id[0], colors=True)","metadata":{"_kg_hide-input":true,"execution":{"iopub.execute_input":"2021-10-17T04:44:08.940136Z","iopub.status.busy":"2021-10-17T04:44:08.939429Z","iopub.status.idle":"2021-10-17T04:44:10.648788Z","shell.execute_reply":"2021-10-17T04:44:10.649311Z","shell.execute_reply.started":"2021-10-17T04:34:46.642882Z"},"papermill":{"duration":1.843268,"end_time":"2021-10-17T04:44:10.649492","exception":false,"start_time":"2021-10-17T04:44:08.806224","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plot_masks(unique_images.id[1], colors=True)","metadata":{"_kg_hide-input":true,"execution":{"iopub.execute_input":"2021-10-17T04:44:10.946120Z","iopub.status.busy":"2021-10-17T04:44:10.945491Z","iopub.status.idle":"2021-10-17T04:44:12.116557Z","shell.execute_reply":"2021-10-17T04:44:12.117135Z","shell.execute_reply.started":"2021-10-17T04:34:59.308263Z"},"papermill":{"duration":1.321712,"end_time":"2021-10-17T04:44:12.117317","exception":false,"start_time":"2021-10-17T04:44:10.795605","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plot_masks(unique_images.id[2], colors=True)","metadata":{"_kg_hide-input":true,"execution":{"iopub.execute_input":"2021-10-17T04:44:12.459644Z","iopub.status.busy":"2021-10-17T04:44:12.458986Z","iopub.status.idle":"2021-10-17T04:44:13.599621Z","shell.execute_reply":"2021-10-17T04:44:13.600118Z","shell.execute_reply.started":"2021-10-17T04:35:13.147689Z"},"papermill":{"duration":1.311694,"end_time":"2021-10-17T04:44:13.600293","exception":false,"start_time":"2021-10-17T04:44:12.288599","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"The SH-SY5Y and astrocytes seem to be really challenging.","metadata":{"papermill":{"duration":0.190675,"end_time":"2021-10-17T04:44:13.983362","exception":false,"start_time":"2021-10-17T04:44:13.792687","status":"completed"},"tags":[]}}]}