{"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":"code","source":"import numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\nimport glob\nimport cv2\nimport os\nfrom matplotlib import pyplot as plt\nimport os\nimport cv2\nimport numpy as np\nimport pandas as pd\nfrom torch.utils.data import TensorDataset, DataLoader,Dataset\nimport albumentations as albu\nfrom skimage.color import gray2rgb\nimport functools\nimport torch\nfrom tqdm.auto import tqdm","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2022-05-29T01:39:50.962804Z","iopub.execute_input":"2022-05-29T01:39:50.96322Z","iopub.status.idle":"2022-05-29T01:39:50.968952Z","shell.execute_reply.started":"2022-05-29T01:39:50.963189Z","shell.execute_reply":"2022-05-29T01:39:50.968121Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!pip install efficientnet_pytorch\n","metadata":{"execution":{"iopub.status.busy":"2022-05-29T01:39:51.2882Z","iopub.execute_input":"2022-05-29T01:39:51.288643Z","iopub.status.idle":"2022-05-29T01:40:03.186669Z","shell.execute_reply.started":"2022-05-29T01:39:51.288609Z","shell.execute_reply":"2022-05-29T01:40:03.185446Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from efficientnet_pytorch import EfficientNet","metadata":{"execution":{"iopub.status.busy":"2022-05-29T01:40:03.188982Z","iopub.execute_input":"2022-05-29T01:40:03.189257Z","iopub.status.idle":"2022-05-29T01:40:03.201022Z","shell.execute_reply.started":"2022-05-29T01:40:03.189221Z","shell.execute_reply":"2022-05-29T01:40:03.200135Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import os\nclass data_config:\n    train_csv_path = '../input/rsna-str-pulmonary-embolism-detection/train.csv'\n    jpeg_dir ='../input/rsna-str-pe-detection-jpeg-256/train-jpegs'\n    ids = ['StudyInstanceUID', 'SeriesInstanceUID', 'SOPInstanceUID']    \n    label_lstm = ['pe_present_on_image','negative_exam_for_pe', 'rv_lv_ratio_gte_1', 'rv_lv_ratio_lt_1',\n       'leftsided_pe', 'chronic_pe','rightsided_pe', 'acute_and_chronic_pe', 'central_pe', 'indeterminate']\n        \nclass efficientnetb0:\n    model_name=\"efficientnet-b0\"\n    batch_size = 1\n    WORKERS = 4\n    classes =9\n    epochs = 1\n    optimizer = \"torch.optim.AdamW\"\n    optimizer_parm = {'lr':1e-3,'weight_decay':0.00001}\n    scheduler = \"torch.optim.lr_scheduler.CosineAnnealingLR\"\n    scheduler_parm = {'T_max':5500,'eta_min':0.000001}\n    loss_fn = 'torch.nn.BCEWithLogitsLoss'\n    MODEL_PATH = 'log/cpt'\n    if not os.path.exists(MODEL_PATH):\n        os.makedirs(MODEL_PATH)","metadata":{"execution":{"iopub.status.busy":"2022-05-29T01:40:03.202546Z","iopub.execute_input":"2022-05-29T01:40:03.202814Z","iopub.status.idle":"2022-05-29T01:40:03.216075Z","shell.execute_reply.started":"2022-05-29T01:40:03.202777Z","shell.execute_reply":"2022-05-29T01:40:03.215228Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_csv_path = '../input/rsna-str-pulmonary-embolism-detection/train.csv'\njpeg_dir = '../input/rsna-str-pe-detection-jpeg-256/train-jpegs'","metadata":{"execution":{"iopub.status.busy":"2022-05-29T01:40:03.218477Z","iopub.execute_input":"2022-05-29T01:40:03.219017Z","iopub.status.idle":"2022-05-29T01:40:03.233823Z","shell.execute_reply.started":"2022-05-29T01:40:03.218975Z","shell.execute_reply":"2022-05-29T01:40:03.232919Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.model_selection import StratifiedKFold\nimport numpy as np\nimport pandas as pd\ndef get_fold(train,FOLD_NUM = 5):\n    train_image_num_per_patient = train.groupby('StudyInstanceUID')['SOPInstanceUID'].nunique()\n    target_cols = [c for i, c in enumerate(train.columns) if i > 2]\n    \n    train_per_patient_char = pd.DataFrame(index=train_image_num_per_patient.index, columns=['image_per_patient'], data=train_image_num_per_patient.values.copy())\n    for t in target_cols:\n        train_per_patient_char[t] = train_per_patient_char.index.map(train.groupby('StudyInstanceUID')[t].mean())\n        \n    \n    bin_counts = [40] #, 20]\n    digitize_cols = ['image_per_patient'] #, 'pe_present_on_image']\n    non_digitize_cols = [c for c in train_per_patient_char.columns if c not in digitize_cols]\n    for i, c in enumerate(digitize_cols):\n        bin_count = bin_counts[i]\n        percentiles = np.percentile(train_per_patient_char[c], q=np.arange(bin_count)/bin_count*100.)\n        train_per_patient_char[c+'_digitize'] = np.digitize(train_per_patient_char[c], percentiles, right=False)\n        \n    train_per_patient_char['key'] = train_per_patient_char[digitize_cols[0]+'_digitize'].apply(str)\n    for c in digitize_cols[1:]:\n        train_per_patient_char['key'] = train_per_patient_char['key']+'_'+train_per_patient_char[c+'_digitize'].apply(str)\n    folds = FOLD_NUM\n    kfolder = StratifiedKFold(n_splits=folds, shuffle=True, random_state=719)\n    val_indices = [val_indices for _, val_indices in kfolder.split(train_per_patient_char['key'], train_per_patient_char['key'])]\n    train_per_patient_char['fold'] = -1\n    for i, vi in enumerate(val_indices):\n        patients = train_per_patient_char.index[vi]\n        train_per_patient_char.loc[patients, 'fold'] = i\n    return train_per_patient_char\n\ndef split_train_val_lstm(data_config,fold,FOLD_NUM=5):\n    main_df = pd.read_csv(data_config.train_csv_path)\n    train_df = main_df[data_config.ids+data_config.label_lstm]\n    train_per_patient_char = get_fold(main_df,FOLD_NUM)\n    TID = train_per_patient_char[train_per_patient_char.fold!=fold].index\n    VID = train_per_patient_char[train_per_patient_char.fold==fold].index\n    t_df = train_df[train_df['StudyInstanceUID'].isin(TID)]\n    v_df = train_df[train_df['StudyInstanceUID'].isin(VID)]\n    return t_df,v_df","metadata":{"execution":{"iopub.status.busy":"2022-05-29T01:40:03.235436Z","iopub.execute_input":"2022-05-29T01:40:03.235715Z","iopub.status.idle":"2022-05-29T01:40:03.256497Z","shell.execute_reply.started":"2022-05-29T01:40:03.23568Z","shell.execute_reply":"2022-05-29T01:40:03.25572Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"t_df,v_df = split_train_val_lstm(data_config,fold=0,FOLD_NUM=5)","metadata":{"execution":{"iopub.status.busy":"2022-05-29T01:40:03.257847Z","iopub.execute_input":"2022-05-29T01:40:03.258066Z","iopub.status.idle":"2022-05-29T01:40:03.336255Z","shell.execute_reply.started":"2022-05-29T01:40:03.258039Z","shell.execute_reply":"2022-05-29T01:40:03.335242Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"path256 = f\"{data_config.jpeg_dir}/*/*/*.jpg\"\ndata = glob.glob(path256)\nnew_df = []\nfor row in tqdm(data):\n    StudyInstanceUID,SeriesInstanceUID,SOPInstanceUID = row.split(\"/\")[-3:]\n    num,SOPInstanceUID = SOPInstanceUID.replace(\".jpg\",\"\").split(\"_\")\n    new_df.append([StudyInstanceUID,SeriesInstanceUID,SOPInstanceUID,num])\ns_df = pd.DataFrame(new_df)\ns_df.columns = list(t_df.columns[:3])+[\"slice\"]\nt_df = t_df.merge(s_df,on=list(t_df.columns[:3]),how='left')\nv_df = v_df.merge(s_df,on=list(v_df.columns[:3]),how='left')","metadata":{},"execution_count":null,"outputs":[]}]}