{"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":"Import modules","metadata":{}},{"cell_type":"markdown","source":"![image.png](attachment:99f29ce1-582b-4a67-b03d-9d52f948b8ee.png)","metadata":{},"attachments":{"99f29ce1-582b-4a67-b03d-9d52f948b8ee.png":{"image/png":"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"}}},{"cell_type":"markdown","source":"File structure:\n\n├── dataset_root\n│   ├── img_dir\n│   │   ├── train\n│   │   │   ├── imageid00_{img_suffix}\n│   │   │   ├── imageid01_{img_suffix}\n│   │   ├── valid\n│   │   │   ├── imageid02{img_suffix}\n│   ├── ann_dir\n│   │   ├── train\n│   │   │   ├── imageid00{seg_map_suffix}\n│   │   │   ├── imageid01{seg_map_suffix}\n│   │   ├── valid\n│   │   │   ├── imageid02{seg_map_suffix}","metadata":{}},{"cell_type":"markdown","source":"Where by {img_suffix} and {seg_map_suffix} are both .png ","metadata":{}},{"cell_type":"code","source":"import os\nimport numpy as np\nimport pandas as pd\n\nimport cv2\nfrom tqdm.auto import tqdm","metadata":{"execution":{"iopub.status.busy":"2023-07-10T22:00:27.968234Z","iopub.execute_input":"2023-07-10T22:00:27.968649Z","iopub.status.idle":"2023-07-10T22:00:28.196877Z","shell.execute_reply.started":"2023-07-10T22:00:27.968614Z","shell.execute_reply":"2023-07-10T22:00:28.195751Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def split_save_npys(img_id, img_path, train_test_val, base_save_path='/kaggle/working/contrails_mmsegmentation'):\n    \"\"\"\n    splits npy image with 3 image channels and 1 label channel into 2 pngs and saves in designated path\n    \n    img_id: image id\n    img_path: path to image\n    train_test_val: whether image belongs to training, test or validation set.\n    \"\"\"\n    full_npy = np.load(img_path)\n    img_npy = full_npy[:, :, :-1]\n    annotation_npy = full_npy[:, :, -1]\n    \n    # save image part\n    img_save_path = os.path.join(base_save_path, \"img_dir\", train_test_val, f\"{img_id}.png\")\n    cv2.imwrite(img_save_path, img_npy)\n    \n    # save annotation part\n    ann_save_path = os.path.join(base_save_path, \"ann_dir\", train_test_val, f\"{img_id}.png\")\n    cv2.imwrite(ann_save_path, annotation_npy)\n    print(ann_save_path)","metadata":{"execution":{"iopub.status.busy":"2023-07-10T22:03:04.024787Z","iopub.execute_input":"2023-07-10T22:03:04.02589Z","iopub.status.idle":"2023-07-10T22:03:04.031548Z","shell.execute_reply.started":"2023-07-10T22:03:04.025852Z","shell.execute_reply":"2023-07-10T22:03:04.030824Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"load data and prepare columns","metadata":{}},{"cell_type":"code","source":"base_data_path = '/kaggle/input/contrails-images-ash-color/'\n\n# load train/valid dfs\ntrain_path = os.path.join(base_data_path, \"train_df.csv\")\nvalid_path = os.path.join(base_data_path, \"valid_df.csv\")\ntrain_df = pd.read_csv('/kaggle/input/contrails-images-ash-color/train_df.csv')\nvalid_df = pd.read_csv('/kaggle/input/contrails-images-ash-color/valid_df.csv')\n\n# add img_path column\ntrain_df['img_path'] = base_data_path + 'contrails/' + train_df['record_id'].astype(str) + \".npy\"\nvalid_df['img_path'] = base_data_path + 'contrails/' + valid_df['record_id'].astype(str) + \".npy\"","metadata":{"execution":{"iopub.status.busy":"2023-07-10T22:00:28.702108Z","iopub.execute_input":"2023-07-10T22:00:28.702785Z","iopub.status.idle":"2023-07-10T22:00:28.75202Z","shell.execute_reply.started":"2023-07-10T22:00:28.702741Z","shell.execute_reply":"2023-07-10T22:00:28.750946Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Prepare directories","metadata":{}},{"cell_type":"code","source":"!mkdir '/kaggle/working/contrails_mmsegmentation'\n!mkdir '/kaggle/working/contrails_mmsegmentation/img_dir'\n!mkdir '/kaggle/working/contrails_mmsegmentation/img_dir/train'\n!mkdir '/kaggle/working/contrails_mmsegmentation/img_dir/valid'\n!mkdir '/kaggle/working/contrails_mmsegmentation/ann_dir'\n!mkdir '/kaggle/working/contrails_mmsegmentation/ann_dir/train'\n!mkdir '/kaggle/working/contrails_mmsegmentation/ann_dir/valid'","metadata":{"execution":{"iopub.status.busy":"2023-07-10T22:10:34.901879Z","iopub.execute_input":"2023-07-10T22:10:34.902914Z","iopub.status.idle":"2023-07-10T22:10:41.944907Z","shell.execute_reply.started":"2023-07-10T22:10:34.902867Z","shell.execute_reply":"2023-07-10T22:10:41.943328Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Run split and save","metadata":{}},{"cell_type":"code","source":"train_df.apply(lambda x: split_save_npys(x['record_id'], x['img_path'], x['train']), axis=1)\nvalid_df.apply(lambda x: split_save_npys(x['record_id'], x['img_path'], x['train']), axis=1)","metadata":{"execution":{"iopub.status.busy":"2023-07-10T22:10:41.955108Z","iopub.execute_input":"2023-07-10T22:10:41.955802Z","iopub.status.idle":"2023-07-10T22:10:41.994183Z","shell.execute_reply.started":"2023-07-10T22:10:41.955771Z","shell.execute_reply":"2023-07-10T22:10:41.993103Z"},"trusted":true},"execution_count":null,"outputs":[]}]}